Archives for September 2007

Software psychiatry has a new spokeman

Stowe's just written a great post about what he does:

I sometimes say my role is software psychiatrist, where I ask the application to tell me about its childhood. This is really close to reality, since the relationships between the various 'parents' -- the management team -- has enormous impact on the product's design and implementation.

He lays out an overview of his consulting process - and the rationale behind it - and recounts some of the pitfalls he's experienced through relaxing it. I think his advice is replicable in just about any area of expertise. Plenty to reflect upon if you are advising people.

29/09/2007 09:21 by Matt Mower | Permalink | comments:
More about:

Diffly updates fixed

Seems something broke on my webserver so that www.mattmower.com gave permission denied but mattmower.com still worked. Unfortunately the Diffly appcast feed had www.mattmower.com in its enclosure URLs breaking the update process. I guess this must have happened quite recently. Anyway it's fixed now (the URL, i've still no idea what went wrong with the webserver).

28/09/2007 15:31 by Matt Mower | Permalink | comments:
More about:

The joy of radio

Rogue Amoeba have released a great new application called RadioShift. It's TiVo for Radio and it works. In fact it works well enough that I was even prepared to install RealPlayer on my computer to use it, something I swore I would never do again.

[Even if RealPlayer 10 for MacOSX seems fairly benign my dislike of Real is long founded. I find it hard to believe that in all this time the BBC could not have found a better alternative.]

The ability to schedule it to record the classic comedy, sci-fi, and crime on BBC7 every day is such a killer feature for me. That's worth $32 to me on it's own. RadioShift is also a great looking application that takes a few leaves out of the iTunes playbook but still has it's own identity. It's got a great looking icon too.

The 1.0 release was, as you would expect, not entirely bug free but they have already pushed out 1.0.1 which fixes things like export-to-iTunes. Also the playback facilities in RadioShift are primitive to say the least but I would expect them to improve in future releases. This app also screams out for some kind of remote control so that you can schedule and playback programs while you are out and about (here I am thinking about a web interface such a uTorrent has).

If you like Radio I think you should give RadioShift a look.

28/09/2007 13:34 by Matt Mower | Permalink | comments:
More about:

How dumb can your support site be? Try this out!

Recently while making enquiries into a rare book I came across a site called AbeBooks who seem to have a good selection and range of prices. I started browsing and quickly realised that I wanted to be able to order by date of publication.

I couldn't find an option for this so I went to their support pages and filled out the form explaining the feature I wanted, the rationale, and so on. Then I hit submit. Okay, job done. But a little later I got this response:

This is an automated response to your inquiry. This information resolves most inquiries of this nature, but if the information contained in this e-mail does not address or resolve your problem, please e-mail us for further assistance from a Customer Support Representative.

Okay... well, irritating as it is an auto-responder is not uncommon. Then:

Please note: You’ve sent this request using an e-mail address that is not associated with any account in our database; therefore, I can’t access your account information or save a record of your inquiry.

I'm sorry what?

The fastest and most reliable way to send e-mail to us is using our contact form. It links directly into our customer support database, so we’ll receive your message as soon as you click [Send Mail].

That wasn't what I did?

I quickly scanned the message for a copy of the, long, comment I had left. Nothing.

So basically what they are saying is "Because we are too lazy to read your comments and too stupid to either keep a copy of them or provide them to you in this response we'd like you to do the whole thing all over again, from memory. Have a nice fucking day!"

I'm sorry AbeBooks but this is really crap service. You might well have replied to my feature request with a "we'll look into it" or "not enough customers ask for that" or anything else.

But don't throw my comment in the bit bucket then ask me to write it again assholes.

I don't know how many books I buy but anyone who has been to my house will confirm it's a lot. I could have been a good customer for you. You just soured me.

27/09/2007 13:14 by Matt Mower | Permalink | comments:

A dose of real oppression

As much as I may fear the British and American governments I know that most of us are, at worst, frogs in luke warm water. So I'm not sure how I'd feel to be in truly hot water in Burma right now where the military junta appear to be ready to beat or shoot protestors including monks.

Thousands of protesters are back on the streets of Burma's main city Rangoon after overnight raids in which monks were reportedly beaten and arrested.

There are no indications yet that the military government is ready to listen to the many calls for restraint being made around the world, says the BBC's South East Asia correspondent Jonathan Head.

Since I have seen nothing to the contrary I believe that this is a peaceful protest by monks and their supporters against the way their government is treating them.

Avaaz.org is organizing a petition to be sent to the UN and the Chinese government:

We're calling for UN powers--above all China, which holds the economic strings of the Burmese regime--to apply decisive pressure now to stop the violence, and to broker a peaceful transition. If they fail to do this, the massacres will be sudden.

My concerns about intervening in the internal affairs of other countries aside, I am happy to sign a petition calling for restraint in how a government, particularly such a government, treats people with a legitimate protest.

27/09/2007 09:38 by Matt Mower | Permalink | comments:
More about:

Will I be able to stand up this evening?

Yesterday I did a 3.5 mile bike ride before lunch. Today I did 5.5 miles. I think my saddle height may be a little too low but otherwise it felt fairly good. On the other hand I have no idea whether I'll be able to stand up through an hours karate practice tonight. This could be interesting.

25/09/2007 13:40 by Matt Mower | Permalink | comments:
More about:

This saddle has to go

So, 3 days in a row on the bike. My Dad and I went out for a short ride on Saturday and then a longer ride on Sunday. Today the weather was miserable in the morning but, by the time I was thinking about lunch, it got quite sunny. I decided to go out again, leaving my lunch in the oven on a low heat.

While it was sunny and not too cold it was decidedly windy. This was turned out to be important when the route I picked, without thinking, took me across open fields and into strong headwinds. Overall I did 3.5 miles by the time I got back for lunch. Not a great distance but I felt good at the end of it (and very ready for food)! I'm hopeful that the cycling will help me get fitter and, by building up the strength in my legs, improve my karate.

I'm quite glad I didn't get a road-only bike now. I like being able to follow trails and footpaths that go just about anywhere. But one thing that has become clear is that the saddle has to go. I don't know why they bother selling bikes with these hard saddles but a better saddle is in my future!

24/09/2007 14:11 by Matt Mower | Permalink | comments:
More about:

Not every bullet is magic

This may become big news:

I threw away 2 years of Rails code, and opened a new empty Subversion respository. Then in a mere TWO MONTHS, by myself, not even telling anyone I was doing this, using nothing but vi, and no frameworks, I rewrote CD Baby from scratch in PHP. Done! Launched! And it works amazingly well. [7 reasons I switched back to PHP after 2 years on Rails -- Derek Sivers]

I've no real idea what CD Baby is but I remember it was quite a boost to the Rails cause that, in the early days, Derek announced the migration from PHP to Rails and put quite a bit of money behind it.

I'm mostly uninterested in his reasons for going back to PHP which seem tightly coupled with other legacy PHP applications however I think, towards the end, that he makes a really good point.

I love Ruby for making me really understand OOP. God, Ruby is so beautiful. I love you, Ruby. But the main reason that any programmer learning any new language thinks the new language is SO much better than the old one is because he's a better programmer now! You look back at your old ugly PHP code, compared to your new beautiful Ruby code, and think, "God that PHP is ugly!" But don't forget you wrote that PHP years ago and are unfairly discriminating against it now.

It's not the language (entirely). It's you, dude. You're better now. Give yourself some credit.

In 2005 I made the switch from Java as my de-facto language to Ruby. There was a stretch there because Ruby exposed me to a whole lot of techniques unavailable (or expensive) in Java. Although there is no doubt in my mind that Ruby is a better language than Java I am also sure that if (heavens forfend) I had to go back to Java I would be a better Java programmer for learning it.

Sometimes the magic bullet has our name on it.

24/09/2007 11:21 by Matt Mower | Permalink | comments:
More about:

So.. farewell Barry Bonds

I read this morning that the Giants will not be re-signing Barry Bonds for the 2008 season:

Overall, the day was dominated by the news surrounding Bonds, although he missed his sixth game in a row with a sprained right big toe. The Giants announced that they would not re-sign Bonds for the 2008 season, ending the all-time home run leader's illustrious 15-year tenure in San Francisco.

On the one hand I'm very sad about this. I've really enjoyed watching Bonds as a giant including sitting in the stands and watching him smack a beautiful homer into McCovey Cove during his home run chase in 2001. I'm grateful to him for being on of the few things that's made being a Giants fan a pleasure these last few years. Farewell & good-luck Mr. Bonds.

However, since our crushing defeat in the last game of the 2002 World Series I've been very depressed with moves made by the team management. Instead of supporting the best hitter in the modern game those moves have lead us to 2007 season and a Giants team that can't even muster 2 runs in support of its should-be-game-winning-pitchers:

San Francisco
Won:67
Lost:87
Perc:.435
Behind: 20

Worst. Season. Evar (and it can even get worse over the next 8 games)!

On the other hand Bonds is not the force he was in previous years. I think not re-signing him is the right move for the team (but probably great news for Oakland) but I have no confidence that's why it's been done.

But Magowan reiterated the organization's commitment, which he and Sabean expressed in July, to refresh the roster with younger players and abandon the strategy of surrounding Bonds with capable but aging veterans.

...

"As this season unraveled, it became more apparent to Brian and me that we needed to try to do some things differently moving forward," Magowan said.

Only now do they question their strategy? Jeebus. I really have no confidence that the team owners and management will be any more capable assembling a strategy around young players than they have been about supporting Bonds. I've no confidence that anyone running the Giants has any idea how to build a winning team.

I have a strong suspicion that being a Giants fan will be no more fun in 2008 than it was in 2007.

22/09/2007 09:37 by Matt Mower | Permalink | comments:
More about:

When random is normal

Okay this is one for the lazyweb mathnerds.

Problem: Generate a pseudo-random number distributed across the range 0 to 1.

To see the difference between uniform and normally distributed numbers take a look at the charts on this page. Essentially it means that while numbers are still pseudo-randomly they, according to the distribution, more likely to cluster around the mean.

I've been looking at approaches based upon the polar form of the Box-Mueller transform as outlined by Dr. Everett (Skip) F. Carter Jr and converted to Ruby as:

def box_mueller( mean = 0.0, stddev = 1.0 )
  x1 = 0.0, x2 = 0.0, w = 0.0

  until w > 0.0 && w < 1.0
    x1 = 2.0 * rand - 1.0
    x2 = 2.0 * rand - 1.0
    w = ( x1 * x2 ) + ( x2 * x2 )
  end

  w = Math.sqrt( -2.0 * Math.log( w ) / w )
  r = x1 * w

  mean + r * stddev
end

calling this with (for example) mean=0.5 and sttdev=0.1 generates a lot of numbers in the correct range but does not preclude generating numbers outside of the range. I could reduce the probability still further by narrowing the stddev but this will not actually eliminate numbers outside the desired range.

It seems to me that the transform I want should be possible, but I cannot envisage how to do it.

21/09/2007 15:48 by Matt Mower | Permalink | comments:
More about:

Il piacere e mio

Given how much I have worked with Italians over the last 5 years or so you'd think I'd have learned a little Italian. But my experiences there have been too disjointed and, frankly, Paolo's English is too good, for it to have ever been really necessary.

Anyway I just went through lesson Italian#1 at Mango Languages site (found via LifeHacker).

The form of learning is based upon repetition and speaking the phrases presented to you going from English to Italian or vice verca. At over 100 slides (it's in the form of a Flash presentation) I found the lesson a little bit too long (I think this may say more about my attention span than anything else) but I guess you end up repeating everything quite a few times.

Mi chiamo Matt. See? Something stuck.

21/09/2007 09:21 by Matt Mower | Permalink | comments:

While a drop of oil remains

Paul Krugman of the NYT:

I disagree that the Bush administration's goal is simply to muddle through and pass the blame for failure in Iraq. Instead, I think its goal is to maintain a military presence in Iraq to enforce deals with the U.S. oil companies, such as Hunt's firm that have bankrolled many politicians' careers. If Iraq is to Balkanize, then the U.S. needs a presence in each of the offshoot states: Shiite, Sunni and Kurdish. The Sunni Arabs have the least oil. But they do have the potential to sabotage pipelines or the other states, so they must be co-opted. This is the real Bush agenda. The surge and the Maliki government are just buying time for the U.S. to try to cement ties with tribal and factional leaders in each of the likely entities. And don't think that this agenda will end when Bush moves out of the White House. The oil industry has already purchased the loyalty of Giuliani, and is working on Romney and Clinton. The next government will continue to offer a shifting set of reasons for the U.S. presence in Iraq, but oil money will insure that the U.S. presence continues indefinitely.

The value of the dollar sliding precipitously, a vast fortune given to merchants of death, a deep erosion of civil liberties, and a worsening crisis in the Middle East. This will be the Bush legacy.

Worse than Bush Snr. And they said it couldn't be done. The frog is almost boiled. I despair of America sometimes I really do.

20/09/2007 11:23 by Matt Mower | Permalink | comments:

Truly this has been a dreadful team

I have to say, at the beginning of this season my hopes for the Giants prospects were not high. Oh I tried to talk up the team but baseball prospectus was pretty scathing (again!) and it was hard not to look at an offense that underperformed the season before and looked even worse this season. And so it has proven. The giants are 18.5 games behind and our only consolation is that the bums look set to close out their season in 3rd or 4th place.

What is even worse to me is that owners and management appear to have squandered the last years of Barry Bonds career. Instead of being the lynch-pin of a competitive team he has been the pack mule and, in the last four seasons, the only man on the team you are confident can hit.

I don't know if Bonds will play again next year. His season this year looks stellar for a guy his age but he's not the force he once was. Sad as I am to say it I think the team would be better off going into rehab mode now. Ditch all these expensive, negative VORP, veterans and start looking to the future.

What a gyp.

20/09/2007 10:30 by Matt Mower | Permalink | comments:
More about:

It's a subtle distinction that is the difference between good and evil

But Apple has to always remember that simply making money CANNOT be its point of existence. The point of any company should be to make customers want to give it money, NOT to get money from customers. It's a subtle distinction that is the difference between good and evil.

Will Shipley's take on post-iPhone Apple & Steve Jobs. I think he makes some good points.

I have come to love Apple gear and MacOSX. But at the back of my mind is always an "If Apple become the new Microsoft or Sony, what's my exit strategy"? I guess this is why I keep despairing whenever I see a Linux desktop because I know how unpalatable my exit strategy will be.

I don't mind paying the Apple tax. In fact I am happy to pay the Apple tax in return for better products from a healthy, profitable, Apple that has the cash to innovate. If that means I can't afford something well, then I can aspire to afford it.

What should Steve do? Well, for starters, give up on trying to control everything. It's only going to keep hurting Apple, more and more, to control content and hardware and software. It's going to make them into the kind of mega-monopoly that we always, ALWAYS end up hating. Absolute power corrupts absolutely. 100% of the time.

Paying the Apple tax is one thing. Becoming subservient to a monopoly is quite another. I do hope I can still be a happy Apple customer in the coming years.

20/09/2007 09:51 by Matt Mower | Permalink | comments:
More about:

Well I never

Thanks to Euan's twitter I have discovered that Stephen Fry not only has a blog, but is also an enormous gadget freak:

This thing crashed more times than an Italian dodgem car; actually it didn't even have the dramatic wit to crash, it just hung and wasted your time.

and:

I could issue forth quires of intemperate fury on the subject of how bad internet account configuration is on the UIQ Sony Ericssons. It's utterly pointless. Is there not one person at either Sony E or Symbian who themselves uses the phone and says "hang on, we could do this better"? That's all it takes. Just one person to point at the Emperor and shout "nudie!" That's why Apple is Apple, they have people there (and of course it comes from the top) who say - "woah, not good enough, not cool enough, not simple enough, not fun enough, not sexy enough, not clever enough, not useful enough". The P1i is what happens when "oh, that'll do" becomes the corporate motto.

Subscribed :-)

20/09/2007 09:12 by Matt Mower | Permalink | comments:
More about:

Rails starts to get the IDE treatment

Mike Pence turned me on to CodeGear 3rdRail which is a Rails IDE based on Eclipse. One of the things about abandoning Java for Ruby back in 2005 was that there were no Ruby IDE's. I'd been using Intellij IDEA which was a pretty good environment for Java development.

What I discovered was that Ruby made my programs shorter and simpler and that, because there were less complex dependencies, my most pressing needs for an IDE evaporated. I was pretty happy using TextMate to write my code.

Then Rails came along.

TextMate handles ruby well enough and the fact that Rails has a single way of organizing projects still means that you can be pretty effective without an IDE. However Rails adds a metric assload of new classes and methods and new dependencies. And debugging Rails apps can be painful.

Since I am getting involved in another serious Rails project I am looking for an edge and 3rdRail does have some impressive tricks up it's sleeve. That said it's based on Eclipse which I don't count as a plus (not the least of which is that it's about as UnMacLike as an app can get) and it's still a little rough around the edges (although I trust the CodeGear guys are sanding furiously).

Today I saw an article by George Cook about NetBeans 6 Beta 1 which seems to have pretty substantial Ruby support.

NetBeans is a powerful and free. You can create Ruby and Rails projects, run Ruby files, configure interpreters (MRI and JRuby), install Gems graphically, run tests, run RSpecs, debug Ruby code, run Rails apps, and so on, all from the IDE.

In my Java days I did try NetBeans once and hated it even more than Eclipse. But times change and what George shows in detail looks pretty useful. It's also only 19mb. Much smaller than the 3rdRail download (which also includes Ruby, Rails, Interbase, and MySQL ... I think they should dump those into separate downloads and have the app download them iff you choose to install them).

Since NetBeans is free I think CodeGear (at $200) are going to fight to demonstrate their value. Things like their dependency views (if NetBeans doesn't have equivalents, I don't know yet) look very useful. 3rdRail really does try to understand the structure of a Rails project. That could, in the long run, be well worth paying for.

At this point I am really not sure where I will be writing my Rails code in 6 months time.

Update: I should note that it may well not be NetBeans. I installed it, tried to add an existing project but I can't get it past the "Install Rails" step because "Ruby Gems is not accessible". This despite trying to make the entire Ruby library directory writable by world as well as changing it's ownership to my user account.

Of course if this were a Mac application it would ask me for authorization when it needed to write to the gem tree. There would be no problem.

It's no surprise to me that I tend to end up hating Eclipse and NetBeans. Both are written in Java and thus slow and ignore the best parts of any platform they are on. They both look horrible and appear to have been designed by people for whom elegance is an uncomfortable concept.

I like the added functionality of an IDE sometimes the cost is too high. There is something to be said for the smooth and pleasant way that working with the command line and TextMate brings.

Update#2: So the gem issue was that NetBeans, rather than detecting my existing Ruby installation, was using it's own included copy of JRuby. Worse yet they managed to include it but make it so that it couldn't update itself. Of course nothing in the gem preferences tells you that it's using it's own built in Ruby. Once I amended that detail the gem manager worked although I'm not sure how much use it is.

However my problems are not over. Even if NetBeans ever figures out whether it can update or not it seems to get stuck "Scanning" something in one of my functional tests. An empty functional test I should point out since this is a freshly generated Rails project.

Shortly after that it crashed... no error just kapow. In the console log I see:

Invalid memory access of location 00000000 eip=9bae17d1
An unexpected Java error has been detected by HotSpot Virtual Machine.

Nice.

Where did I put TextMate?

19/09/2007 15:01 by Matt Mower | Permalink | comments:

Yarrr... Google be bilge rats

Well send me to Davy Jones locker if Google ain't the worst kind of lubbers and bilge rats. It be talk like a pirate day all over the world but have those varmints done a fancy logo for it? They have not!

Fortunately the lads at Flickr have blacker souls.

Yarr!

19/09/2007 11:41 by Matt Mower | Permalink | comments:
More about:

Thank you, the BBC!

Okay despite the fact that I no longer watch broadcast TV and despite my continued irritation with BBC policy I have continued to pay my Television license since I keep a TV in the house to watch DVD's and the odd downloaded program. It seems safest this way.

I posted a few days ago about some music I really wanted to get. When I originally posted I just had a snatch of lyrics and no idea where I kept hearing it. Last night I heard it again on BBC7 and I sent in a message via the BBC web site asking about it. I fully expected not to hear anything or to get some boilerplate "we cannot reply to individual queries" message in response.

Instead, this morning, I got this:

Hello,
Thanks for your e-mail.
The music you refer to is called 'Radio Times' from a CD called 'Radio Days' by Henry Hall & The BBC >Dance Orchestra. It is on the Conifer label.
Best wishes.
BBC 7

Thank you. Thank you. :-)

From now on I am going to imagine my TV license goes to pay the staff on the BBC contact page site (and the people at Radio4 and BBC7 of course!)

19/09/2007 11:02 by Matt Mower | Permalink | comments:
More about:

What would it take?

Dave Winer notes that there is an open bill before congress to impeach Dick Cheney. Introduced in April 2007 it was immediately referred to the Subcommittee on the Constitution, Civil Rights, and Civil Liberties. What has happened in the 4 months since?

Impeachment is, as I understand it, a process of investigation. The impeachment process looks to see if there have been evidence of high crimes by an official in office and, if sufficient evidence is found, the so impeached official can be removed from office and, subsequently, prosecuted. Impeachment != guilt.

Unless you were tacitly admitting your entire system of government was basically corrupt I would think impeachment of individuals at the very top of government should be far from unthinkable. Where there is smoke you need to know if there is fire. In the president and vice presidents office especially.

Now all the smoke that has come drifting out from under the door of Cheney's office these last 6.5 years. Is the US congress too spineless to ask where it's coming from? Or too corrupted?

Cheney is comfortable presiding over an administration that pops inconvenient foreigners (and even nationals) into prisons where they can be abused and in some cases illegally tortured. Given his administrations love of incarceration you'd think he'd be the first one to support his own impeachment!

After all, if impeachment goes ahead, he'll have the benefit of legal representation, due process, and - oh - he probably won't get waterboarded by some CIA trained interrogator even though he's comfortable that it's just a "professional interrogation technique."

So here's what really puzzles me: What the hell does it take for congress to swing behind impeaching Cheney? Does he have to be caught strangling Iraqi babies on the Whitehouse lawn?

17/09/2007 20:06 by Matt Mower | Permalink | comments:
More about:

CodeGear 3rd Rail: might be good, who knows?

I've heard some good things about 3rdRail and wanted to try it out but I've got stuck installing it. I really don't want to sign up for a developer network just to report a bug with the installer so, since I can't see any other way, I'm reporting it here. CodeGear are you listening?

So I'm testing it on an Intel Core Duo 2 Mac Mini (running 10.4.10) with 1GB of ram. The installer script runs but when I click "3rdRail Install" a window appears briefly, then disappears and that's all she wrote.

In my console log I see the following (apologies for the lack of wrapping):

Sep 17 15:10:42 Fenring java: Java is generating its shared archive, version 1.5
[JavaAppLauncher] application launched with ppc-thin application stub. Using native application stub instead.
[LaunchRunner Error] The main class "com.zerog.util.relaunchers.MacOSXRelauncher" could not be found.
[JavaAppLauncher Error] CallStaticVoidMethod() threw an exception
Exception in thread "main" java.lang.NullPointerException
    at apple.launcher.LaunchRunner.run(LaunchRunner.java:85)
    at apple.launcher.LaunchRunner.callMain(LaunchRunner.java:50)
    at apple.launcher.JavaApplicationLauncher.launch(JavaApplicationLauncher.java:52)
2007-09-17 15:11:31.270 3rdRail[452] CFLog (0): CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary.
2007-09-17 15:11:31.271 3rdRail[452] CFLog (0): CFPropertyListCreateFromXMLData(): The file name for this data might be (or it might not): /System/Library/Frameworks/Foundation.framework/Resources/Languages/en
2007-09-17 15:11:31.272 3rdRail[452] CFLog (0): CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary.
2007-09-17 15:11:31.272 3rdRail[452] CFLog (0): CFPropertyListCreateFromXMLData(): The file name for this data might be (or it might not): /System/Library/Frameworks/Foundation.framework/Resources/Languages/en
2007-09-17 15:11:31.305 3rdRail[452] CFLog (0): CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary.
2007-09-17 15:11:31.305 3rdRail[452] CFLog (0): CFPropertyListCreateFromXMLData(): The file name2007-09-17 15:11:55.238 Quicksilver[237] CFLog (0): CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary.
2007-09-17 15:11:55.480 Quicksilver[237] CFLog (0): CFPropertyListCreateFromXMLData(): The file name for this data might be (or it might not): /Users/matt/Library/Preferences/com.apple.recentitems.plist
[JavaAppLauncher] application launched with ppc-thin application stub. Using native application stub instead.
[LaunchRunner Error] The main class "com.zerog.util.relaunchers.MacOSXRelauncher" could not be found.
[JavaAppLauncher Error] CallStaticVoidMethod() threw an exception
Exception in thread "main" java.lang.NullPointerException
    at apple.launcher.LaunchRunner.run(LaunchRunner.java:85)
    at apple.launcher.LaunchRunner.callMain(LaunchRunner.java:50)
    at apple.launcher.JavaApplicationLauncher.launch(JavaApplicationLauncher.java:52)
2007-09-17 15:13:04.574 3rdRail[457] CFLog (0): CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary.
2007-09-17 15:13:04.574 3rdRail[457] CFLog (0): CFPropertyListCreateFromXMLData(): The file name for this data might be (or it might not): /System/Library/Frameworks/Foundation.framework/Resources/Languages/en
2007-09-17 15:13:04.575 3rdRail[457] CFLog (0): CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary.
2007-09-17 15:13:04.575 3rdRail[457] CFLog (0): CFPropertyListCreateFromXMLData(): The file name for this data might be (or it might not): /System/Library/Frameworks/Foundation.framework/Resources/Languages/en
2007-09-17 15:13:04.609 3rdRail[457] CFLog (0): CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary.
2007-09-17 15:13:04.609 3rdRail[457] CFLog (0): CFPropertyListCreateFromXMLData(): The file name for this data might be (or it might not): /System/Library/Frameworks/Foundation.framework/Resources/Languages/en
2007-09-17 15:13:04.610 3rdRail[457] CFLog (0): CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary.
2007-09-17 15:13:04.610 3rdRail[457] CFLog (0): CFPropertyListCreateFromXMLData(): The file name for this data might be (or it might not): /System/Library/Frameworks/Foundation.framework/Resources/Languages/en

Now the install instructions for MacOSX read:

To install on a Mac:

* Get 3rdRail from CodeGear http://www.codegear.com/products/rubyide.
* Download and extract the application.
* Launch macosx_install.sh

Use the finder to install and run. There are known issues with running from the command line.

The last bit, about not running from the command line, is unclear about whether it refers to the macosx_install.sh script? Or to the 3rdRail application itself? I assumed the latter since I can't figure out a way of running a shell script that isn't equivalent to running it from the command line. But I live to be educated.

A note to CodeGear. Installers on MacOSX suck really badly, I hate to use them. Java based installers are the pits. And starting Java based installers from shell scripts.

To me this screams "We do not understand the Mac platform or care about the good reasons why people choose to use Macs." It's a huge disincentive for me to try or want to use 3rdRail. Doing things the Mac way isn't really all that hard. Please have another run at this.

Oh and it took me well over an hour to download but, in that time, my activation email still hasn't arrived so I guess i'd be stuck even if it had installed.

Sorry to be petulant. But it didn't.

Update: 18 Sep '07

The CodeGear folks have been pretty good about working with me to resolve my installation problems and have spent some time with me trying to figure it out. It was pretty confusing because they were testing it on Intel Mac Mini's just like mine and for them it worked.

It turns out that the Java based installer was barfing on some path characters. I use the Saft extension to Safari to put downloads into date-based folders, e.g. todays downloads go into ~/Desktop/18:09:2007. Now don't ask me why it uses colons as a date separator, it just does and I've never really thought about it before. My guess is that it's the colons that caused the problem.

I figured this out using the ktrace utility to dump system calls and noticed a number of failed Jar loads before the:

[LaunchRunner Error] The main class "com.zerog.util.relaunchers.MacOSXRelauncher" could not be found.

error mentioned above. I began to wonder about paths and moved the installer into /tmp from which point it worked fine. Lesson learned.

Now that I've been able to run it and watch the intro video I must say I am intrigued. They seem to have put a lot of work into this thing. I was immediately impressed that they leverage Rails (e.g. using rails scripts under the hood) then understand what it does. They didn't go trying to redo a bunch of stuff that works.

I'm really hoping that in future releases they can, within the limitations of what's possible with an Eclipse based product, make it a smoother Mac experience.

Now, on to what this thing actually does ;-)

17/09/2007 15:24 by Matt Mower | Permalink | comments:
More about:

A snatch of song

I'm trying to track down a song, probably quite old (I'd guess 30's or 40's) from which I know - or think I know - only two short lines:

a wireless set near
to bring us some cheer

I think it may also have the words "radio times" in it. It's sung by a man whose voice is familiar but I can't place it right now. What's suspicious to me is that Google isn't turning up anything at all.

I don't think I dreamt it. Anyone help me out?

Update 18 Sep 2007:

Okay I have heard it again. It's the theme music for the show "Wireless Wise" on BB7 hosted by David Hatch. That should mean it's possible to figure out what it is... assuming I can find someone who knows!!

17/09/2007 12:03 by Matt Mower | Permalink | comments:
More about:

Insidious updates

It's all about the DRM. If Microsoft's various and sundry anti-piracy schemes are to work, it has to have the right to make changes to components of the operating system whether you want them to or not. And, however good Microsoft's intentions might be, if any of those changes happen to cripple your computer at a bad time, hey, read the EULA. It's your problem, not Microsoft's. -- [Infoworld Gripe Line]

It's not like Microsoft software is all that good without the DRM armlocks. Why on earth do people continue to trust this company with their data?

17/09/2007 08:43 by Matt Mower | Permalink | comments:
More about:

Amazing Science

Found via ungrasping it all: a Telegraph news item about a bottle, designed by an Ipswitch business, that can filter anything over 15nm from water.

Mr Pritchard, who runs a water treatment business in Ipswich, was inspired after watching coverage of the tsunami in south-east Asia on Boxing Day 2004 and of Hurricane Katrina in Louisiana the following year. He was amazed to see refugees waiting for days to get any fresh water.

The 15nm filter means that even viruses can be filtered. Essentially this means you can put any old crap water you find in it and instantly get drinkable water out.

16/09/2007 13:15 by Matt Mower | Permalink | comments:
More about:

Sunny in Gorizia

Sat chatting in Paolo's office here in Gorizia reminds me of old times. It's sunny and warm. The coffee is good. We've been talking about his new application called Pages (no relation to Apples word processor) and making things scale. Now we're off for Pizza in Gradisca. Good times.

12/09/2007 17:19 by Matt Mower | Permalink | comments:

Red is a great colour

I passed my 8th Kyu karate grading this afternoon and have a shiny new red belt to show for it. On Wednesday it was touch and go whether I would be able to attend due to a bad knee so I'm doubly grateful to have passed.

I'm indebted to Sensei Richard Hughes for his teaching and for helping me gain the confidence to achieve this.

Now I'm going to treat my weary bones to a well earned drinkrest.

09/09/2007 17:40 by Matt Mower | Permalink | comments:
More about:

That's not the debug version!

One of the (many) bug bears when using XCode for development is the way it handles frameworks. The friendlier instructions have you drag a framework bundle into your project and setup a build phase to copy it into the resulting application bundle. This all works pretty well and, although unintuitive, you do learn how.

Now after a while you accumulate useful Objective-C classes and header files and you get bored copying them from one project to another and you think to yourself:

"I know, I'll make a framework out of these and then I can just include the framework in every new project I build. And if I improve the classes I don't have to go back and copy them into the old projects. Neat!"

And you'd be pretty smart and happy with yourself. And you make your framework and remember to change the installation_path build setting to @exectuable_path/../Frameworks to avoid those stupid:

dyld: Library not loaded: Users/matt/your/dumb.framework
Referenced from: some app
Reason: image not found

errors. And you get it all working nicely and make yourself a debug and release build of the framework and then you drag it into your application. Only... which one do you drag in? You have two frameworks, not one.

What I wanted was have the debug framework for the debug version of my app and the release framework for the release version. At this point you might think about making your framework project a sub-project of your application project. I've done that and it was a bloody pain. I ended up just copying over the debug framework, by hand, when I needed it.

That get's old fast.

I read a blog post, which I have lost track of, which suggested using a symlink to reference the framework. Then you could just delete and remake the symlink whenever you needed to switch build targets. That sounded better, but still a drag.

XCode script build phases to the rescue!

I've described in an earlier post how I use a script build phase to automatically make a built app into a package ready for Sparkle updates. The new build phase is also pretty simple.

First I dragged the framework into my app and set it up as normal so that XCode has all it's ducks in a row. Then I closed the project and deleted the copied in framework and created a symlink to the original framework folder.

Now I setup a build script to run before the copy-frameworks phase.

projects_folder = '/Users/matt/Projects/Cocoa/Lucidity'
framework = 'Lucidity.framework'
framework_folder = File.join( projects_folder, 'build', ENV['BUILD_TYPE'], framework )

File.unlink( framework )
File.symlink( framework_folder, framework )

again I am using Ruby for my build script.

The non-obvious part is where ENV['BUILD_TYPE'] comes from. XCode defines quite a few variables available to build scripts but you will notice that the active build configuration is not among them.

That had me stumped and I was wondering if I would have to parse the TARGET_BUILD_DIR but it was suggested to me by nibs in #macdev that I could setup a custom environment variable in my build settings with a different value for the debug and release configurations.

I was a bit stumped on how to do that but it turns out that any custom build setting (created using the '+' button in the form) is automatically exported as an environment variable to build scripts. So I created a BUILD_TYPE setting which is configured as Debug and Release respectively.

Success! Now when I build the script amends the symbolic link for the framework to point at the correct version of the framework automatically and I am happy when I click Debug.

08/09/2007 18:09 by Matt Mower | Permalink | comments:
More about:

The long arm of the software developer

One of the frustrating things about releasing software into the wild is how little information you really have about people using it. I've been quite gratified by the feedback I have had for Diffly for example. Most of it, even the bug reports, have been fairly complementary. But that's a handful of people. Do only a handful use it? I have no idea.

On the one had I have had well over three thousand downloads of the application since it went live (3,389 to be exact). Is that a lot? I guess I didn't think so until someone pointed out that it's a niche within a niche within a niche:

Mac users > Developers > Subversion users

Okay maybe it's quite a lot. But how many people actually use it. According to iUseThis.com Diffly has 24 users, but how much coverage does that site get?

My own stats say that 249 people downloaded the 0.8.3 update. Does that mean 249 people use the app? Probably not. Since I never got around to packaging 0.8.3 everyone who downloads the app today will automatically get updated to 0.8.3 so those 249 could all be running the app for the first time. Does running an app twice count as using it anyway?

There has been some talk of Sparkle2 becoming a kind of centralized app update repository. I wonder if it might allow people to automatically update a site like iUseThis based upon usage.

This wouldn't give away anything personal about the user, it would simply generate aggregate statistics that software authors could use to judge the usefulness of their apps.

07/09/2007 23:00 by Matt Mower | Permalink | comments:
More about:

Diffly going all unpredictable?

Okay so lately I've either been too busy, too tired, too lazy, or too ill to work on Diffly. There are a few bugs that need debugging, a few features that need enfeaturing, and a 1.0 release. One thing standing in the way of that is that, since leaving Cominded, I'm not using Subversion day to day so the shortcomings aren't in my face a lot.

Also for my latest project I have been playing with Mercurial which is a distributed version control system along the lines of Darcs and Git.

The distributed part comes from the fact that all three, unlike Subversion, eschew the idea of a central repository. Essentially everyone maintains (potentially multiple) masters and pushes and pulls changes between them. It turns out this has all sorts of advantages.

I choose Mercurial over Darcs and Git because I found it the easiest to get going with although I know a lot of smart people are choosing Git and uber-smart Haskell people probably use Darcs out of principle. Steve Dekorte mentioned a couple of problems that Git may suffer relative to Darcs.

Never having used Git I've no idea if he's right. I asked the question in #mercurial and was told that the cherry-picking at least should be possible using the Transplant extension. Although the HgBook is a little vague on this point:

14.3 Cherrypicking changes with the transplant extension

Need to have a long chat with Brendan about this.

14.4 Send changes via email with the patchbomb extension

Hrmm... maybe Brendan was out. Let's hope he gets back sometime soon.

Anyway the reason for my dissembling about Mercurial was that I was thinking about extending Diffly to work with Mercurial. In many respects the commands and their output are very similar. There would be some work to do, in particular it's annoying that Mercurial doesn't support the --targets options of Subversion. That could be an issue when checking in a lot of files.

Would anyone else be interesting in a Cocoa interface to browsing & committing changes with Mercurial?

07/09/2007 19:00 by Matt Mower | Permalink | comments:

A profession besmirched

It's a tough call but I believe that the decision of the American Psychological Association to recommend to their members to stay involved with government interogation and torture is wrong:

Col. Larry James, a psychologist at Guantanamo Bay speaking before the APA Council of Representatives, stated not once but twice, "If we remove psychologists from these facilities, people are going to die." This statement is frightening in its implication. It essentially argues that psychologists are the primary protectors of prisoners they stand between life and death, between these sites being defined as prison camps or even concentration camps as opposed to death camps. I find this chilling.

What kind of conditions are being created where these people will die without the protection of psychologists and how can psychologists possibly distance themselves enough from what is going on to know whether they are being used or not?

Rhea Farberman, APA Public Affairs, stated in Newsweek:

"We feel we can play a positive role in maintaining detainee welfare."

These people are being held, on shaky legal grounds and out of the reach of the due process of law (even to the extent with which that still exists in the US). It's not right.

Complicity is a slippery slope. You may join an endeavour with the best intentions believing in your own independence and powers of judgement. But I think that, isolated, and in the middle of a situation so out of the ordinary it may be impossible to keep your compass.

When you look at experiments done by Zimbardo and Milgram you see how easy it is for authority to corrupt anyone: you, me, Col. Larry James. The only way out is to stand together around a common ethical position.

This is what the APA should be doing. Setting an ethical standard that it is not alright for the government to hold people outside the law and torture them. It should be guiding it's members to say that's not right.

What their actual guidance seems to say to me is "Make sure they don't go so far as to kill anyone while they do their torturing." How does that help anyone? If government interrogators are going to far, what does a psychologist do? What can they do? They are already complicit in what has gone before. They've already tacitly accepted it and their role in it. They are compromised.

As someone who has considered joining the profession I feel strongly that the position of the APA is wrong and that assisting in detention in such facilities besmirches the profession.

04/09/2007 13:51 by Matt Mower | Permalink | comments:

You have 3 minutes to reach minimum safe distance

Euan reports that, me too social network, Quechup has spammed his address-book with invites shortly after he cancelled his account.

That's embarrassing but I am sure Euan's reputation will survive. In fact I am more happy about this outcome than the alternative (i.e. that Euan was really inviting me to this service). I dutifully went off to the site to see what kinds of excitement it was offering to my friends.

The phrase:

The social network sweeping the globe

swiftly followed by:

Join the FUN. Join Quechup

set off all kinds of "we got nuthin" warning alarms and the voice over the klaxxon was saying "You have 3 minutes to reach minimum safe distance." I scratched my head, closed the browser window, and got on with my day.

I guess I am pretty much done with joining SNS application in the hope that there might be something interesting on offer. If you want me to join your network and boost your user figures and adwords reach you are going to have to demonstrate, up front, what benefit I am getting from being a member of your site.

For example LibraryThing where I am a member and have about 450 books catalogued offers me good tools for looking things up, some interesting comparisons, reviews (I ought to get around to writing some), and so forth. I don't make much use of the community but it's there if I could be bothered to. LT feels a lot like WikiPedia to me: members are adding to the stock of knowledge about books and finding something out about themselves and others.

What does your service do?

04/09/2007 09:24 by Matt Mower | Permalink | comments:
More about: