Category Archives: Technology

Gimp 2.3.7

I finally got around to installing the latest development release of Gimp, 2.3.7. It’s definitely worth a try. The menus have been rearranged a bit- a little disconcerting for a long-time Gimp user, but the new layout makes a lot of sense. It’s always nice to see the new splashscreens.. but I’m still a little bitter that my masterpiece didn’t win the contest 😉

The coolest new toy in Gimp 2.3 has to be the foreground extraction tool. Now make hackergotchis with hardly any effort at all! I bring you a banana bread hackergotchi:

Tasty floating banana bread!

Google Local on T-Mobile

I was using Google Maps on my phone before it was cool. My little prototype Python application, Pyhole, still gets some use despite the fact that shortly after I got it working Google released their own Google Local Mobile. Why? Google’s client doesn’t work with T-Mobile. At all. Not to mention the cheap “t-zones” plan I’m on, which blocks almost all destination ports.

Well, apparently it is in fact possible to get unlimited Google Maps on T-Mobile’s $5/month “t-zones” data plan after all:

Google Local Mobile on my phone, yay

GLM doesn’t use the same protocol for talking to Google that their Javascript map browser uses. GLM is bandwidth optimized, sending tiny binary POST requests to a single URL at google, and reading back multiple PNG tiles per request. Furthermore, the URL it uses for these POST requests is configured in the midlet’s .jad file. My hack goes something like this…

  1. Use the phone’s web browser to start installing GLM. The Google server will detect the phone’s model, and point it to a particular .jad file
  2. Download a copy of the .jad, using a URL scraped from the HTTP proxy logs
  3. Replace ServerAddress: http://google.com/glm/mmap with something like ServerAddress: http://proxy.example.com:993/glm/mmap
  4. Set up a reverse proxy from that URL back to the original Google URL. I used Apache’s mod_rewrite and mod_proxy.

The .jad file also has some juicy-looking parameters for tuning the UI and the cache sizes. I’m still not sure how useful these are, but I’d love to use more of my phone’s 512MB flash to store map tiles.

Random Update

Well, it’s been a while since I’ve updated. Nothing on its own recently has inspired me much to write, but I have some smallish things to mention.

I have a new laptop on the way! My 700 MHz Pentium III with 192MB of RAM was just getting too clunky for day-to-day use. I recently ordered a Thinkpad T43 with 2GHz CPU, 1GB RAM, and SXGA+ 14.1″ display. It shipped Monday, and I can’t wait to start using a Real Computer.

At work, things were stagnating a bit for the past few days. I have three fairly large changes all blocking on code reviews, and no really solid projects in progress. Well, today that changed- I got some new hardware, and began on a really exciting Top Sekret project. If it goes well, you’ll find out eventually.

Life? Not bad at all… I had a really enjoyable three-day weekend. David, Jen, and Kendra are visiting during their spring break, in less than a month. Plans for that week-long adventure are starting to gel, and I can’t wait.

[Update: The Top Sekret project in this post would eventually become VMware Fusion 1.0. I was working on USB at the time, and I did the original port of VMware’s USB stack to Mac OS.]

January 2006 Update

Fyre

It’s easy for me to see Fyre as a ‘dead’ project these days- the existing codebase was declared ‘done’, and we moved on to a new architecture dubbed Fyre 2.0. In some ways this rewrite has suffered from second system effect, and the code hasn’t been touched in a while. But, I think we all agreed this was necessary. Fyre 1.0 really was a great release, and it really did everything we felt it should do considering the project’s scope.

Anyway, it’s really heartwarming when I come across an enthusiastic user of Fyre on the interweb, who’s posted some renderings of their own. It’s even cooler to find someone who’s implemented their own Distributed Chaotic Image Renderer after being inspired by Fyre.

Now that Firefox 1.5 is commonplace, I might as well mention my old Javascript De Jong renderer. It’s a great example of why the <canvas> element is largely orthogonal to SVG.

Home Theater

My traditional method of playing DVDs at home would be to boot up my HTPC and play them via Freevo. In concept this was great, but the picture quality left much to be desired- lots of horizontal ‘wiggle’ due to noisy sync signals from my video card’s component out, and the video was getting scaled at least twice.

Yesterday, while wandering the shopping megaplex that is Santana Row, I finally picked up a hardware DVD player: An LG LDA-511, on sale for $110 after rebate. I’m just blown away by how much hardware you get for that price these days: slot loading drive, HDMI output, upscaling to any HDTV resolution, DivX/MPEG4/JPEG/MP3/WMA playback, memory card slots… The picture quality is great, and it will even play a lot of music and video directly off of my existing DVD-R discs. My one complaint so far is that the memory card reader is excruciatingly slow. It’s a good thing I doubt I’ll ever have a use for that feature.

CIA

I came across the Django project recently. This is an incredibly spiffy mod_python-friendly web framework, which includes a template system and a rather cute object-relational mapper. Since I’ve been wanting to get CIA‘s web frontend away from Twisted and onto mod_python for a while now, this looks like a great opportunity to simultaneously do away with Nouvelle.

So, I’ve started a branch for what’s sure to be a heavy-handed hack and slash partial rewrite. The biggest issue with splitting the HTTP frontend into multiple mod_python processes, however, is the ruleset storage. Currently, CIA just loads all rulesets from the database on startup, compiles them a bit, then scans them linearly every time a message is delivered. This is both RAM-hungry (about 8MB) and very CPU inefficient. My current strategy is to actually compile the rulesets into an SQL table such that the slowest and least scalable aspects of message filtering can all be done efficiently within the SQL server.

Metadata as personal information

Hopefully all of you have seen this spiffy little tagging library that Christian and David are working on. One of the comments we hear about it is that tags should be system-wide, rather than per-user. Some people view tags as a global attribute of a file: much like a MIME type or its permissions. We view tags as something a user should be able to personally apply to any resource, whether they “own” it or not.

Well, the recent article on metadata in Vista would seem to support our position. Sure, the article is your typical alarmist journalism tripe, but within it is a kernel of truth: people are likely to use this type of metadata for assigning their own personal categories to a file. This data fundamentally belongs to the user. As the same file is processed by another user, the tags may no longer make sense. As the article points out, they may even be harmful.

Obviously it all depends on how you define “metadata”. Mime type, file size, an icon.. these are all things that have traditionally been thought of as “belonging” to the file itself even if they aren’t stored with the file. This goes all the way back to the resource fork in MacOS, maybe farther. Today this flavor of metadata is trying to reemerge through linux extended attributes, and Windows’ new filesystem. But why? MacOS has had it for decades. It was useful for a while, but in the internet age the flat file dominates. Everything has to fit into an HTTP session, into a zip file, or it’s useless on the ‘net. Metadata like file type, image size, and such has become redundant out of necessity. This information must be encoded within the file itself, or you can’t transmit it.

Where does this leave out-of-band metadata? Well, it’s perfect for attributes that don’t need to permanently follow a file around the internet. It’s perfect for personal data, and that’s exactly what this project is using it for.