Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; CBlacklist has a deprecated constructor in /home/saltybanana/www/blog/peel/scripts/sb_blacklist.php on line 6

Warning: session_start(): Cannot start session when headers already sent in /home/saltybanana/www/blog/peel/index.php on line 11

Warning: strpos(): needle is not a string or an integer in /home/saltybanana/www/blog/peel/index.php on line 49

Warning: count(): Parameter must be an array or an object that implements Countable in /home/saltybanana/www/blog/peel/scripts/sb_display.php on line 413
The Banana Peel
Ultima III, IV, & V on the Macintosh 
Tuesday, September 18, 2007, 5:43 AM
Do you remember the Ultima series of D&D-style video games?

I remember playing Ultima III, IV, and V in the 80s and 90s. They were awesome in their day. Many of my youthful late night hours were spent sitting in front of my Apple II+ hacking and slashing away.

Fast forward to 2007. I know for a few years now about a shareware re-creation of Ultima III that was actually sanctioned by Lord British. But then, I came across xu4, an open-source project that has made the original game run on modern operating systems. Furthermore, I also found Ultima V: Lazarus, another open-source project that has re-recreated the Ultima V game using the Dungeon Siege engine.

Now, while xu4 is faithful to the original, right down to the graphics and sound, Lazarus is not due to the use of a 3D engine as well as several other factors that you can read about here.

I don't have Dungeon Siege, so I cannot check it out. However, I was able to run xu4 on my PowerPC Mac w/ 10.4.10 installed without issues. And boy did it bring back memories!

Check it out for yoursevles!
  |  permalink   |   ( 2.9 / 1589 )

Is Microsoft's Antitrust Pains w/ the EU My Gain? 
Tuesday, September 18, 2007, 4:02 AM
I've been following Microsoft's dealings w/ the EU antitrust courts for a while now, and where the company seemed to have prevailed in the U.S., it is running into a much tougher stance in Europe.

While a part of me wants to shout w/ glee and say that Microsoft is getting its due in a different court system, I do wonder, though, if the Europeans have a bias against American companies in general.

I mean, it's not just Microsoft that's having issues, but Apple also, and maybe others I have not read about....

Your thoughts?
  |  permalink   |   ( 3 / 1657 )

No ICloenable<T> in .NET Framework 2.0 
Tuesday, September 11, 2007, 4:28 AM
I just realized that I needed to implement the ICloneable interface in one of the classes I wrote for work, only to find out that there is no generic-enabled ICloneable<T> equivalent in .NET Framework 2.0. So I whipped one up for myself.

It's such a useful little interface, wonder why the .NET Framework architects didn't think to include it.

I looked into the documentation for Framework 3.0, and it appears to absent there as well. Hmm....
  |  permalink   |   ( 3.1 / 1519 )

Vim, My New Ruby on Rails Editor 
Tuesday, September 11, 2007, 3:15 AM
Back when I computed on green-screen terminals running VT100 emulation connected via telnet to Unix systems, just about everyone used vi. I think some people used emacs, but I liked vi's simplicity and usability.

Now, some years later, I have bought and drank the IDE kool-aid. I use Apple's Xcode to support Freeciv on the Mac, Microsoft's Visual Studio 2005 to support my day job as a C#/ASP.NET developer, and Eclipse + Aptana to dabble in Ruby on Rails in my spare time.

However, I finally got fed up with Eclipse's speed on my not-so-recent Mac (alright, it's actually ancient by computing standards) that serves three masters: myself and two other family members.

So I took inventory of the features I relied on when I used Eclipse, and I went about searching for a speedier and equally priced replacement. Lo and behold, I came cross the Vim editor, which is not only a much improved version of the old vi editor I, but it also supports a large array of scripts that can be easily downloaded and installed to enhance and extend vim.

After some experimentation, I settled on the following setup:
  • - GUI version of vim, installed via MacPorts
  • vim - Command-line version, installed via MacPorts
  • rails.vim - Ruby on Rails: easy file navigation, enhanced syntax highlighting, and more
  • genutils.vim - Enables extra functionality in rails.vim
  • vividchalk.vim - Color scheme strangely reminiscent of Vibrant Ink for a certain OS X editor
The following table gives you an idea of the features in Eclipse that I relied on, and how I am coping with vim:

Feature Eclipse Vim
Syntax highlighting Yes Yes
Auto-insertion of keywords, symbols, & markup tags Yes No
Hierarchical view of Rails application directory structure Yes No, but I can get there using the Finder or Terminal
Integration with Subversion Yes Yes, with the use of another script, but I found it clumsy, so I reverted to using svn via the command-line
Class outline Yes No, but a quick text search suffices for now

As you can see, I am doing pretty well. For a little extra typing, I gain development speed plus a much smaller CPU footprint. I'll buy that for ... hey, it's free!

  |  permalink   |   ( 3 / 886 )

Recursive Dependencies in MacPorts 
Wednesday, May 2, 2007, 11:14 PM
Someone posted a query to the MacPorts user maiing list asking why the bittorrent port requires XFree86 or Apple's X11 to build. It is a reasonable question, since at first glance bittorrent doesn't seem to need it:
% port deps bittorrent
bittorrent has library dependencies on:
A second glance says the same as well:
% port deps py-wxpython
py-wxpython has library dependencies on:
% port deps py-twisted
py-twisted has library dependencies on:
% port deps py-crypto
py-crypto has library dependencies on:
I ran into a similar problem in my use of MacPorts, where I needed to determine all the dependencies a port has. So I wrote a Python script,, which outputs the following (emphasis added):
% bittorrent
+- bittorrent
+- (L) py-wxpython
| +- (L) python24
| +- (L) wxWidgets
| +- (L) jpeg
| +- (L) tiff
| | +- (L) jpeg
| | +- (L) zlib
| +- (L) libpng
| | +- (L) zlib
| +- (L) zlib
| +- (L) libiconv
| | +- (B) gperf
| +- (L) expat
| +- (L) libsdl
| | +- (L) XFree86
| | +- (B) perl5.8
| +- (L) libsdl_mixer
| +- (L) libsdl
| | +- (L) XFree86
| | +- (B) perl5.8
| +- (L) smpeg
| | +- (L) libsdl
| | +- (L) XFree86
| | +- (B) perl5.8
| +- (L) libvorbis
| | +- (L) libogg
| +- (L) libogg
| +- (L) libmikmod
+- (L) py-twisted
| +- (L) python24
| +- (L) py-zopeinterface
| +- (L) python24
+- (L) py-crypto
+- (L) python24
This has saved me from needing to repeatedly execute the port deps command by hand or going through Portfiles to hunt down dependencies on many occasions.

Of course, my little handy Python script only provides a skin-deep explanation of why X11 is needed by saying "because the Portfile says so", which isn't all that insightful. A slightly better explanation can be found here. Basically, bittorrent has a dependency on libsdl, which will not compile unless X11 is present.

Now why does libsdl need X11 to build? I don't know the answer to this one. Do you?
  |  permalink   |   ( 3 / 888 )