<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>LoLoCoJr - Home</title>
  <id>tag:www.railsguru.com,2008:mephisto/</id>
  <generator uri="http://mephistoblog.com" version="0.7.3">Mephisto Noh-Varr</generator>
  <link href="http://www.railsguru.com/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://www.railsguru.com/" rel="alternate" type="text/html"/>
  <updated>2008-06-01T12:34:48Z</updated>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2008-06-01:2849</id>
    <published>2008-06-01T12:26:00Z</published>
    <updated>2008-06-01T12:34:48Z</updated>
    <category term="Rails"/>
    <link href="http://www.railsguru.com/articles/2008/6/1/rails-end_of_month-fixed" rel="alternate" type="text/html"/>
    <title>Rails' end_of_month fixed</title>
<content type="html">
            In Rails 2.0.x the end_of_month now properly gives you the end of month e.g. &lt;strong&gt;Mon Jun 30 23:59:59 +0200 2008&lt;/strong&gt;, instead of &lt;strong&gt;Mon Jun 30 00:00:00 +0200 2008&lt;/strong&gt;, which was the case in Rails 1.2.x (see &lt;a href=&quot;http://www.railsguru.com/articles/2006/2/20/rails-end_of_month&quot;&gt;this previous post&lt;/a&gt;). Good thing I caught this, since it used to inside the Nota module of &lt;a href=&quot;http://www.beldienst.nl&quot;&gt;Beldienst&lt;/a&gt;. We would be paying out the first of each month twice otherwise :)
          </content>  </entry>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2008-05-31:2845</id>
    <published>2008-05-31T08:46:00Z</published>
    <updated>2008-06-04T23:10:42Z</updated>
    <link href="http://www.railsguru.com/articles/2008/5/31/getting-xs4all-umts-hsdpa-working-on-os-x-leopard" rel="alternate" type="text/html"/>
    <title>Getting XS4ALL HSDPA/UMTS working on OS X Leopard</title>
<content type="html">
            &lt;p&gt;Last week I received my HSDPA/UMTS/GPRS card from XS4ALL. After the &lt;a href=&quot;http://www.xs4all.nl/nieuws/bericht.php?msect=nieuws&amp;id=979&amp;taal=nl&quot;&gt;major ADSL outtage fiasco&lt;/a&gt; It really dawned on me that not having net access for a day actually costs more than  the whole wireless plan per month! Think about it, as I telecommute 4 days in the week I would actually have to drive to the office to get work done (luckily our offices were spared from the outtage!), the parking money alone is almost more than the whole plan (go Amsterdam!). Enough justification for the new toy. It arrrived, weeh!&lt;/p&gt;
&lt;p&gt;
The specs clearly state it should work fine an OS X 10.3.x or later. Unfortunatly the instructions from XS4ALL are completely &lt;strong&gt;useless&lt;/strong&gt; when you are running on Leopard. It probably has more to do with Option and their drivers or OS X and its (shoddy) support for the hardware which is the Globetrotter Express 7.2 card btw.
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;http://www.railsguru.com/assets/2008/5/26/gt_express.jpg&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
After 2 hours of fiddling with various releases of drivers and trying all the the blog tricks from people around the world with the same card I was almost ready to give up when I stumbled upon this &lt;a href=&quot;http://www.xs4all.nl/~ernstagn/GPRS-HOWTO/&quot;&gt;HOWTO for Linux&lt;/a&gt;. As always Linux to the rescue. It turns out the card is basically just a glorified modem and you just need the right AT commands and some pppd magic to get things going.. Grrrreat, familiar territory! (I have to confess, OS X dumbs you down, so having things breaking once in a while is gooooood!!)
&lt;/p&gt;
&lt;p&gt;
After some searching I found the following devices:&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.railsguru.com/assets/2008/5/26/dev.jpg&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Cool, connecting to the &lt;strong&gt;cu.GT HSDPA Modem&lt;/strong&gt; tty device should work:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;$ screen /dev/cu.GT\ HSDPA\ Modem&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;AT&amp;lt;return&amp;gt;&lt;/i&gt;&lt;br /&gt;
&lt;strong&gt;OK&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Yes! The device is alive. Now, to find out if there is some combination of settings in the Network Preferences that actually make it work. Some further blogging shows that the Option &amp;raquo; GSM configurations comes closest to what this cards expects.
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;http://www.railsguru.com/assets/2008/5/31/config.jpg&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
Wow, 5 entries for the card. Just pick one which gives you a modem icon. Then choose &quot;Advanced...&quot; and pick model &quot;Option&quot; and then choose &quot;GSM&quot; (should be the only option anyway). In the &quot;APN&quot; field you should fill in &quot;umts.xs4all.nl&quot;.
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;http://www.railsguru.com/assets/2008/5/31/option.jpg&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
Back to the connection setup screen. Fill in &quot;*99***1#&quot; in the Telephone number field, although this is not strictly needed I think. Fill in your XS4ALL username and password in the field. &lt;strong&gt;Note:&lt;/strong&gt; even though XS4ALL states you don't need your account password to connect at least I had to fill in the correct password. The pppd connection would immediately be dropped otherwise. Also, select the &quot;Show modem status in menu bar&quot; for convenience.
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;http://www.railsguru.com/assets/2008/5/31/system.jpg&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
Now it's time to connect. Select the &quot;Connect Globetrotter HSDPA Modem&quot; from the dropdown modem menu bar. You should see the modem connecting..
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;http://www.railsguru.com/assets/2008/5/31/connect.jpg&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
You can open up the console and monitor &quot;system.log&quot; and also filter on &quot;pppd&quot; to see the relevant lines
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;http://www.railsguru.com/assets/2008/5/31/console.jpg&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
If everything went well you should now be connected to the Internet and have an IP address in the mobile.xs4all.nl range. Enjoy! I have the Mobile start plan which currently gives you 768/128 and I'm happy to say that from all the locations I've tried so far in and around Amsterdam I always get the full bandwidth. Ping times are also quite reasonable, most of the time around 90ms, sometimes in the 300ms range (perhaps when it drops back to GPRS?). Anyway, SSH and web browsing are perfectly doable. Next up.. OpenVPN setup... another day.. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update:&lt;/strong&gt; Forgot to mention this, but you need to disable the PIN on your SIM card for all of this to work. You can do this by putting it in your mobile phone and disable it using the phone's config menus.
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2008-05-08:2725</id>
    <published>2008-05-08T20:38:00Z</published>
    <updated>2008-05-08T20:38:25Z</updated>
    <category term="Rails"/>
    <link href="http://www.railsguru.com/articles/2008/5/8/massive-memory-leak-in-ruby-gettext-1-90-0" rel="alternate" type="text/html"/>
    <title>Massive memory leak in ruby-gettext 1.90.0</title>
<content type="html">
            Just found out there's a massive memory leak in ruby gettext 1.90.0, one of our applications started eating GBs of RAM after a couple of days in use. So If you're using gettext for translating your Rails app take note! You can grab the &lt;a href=&quot;http://rubyforge.org/scm/?group_id=855&quot;&gt;current trunk&lt;/a&gt; which has a fix for this.
          </content>  </entry>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2008-05-05:2709</id>
    <published>2008-05-05T10:44:00Z</published>
    <updated>2008-05-05T10:44:12Z</updated>
    <category term="Misc"/>
    <link href="http://www.railsguru.com/articles/2008/5/5/meetings" rel="alternate" type="text/html"/>
    <title>Meetings</title>
<content type="html">
            &lt;p&gt;
&lt;img src=&quot;http://www.railsguru.com/assets/2008/5/5/meetingsad_1.jpg&quot; /&gt;
&lt;/p&gt;
&lt;/p&gt;
Found &lt;a href=&quot;http://sethgodin.typepad.com/seths_blog/2008/05/lets-skip-the-m.html&quot;&gt;here&lt;/a&gt; (thanks Jan). Soo true! Happy telecommuter for 2 years now, with the occasional Meeting midweek. I do not expect to be productive (code-wise) on those days.
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2008-04-30:2683</id>
    <published>2008-04-30T01:16:00Z</published>
    <updated>2008-04-30T01:17:54Z</updated>
    <link href="http://www.railsguru.com/articles/2008/4/30/side-project-de-tv-flat-kro" rel="alternate" type="text/html"/>
    <title>Side project: De TV Flat (KRO)</title>
<content type="html">
            &lt;p&gt;
My first Rails 2.0.x project has been running in production for a couple of months now. It's the website for KRO's &lt;a href=&quot;http://www.tvflat.kro.nl&quot;&gt;&quot;De TV Flat&quot;&lt;/a&gt;, a children/teens program airing every Saturday on dutch national television around 9am (channel Nederland 3) untill the beginning of summer. I'm very proud to actually get one of my projects on TV! The premise is basically &quot;Youtube for kids&quot; with the chance of getting your self-made video's broadcasted on TV!
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;http://railsguru.com/assets/2008/4/30/tvflat.jpg&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
I really like the &lt;a href=&quot;http://tvflat.nl/frontend/search?query=wvjhw&quot;&gt;instructional video's&lt;/a&gt; made by the TVFlat crew, very  helpfull tips for creating your own video content. 
&lt;/p&gt;
Technology used:
&lt;ul&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;li&gt;Nginx HTTP server&lt;/li&gt;
&lt;li&gt;Mongrel&lt;/li&gt;
&lt;li&gt;MogileFS clustered storage&lt;/li&gt;
&lt;li&gt;Rails 2.0.2&lt;/li&gt;
&lt;li&gt;Merb 0.54 for critical code paths, beats Rails to a pulp when it comes to roundtrip times&lt;/li&gt;
&lt;li&gt;Memcached&lt;/li&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;li&gt;Lucene&lt;/li&gt;
&lt;li&gt;mplayer / ffmpeg / faac for transcoding, direct broadcast quality feeds are generated!&lt;/li&gt;
&lt;li&gt;Flash video&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Hope I can find some time later on to write a bit about the different parts.. anyway, &lt;a href=&quot;http://www.tvflat.kro.nl&quot;&gt;go check it out!&lt;/a&gt;
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2008-04-17:2628</id>
    <published>2008-04-17T15:06:00Z</published>
    <updated>2008-04-18T07:41:54Z</updated>
    <link href="http://www.railsguru.com/articles/2008/4/17/a-baby-girl" rel="alternate" type="text/html"/>
    <title>A baby girl!!!</title>
<content type="html">
            &lt;p&gt;
It has been very quiet on this blog, but not so much here at home. On March 2nd 2008 our daughter Mia Morena Elisabeth Lo-A-Foe was born. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;http://www.railsguru.com/assets/2008/4/17/andy_mia2_small.jpg&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
Mia is a healthy baby girl who regularly eats every 3 hours, around the clock. After 6 weeks we're completely comfortable with the new schedule. &lt;a href=&quot;http://www.railsguru.com/articles/2007/9/16/keeping-things-in-perspective&quot;&gt;Andrew&lt;/a&gt; loves his baby sister very much but still pokes here once in a while just to see what's she's made of :)
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;http://www.railsguru.com/assets/2008/4/17/andy_mia1_small.jpg&quot; /&gt;
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2008-01-17:2015</id>
    <published>2008-01-17T20:40:00Z</published>
    <updated>2008-01-17T20:46:54Z</updated>
    <link href="http://www.railsguru.com/articles/2008/1/17/has_many_polymorphs-tagging-snafu" rel="alternate" type="text/html"/>
    <title>has_many_polymorphs tagging snafu</title>
<content type="html">
            I'm working on a Rails 2.0.x project which is a port of a 1.2.x based one. Since acts_as_taggable was obsoleted in 2.0.x I'm using the ultra wicked &lt;strong&gt;has_many_polymorphs&lt;/strong&gt; plugin which comes with a neat Tagging generator. I ran in a bit of problem when I tried tagging an object with the tags &quot;cool mac 2008&quot;. It turned out the &quot;2008&quot; is the culprit since the tag_with method that's introduced tries to be really smart about things. I.e. it assumes that if you pass a number in the tag_with string you actually want to use the Tag object with ID=2008. Of course we don't have 2008 tags yet so it breaks down with an exception. The solution was really simple. Just remove the Fixnum check in the lib/lagging_extensions.rb ..
&lt;p&gt;
P.S. Better late than never: &lt;strong&gt;Happy 2008!!!&lt;/strong&gt;
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2007-11-29:1495</id>
    <published>2007-11-29T11:19:00Z</published>
    <updated>2007-12-02T12:24:23Z</updated>
    <category term="Ruby"/>
    <link href="http://www.railsguru.com/articles/2007/11/29/jruby-saves-the-day" rel="alternate" type="text/html"/>
    <title>JRuby saves the day</title>
<content type="html">
            &lt;p&gt;
So I'm rewriting yet another subsystem which consists of a mismash of several languages and programmer ego's (hardcore C being the largest one, aargh) to what else .. Ruby. Everythings going smoothly. Every line of Ruby code replaces about 10 lines of &quot;put other language here&quot; cruft. Life couldn't be more beautiful. But then I hit the wall, the Java wall. Here I'm confronted with a full enterprisy Service Manager complete with dependencies on Java-only libs. Now what? I could rewrite the whole thing in Ruby. But then there would be 2 implementations of the same thing to maintain, not to mention reading through Java code, bad.&lt;/p&gt;
&lt;p&gt;
Enter &lt;strong&gt;JRuby&lt;/strong&gt;. Since the main code blob of this project is captured in a Mongrel plugin I thought about just deploying the whole of Mongrel on JRuby. Unfortunately JRuby Mongrel support was not there yet (&lt;a href=&quot;http://mongrel.rubyforge.org/news.html&quot;&gt;Mongrel 1.1&lt;/a&gt; supports JRuby). So the next best thing was to build some kind bridge between JRuby and Ruby + Mongrel + Plugin. Distributed Ruby (DRb) is a perfect fit:
&lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;15&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;25&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;#&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;c&quot;&gt;# server.rb (this)&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;c&quot;&gt;# jars/big-bad-service.jar&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;c&quot;&gt;#&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;APP_ROOT&lt;/span&gt; = &lt;span class=&quot;co&quot;&gt;File&lt;/span&gt;.join(&lt;span class=&quot;co&quot;&gt;File&lt;/span&gt;.dirname(&lt;span class=&quot;pc&quot;&gt;__FILE__&lt;/span&gt;), &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;drb&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;dl&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;co&quot;&gt;APP_ROOT&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/jars/big-bad-service.jar&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;BigBadService&lt;/span&gt; = com.blah.&lt;span class=&quot;co&quot;&gt;BigBadService&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;JRubyServer&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;initialize&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;iv&quot;&gt;@bbs&lt;/span&gt; = &lt;span class=&quot;co&quot;&gt;BigBadService&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;iv&quot;&gt;@bbs&lt;/span&gt;.initialize_service&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;bbs_call&lt;/span&gt;(param) &lt;tt&gt;
&lt;/tt&gt;     &lt;span class=&quot;iv&quot;&gt;@bbs&lt;/span&gt;.bbs_call(param)&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;pc&quot;&gt;__FILE__&lt;/span&gt; == &lt;span class=&quot;gv&quot;&gt;$0&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;co&quot;&gt;DRb&lt;/span&gt;.start_service &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;druby://127.0.0.1:6666&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;co&quot;&gt;JRubyServer&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;co&quot;&gt;DRb&lt;/span&gt;.thread.join&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;
Execute like &lt;i&gt;ruby server.rb&lt;/i&gt;, and then you'll have the server listening on port 6666 of localhost. Nice, we can now call our Java service from other Ruby code with this simple snippet:
&lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;drb&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;DRb&lt;/span&gt;.start_service&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;java_bbs = &lt;span class=&quot;co&quot;&gt;DRbObject&lt;/span&gt;.new(&lt;span class=&quot;pc&quot;&gt;nil&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;druby://127.0.0.1:6666&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;puts  java_bbs.bbs_call(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Whack!&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class=&quot;c&quot;&gt;#=&amp;gt; &amp;quot;Whacked!&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;
Kewl! Except for one big caveat. As of JRuby 1.0.x Java objects cannot be marshalled correctly so passing them to your Ruby code will cause all sorts of interesting hangs and crashes when you access them concurrently (see &lt;a href=&quot;http://jira.codehaus.org/browse/JRUBY-1235&quot;&gt;JRUBY-1235&lt;/a&gt;). Untill JRuby 1.1 is out you can synchronize all your calls to JRuby and making sure you convert any results to proper Ruby objects before using them elsewhere in your Ruby code.
&lt;/p&gt;
&lt;p&gt;
This hack saved me loads of (Java hacking) time!
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2007-10-25:1052</id>
    <published>2007-10-25T07:49:00Z</published>
    <updated>2007-11-29T09:55:19Z</updated>
    <link href="http://www.railsguru.com/articles/2007/10/25/gmail-expanded" rel="alternate" type="text/html"/>
    <title>GMail expanded</title>
<content type="html">
            Today I noticed the following:
&lt;p&gt;
&lt;img src=&quot;http://www.railsguru.com/assets/2007/10/25/gmail_4GB.png&quot; /&gt;
&lt;/p&gt;
GMail's mailbox growth rate is still faster than my fill one, sweeeeeet!
          </content>  </entry>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2007-09-16:870</id>
    <published>2007-09-16T22:21:00Z</published>
    <updated>2007-09-28T14:00:58Z</updated>
    <category term="Misc"/>
    <link href="http://www.railsguru.com/articles/2007/9/16/keeping-things-in-perspective" rel="alternate" type="text/html"/>
    <title>Keeping things in perspective</title>
<content type="html">
            Someone pointed out an article on &lt;a href=&quot;http://devizen.com/blog/2007/09/11/ruin/&quot;&gt;How programming can ruin your life&lt;/a&gt;. I really enjoyed reading it and could definitely find myself in some (but not all) of the conclusions. The best remedy is IMHO replication. Nothing like your own version 2.0 to keep things in perspective:&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;img src=&quot;http://www.railsguru.com/assets/2007/9/16/andrew_at_sjoerds.jpg&quot; /&gt;
&lt;/p&gt;
:-)&lt;br /&gt;
&lt;br /&gt;
          </content>  </entry>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2007-09-14:866</id>
    <published>2007-09-14T21:11:00Z</published>
    <updated>2008-01-13T13:58:32Z</updated>
    <link href="http://www.railsguru.com/articles/2007/9/14/4-years-in-the-making-sco-group-files-chapter-11" rel="alternate" type="text/html"/>
    <title>4 years in the making: SCO Group Files Chapter 11</title>
<content type="html">
            Not much to add, except &lt;a href=&quot;http://biz.yahoo.com/ap/070914/sco_group_bankruptcy.html?.v=2&quot;&gt;mwuhaha&lt;/a&gt;.
          </content>  </entry>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2007-08-30:840</id>
    <published>2007-08-30T18:57:00Z</published>
    <updated>2007-10-18T16:41:27Z</updated>
    <link href="http://www.railsguru.com/articles/2007/8/30/nusoap-with-php5-soap" rel="alternate" type="text/html"/>
    <title>NuSOAP together with PHP5-SOAP</title>
<content type="html">
            Every once in a while I get to fix/add stuff from my PHP days. Today I installed php5 on a fresh Ubuntu Feisty install I need to host a NuSOAP based service API to a client. However, the Ubuntu php module comes with SOAP support built in. The PHP bundled SOAP implementation is far from complete and I guess most folks still prefer the good 'ol NuSOAP. The problem is this:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Cannot redeclare class soapclient&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Both NuSOAP and PHP's SOAP use the same class name for the client implementation. Instead of uninstalling Feisty's PHP module and rolling my own I decided to simply patch the NuSOAP 0.7.2 .php file and rename the class to nusoapclient. Saves a boatload of time IMHO. &lt;a href=&quot;http://www.railsguru.com/assets/2007/8/30/nusoap-php5-soap.diff&quot;&gt;Patch to NuSOAP 0.7.2&lt;/a&gt;
          </content>  </entry>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2007-08-21:799</id>
    <published>2007-08-21T22:50:00Z</published>
    <updated>2007-08-21T23:04:26Z</updated>
    <category term="Rails"/>
    <link href="http://www.railsguru.com/articles/2007/8/21/torturing-ruby-and-laughing-at-your-own-code" rel="alternate" type="text/html"/>
    <title>Torturing Ruby (and laughing at your own code)</title>
<content type="html">
            &lt;p&gt;While cleaning up some code I ran across some obscure code of mine from my Ruby youth. I remembered reading about an ultra cool Ruby tool the other day so I decided to &lt;strong&gt;&lt;a href=&quot;http://ruby.sadi.st/Flog.html&quot;&gt;give my code a good flogging&lt;/a&gt;&lt;/strong&gt;. The victim for tonight is a method used to slice ID numbers into chunks of at most 4 characters long. This is required to overcome the typical Linux file system limitation of at most 32000 entries per directory. In this case the project stores roughly a million thumbnail images on disk. We start with the original piece of code:&lt;/p&gt;


&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;splice_number&lt;/span&gt;(number, part_size = &lt;span class=&quot;i&quot;&gt;4&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  n = number.to_s&lt;tt&gt;
&lt;/tt&gt;  r = []&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;return&lt;/span&gt; r &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; n.size.zero?&lt;tt&gt;
&lt;/tt&gt;  (n.size / part_size).times { |t| r &amp;lt;&amp;lt; n[(t*part_size)..((t&lt;span class=&quot;i&quot;&gt;+1&lt;/span&gt;)*part_size&lt;span class=&quot;i&quot;&gt;-1&lt;/span&gt;)] }&lt;tt&gt;
&lt;/tt&gt;  r &amp;lt;&amp;lt; n[-(n.size % part_size)..n.size] &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; (n.size % part_size) &amp;gt; &lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  r&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;Ah yes, &lt;span class=&quot;caps&quot;&gt;WTF&lt;/span&gt; was I thinking when I wrote this? Who cares, it seemed very clever then! What does Flog think about this?&lt;/p&gt;


&lt;pre&gt;
Total score = 28.35

none#splice_number: (28)
     7: size
     3: *
     2: %
     2: []
     2: &amp;lt;&amp;lt;
     1: +
     1: -@
     1: -
     1: /
     1: lit_fixnum
     1: zero?
     1: &amp;gt;
     1: to_s
     1: times
&lt;/pre&gt;

	&lt;p&gt;Pretty good score. Now it&#8217;s time for some torturing. Say hello to my little friend: unpack!&lt;/p&gt;


&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;splice_number&lt;/span&gt;(number, part_size = &lt;span class=&quot;i&quot;&gt;4&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  n = number.to_s&lt;tt&gt;
&lt;/tt&gt;  n.unpack(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;dl&quot;&gt;#{&lt;/span&gt;part_size&lt;span class=&quot;dl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; * (n.size / part_size) + ((n.size % part_size == &lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;) ? &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; : &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;a*&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;))&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;Flog?&lt;/p&gt;


&lt;pre&gt;
Total score = 13.05

none#splice_number: (13)
     3: size
     1: %
     1: /
     1: ==
     1: *
     1: +
     1: to_s
     1: unpack
     0: lit_fixnum
&lt;/pre&gt;

	&lt;p&gt;Yeow, well over half the pain gone!! Perhaps we can still improve by being less clever?&lt;/p&gt;


&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;splice_number&lt;/span&gt;(number, part_size = &lt;span class=&quot;i&quot;&gt;4&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  n = number.to_s&lt;tt&gt;
&lt;/tt&gt;  r = n.unpack(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;dl&quot;&gt;#{&lt;/span&gt;part_size&lt;span class=&quot;dl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; * (n.size / part_size) + &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;a*&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  r.delete(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  r&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;More lines, but less code! Hmm?&lt;/p&gt;


&lt;pre&gt;
Total score = 9.25

none#splice_number: (9)
     1: size
     1: /
     1: *
     1: +
     1: delete
     1: to_s
     1: unpack
     0: lit_fixnum
&lt;/pre&gt;

Weeh, a full 2/3 of the pain flogged out of the code! That&#8217;s all the torture I&#8217;ll do for tonight..
&lt;p&gt;
&lt;strong&gt;Update:&lt;/strong&gt; Okay, couldn&#8217;t help myself, last blow:
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;splice_number&lt;/span&gt;(number, part_size = &lt;span class=&quot;i&quot;&gt;4&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  n = number.to_s&lt;tt&gt;
&lt;/tt&gt;  p = &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;dl&quot;&gt;#{&lt;/span&gt;part_size&lt;span class=&quot;dl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  t = n.size / part_size&lt;tt&gt;
&lt;/tt&gt;  r = n.unpack(p * t + &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;a*&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  r.delete(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  r&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

With score:

&lt;pre&gt;
Total score = 8.05

none#splice_number: (8)
     1: *
     1: size
     1: +
     1: delete
     1: to_s
     1: /
     1: unpack
     0: lit_fixnum
&lt;/pre&gt;
&lt;/p&gt;
Done..
          </content>  </entry>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2007-08-21:797</id>
    <published>2007-08-21T20:41:00Z</published>
    <updated>2008-01-13T13:58:15Z</updated>
    <category term="Misc"/>
    <link href="http://www.railsguru.com/articles/2007/8/21/old-new-job" rel="alternate" type="text/html"/>
    <title>Old new job</title>
<content type="html">
            I accepted a job offer 2 months ago at &lt;a href=&quot;http://www.independentip.com&quot;&gt;IndependentIP&lt;/a&gt; as &quot;technical teamleader&quot;. My &quot;proefperiode&quot; just finished and I'll definitely be staying on, really love the way the company works. Lots of smart and funny (as in: haha) people working there too, time flies when you're having fun!!!! And we're definitely going to change the face of music distribution, keep watching!!&lt;br /&gt;
&lt;p&gt;
&lt;img src=&quot;http://www.railsguru.com/assets/2007/8/21/logo_iip.gif&quot; /&gt;
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.railsguru.com/">
    <author>
      <name>andy</name>
    </author>
    <id>tag:www.railsguru.com,2007-08-21:791</id>
    <published>2007-08-21T18:08:00Z</published>
    <updated>2007-12-09T11:31:07Z</updated>
    <category term="Apple"/>
    <link href="http://www.railsguru.com/articles/2007/8/21/firmware-update-gone-south" rel="alternate" type="text/html"/>
    <title>Firmware update gone south</title>
<content type="html">
            So about 6 weeks ago I happily ran this thing called Apple &quot;Software Update...&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;img src=&quot;http://www.railsguru.com/assets/2007/8/21/osxupdate.png&quot; /&gt;
&lt;/p&gt;
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 &quot;Disc Burning&quot; 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 &lt;strong&gt;superdrive firmware update 2.1&lt;/strong&gt;. 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 &lt;strong&gt;reboot&lt;/strong&gt; 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, &lt;strong&gt;bricked superdrive&lt;/strong&gt;, no Apple warranty, no AppleCare since I spent the extra €400,- maxing out the Macbook Pro with disk and RAM. Stupid, stupid!!&lt;br /&gt;
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! &lt;br /&gt;
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. &quot;I understand sir, let me talk to the tech people.. please hold..&quot;.. 2 minutes later: &quot;Sir, we have OK'd this repair under warranty..&quot;.. WOAAH!!! &lt;br /&gt;
One week later I picked up my Macbook Pro, new superdrive installed, everything working. Charge: € 0,00!!&lt;br /&gt;
Big kudo's to the &lt;strong&gt;Apple Customer Satisfaction&lt;/strong&gt; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;
Forum thread 1: &lt;a href=&quot;http://discussions.apple.com/thread.jspa?threadID=1081038&amp;tstart=0&quot;&gt;Superdrive update 2.1 killed my drive.&lt;/a&gt;&lt;br /&gt;
Forum thread 2: &lt;a href=&quot;http://discussions.apple.com/thread.jspa?threadID=1013920&amp;tstart=15&quot;&gt;Superdrive Update 2.1 killed drive.&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;br /&gt;
Still keeping an eye on how Apple handles this...
          </content>  </entry>
</feed>
