I am now looking for a new job and am no longer with Sigma Electronics.

My first preference would be a position writing software for post production or visual effects at either a software company or a post production or visual effects company.

Other than that, I am also interested in positions or contract work developing embedded systems, graphics applications, or web applications.

I just thought I would throw this out in case anyone can point me towards any leads.

Thank you.

A few Solaris 10 notes

Actually, these are primarily Solaris 11 notes, but they will probably all apply to Solaris 10 when the next release comes out, which I understand to be scheduled for sometime later this month.

First, recently a lot of SCSI hard drives I’ve gotten have been a little mysterious about being used by the Solaris installer and have looked a little odd in format. It turns out that they’ve been EFI labeled drives. Since Solaris understands EFI labelling, it doesn’t just suggest you relabel the drive and be done with it. However, despite Solaris understanding EFI, it refuses to boot or install from EFI on SPARC hardware. The trick has been to get a prompt, then use “format -e”. Then when you choose the label command, it will ask you about a SMI or a EFI label. Choose the SMI option. If you are going to choose to do a ZFS root, then the partitioning doesn’t matter.

After fixing the disk, you are ready to install. The ZFS boot option is only offered on very new copies of Solaris (2008/05 maybe, Solaris Express build 98 or maybe slightly older definately). However, you only get the choice from the text installer. If you are installing over the serial console, then no problem, you get this by default. However, from a graphical console, you will need to use a boot parameter. Thus, you boot command will look something like this: “boot cdrom – text” or “boot net – text”. Using – nowin instead may be faster.

When you get to the ZFS option, just choose it and away you go. You can choose to name the pool something other than rpool, but there is no need to.

If you want a mirrored root, it is easy to add the second disk later. First, when you install to a ZFS root, it repartitions the root drive and uses a slice (parition) instead of the whole disk (even though the slice fills the entire disk). You will need to partition the second disk identically. Just look at the partition map if the first disk in format, then copy it over to the second disk. Then from a root prompt, type something like “zpool attach rpool c0t0d0s0 c0t1d0s0”, assuming that c0t0d0 and c0t1d0 are the two disks in question (which is a good guess on a lot of two disk Sun systems). The mirror is now made, but it may take awhile to sync up in the background, and the machine may run slowly until it is done. Check the progress with “zpool status”.

To be able to do a fallback boot to the second disk will require rebooting and going back out to the OpenBoot ok prompt. But before that, you will need to make the second disk bootable with this command: “installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c0t1d0s0”
Finally, before you head to the OK prompt, you will want to find the openboot device paths for each disk. Do “ls -l /dev/dsk/c0t0d0s0 /dev/dsk/c0t1d0s0”. This will show you something like:

lrwxrwxrwx 1 root root 41 Oct 1 21:02 /dev/dsk/c0t0d0s0 -> ../../devices/pci@1f,4000/scsi@3/sd@0,0:a
lrwxrwxrwx 1 root root 41 Oct 1 22:57 /dev/dsk/c0t1d0s0 -> ../../devices/pci@1f,4000/scsi@3/sd@1,0:a

Write down the target of the symlinks, the part after the ../../devices, changing the sd’s to disk’s, and get rid of the :a’s.

Now reboot and Stop-A to an ok prompt. If your second disks isn’t where the second disk normally will be, you will need to create a devalias for it. Assuming that you used the c0t0d0 and c0t1d0, then you can just do this:
setenv boot-device disk disk2

If you need to change the disk and disk2 aliases (or want to create new names), use the nvalias command from the ok prompt. See the man page for more detailed operation though.

Flash on Ubuntu 8.04 AMD64

I run Ubuntu 8.04 AM64 on a laptop at work.  I’ve been doing this since Ubuntu 6.10.  This has not been a smooth ride. Ubuntu 6.10 i386 on my old laptop (I only “upgraded” because the old one was stolen from the plane on a busines trip) worked flawlessly for me.  Things have gotten a bit better as upgrades came out, but I still can’t use the wireless  (BCM43 device of some sort, no native driver, ndiswrapper won’t play nice), for instance.

My first and biggest tip is to stay away from 64bit linux on the desktop or laptop, unless you know why you need it.  That is very unlikely to be the case on laptops.

Moving on, for the longest time Flash would not work.  When I tried to configure the nswrapper system, it would start (sometimes) then crash the plugin.  Maybe I could view one flash website before needing to restart, maybe no flash web sites.  I finally got Flash worked out, and that is the main point of this post.

The trick to make flash work was to first install the 32bit version of FF3 from the Mozilla web site.  Put it in a new location (I went with /usr/local/firefox), and put that location in your path before /usr/bin.  For this to run, you will need ia32-libs installed.

Step 2 then is to go to the Adobe web and download the Flash 9 .tar.gz.  Don’t try to use the autodiscovery/autoinstall thing that Firefox will offer to do.  Extract the Flash 9 installer to a temporary directory, then copy the file from the temporary directory to the plugins directory (/usr/local/firefox/plugins for me since that is where extracted the 32 bit firefox from the mozilla web site).  Now, when you restart firefox, you will be using the 32bit only Flash with a 32bit version of firefox, and everything will work happily.

I think that in general, Linux doesn’t handle the 64bit transition as well as Solaris or Irix did.  As far as I can tell, Flash is 32 bit only on all platforms.  However on Solaris and Irix, 32bit versions of firefox or Mozilla are supplied, even though they are running on 64bit hardware.  Also, there seems to be a lot more of defaulting to 32bit unless specified otherwise, which is often reasonable.  And the culter seems to do a better job with supplying both 32bit and 64bit versions of libraries.

Vanilla Extract

I made vanilla extract.  Since I just followed the directions, here is the link.  I can’t try it for 4 weeks, and it won’t really be done for six months.  I hope it doesn’t come out weak.  I dropped a bit of the seeds on the floor and decided to trash what was on the floor rather than risk tainting the rest.

I got the beans from my brother in law.  I used Smirnoff as pictured.

Pesto Tilapia on Tomato Risotto with Roast Asparagus

I made enough for 4 this time because I wanted left overs to pack for lunch.

The tilapia was 1/2 pound rubbed with pesto from a squeeze tube, then fried. I didn’t love the flavor, and if I were to try fish like this again, I’d pick a different white fish, possibly haddock. Otherwise I might go with pesto chicken.

The risotto was very well like though. The main difference (from last time) was what I used for a liquid. From memory:

  • 1 cup tomato sauce (1 can)
  • 1/2cup wine.
  • 2.5 cups chicken stock.

Also, before I put the rice in butter, I first put 1/2 onion and 2 cloves garlic, both  minced, in the pan and softened them in butter.  This would be a fairly typical thing to do, but when I posted about risotto last time, I had been out of onions and thus didn’t include it.

After coating the rice with butter, continue preparing normally.  That means add a little liquid, then stir till it is absorbed, and repeat.  Keep doing this until it has a texture you like, probably about 20 minutes, and you probably won’t use all the broth you made.  Near the end add 2 Tbps of tomato paste.  Then add parmesan to taste.

About ReferURL is a link shorting service I created. You paste in a long URL (say to an eBay auction or newpaper article) and it gives you a short URL to use ( You also have the option of picking an alias for a referurl, something like Also, a common usage pattern is a bookmarklet that you drag from the page to the toolbar. Whenever you click on the bookmarklet, it runs a bit of javascript code that submits the page you are currently looking at to ReferURL.

URL shortening services are great for emailing URLs to friends. Recently they are even more important for posting URLs on twitter (with only 140 characters, every character saved counts).

A service that does similar things called has been around for a long time. Personally, I do not like I think it is ugly. There is another reason I remember disliking them, but it is possible that I have two services confused, so I won’t mention it. They also didn’t offer aliases when I wrote ReferURL.

I used to use another service, but it broke repeatedly, then when it had several months of downtime I decided to write my own. That service also didn’t support aliases.

At this point when I look around the new services that are similar, I see three things that may be better than ReferURL.

  1. Some services are prettier (of course, extra graphics means slower load times).
  2. Some services put the new shorter url into your clipboard buffer so that you don’t have to copy it yourself. I would love to add this, but as far as I can tell it is implemented with Flash, which I don’t own.
  3. With twitter, every character counts. There are now some services with names much shorter than is one character shorter. is six characters shorter. If any one has an good idea for a name that is shorter than, I would love to steal it. In my own twitter usage, I haven’t had trouble with the length of ReferURL yet though.

Anyway, those are my comments on the creation of For the time being, I plan to keep looking for ways to improve it and will keep working on it.

Also, I will be releasing the code for people who want to run/write their own service in the future. I had previously released some code, but now that it is several months old, I took it down until I had time to clean the current code for re-release. If someone were to email me asking about that, it would probably get me to do it sooner.  It is a Python project build on mod_python and PostgreSQL.

SunPCI on Solaris 9

I just imported this page because I don’t want to forget the information. If you don’t know why you need to read this, then feel free to ignore it.


The SunPCI is a 400mhz AMD k62 card for running Windows in a PCI
Sun. Never versions of the card are the SunPCI-II and the SunPCI-III,
both of which use higher speed Celerons.


The original SunPCI was dropped after version 1.3 of the SunPCI
software (both 1.3 and newer versions are obtainable from Sun’s web
site, registration required). Version 1.3 of the SunPCI software isn’t
supported on Solaris’ newer than 8. Thus this page on making it work on
Solaris 9.

I doubt that it is possible to use this card with Solaris 10.

Important Requirement (that wasn’t immediately obvious to me)

One requirement that the software has is that it can only display on
the Sun X server. This means that you need to either need a framebuffer
in the same machine as the SunPCI, or you need to be remotely displaying
the software on another Solaris machine running the Sun X server.
Thankfully, framebuffers for almost every machine are rather cheap.

Presumably if you still want remote display on a different X server
(say, Xsgi, which is what I want), you could use VNC or Remote Desktop
on the Windows system. You still would need a graphical console to
run the SunPCI, but this could be a case of attaching a monitor to a
Sun in the basement to start the software, then using RDesktop from
your office to operate the Windows session.

When I started trying to set this up, I had only headless Sun machines, and I thought I could run this on one of them.  Oops.


Install the software as normal. It will fail trying to run the
postinstall script, complaining about “/etc/ not updated
correctly”. The first thing to do is to:

  • cd /opt/SUNWspci/drivers/solaris
  • ln -s /opt/SUNWspci/drivers/solaris/sunpcidrv.280 sunpcidrv.290
  • ln -s /opt/SUNWspci/drivers/solaris/sunpcidrv.280.64 sunpcidrv.290.64

You will also need to make sure your OBP is new enough. I don’t know
what is required exactly. Perhaps 3.11. 3.9 seems to be rather common
and is too old. 3.27 seems to be the latest, and likely last version.
New versions can be downloaded from sunsolve.

Additional notes

Google Groups article with some additional notes that I didn’t require.

Also, from a german site, I got this:

d) If SunPCi still gives you trouble, edit:
and add...

I haven’t needed it either.

Poached Egg on Risotto with Spinach and Bacon

The goal was to have something more than frozen pizza, or reheated spaghetti and meatballs, using only stuff on hand.  Using up the spinache before it went bad was a nice benefit.  I bought a lot of vegatables at the beginning of the week and haven’t been using them as quickly as planned.  Now, I still need to use up the beans (uncooked, from the pack bought for the maple salmon) in the near future.

Once again, I cooked after dark.  This time it was indoors, but natural sun light would have helped the pictures I think.  I ended up not using any but one final.


  • 3/4 cups chicken broth or stock
  • 1/4 cup dry white wine
  • 1 cup parmesan broth
  • 1 tablespoons butter
  • 1/2 cups Arborio Rice
  • wilted spinach
  • crumbled bacon
  • 4 eggs
  • water
  • vinegar
  • 2 tablespoons grated parmesan

Note on order:

Both poached eggs and risotto are best served immediately.  I feel
that is slightly more important for the eggs, so I start the risotto
first, then do the eggs about 10 minutes into the stirring in the
liquid stage of the risotto.  Finished eggs are store in a covered
bowl in the microwave to preserve their warth.  Since the risotto
should finish first, I leave it covered off the burner to keep it warn.

The parmesan broth:

Boil 1 cup water.  Add parmesan rind and a few pepper corns, simmer
for a few minutes.  Strain.

To wilt the spinach, I use a minimal amount of olive oil in a pan,
then add the spinach and toss some salt and pepper on top.


Contrary to popular reports, you don’t have to stir constantly.  You
do need to stir alot though, and you also need to watch constantly.

Mix liquids together and warm them.

In a heavy sauce pan, melt butter.  Add the rice, add stir with spoon
until grains are coated.  At this point you will start adding liquid
to the rice a few tablespoons at a time.  After each addition, keep
stirring the rice until the liquid is completely absorbed.  Expect
this process to take about 18 minutes.  Stop when rice is al-dente.  I
like the risotto to be soft enough that they don’t resist biting, but
not so soft that you can’t feel the grains in your mouth.

Salt and pepper to taste.

When the risotto is complete, stir in the spinach and bacon.

Poached Egg (If you know how, skip this):

First, you need a pan that will allow you to have 5 inches of water
while staying at least 1.5 inches from the top of the pan.  Fill the
pan so that you have 5 inches of water.  Add a tablespoon of white
vinegar.  Bring the water to a simmer (200 degrees).

Spin the water with a ladle handle.  Drop an egg in the center.  Leave
it for 3-4 minutes.  It will look messy until you remove the egg.  You
might consider watching a few tutorial videos on youtube.  That’s what
I had to do.  No amount of reading explanations made me realize that I
just needed to wait long enough before removing the egg, then trust
that it would look OK when served.

Also, be prepared to waste a few eggs practicing.  They aren’t that


Put risotto in individual bowls, then place eggs on top and sprinkle
with a dash of salt, parmesan, and ground pepper.

Must have Emacs Mode

If you ever edit javascript code, the only emacs mode to consider is Steve Yegge’s JS2 mode.  The official page for it is here.  The annoucement page is here.  This javascript mode is an example of what more modes should aspire to.  It parses your buffer into a javascript AST and uses that for syntax highlighting, and also to check for syntactic correctness, helping to prevent you from having bugs caused by typos.  This is a lot faster than having to load the code into a web browser to find out that you missed a ‘;’.

It also provides Javascript code navigation.  Some other modes have this, like python mode (but not C-mode, at least not by default), but I wish all modes had it.

I wish someone would copy this strategy for a new C mode or Python mode.

Making Soy Maple Salmon with Sauted Green Beans

I had planned to make teriyaki shark tonight because shark was advertised on sale.  I bought the beans yesterday.  When I tried to buy the shark today, I found that they were sold out for the day (but might have more tomorrow, even though technically this was yesterday based on what the clock reads), so I bought Salmon instead since I didn’t want to give up plans of having fish.

I then proceeded to cook and attempt to take pictures after dark.  And this was actually a somewhat early time.  I had to pick my car up from the shop, so I used that as an excuse to leave work early.

For the recipe, look here.

Final dish, plated on our picnic table.

Green beans, blanched and coated in oil and soy sauce.

Salmon, salted and peppered.

Green beans on the side burner of my grill.  Deb was trying to capture dramatic flames from the oil spritzing over the side as I shook the pan.

Salmon on the upper rack of the grill.

Acurately predicted 20 out of the last 4 Zebra stampedes.