© 2011 jonathan lung

real world stuff

i have been known to have the occasional lapse of judgement and make a foray into the real world or do things that real people see. Fortunately, this is rare and the instances can be enumerated.

hot yam!
i volunteer at the Hot Yam! They are a non-profit, volunteer-based organization that serves all vegan, mostly local, and mostly organic lunches once a week.
toronto democamp 5: kids help phone
i presented the modifications made by Yang Luk, Laura MacDougall, Yimei Miao, Andrew Reynolds, and myself on a modified version of JForum for Kids Help Phone at Toronto DemoCamp 5.
toronto democamp 10: pbj - web 0.1
Being inspired by a demo of some web frameworks at Toronto DemoCamp 5, i set about designing a framework that allows developers in different programming languages to write web applications as though they are writing desktop applications. Being somewhat miffed by all the "web 2.0" applications and wanting to bring back the "scruffy" feel of older DemoCamps, i presented my framework, PBJ, at the first Toronto DemoCamp with an available presentation slot.
ddj review of ending spam
While visiting Professor Greg Wilson's office one wintry day, i noticed a book called Ending Spam. i was informed that if i wanted to read that copy, i would have to write a review for Dr. Dobb's Journal. Some days later, i did it. Some of the ideas from spam filtering and the natural language computing course i took in January 2005 eventually made their way into my NSERC project, EDGAR.
headshots: click
Sometimes i grab candids of friends or at events where i'm a photographer.
Do these even count as forays into the real world? Photos from some conferences i've attended. i may also have a flickr account.

other interests

None. But don't believe everything you read (doo doo doo ♪ ♫).

code snippets

Here are code snippets that i've written... more will hopefully appear here over time. It would be appreciated if you dropped me a line if you find any of these useful. i should probably include a disclaimer of some sort lest i be be held responsible for a something unpleasant. So here it is: Use at your own risk and with great power comes great responsibility, so please don't use this code for evil.


Linked List

OCLinkedList is a linked list implementation i put together since one doesn't appear to be part of Cocoa. This should be handy for implementing a queue (e.g. using addObject: and removeFirstObject:). Cocoa already includes NSArray, which is implemented as a circular buffer, but that requires tinkering to get queues of (more or less) unbounded length. Writing a queue providing O(1) operations on the head and tail thus requires a bit more work using only that which is provided with Cocoa. While this implementation is missing many amenities of normal Cocoa collections, it should be sufficient for many purposes. Unlike normal Cocoa collections, this class also supports the addition of nil objects to the list. The testing framework included isn't well documented, though i think it's still reasonably thorough.

Test framework


Source code


NSThread Joining

NSThreadWaiter is a category that extends the functionality of NSThread to include join-like abilities. This may be useful for waiting for worker threads to complete.

Source code


Example usage code



cool tools

version control systems

A version control system like git, Mercurial, and subversion is a must-have tool. Hooks, allowing things like error checking before allowing versions to be saved, seal the deal. Not only that, but the price is right! This site is automatically updated when new versions of it are committed to a subversion repository through the use of hooks. I use monotone which suits me nicely.

Audience: Pretty much everyone!


LaTeX, a typesetting system, is handy tool for writing up assignments. Not only does it produce consistent output to many formats; can write equations with more symbols than you can shake three fists at; is free; makes using citations easy (if you use a Mac, try out BibDesk); and supports macros to save typing/increase consistency, its output is pretty! Now if only it were able to support more fancy HTML output. Oh well. That's what Perl, Perligata, PHP, and Python™ are for.

Audience: Anyone who writes papers or formulae in electronic form.


JavaScript. Face it. Even if you don't consider yourself a geek, there are a few times where a bit of chicken blood would be like a spinach infusion to Popeye. Like when you want to count the number of times the word "spam" appears in the Monty Python Spam sketch or need to figure out how many penguins could fit in a telephone booth (assuming a spherical penguin, of course). While JavaScript may not be the best choice, the basics would at least be somewhat useful. How often do you find yourself with access to a computer without a web browser but with some other programming language?

Audience: Anyone who doesn't already know another programming language and doesn't mind getting his/her hands a little dirty.

cool places

the perseus digital library

Ille Interrete est omnis divisus in partes tres, quarum unam incolunt canes, aliam tales, tertiam ei qui ipsorum lingua feminae, nostra viri appellantur. In ille pars, fuit paginae hypertextuales optimi, perseus digital library nomine. ego te hortor ut eas illos.

Audience: Omnes.

the antarctic

This place is definitely cool, with an annual mean temperature of about -50°C. That's a brisk 223K for you scientists.

Audience: Anyone who really likes penguins or is afraid of bears, the number one threat to America.

cool people (incomplete list)

Some people i know... that F***dbook doesn't know i know. Or do they? Sigh. They probably do.


“I'm Jorge Aranda, a Mexican, vegetarian, cat-dad, serpent fish, happily-married, smartypants Ph.D. student of Computer Science at the University of Toronto.” — Jorge Aranda

computers, past and present

Computer 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
(1) 2009 MacBook Air (base model)  
(2) Athlon 64 X2 5200+  
(3) 2008 MacBook Air (base model)   
(4) P4 c. 2GHz   
(5) 15" FW800 PowerBook /w Superdrive + 1GB RAM     
(6) 13" P200 MMX laptop /w 3GB HDD, 32MB RAM   
(7) P4 1.7GHz /w 60GB HDD, 512MB RAM    
(8) PIII 667MHz /w 40GB HDD, 256MB RAM   
(9) PII 300MHz /w 20GB HDD, 128MB RAM   
(10) P133 /w 2GB HDD, 32MB RAM    
(11) 386 /w 30MB HDD, 4MB RAM   
  Primary computer  Other function
  • (3) Steve Easterbrook's. It finally broke. Replaced by (1).
  • (4) Owned by Trinity College. Pwned by office fire.
  • (5) Video card in death throes.
  • (7) Video card dead. I replaced the card with one from (8) in 2009 and it will soon gain a second life if its power saving features are supported by Debian.
  • (8) Computer exploded in a smokey death.
  • (10) Relegated to being a file and domain server.