Stitching Mandolux Wallpapers
November 4th, 2009
I’ve got two 24″ monitors that I use side-by-side in TwinView mode in my home office, so when I look for desktop background images I hit up Mandolux. Mandolux offers free and original wallpaper in a variety of sizes for even the largest displays.
The only wrinkle in all of this is that Mandolux splits the larger widescreen backgrounds into separate left- and right-hand images. However, since I run my display in TwinView mode, my desktop is essentially a single 3840 x 1200 display ( two 1920’s side by side). For the Mandolux wallpapers to display correctly on my background I need to merge the two images into one. I could manually stitch the two images together with an image editing program like GIMP, but since I downloaded a dozen of the background images to try out, doing it manually sounded dauntingly tedious.
That’s when I remembered that the ImageMagick suite of tools includes the ‘montage’ tool. The ImageMagick tools can be installed with the following command under Ubuntu:
sudo apt-get install imagemagick
Then, to stitch the images together I ran the following command:
montage mandolux-ga2k6-*-1920.jpg -tile x1 -geometry +0+0 mandolux-ga2k6-3840.jpg
in a directory containing mandolux-ga2k6-l-1920.jpg and mandolux-ga2k6-r-1920.jpg (left and right side images, respectively). It is also worth noting here that the first filename precedes the second filename alphabetically, so the files are laid out from left to right in that order.
The result is mandolux-ga2k6-3840.jpg, which is a file with both images merged into into one 3840 x 1200 image.
Datamoshing Tutorial
May 12th, 2009
Youtube user datamosher has posted a 3-part tutorial on how he created the video for Chairlift’s “Evident Utensil”. He essentially normalizes a set of video clips into a common format with FFmpeg, then uses avidemux to append them together and to remove keyframes. He has also made available a toolkit which includes both FFmpegX and avidemux for OS X.
Playing Classic DOS Games in OSX
May 12th, 2009
Commander Keen, Wolfenstein 3D, One Must Fall: 2097? Any of these ring a bell? Chances are you’ve played these when Microsoft’s DOS was the predominant PC operating system. DOSBox makes playing a lot of those classic DOS games possible on a wide range of modern operating systems. In OSX, however, it’s not just possible to play these games, it’s very to easy to set up as well with Boxer, an application that bundles DOSBox with an OSX frontend.
After installing Boxer, dig up a copy of your favorite old DOS game that’s supported by DOSBox. Copy the files into a folder on your Mac (you do still have a 5.25″ floppy drive, right?). Start up Boxer and drag-and-drop the folder where indicated. That’s it.

Drag-and-drop your games here to install.
If the game needs to run and install or setup program, Boxer will give you a chance to do either before starting the game. Boxer even comes pre-bundled with Commander Keen 4 and demos of Epic Pinball, Ultima Underworld, and X-COM: UFO Defense. There are additional pre-packaged demo games you can download separately as well.
Jill Sobule’s “San Francisco”
March 30th, 2009
How many San Francisco sex celebrities can you spot in this music video?
“The Aesthetics of Failure”
February 13th, 2009
No, your browser is fine. It’s not your bandwidth either.
This music video for “Evident Utensil” by Chairlift reminded me of “The Aesthetics of Failure” (pdf), an article written in 2000 by Kim Cascone about the then emerging work focused on the “glitches, bugs, application errors, system crashes, clipping, aliasing, distortion, quantization noise, and even the the noise floor of computer sound cards.” Focus on these limits of technology or “failure”, Cascone argued, forces the audience to not only rethink the definition of music, but also remind them of the tools involved in its creation.
While Cascone’s article used digital audio and music as examples, this video is an excellent contemporary example. Videos streamed over the Internet are often of such low-quality that we have come to expect the blocky, pan-chromatic artifacts. This video reproduces the abberations so faithfully that one wonders if the glitches are genuine or intended. Like breaking the fourth wall, the tools used to present the video (video encoder/decoder, internet delivery, etc. ) are no longer something the audience is supposed to look past, but now something to brought to their full attention.
P.S. The “failure” reproduced here is the accumulation of visual artifacts left behind by motion-compensation video compression methods without sufficient (or perhaps dropped) keyframes.
Update May 12, 2009: Video embedding for video above was disabled by request. Here’s a link instead.
Arcade Gaming with MAME, Part 1
December 15th, 2008
For recreating the video arcade game experience on the PC, MAME (Multiple Arcade Machine Emulator) is the standard. It works by recreating the hardware circuitry of older arcade machines and loading the game software within this emulated environment. Everything from the CPU, video, sound, and RAM chips is emulated. Under MAME, a wide variety of arcade machines are emulated, from the old Williams machines that ran Joust to the newer CPS3 systems that run the Street Fighter III series. Emulation support for new systems is also added from time to time.
While the official release of MAME is built for Windows, various other flavors of MAME are released for a variety of platforms. One such flavor is SDLMAME, which is easy to build in just about any *NIX environment that supports the SDL library. Another feature of SDLMAME is that it follows the official MAME releases closely: updates to MAME are quickly added to SDLMAME.
Read the rest of this entry »
Hands on the G1: First Impressions
December 1st, 2008
I picked up the Android-powered G1 late last week. I like the phone quite a bit. Here’s a list of things about Android that stood out to me this past weekend, both good and bad.
- When you boot up the phone for the first time, it asks you for your Google account login. If you don’t have one, it will make you create a Google account. There is no doubt that this is a Google phone through and through. Oddly, when I entered my password incorrectly, it claimed to have network access problems rather than reporting bad login credentials. I tried to log in about a half dozen times before I realized I was entering the wrong password.
- There are two email clients on the phone: the Gmail client and a secondary email client for POP and IMAP access. The Gmail client is on par with the Gmail client that I had on my Blackberry 8100. However, the POP/IMAP client leaves quite a bit to be desired. Setting up an IMAP account is easy, but there are a couple things missing from the client. For example, while the total number of unread messages for an IMAP account is displayed, the number of unread messages per folder is not.
- I love the notification bar. Incoming emails, SMS text messages, IM messages are all slipped into a notification area at the top part of the screen. When they first appear, a quick preview of the message is also displayed on the bar. With a quick flick of the finger to pull down this bar, I am given one click access to these messages.
- Instead of using a numeric passcode to lock the phone, the G1 features a neat alternative. The “passcode” is a pattern drawn on a 3-by-3 grid. The phone is unlocked by drawing the matching pattern with my finger on the touchscreen.
- By sliding my finger along the desktop, I can switch between three desktop spaces. Shortcuts to commonly used applications can be placed on these desktop spaces. Applications are stored in a drawer that is opened by flicking on a tab upwards from the bottom of the screen.
- For better and worse, contacts are automatically synced from your Gmail contacts list. Gmail had harvested a good number of contacts from my email, so I had to do a good deal of clean up to keep my G1 contact list less cluttered.
- Up to six applications can be run at the same time. However, as far as I can tell, there is no way to explicitly close an application. As you open more, they are closed in a first-open-first-closed fashion. As my girlfriend noted, you can open the browser, switch to another application, then switch back to the browser without having to wait for the URL to load again (as is the case with the iPhone).
- The trackball is pretty useful when in the horizontal, keyboard-flipped out orientation. It helps me navigate through text input fields without moving my fingers up to the touchscreen. Also, keyboard shortcuts. Nuff’ said.
- Frequently accessed settings like enabling/disabiling wifi are buried a few levels deep in a Settings application. Fortunately, the AnyCuts application available in the Android Market makes it possible to place a shortcut to just about anything on the desktop.
All in all, I think the G1 is a good debut for the Android platform. There are a few interface quirks, but as in the case with AnyCuts, the open nature of the platform and the Android Market are already encouraging the development of solutions. I think this is promising and there is a lot of potential for the Android platform.
P.S. Someone please make a BART schedule application before I am forced to foist a half-assed one upon the Android world.
Minesweeper is NP-complete.
November 17th, 2008
Apperently Minesweeper is a computationally intractable problem. My fastest time on the Easy grid is 5 seconds.
Ubuntu Upgrade Fail
November 4th, 2008
When I finally got around to upgrading my Ubuntu install to 8.10 (”Intrepid Ibex”) earlier this week, I ran into an issue with my keyboard. Yeap. My keyboard.
My left-arrow key no longer worked. My right arrow-key didn’t work. My up-arrow key became Print-screen. The first thing I did was hit the Ubuntu forums, where I found about a dozen “solutions” which either didn’t work or were just plain hacks. I finally found one that worked for me:
- Open up /etc/modprobe.d/blacklist with your favorite text editor. Make sure you open it up with root privileges.
- Add the following line into that file. Save, close, and reboot.
blacklist evdev
Apparently, this was a known issue in the release candidate, but they went ahead and did a general availability release by just documenting a temporary solution in a forum. Breaking keyboard functionality (it worked perfectly in 8.04) is not the way to win new users, especially when the distribution is billed as user-friendly. I’d rather they push their release date back than have a show-stopper like this make it’s way out the door.
A Proposal for RESTful Location-awareness
October 29th, 2008
Earlier this month the Mozilla Foundation announced Geode, an early implementation of a draft W3C specification for browser-based geo-location. The abstract of the draft specification states its mission to define “an API that provides scripted access to geographical location information associated with the hosting device.” A quick read of the draft W3C Geolocation API Specification got me thinking about how else such functionality could be implemented in the browser and used by web services.
The draft defines an API to be made available to any Javascript running in the browser. While the browser itself is responsible for getting the user’s current location from the operating system, it’s client-side Javascript that makes use of this location information. Provided in the draft are examples like the following:
function showMap(position) { // Show a map centered at (position.latitude, position.longitude); } // One-shot position request. navigator.geolocation.getCurrentPosition(showMap);
Such an interface allows for a high-level of interactivity on the client-side as Javascript controls and has access to all aspects of the client’s location information. However, I feel this comes at the costs of a standardized location format and portability. First, if the client wishes to gather information from a web service using the current location as a parameter, the client-side script must encode and transmit this information to a server. The format in which this information will likely vary greatly. One developer might choose to transmit this information in this manner: http://nearestfood.com/pizza?lat=1.234&long=1.234. Another might transmit this same information another way: http://iamhungry.com/pizza?latlong=1.234,1.234. There is no standard in how the client’s location is represented. Second, the client must support Javascript, which in the case of mobile device clients, is not yet a given.
Read the rest of this entry »

