Java 6 for 32-bit Macs…finally?

Posted in Java, Mac by Dan on August 25th, 2009

Apple’s OS X 10.6, code-named Snow Leopard, is released on Friday.  There is some suggestion that this will finally deliver Java 6 for 32-bit Intel Macs (more than two-and-a-half years after it debuted on other platforms). The news reaches me via James at DZone, who cites Axel’s blog, which in turn links to this 2-month-old post as evidence. There’s no primary source identified and, given Apple’s legendary pre-release silence, this is unlikely to be confirmed until some Java developer with a 32-bit Mac actually tries the Snow Leopard upgrade.

At present there are two not-entirely-satisfactory options for Java 6 development on 32-bit Mac hardware. The first is to use SoyLatte, which is fine for non-GUI work but only supports Swing under X11. The other option is to run the JVM under another OS via the magic of Parallels or VirtualBox.

Assuming that this rumour is true (and I remain sceptical), the key question is will this update be made available to Tiger and Leopard users via Software Update, or is an OS upgrade necessary? The Leopard-to-Snow-Leopard upgrade is reasonably priced but Apple’s site implies that if you are upgrading from an earlier version your only option is the more expensive Mac Box Set (which also includes the latest versions of iLife and iWork).

UPDATE (28th August): It seems that the Snow Leopard “upgrade” is actually a full version of the Operating System and can be used to upgrade machines running Tiger. However, to do so might be a breach of the End User Licence Agreement.

UPDATE (29th August): I asked on Stack Overflow whether anybody could confirm the presence of Java 6 on 32-bit Macs.  The question got bounced to the new Super User site, but I did get a couple of positive responses.  So it seems that yes, Java 6 is finally available to owners of 32-bit Macs, but only if you upgrade to Snow Leopard.

Installing GHC 6.10.1 on OS X 10.4

Posted in Haskell, Mac by Dan on November 21st, 2008

Every time I need/decide to upgrade GHC, it seems there’s a different set of hoops I need to jump through to get it working on OS X 10.4 (Tiger). I don’t have OS X 10.5 (Leopard) and I don’t intend to buy it, so unfortunately I don’t get to use the nice-and-simple installer. I’ve decided to write down the exact steps that I’m taking this time so that I have a reference if I need to do it again (or if somebody else needs to do the same).

I’m pretty certain that this isn’t the way I did it last time. I seem to recall manually building the whole thing from a source tarball and having to resolve the dependencies myself. Then again, that’s probably why I have to upgrade now – my 6.8.2 install appears to be broken.

MacPorts and Xcode

The GHC site recommends that Tiger users use MacPorts, so that’s what I’m doing. I would have used fink, because I already have that set-up, but they don’t have a recent GHC build available for Tiger (6.6.2 is relatively ancient).

First I tried to install MacPorts without upgrading Xcode. It hung. So then I did what I had been told (and had ignored) and downloaded the latest version of Xcode from the Apple Developer Connection. For Tiger the latest version is 2.5. 3.0 and above are for Leopard only. At 903mb the download is not exactly slimline. After running the Xcode installer the MacPorts installer worked properly, which was nice.

Installing GHC from MacPorts

After that, it’s supposed to be easy:

$ sudo port install ghc
sudo: port: command not found

MacPorts installs to /opt/local and I didn’t have /opt/local/bin on the path (it seems that the “postflight script” mentioned here didn’t run or didn’t work). No problem:

$ sudo /opt/local/bin/port install ghc

This is meant to download, build and install the latest GHC and all its dependenices (GMP, yet another version of Perl, etc.).  After some time had elapsed my first attempt failed with this helpful message:

Error: Status 1 encountered during processing.

The GCC output seemed to suggest that it couldn’t find the GMP library that MacPorts had just installed. Google revealed this to be a bug in the Portfile. Somebody else had run into the same problem earlier the same day and the maintainer was on the case. After leaving it for a day, the bug is now fixed and I tried again. This time the installation proceeded without problems, although it took a fecking long time to complete.

Paths and Symlinks

Once the install was done, I removed all traces of the previous 6.8.2 install (which was under /usr/local) and made sure that /opt/local/bin was on my path (in ~/.bash_login).

$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 6.10.1

Excellent. The thing that prompted me to upgrade was that Haddock wasn’t working for me since I upgraded it to the latest version.  So that was the next thing to check:

$ ./setup.hs haddock
setup.hs: haddock version >=0.6 is required but it could not be found.

It seems that for this particular build of GHC the Haddock executable is called haddock-ghc, rather than haddock as in 6.8.2. Cabal is still looking for haddock though, so I added a symlink and everything was fine again:

$ sudo ln -s /opt/local/bin/haddock-ghc /opt/local/bin/haddock

I think I now have a working GHC 6.10.1 installation.

Swing Applications on OS X

Posted in Java, Mac by Dan on November 6th, 2008

This post is mostly for my future reference as I keep forgetting this information and have to search for it each time. These links demonstrate the little tweaks that you can make to your Swing applications to improve the user experience under OS X.

Battling iTunes 8

Posted in Mac, The Internet by Dan on September 11th, 2008

Frustrated by iTunes…

Apple recently dumped iTunes 8 on us, quietly removing a couple of configuration options in the process.  The new iTunes, with its not-so-clever “Genius” function, seems to be a not very subtle attempt to sell more music through the iTunes Music Store.

In iTunes 7 you could hide the “Genre” column in the 3-column browser pane and instead show just the “Artist” and “Album” columns. In iTunes 8, “Genre” is back and there is no way to get rid of it from the preferences. Likewise, the annoying arrow links to the iTunes Music store, which could previously be turned off, are back.

Fortunately, on the Mac at least, the old preferences can still be tweaked, just not from the iTunes GUI. You have to run the following commands from Terminal (thanks to Mac OS X Hints for the information):

defaults write show-genre-when-browsing -bool FALSE
defaults write show-store-arrow-links -bool FALSE

…impressed by BBC Radio Labs

While on the subject of iTunes, Matthew Wood at the BBC’s Radio Labs has come up with a way to access the BBC’s on-demand radio content, and associated programme information, from iTunes.

Unfortunately, the BBC’s live streaming is still not available in iTunes because it uses RealPlayer. It would be great to have a single, useful front end for all Internet radio stations rather than having different applications and web players for different broadcasters.

On the plus side, I like the new Radio Pop site that the Radio Labs team have built using Ruby on Rails. The name’s a bit misleading – it sounds like it’s a new pop music radio station. It’s actually a social radio site. A bit like but for BBC Radio (and potentially other radio stations in the future). Perhaps they can hook it up to the real so that your radio listening is combined with your CD/MP3 listening? In fact, they already have something along those lines. They also already automatically scrobble all tracks broadcast (see the BBC 6Music page on for an example).

I’ve been following the Radio Labs blog for a while now. It seems like a great place to work. Lots of interesting experimental projects and cutting-edge technology.

Developing with SoyLatte – First Impressions

Posted in Java, Mac by Dan on December 29th, 2007

Apple recently released an updated preview of Java 6, but only for 64-bit Intel Macs running Leopard. With the company remaining stubbornly silent on its future Java plans, nobody knows whether 32-bit Macs or the Tiger operating system will ever be supported.

For those developers who don’t want to be forced to upgrade to Leopard or to discard their perfectly adequate CoreDuo Macs, there is an alternative to playing Apple’s waiting game thanks to the efforts of Landon Fuller and his SoyLatte project.

Getting Started

SoyLatte is an X11-based port of the FreeBSD patchset for Java 6. This gives you a non-Apple JDK solution right now and on your terms (no hardware or software upgrade required). The only thing that SoyLatte lacks is Apple’s polished native look-and-feel for Swing and AWT applications (there is no seamless integration with the OS X desktop). This is because it uses X11 for display purposes (in the same way that the Mac port of OpenOffice works). If you are doing non-GUI development none of this will matter to you.

Download and installation of SoyLatte is straightforward. It’s just an archive, containing the pre-built JDK binaries, that can be dropped anywhere you please (mine is under /usr/local). Change your environment variables (JAVA_HOME, PATH, etc.) as appropriate and you are ready to go for command-line development.


My reason for requiring Java 6 was to build and hack Hudson. Hudson is Kohsuke Kawaguchi‘s open source, extensible continuous integration server. Hudson will run on Java 5 but it requires Java 6 for development. To make Mac-based development on Hudson feasible I would have to get SoyLatte to play nicely with IntelliJ IDEA and Maven.

Integrating SoyLatte with IDEA was a piece of cake. It’s just a matter of adding a new JDK in the settings dialog (just point it at your installation directory). I did have to go back and manually add the SoyLatte JRE libs to the JDK classpath as these were not picked up automatically (resulting in the IDE not being able to find classes like String and ArrayList), but once that was done everything worked perfectly. Crucially, even though I was using Java 6 classes and tools, I was still running the actual IDE using Apple’s Java 5, so I didn’t have to use X11.

Running Maven from the command line presents no new problems. It will just use whichever JDK JAVA_HOME points to. Unfortunately the IDEA Maven plugin uses whatever the IDE is using and doesn’t allow this to be changed. This is in contrast to IDEA’s Ant support, which allows the JDK to be specified explicitly. The inconsistency is probably because the Ant plugin was written by JetBrains whereas the Maven plugin is a community contribution. Running IDEA itself under SoyLatte would address this issue but, for me at least, using Maven from a terminal is preferable to running IDEA under X11.

Apple DOESN’T release Java 6

Posted in Java, Mac by Dan on December 14th, 2007

Looks like we jumped the gun a bit on that one. It’s actually “Release 6” of JavaSE 5.0 (updates it from 1.5.0_07 to 1.5.0_13). I guess we’re still waiting…

At least I got my other release announcement right. Watchmaker 0.4.3 is out, and you don’t need that new-fangled Java 6 nonsense to use it either…

Apple releases Java 6

Posted in Java, Mac by Dan on December 14th, 2007

Many thanks to Charles Ditzel for sharing this information. I’m installing now. Now I’ll be able to hack on Hudson (which requires Java 6 to build, but not to run) without needing to use my old and slow Linux laptop.

UPDATE: I was wrong.

Life-Saving Tip for MacMini Owners

Posted in Hardware, Mac by Dan on November 4th, 2006

Just installed a Microsoft wireless keyboard and mouse combo on my Mac Mini. In true Microsoft style you have to reboot to complete the install. What it doesn’t mention is that if you don’t remove the CD-ROM the machine will never boot again. Since, unlike most other home computers, the Mac Mini has no mechanical mechanism for ejecting a CD in emergency situations (short of dismantling the machine with a screwdriver). It looked like I was in a bit of a fix.

Fortunately, I was able to access the web on another machine and discovered this vital piece of information: if you hold down a mouse button while the Mac boots, it will eject the disc in its drive. This may be common knowledge among hard-core Mac people but it was new to me. So my soon-to-be-discarded Logitech mouse was able to come to the rescue and everybody lived happily ever after.