Firmware update gone south

So about 6 weeks ago I happily ran this thing called Apple “Software Update…”


Then after 2 weeks I decided the burn a backup DVD but what’s this? Where the heck is my Superdrive?? My burning software can’t see it, it doesn’t even show up in the system info “Disc Burning” section, WTF? Careful analysis of the log file shows the following: during the Software Update 2 items were downloaded, the Mac OS X 10.4.10 update and the Apple superdrive firmware update 2.1. Here’s the scary thing, after the 10.4.10 update was installed it continued on installing the firmware update. However, right in the middle of the firmware update the 10.4.10 update decides it’s a good time to reboot my Macbook Pro! I can’t remember what I was doing during the update procedure but I guess I just continued working on after the reboot..for 2 weeks. Now comes the worse part, my Macbook Pro warranty expired just 2-3 days before the update!! So there I was, bricked superdrive, no Apple warranty, no AppleCare since I spent the extra €400,- maxing out the Macbook Pro with disk and RAM. Stupid, stupid!!

A quick Google search showed up quite a few posts of people in the exact same predicament as me! However, not a single post offered any sane fix other than bringing the Mac in for repairs, if you were lucky enough to have it under warranty or had AppleCare. Aargh!! Oh well, got nothing to loose so I called Apple Benelux and explained my situation. The kind person on the other side suggested I bring in the machine to an authorized dealer to check it out. Okay, so I brought it to RAF Amsterdam, which is the closest Apple authorized repair service to me. 3 weeks and a lot of calls to RAF later (apparantly their Mac guy went on vacation and they forgot to mention that during the intake) I finally got the verdict, new superdrive required, price tag: €410,- @#$@!!@#$%??!!!! That’s got to be the most expensive DVD burner on the planet!

I called Apple again explaining them I was really upset I had to dish out this much money to fix a problem that was clearly caused by not properly testing their update procedure. I mean how hard is it to detect and stop a reboot in a firmware updater?? Firefox annoyingly stops reboots all the time, so a piece of Apple software should definitely be able to do this do. “I understand sir, let me talk to the tech people.. please hold..”.. 2 minutes later: “Sir, we have OK’d this repair under warranty..”.. WOAAH!!!

One week later I picked up my Macbook Pro, new superdrive installed, everything working. Charge: € 0,00!!

Big kudo’s to the Apple Customer Satisfaction department!! That was 2 weeks ago.. It must be said though that a lot of folks around the world did not have this much luck with Apple. As of today there is also not a single official word from Apple regarding this issue, the firmware update was silently pulled from Apple’s website and all traces of it have disappeared.


Forum thread 1: Superdrive update 2.1 killed my drive.

Forum thread 2: Superdrive Update 2.1 killed drive.



Still keeping an eye on how Apple handles this…

Posted in Apple, Home | Tagged | 4 Comments

"What just happened to video on the web?"

Adobe last night announced their flash player will support H.264 as of version 9 Update 3 Beta 2. This is amazing! Die WindowsMedia, die!! The best part is that the complete chain to produce high quality H.264 output can be build eniterely out of free open source based software! Now we only need an open source streaming server which sucks less than DSS. Read the very informative (and long) post by Tinic Uro. Incidentally I remember Tinic from the BeOS days where he wrote the rocking DualPlayer. Some of his scope code is still used inside AlsaPlayer.

Posted in Home | Tagged | 11 Comments

Skype trouble

Well, starting this morning we’re experiencing all sorts of connection problems with the Skype network. For a moment there I thought I screwed myself by updating to latest Mac OS X beta 2.7 version, but the problems are not related. This really sucks if you rely on Skype for keeping in touch with your development team. I guess the need for a fallback system is even more pressing now. I’m tempted to try Gizmo again. Ah and yes, I’m baaaack!

Update: as of Aug 20 evertyhing seems to be working again.

Posted in Home | Tagged | Leave a comment

Ruby En Rails 2007 Conference

On June 7th the Ruby En Rails 2007 Conference will be held here in Amsterdam. I’m really looking forward to meeting up with the dutch Rails crowd. I’ll be giving a lighting talk on Mongrel clustering and will share my experience with this in use on a busy site. Also looking forward to some of the talks, especially the opening keynote. Hope to see you there!!

Update: I just read there are no more seats left, so hope you got in!

Posted in Home | Tagged , , , , | 4 Comments

Region Free for Free

Yesterday I picked up a DVD player as part of a bundled deal on some big-ass computer speaker / HTS thingy at the local Mediamarkt. The sales dude offered a ‘region-free’ version of the player for a €30 premium and added that the usual ‘punch in some numbers on the remote’ hack absolutely didn’t work with this player (Harman/Kardon DVD23). It was only possible with a special CD from the manufacturer which contained a firmware upgrade. Bullshit of course! I declined. As soon as I got home I googled a bit and sure enough:

  1. Switch The Player On
  2. Make Sure Disk Tray is Empty
  3. Push The “OSD” key
  4. Select “Set-up”
  5. Enter Code “3141590″ (last digit is region, 0 = region-free)
  6. Display Returns To Normal

After that I tested it with a region 1 Terminator 2 DVD, worked flawlessly!

Posted in Home | Tagged , | Leave a comment

Switch from Typo to Mephisto

After the final botched Typo upgrade I gave up on it and am now serving this blog from Mephisto (0.7.3). The migration went fine. Luckily I still had a copy from the old Typo database structure since the Typo SVN version is not compatible with the migrations scripts from Mephisto. So far everything seems to work fine, except for the Sections. But I can now tweak Mephisto without fear. Typo has become such a huge opaque monster making changes felt like gambling. The last Typo version I checked out had over 35.000 files in the trunk!

The only downside I see so far with using Mephisto is that it’s even more obscure than Typo so there is no ready-made migration path to anything else :-)

With the migration completed I will start posting articles again..<ali_g_accent>for real<ali_g_accent>

Update: Mephisto’s SPAM filtering (through Akismet) actually works and the approval process is very well done. I also like the Overview section.

Posted in Home, Misc, rails | Tagged | 3 Comments

Home office upgrade, new LCD!

Yesterday the new Dell 24” 2407WFP arrived for my home office, woohoo! I was really torn over which monitor to get, either the Dell 24” or Apple’s Cinema 23” display. The 30% off deal from Dell this week made it really easy in the end. The Dell was €400,- “cheaper”, 1” larger, has composite, s-video and component (PS2 already hooked up!) and finally even HDCP support for future HD-DVD/Blu-Ray/Playstation3 integration! Finally, OS X and Linux (again) in 1920×1200 :-)



Specs:

Screen size 24”
Native resolution 1920×1200
Contrast ratio 1000:1
Brightness 450 cd/m2
Response time 6 ms
Inputs
  • DVI (with HDCP)
  • VGA
  • Composite
  • Component
  • S-video
  • 4x USB + card reader




Posted in Home, Misc | Tagged , , | 5 Comments

Rewriting a (large) PHP application in Rails, part 2

In my previous post on this topic I described the method we used to convert
a legacy MySQL PHP database to a Rails conformant PostgreSQL hosted version. In this article I will tell a bit about how we converted the HTML of the application to Rails layout templates and partials.

Extracting HTML from Firefox DOM

We first started out with attempting to rewrite the table heavy design to CSS. We soon realised that this was a project on itself so we decided to work with what we have. Since most of the HTML code is intermingled with PHP logic it was really not an option to examine the numerous .php files and cut ‘n paste what we needed.
We basically used the excellent Firefox View Formatted Source extension to take snapshots of the DOM tree of rendered pages (look here if you’re on FF2).

Getting the HTML from the Firefox DOM meant we had properly balanced HTML! The real work was to extract layout templates and to identify the partials. This turned out to relatively easy. The really hard part was to get the code to display properly in Internet Explorer, which unfortunately still makes up about 70% of all traffic to the site.

Writing down business logic

The original project never had functional or technical specifications so I scheduled 3 sessions spread over 2 weeks with the (back-end) users of the system. We identified the business logic and rules of the system as best as we could during these (1-2 hour) sessions. The whole business logic was then written again from scratch in Ruby. I figured it would have take much longer if I had examined the PHP code myself. This might not be an option for you though. Anyway, during these 2 weeks at the end of each day a small number of functionalities would be delivered for testing. In practice the user(s) would only test functionality and provide feedback every 3-4 days (busy schedules on both sides, so noone enforced this). Could have been better.

TDD, or rather WTAD (Write Test After Developing)

It was really really hard to bring up the discipline of writing the Test code before Developing the functionality. In practice tests were only written after something was seen working already. What do you do, honestly? :)

The final part will contain details about the deployment (Mongrels, W00t!) and also some interesting statistics on how many lines were left after the rewrite. Stay tuned..

Posted in Home, rails | Tagged | 7 Comments

Rewriting a (large) PHP application in Rails, part 1

In recent weeks I was busy converting a fairly large PHP application to Rails. The existing PHP application is about 65.500 lines of intermingled PHP and HTML/CSS code. Yep, a classic PHP application without any database abstraction layer, no templating, no MVC. This is why I dubbed it “large”, but replacing that with “crappy” would be fine too :)

I divided the project in a couple of deliverables:

  1. Data model analysis, redesign, data migration
  2. HTML conversion to layout/partials
  3. Business logic analysis and conversion to Ruby
  4. Integration with external web application
  5. Testing
  6. Production deployment

In typical agile/xp/scrum/ad-hoc/you-name-it fashion, all but the last deliverable were not actually delivered in full until production day.

Since I wanted to get something visible as soon as possible and with semi-live data the first thing I did was analyze the current data model. The model consisted of 46 tables. 8 tables were discarded right away (code/data rot). After further analysis the table count was reduced to 23. Next up was converting and migrating the current data set to the new data model. The PHP site was using Mysql 4.23 while the Rails version would be using PostgreSQL 8.1. This was BTW also the first Rails project where I religiously used migrations and migrations absolutely rock!. A total of 53 migration scripts were generated during the course of development. Back to conversion; Instead of writing CSV/YAML exporter/importer scripts I used the following mechanism to import/convert legacy data objects:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Read in Rails config
config = Rails::Configuration.new

# Set up the class for the table/objects we want to convert
# Of course the legacy database does not follow Rails conventions
# so we always use table_name to fix this
class OldVenue < ActiveRecord::Base
  def self.table_name
    "adressen"
  end
end

# Set up a connection to the legacy MySQL database
ActiveRecord::Base.establish_connection config.database_configuration["old_production"]

# Save the connection
mysql_connection = OldVenue.connection

# Establish a connection to our new shiny PostgreSQL database
ActiveRecord::Base.establish_connection config.database_configuration["production"]

# But restore the mysql connection for the legacy ActiveRecord class
OldVenue.connection = mysql_connection

The above code allows the conversion script to access both MySQL and PostgreSQL databases simultaneously.This means I can do something like:

1
2
3
4
5
6
7
8
9
10
old_venues = OldVenue.find(:all)

for o in old_venues do
  n = Venue.new
  n.id = o.id
  n.name = o.naam
  n.zip = o.postcode
  # More field assignments
  n.save
end

..Instant data migration from MySQL to PostgreSQL without messy CSV/YAML export/import!

Posted in Home, rails | Tagged | 16 Comments

smcFanControl

Found out about smcFanControl over at /. After installing the average (working) temperature of my Macbook Pro dropped from 61 degrees to about 47 degreed Celcius! Excellent! Another indispensible tool. For my wife’s Dell Inspiron I use i8kfan to achieve the same.

Posted in Home | Leave a comment