2008 Headshot

The Life Unwired

with Ben Combee

Webduino 1.3 update
2008 Headshot
[info]unwiredben
(Update: version 1.3.1 is now up due to a nasty bug found over the weekend.  I didn't test as well as I should have.)

I've updated my Webduino web server library to version 1.3.  This was prompted by a discussion over on arduino.cc where a user was having problems communicating with the server from his cell phone.  I looked at the "read a new character from the network" logic and realized that a slow connection could let the Arduino think the client had finished its request when it really was just waiting on a new packet from the sender.

When I fixed that, I ran into a new issue.  Modern HTTP clients will usually make a request in "keep-alive" mode.  This means they don't close the socket when the finish asking the server for data, but instead keep it alive in case they want to send more requests.  So, to determine where I was done reading POST data, I needed to look at the Content-Length header passed with the POST and kill the connection after reading that many bytes.  Before, this wasn't a problem, as I'd just assume the connection was dropped when I didn't have any new data coming in from the client.

These fixes are in v1.3, along with some code you can turn on to debug your server's responses (it does slow things down a bit because the serial output code doesn't run in the background) and a fix for a possible security hole in parsing POST requests.

If you're into it, get the new code from http://webduino.googlecode.com.

webOS App Catalog Pricing
2008 Headshot
[info]unwiredben
I've been reading a number of articles lately about how to price your iPhone application on the iTunes App Store.  The big issue seems to be how the race to the bottom is hurting developers and conditioning mobile users to pay as little as possible for software.

Right now, Palm is in the middle of desiging their App Catalog for the Palm Pre smartphone and future webOS devices.  We can see some of their ideas from the current "beta" version, but I really hope they make different choices from Apple here in the final product.

First, Apple's store has two main categories for apps: free and paid.  The free area is mostly a bunch of "adware" and "lite" versions of more fully featured programs.  There are some free interfaces to other services there too, like the Kindle and eReader apps that let dowload books you've bought through other web stores.  There's a role for free apps on the Palm App Catalog, and I feel this should be a category.

However, I think paid should be divided up a bit.  I'd look at Amazon's MP3 store as an inspiration.  They have a bargain area (the $4.99 and down page), but they they also break out albums by different price points and have top seller lists for each one.  By creating more lists with natural exclusions, they give the ability for more albums to have "top spot" and get exposure.  On their "hot lists", they don't even list price.

I'd love to see Palm have a "99-Cent Store" section, perhaps with a bit of a downmarket skinning to it.  Set up a social expectation that 99 cents is the price for toy applications, but premium/serious apps are found in a separate part of the store.  Perhaps we wouldn't see as much of a race to the bottom then.  Especially with the smaller market that the Pre will have in its first year compared with Apple's juggernaut, it's important to make sure that the developers can make some money on the device to get a healthy ecosystem going.

A Few Palm Pre Application Ideas
2008 Headshot
[info]unwiredben
As I mentioned on Twitter, I'm one of the lucky developers that are in the Palm webOS developer program. My status as an ex-Palm-employee probably helped my application stand out a little. We recently had our developer agreement amended to allow discussion of the development experience in public forums, so here's my first post on the topic.

First, from watching the homebrew world, I fully expect that lots of obvious niches will be filled very quickly once the app catalog for the Pre opens up. There will be scientific calculators, tip calculators, and shopping list apps. Some one will have a "Drug Wars/Mob Wars" style game, and various dice and puzzle games will quickly appear. The catalog will look a lot like the early Palm OS days.

It will take a little longer for more serious programs to appear, both because of the learning curve of webOS and because developers will want to realize a return on their investments. That means having a larger user pool.

OK, so what are my ideas right now? I've got a few:
  1. "Required Reading", a client for a variety of web services that keep track of bookmarks like Read It Later, Delicious, Mozilla Weave, and Newsgator Clippings. This app would let you view your lists, open the bookmarks in the web browser, and have those links marked as read or visited.
  2. "Memosa", an application that addresses the problem that you can't easily migrate your Palm OS memos. I envision a web service that lets you upload a Palm OS memo database file and returns a RSS feed of the memo entries. Make this use HTTPS and require a password and you can do one-time conversions. The Pre app could then download and store the memos locally.
  3. "Couch to 5K Tracker". I've got an app on my iPod Touch that handles audio cues for the timing of the various C25K runs, but it's biggest limitation is that you've got to start your playlist before you start the app, and if you want to change music, you've got to pause and resume your run. On the Palm Pre, you can just use the multitasking and not have to worry about the timer getting messed up.
  4. "Electronics RefCard". This is a simple app to help you figure out the value of resistors and other components by their color markings. I also imagine having some way to store IC pin outs here for quick reference, and maybe having calculators for Ohm's Law and parallel/series circuits.
  5. "Photo Puzzle". The standard 4x4 block of sliding tiles with one missing. You get to rearrange them in the right order. The hook: unscramble your own photos instead of a bunch of numbers.
  6. "IP Toolkit". Front-end for a web service that lets you ping hosts and do DNS and WHOIS lookups.
Some of these are fairly easy to code, and others will take a bit more work.  I'm currently working on the C25K tracker as my first application; it has an immediate appeal to me because I'm going through that training program right now, and there's some interesting challenges with keeping the device awake to do accurate timing and mixing my alert sounds with the other audio streams.  However, I've also got some code in place for the Electronics application.  I could do a really poor job on that one quickly, but I'd like for it to actually have a nice user interface.


Introducing @palmpretips
2008 Headshot
[info]unwiredben
On a whim this afternoon, I set up another Twitter account -- this one is @palmpretips. It's a collection of useful tips for the new Palm Pre smartphone, both ones I've discovered and ones sent to me from friends and contacts. So far, it seems to be catching on a little; we're up to about 20 followers in just a few hours. I'll probably try to publicize it on some of the message boards later tonight, but I think we've already got a critical mass of useful items.

To my followers on @unwiredben, this means that you won't have to see a mass of Pre tips show up there anymore; it's back to being all about me and the weird things I notice.

Introducing webduino
2008 Headshot
[info]unwiredben
I've been working on a pretty nice chunk of code for the class I'm teaching later today. The main idea of the class is to put a web server on an Arduino board. Once you've got that, you can use any computer with a browser to pull data from the board or send commands to control things. As I worked on the code, I realized that a little refactoring would turn it into a nice framework for building lots of different webby things.

If you're interested, the project is hosted at http://webduino.googlecode.com. I'm releasing it with a MIT-style license. I expect to do a few more modifications to it over the next few days, especially after feedback I get from the class. I'll also probably restructure it to fit into the library scheme used for Arduino add-ons; right now, you just put a copy of the header into the folder with your code, which is nice for keeping it with your sketch, but not-so-nice for code duplication.

Teaching an Embedded Web Server Class
2008 Headshot
[info]unwiredben

BTW, if you're up here in New York and want to learn about making embedded devices that act like web servers, I'm teaching a two hour class on the subject on March 28th at NYC Resistor. After the class, I'll be putting my materials online, but I'm still working on everything right now.

You can get details on the class at http://www.eventbrite.com/event/302042417.

Scrounging Parts from a 2600
2008 Headshot
[info]unwiredben

I recently installed a video mod board from the Longhorn Engineer into an Atari 2600. This gives the system real composite and s-video output ports, letting me bypass the RF modulator. The result is a much cleaner picture, especially with the s-video connection. If you're curious about how it went, you can check my comments on the AtariAge forums.

However, in attempting to install it in my first 2600, I think I fried something. I got no video signal at all or any signs of life on the audio jacks. Since I'd already clipped off resistors and removed the RF output on the board, I couldn't easily test it to see if it worked without the mod board soldered in, so I called it a loss. However, that left me with a mostly good 2600 motherboard.

Now, this isn't the original classic 2600 with four or six switches on the front, it's a "2600 Junior" that was introduced late in the system's life. The board has a 1983 copyright notice on it. However, that's still old enough that everything was soldered on as through-hole parts. Most modern devices use surface-mount parts that are much smaller and only connect to one side of a PC board. Back in the 1980's, surface mount technology hadn't taken over, so most parts were soldered to holes drilled in PC boards. In general, it's much easier to hand-assemble a through-hole design, but if you're doing automated assembly, surface mount works much better.

So, like any good electronics hobbyist, I didn't just throw away the dead 2600 motherboard. Instead, I got out my iron and my desoldering pump, and I started taking off components that might be useful in the future.

First to go was the 28-pin cartridge port. This is useful for modifying an Atari Flashback 2 console, one of those $30 plug-and-play game systems sold a few Christmases ago. The designer included pads on the PC board that you can wire to a real cartridge port to play old Atari games. I got a second unit at a Goodwill, so I'll probably try this modification soon.

Also useful were the many switches. There were switches for power, color selection, TV channel selection, and left and right difficulty. The power jack is a standard 1/8" headphone jack, so that's useful. I was also able to take off the two joystick ports; they're DB-9 connectors, but I'll probably use them to hook an old Atari joystick up to an Arduino.

I got a couple of potentiometers from the video circuit. These were used to adjust the color values at the factory. There was a big 5V power regulator chip that I could use in a future circuit. I was able to remove the power LED too, as it had long leads to be near the panel display hole.

What's left on the board is mostly not worth saving. There are about a hundred resistors, but the leads are clipped, so they would be hard to reuse. There are a few more ICs, but they aren't very useful outside of repairing other 2600s. I could save a few capacitors or transistors, but I'll probably just hold onto the board and just remove parts as I need them.

More with Mozilla and htinkering
2008 Headshot
[info]unwiredben
Work continues with Mozilla.  We're about to go into a week of testing on the first beta release of Fennec for the Nokia N810.  I've got one major patch that should be in this release.  I've been working in the JavaScript code that acts as the front-end of the browser.  We had a problem that we could drag around the content of the page, but lists that were in the chrome around the page, like the URL suggestion list or the bookmark list, couldn't be moved.  My patch moved the drag handling to a higher level so it can be used to handle both cases.  Most of the implementation strategy came from Stuart and Mark, but I did the actual grunt work of writing the code and getting it to run correctly.

I really like the Mozilla review process.  Basically, I do work on my own machine and post it as a proposed patch to the bug.  Other people on the team get a change to review the change, and if they like it, they give it a thumbs up.  If they have issues, they post them back to the bug, I fix them, and produce a new patch.  Once the reviews are all accepted, the change gets landed in the source repository, and it goes into the next official build.

Outside of Mozilla, I've started doing some work with a new hacker group here in New York called HTINK.  The h is silent, so it's pronounced like "tink", and makes me a htinker.  We've got a big workshop we're doing here in NYC on March 14th where we'll be building lots of Arduino-compatible microcontroller boards and hooking them up to RGB LEDs and robot servo motors.  There's more stuff being discussed later in the year too.  I'm also working on material for an Arduino web server workshop where I'll show how to hook up one of the boards to your Ethernet and run a simple server on it so you can read sensors or change outputs.  That class will happen at NYC Resistor, probably in early April.

Moving on to Mozilla
2008 Headshot
[info]unwiredben
I'm writing this from the San Jose airport, waiting for my flight back to New York on a late Friday evening. Earlier today, I turned in my employee badge at Palm. I've got another week working for them remotely, then I'm unemployed. This is only temporary.

Later this month, I start my new job as a software engineer at Mozilla working on their Fennec mobile web browser. I'm not entirely sure what I'll be doing there right now, but I expect it will have a lot to do with making the core web browser component (what they call Gecko) run faster and use less memory on mobile devices.

My leaving isn't an indictment of Palm. I'm really quite impressed with the new Pre phone and webOS, and I think the new products will be quite successful. I think we've found a really great way to help people manage their information and their life in a simple, elegant, and powerful way. When Palm releases the device and the SDK later this year, I expect to be among the first to start making applications for the system. I might even camp out at one of the Manhattan Sprint stores.

However, professionally, I've realized that it's time for me to move on. I've admired Mozilla and their Firefox browser for years, and when they contacted me about joining the team, I paid attention. I found their mission to be quite worthy, their people to be smart and friendly, and the technical challenged to be interesting. I'm also excited to be working on a vibrant open source project and to work in an environment built on worldwide collaboration. Plus, I can blog about my work again!

To all my friends at Palm: you've got my respect and my love, and I really wish you all the success in the world.

To my new colleagues at Mozilla: I'm very excited and can't wait to get started doing great things.

What's Been Going On Lately?
2008 Headshot
[info]unwiredben
I've been very lax about writing. In part, it's been because I've been busy and I can't talk about work things here. It's also because a lot of the general "what am I doing" stuff is now showing up in my Facebook profile.

Kittens
Velco and Magnolia continue to get bigger, but they're staying very cute. I think they're getting more cuddly as they grow up, although they still have their wild kitten fight times. We're letting them around the house more, although my office is still a no-cat zone and probably will remain that way for the foreseeable future. They just had their last vaccinations, and in March they will both get spayed. They sleep with us in the evening, although that does lead to some interesting bedtimes; last night, one of them kept attacking my toes under the cover, and it got really annoying. Usually, they're quite nice, and they often curl up and nap on our laps when we're watching TV in the main room.

Electronics
I've taken up electronics and microcontrollers as a new hobby, mostly inspired by the antics of Brooklyn's own NYC Resistor hackerspace. I've taken a few classes there where I made some programs run on an Arduino board, then I ordered myself a soldering iron and some kits and made all of those. The immediate feedback of having code you write run on a board and control basic electronics is really great, and there's enough momentum with sources like Make Magazine. I'm fortunate to have always had a small interest in this, but I never could get over the hump of designing circuits. I think I've finally found the right combination of development hardware and support network to get me into the game.

My favorite project so far has been a solder-it-together board called the Mignonette. It's a small AVR Atmega88 microcontroller with four push buttons as inputs and a 5x7 LED matrix display. It came preloaded with a test application and simple "Munch" game. Last night, I got the TinyUSBISP programmer that I built from a kit to work and loaded up another game, Attack. I'm in the middle to taking the source for Attack and converting it into a dice roller application that uses the four buttons to let you pick a die type, pick a multiplier (for doing 3d6, for example), and roll the die. Of course, I'd make it play some sort of beep over the speaker while it's rolling so no one rolls without being noticed.

Christmas Celebration
Annelies and I stayed in New York for Christmas, but we were in contact with our families. On Christmas Eve, we used Skype to do a video call with my mom, dad, and aunt back in Georgia and we opened presents over the webcam. Annelies got us a microwave oven for the kitchen, something I think we'd both been secretly craving. My dad made some gorgeous wood stands that he shipped up here. I got a printer stand for the desk that lets me use the room above my laser printer in the corner of my desk, while Annelies got an amazing music stand that rests on the edge of a bookshelf and lets her see her sheet music while she's practicing the violin.

We cooked a nice Christmas dinner for each other with Annelies making some delicious baked macaroni and cheese, and me making braised collard greens with garlic and onion. We've been doing a fair amount of cooking together, often inspired by the great selection of produce we can get at the Park Slope Co-op. Just last night, we made portabella mushroom soba noodles with roasted beets and turnips in a red wine reduction.

Family Travel
I got my sister an airline ticket to New York for her Christmas present. She's going to be coming here in mid-January for a week in the city away from the darkness of Copenhagen. I'm very excited to be taking here around and getting a chance to do some tourist stuff that I don't normally do. We don't have a formal plan, but she'll be here on January 20th during the presidential inauguration, so I'm sure we'll find a party that evening to attend.

Debugging with CodeWarrior for Palm OS and Palm Desktop 6.22
2008 Headshot
[info]unwiredben
This is just a note for those who need to figure out why they can't use USB debugging with their Palm Centro smartphone. Apologies to my non-geek friends for this.

The Centro does support USB debugging, but you need to jump through some hoops to get CodeWarrior for Palm OS V9.3 to work with it.

CodeWarrior uses a DLL called USBPort.dll to talk to the device. It tries to be smart and looks in the Palm Desktop folder for this DLL. However, with the new desktop and HotSync manager, the API calls made to find that folder now tell CW to look in your "My Documents/Palm Desktop" directory. To get CW to find the DLL, just copy USBPort.dll from "C:\Windows\System32" to "C:\Documents and Settings\{USERNAME}\My Documents\Palm OS Desktop".

On the Centro, I also had to make sure other programs didn't use the USB port on the device before I got a reliable connection. Pocket Tunes Deluxe has a PC connection mode that you should disable by going into PTunes, going to "Prefs/Copy to PC Prefs..." in the menu, and changing the connect mode to "Off".

Also, the Centro's USB cable may not keep a good connection all of the time. When I tried debugging, I had to hold the cable in place to make sure it stayed tight. Using one of the older Athena connector cables that also had power can help with connection stability.

Reports are that USB debugging for Palm OS devices doesn't work at all with Windows Vista. I've not tried that OS to verify this, but it may just be the Palm Desktop 6.22 issue that I described above.

A Neat Use for Some of my Old PDAs
2008 Headshot
[info]unwiredben
This project boots Linux on older devices and runs PdAnywhere, a musical instrument creation language. I don't have a TX, but I do have a Nokia 770 that can be put to use with this.
Reware your PDA from Hans-Christoph Steiner on Vimeo.

My PDA and Smartphone Collection (Fall 2008 Edition)
2008 Headshot
[info]unwiredben

While organizing a drawer this morning, I decided to take a picture of most of my collection. If you click through to Flickr, you can read notes on each device.

Geekiest T-Shirt Ever
2008 Headshot
[info]unwiredben
'If you could ESC [ H, you'd be home by now.' t-shirt
While cleaning out stuff at home in preparation for the move to NYC, I found this t-shirt that I'd made in college. The iron-on part has discolored over the years. This is probably the geekiest shirt I ever made and ever wore.

The blue text refers to a VT100 terminal control code. Back before mice and graphics, people talked to big computers using terminals, usually a CRT and a keyboard that connected to the computer and acted as a remote interface. They sent characters back and forth, and usually, the characters sent to the terminal would be directly displayed to the user. However, the VT100 (and its compatible successors) could interpret some sequences of characters as special commands. A common one is Ctrl-H which would ring a bell on the terminal. The one in blue is the code to move the cursor back to the top left of the screen, or the "home" position.

Add that to the riff on the "if you lived here, you'd be home by now" signs that show up on apartment complexes, and you've got one of the geekiest things that you could possibly wear. Also in the running is the C programmer's reference shirt I once had which had all the text printed upside down so you could look down and read it while you were coding, and the KMFMS shirt that parodies the art style of the industrial music group KMFDM while also taking on Bill Gates.

Unclogging NewsGator
2008 Headshot
[info]unwiredben
This was annoying.  I'd noticed some feeds that I read weren't showing up as updated in NewsGator Online.  I checked the "My Feeds" page in my account settings, and I found a fairly large number of them marked as "error at source" or "not authenticating", with the system indicating that it hadn't checked them since mid-to-late May.  Fortunately, there's a "ping" button that lets you make the system go and check the feed again.  In some cases, I found that the feed location had changed without a redirect being provided.  In other cases, the system must have hit a server error and decided that the feed was stale.  I ended up deleting a few feeds, fixing the address of another ten feeds, and just refreshing the rest.  I hope the system's unclogged now.

If you use NewsGator or FeedDemon, you might want to check things too just to see if it's all OK.

As No Longer Seen on Twitter
2008 Headshot
[info]unwiredben
I've decided to suspend my LoudTweet re-postings of my unwiredben Twitters here. I heard back from one fan who was annoyed by them because they always had the same subject line, and it's pretty easy to follow them separately. You can subscribe to them by following either my public feed or the deluxe Ben Combee and Friends feed.

Refreshing Feeds in Google Photos Screensaver
2008 Headshot
[info]unwiredben
If you're using the Google Photos Screensaver on Windows to view photos from an RSS feed, you may notice that it doesn't seem to update those feeds so you're always stuck with that's there when you first added it. There's no "Update" button in the settings either.

I found you can get it to refresh by deleting the screensaver's cache directory. This may be hidden from view in Windows Explorer if you don't have the "Show Hidden Files and Folders" option turned on. You can find it by looking in

C:\Documents and Settings\{Your User Name}\Local Settings\Application Data\Google\GBScreensaver

There's a folder called rsscache here. Just delete everything in that folder, and the next time the screen saver activates, it will download fresh content.

No Palm OS SXSW Schedule For Old Men (or anyone else)
2008 Headshot
[info]unwiredben
I hadn't said anything publicly here about the 2008 SXSW schedule application, but I guess it's time to make a quick announcement. Patrick and I have not done a version for 2008. We wanted to do one, but changes in the SXSW internal database meant that we weren't going to have access in time to get things working.

In the meantime, the best alternative that I've seen is the website http://sched.org/, although their mobile support isn't so great -- you can view your schedule page OK using Blazer on the Treo, but getting more info or editing doesn't work because of the primitive JavaScript support on the browser.

If you want to see our schedule next year, let me know in the comments here, and also send a friendly note to webmaster@sxsw.com telling them you miss it. Thanks!

Treo Tip of the Day: Mowserize Your Web Pages
2008 Headshot
[info]unwiredben
Occasionally, I'll find a page that just won't render well using the Treo's web browser, Blazer. Often, it will look OK, then when the CSS is applied at the end it will go all wonky. (I'm looking at you, Wikipedia!)

I've been following a mobile startup called Mowser for the last few months, and I found myself manually invoking their reflow engine from time to time to make pages more readable. I'd go to the Page Info, copy the URL to the clipboard, then add the Mowser prefix before it.

This afternoon, I realized I could automate this using a bookmarklet, a chunk of Javascript that lives in a bookmark. In Blazer, they don't work directly from the "Go to a URL" bar, but they do work if invoked from a bookmark, so I made one to "Mowserize" a page.

Here's how you can do this:

  1. Open the Bookmarks view
  2. Select a blank bookmark to bring up the edit screen.
  3. Title the bookmark "Mowserize" or something similar.
  4. For the URL, enter this text, replacing the original text:
    javascript:window.location.href="http://mowser.com/web/"+unescape(window.location);

If you've got that entered correctly, then when you hit a page that Blazer just handles poorly, you can just go to bookmarks, select this one, and get a nicely formatted version that works great in Blazer's Netfront-powered HTML engine.

Worst of the Year, Twice Over
2008 Headshot
[info]unwiredben
The Foleo has made another end-of-year list. Wired has it at #8 on their list of Heartbreaking Gadgets for 2007, while Popular Mechanics had it at #1 on their Worst of 2007 list. Both lists don't rag on the device for its functionality; instead they attack Palm for how they launched it and then canceled it right before it was to ship.