Structure and Interpretation of Computer Programmers

I make it easier and faster for you to write high-quality software.

Wednesday, September 20, 2006


You can’t use a java.awt.Color in WebObjects, because to use AWT at all on OS X requires connection to the WindowServer.  And unless you’re mad, you probably aren’t running your WOA as root.  This means I can’t do things like, ooh, I don’t know, making a PDF table have a white border instead of a black one.

posted by Graham Lee at 14:58  

Friday, September 15, 2006


Strange things can happen when I get bored.  There’s a great little dashboard widget called WikityWidget, which lets you organise notes like a wiki.  Well, I thought, no point in only having my notes on one computer, why not scrape the wikits out of WW and put them online?

You may be interested in some source code.

posted by Graham Lee at 01:15  

Wednesday, September 13, 2006

Parallels may, in fact, be completely dumb

tyr:/Library/Parallels root# ls -l
total 16
-rw-rw-rw- 1 root wheel 40 Sep 12 15:52 .dhcp.en2
-rw-rw-rw- 1 root wheel 0 Jul 4 17:10 .dhcpd_configuration
-rw-rw-rw- 1 root wheel 0 Jul 4 17:10 .parallels_common_options
-rw-rw-rw- 1 root wheel 100 Jul 4 22:44 .parallels_license_2.2

posted by Graham Lee at 14:55  

Sunday, September 10, 2006

switching CPUs

I can waste a lot of time if an interesting question gets posed. The most recent culprit was Chris Ridd in uk.comp.sys.mac, wondering aloud if threads ever got shuttled between CPUs on a Mac. Here we go…

It certainly looks like the conditions for doing this through the API can never be met on a real Mac running xnu. All you can do is assign a thread or a task to a processor set, but not a single processor. Unless that processor happens to be the only member of a processor set. Thing is, on xnu there is only one processor set, which encompasses all of the processors. So there’s no way to force your threads onto a particular processor in Mac OS X. The lack of multiple processor sets means that you couldn’t have a box with, for instance, both a G5 and a Xeon running a single kernel, which is kindof sad in a way. It won’t get missed, though.

It doesn’t even look like there’s an API to work out which CPU you’re currently on. What you can do is get the port for the default processor set (the only processor set), then by manually furtling with the structs you can iterate through the CPUs (or you can ask your own mach_host_port for an array of the CPU ports). For each CPU you can get the thread queue, which you could compare with your own thread to see if it’s the same. That’d be tedious, but would get the required information. Once there though, I don’t see any way for the thread to move between any queues except the idle and run queues on its ‘native’ processor; so I think the answer is that no thread ever migrates between CPUs. I may be wrong, and am happy to entertain any information to the contrary.

Unsurprisingly with no API to do what I want, little useful code came out of this exercise. I found out how many cpus the system has, but that’s it really.

Update 2006-09-10 16:25 GMT – I hate this not knowing, so I decided to play the Ask Amit card ;-).

posted by Graham Lee at 15:50  

Monday, September 4, 2006


I’ve been trying to reply to bbum’s post, firstly my comments were removed as spam, then he approved them by hand, now they’re gone again. So here they are again.

I wrote [in this blog] much about my experiences getting OPENSTEP/Parallels working. Networking’s fine but slow, graphics is good, mouse is a bit jumpy. I was talking at WWDC with people who say that Microsoft VPC no longer supports OPENSTEP/Mach. You definitely can’t boot native on a new Intel Mac, as there’s no SATA driver (and no way to use a boot floppy).

BTW, the floppy images are available over HTTP from Apple: OPENSTEP floppyimages

posted by Graham Lee at 11:58  

Sunday, September 3, 2006

ObjC FAQ update

I spent a lot of today grokking Distributed Objects to write a FAQ entry on it; link above goes to the new entry. Of course, any comments on it or the rest of the FAQ are welcome…

posted by Graham Lee at 19:51  

Powered by WordPress