SeattleWireless
[Blog Home] [Homepage] [Projects] [SeattleWireless] [Email Me] [Resume DOC] [Resume HTML]
Location:

Wed, 30 Nov 2005

Donation Link

[/seattlewireless] permanent link

Tue, 29 Nov 2005

SeattleWireless Tower Fundraiser

SeattleWireless has been presented with the grand opportunity of collocating on top of a large radio tower on top of in the Seattle area at no cost! But we need your help to make this project a reality.

One of the most difficult engineering obstacles when building a community wireless network is access to high locations. WiFi signals require line-of-sight between two locations in order to function properly. Building a network within a juggle of large, concrete apartment buildings and steel high rises, even over a couple blocks is a monumental task. This is especially true when noting that SeattleWireless projects are solely financed on a need-by-need basis by members. Our nodes are built with inexpensive, off-the-shelf hardware, and we even climb rooftops in the pouring Seattle rain.

However, a radio tower is not your typical roof top. There is no elevator to the top of this structure! Skilled and insured tower climbers need to be hired, weather hardened gear needs to be purchased, and care needs to be taken on hardware selection so that we only need to hire a climber once.

A tower location, such as this one located on Capitol Hill, not only helps expand our network in the Seattle area, but ultimately opens access from many other locations in the Puget Sound area. It will provide our community network with a high, central location to bring our network to a critical mass required to foster further growth.

We have budgeted $2500 to purchase the required hardware, contract a climber to install the gear, and cover any additional hardware costs and future site maintenance.

Due to the significant costs of this project, we need your help! We have been offered the unique opportunity of free tower space with no recurring costs. We have the technical skills, the facilities, all we need now is your generosity.

Please visit http://www.seattlewireless.net/fundraiser/ to help out -- even if you just want to donate a couple bucks.

[/seattlewireless] permanent link

Fri, 18 Nov 2005

Homebrew Mobile Phones

This project is really picking up a lot of steam. About one week ago, Surj Patel started asking a few peculiar questions about the GM862-PCS....the kind of questions one asks with intent to build their own homebrew cell phone from commodity parts..

The plans were similar -- gumstix, cheap surplus LCD, and GM862. These three components are the key ingredients to the "brains" inside such a device. If you have read any of my previous articles, the GM862 provides voice/data capabilities and is controlled via serial port.

Word of such a crazy project has started to hit the mainstream already. CNet wrote an article earlier this week titled Build it yourself cell phones. With this article came more interested people out of hiding, and more help means this project is going to take off like crazy.

A few things have changed since i first purchased the product. Telit announced availability of a Phython version of this product. This can make intial prototyping quite easy, along with providing the "glue" to either avoid the gumstix in the first place (less interesting; yet has applications) as well as provide a better abstraction layer for easier control of the GM862's interworkings.

Such an "API" or abstraction layer would also be useful when supporting more than just the GM862 (yes, there are more modules out there than this...and they'll be even more soon). This might be a smart idea to avoid redundant efforts.

Why build a cell phone? Good question. I have a hard time answering this question, myself. I think the biggest reason why I am so interested is that all cellular hardware platforms are very closed. Since the inception of the camera phone on the 1xRTT networks, I immedately invisioned how nice it would be to be able to write native code for my handset. Lets see...100Kbps symetrical throughput, camera on front of flip, along with 80x60 screen, full audio capabilities. Gee.. i could do video conferencing with this handset...oh wait..no i cant...platform is closed, and java cant talk to the camera or the outside screen.

Well, then, I have a button on the side of this Sprint phone....i could deploy push to talk and just use a low bitrate vocoder (like the onboard QCELP encoder/decoder). But no, i cant. I'd have to write native code to run such a SIP app in the background. I had to wait 2 more years for Sprint to finally release such a beast.

Since Java VM's are limited and slow, most phones cannot even run these apps in the background, it serverely limits a mobile developer. If we only had a hackable platform with direct access to the hardware, our mobile dreams would become our reality, and we would stop lusting over those Japanese and Korean handsets once and for all.

Or maybe the fundimental answer is, I do it because I can.

[/cellular] permanent link

Lavender soda anyone?

Kumquat, lavender, lemongrass, or rhubarb soda, anyone? I picked up all four flavors from my local Metropolitan Market. They are unsweetened, hence the name Dry Soda.

I think the most unusual is lavender, but at least it taste like it smells.



[/food] permanent link

Thu, 17 Nov 2005

Stephen Hawking Lecture

I was given a VIP pass to see Stephen Hawking in person at the Paramount yesterday, so I had to attend. Unfortunately after I arrived, it was announced that due to some heath issues, he was not actually able to make it to Seattle. Stephen's lecture coorinator gave us this story:

Stephen was pulled off the resporator he sleeps on last Monday, and flat-lined. He was resuscitated and everything turned out to be okay. Stephen still wanted to go to Seattle for the lecture, but his doctors and wife vetoed the idea.

But fear not, there was a production crew of 8 Intel employees in two Satellite trucks to save the day. The LCD projector turns on, and a web browser at an Intel website pops up. It is some sort of web conference site, allowing you to view slides along with the cast.

The video starts buffering and streaming at 2280kbps, and we watch a jumbo version of Stephen speaking for about an hour or so. The operator was flipping between slides and the video stream, and accidently closed the browser a couple times, but otherwise it worked out pretty well.

At the end, it was question time. No, apparently we can't ask questions directly anymore. We were given a canned top ten list instead. Questions ranged from what Stephen's take was on the Simpsons episode he stared in, to stem cell research, the mars space program, and what his IQ was.

Even though I did not get to see im in person on the stage of the paramount, it still was a great moment to see the man talk about the origins of the universe.

[/science] permanent link

Fri, 11 Nov 2005

Hacking The Knows Your Name Elmo HOWTO

Intro

People have been asking for a HOWTO on messing with Elmo. This is all a work in progress, but I will still share with you my findings so far. There are a couple of things that are unknown at the moment, so if you figure out something new, please be sure to contact me at the email address above.

Elmo Overview

Elmo Knows Your Name is a semi-interactive audio player with several user inputs and audio output. It features a USB port for programming, and shows up as a HID (Human Interface Device).

I have not dared to crack open this device (its tomorrow's present for god's sake!), so I do not know what exactly is on board. I would expect a very basic processor or programmable logic chip, coupled with some sort of memory, and of course, a USB controller.

Getting Started

After you install the software, I suggest you do the initial configuration. You will get an idea on how this device operates. Ultimately, you will use this to push out your tweaks.

Files of Interest

There are two directories, "names" contains samples of about 15,000 names. "sounds" contains elmo spoken phrases in audio files. The audio extension is "rbf". I have not been able to determine this file format. I have tried to import it as a raw format using a-Law, u-Law, etc. but no luck. There are strings of zeros in the audio files, so I suspect that if compression is actually used, its some sort of ADPCM variant. Without being able to convert these files from a usable format, we cannot create new files just yet -- but keep practicing those Elmo voices, i'm sure its format discovery is just around the corner.

Another file of interest is temp.inf. This contains a sort of scripting file that defines what audio files are played in what order. It also has variables, various groupings to handle games and songs, and a memory map at the bottom of the file.

There are also some files that appear that contain both a human-readable and numerical representation of the variables you configured in the software. These are not too interesting.

doll_ext.bin contains something, but I am not sure what it is. Is it code? Is it a linked and binary version of temp.inf? Who knows. Tell me.

Playing with temp.inf

This cute, innocently named file has most of the guts. Its very easy to follow, but I will document the syntax as best as I currently understand it.

The file starts with "doll_ext.bin". I don't know what this is yet.

Subroutines are defined throughout most of this file, with a label, like PL_001:. There are GAME and STORY labels near the bottom that link to these labels.

The PLAY function allows you to concatinate various audio files, delays, and variables which link to dynamic sounds (such as the child's name). Elements are delimited with +.

Example Time

Honestly, I found Elmo's cultural insensitivity a little insulting, especially with its very Westernized selection of foods. So for this example, Elmo needs to like to eat whale and seals too, since my daughter loves that stuff we keep in the freezer.

PLAY ONE_DAY+[100MSEC]+ELMO+EAT+WHALE+AND+SEAL+[300MSEC]+MMMMMMMM+[200MSEC]

Scripting Elements

I have seen the following variable elements:

#CHILDSNAME -- child's name (as defined)
#FRIEND1 -- friend 1 (as defined)
#FRIEND2 -- friend 2 (as defined)
#FRIEND3 -- friend 3 (as defined)
#PAUSE -- This is a significant pause, enough for a child to respond
#FAVCOLOR -- color (as defined)
#FAVANIMAL -- animal (as defined)
#FAVFOOD1
#FAVFOOD2
#FAVFOOD3 
#AGE
#FAVDRINK

Other elements:

[nMSEC] -- n Delay in milliseconds
<BIRTHDAYSONG> -- some sort of special routine, no references

Linking it all together

If you really want to start screwing around with Elmo, its best to modify a program or game. I suspect that, by comparing behavor and looking at the list of items, the device will select a random line or go in sequence down the list. Here's what I mean:

GAME3_LABEL:
      PL_024,PL_136,PL_137,PL_138,PL_140,PL_084,PL_619
      PL_124,PL_126,PL_128,PL_125,PL_127,PL_129
      PL_097,PL_094,PL_134,PL_131,PL_133,PL_135,PL_131A,PL_133A,PL_135A

This plays a sequence of audio files. Now, I have not been daring enough to modify games or create new ones (not sure if it will run GAME9_LABEL just because its there), so let me know what you find out.

Crazy memory table

I don't understand why this device has a bunch of built-in sounds, especially when the software pushes out most of the phrases. This could be just stuff that was built in the demo mode, since the demo is part of this list too. It indicates the byte offset from memory location 0 where the audio exists. I am not certain how it detects "end of file".

INTERNAL_SPEECH_TABLE
InternalVersion00
00077571   SP18918
00077597   YOURE_A_GREAT_PRETENDER
00087751   YOURE
00090681   YOUR_BIRTHDAY
00096185   YOUR
00097171   YEAH
00101307   YAY
00112121   WITH_ELMO
.....
00397170   COUNT
00400292   BREAKFAST
00404230   BEDTIME
00408366   AWAKE
00411872   AND
00415192   A1_ELMO_TRYME_8K
00518868   A

I am hoping that A1_ELMO_TRYME_8K offers us a little glimpse into what kind of files we are dealing with. I am guessing that if one word (about a second) equals about 4-5kB, these samples are either operating at 4000Hz, or they are ADPCM (4 bits/sample) at 8KHz audio bandwidth. ... or maybe the demo is just a higher sample rate so it fools us all into thinking this thing is actually inteligible.

Demonstration

No hack would be complete without a demonstration video. The audio is a little raspy (cell phone mic sucks, along with the low Elmo sample rate), but enjoy its glory. Click the movie for the...your know...the movie!

To Do

  • Figure out how to make that .rbf file!
  • Figure out if user I/O and game routines are scriptable
  • Figure out how time events work, or if they are just hardcoded to play a certain label
  • Figure out if more games can be added, and if elmo will look for an endless supply
  • Figure out hardware specifications
  • Figure out how to hack firmware

    Ideas

    Assuming that once this little file format issue is figured out, the hacker can actually remove the small, plastic device that goes inside Elmo, and "voice enable" just about any other stuff animal. I think your biggest issue is finding someone to do the vocals, but Dad or Mom could voice-enable a favorite teddy bear while he/she was away on business. I guess that would be cute.

    [/gadgets] permanent link

    Thu, 10 Nov 2005

    High Tech Toys

    Knows Your Name Elmo

    Introducing the "Knows Your Name" Elmo doll! It features a USB interface and allows the parent to fully configure the doll with all sorts of parameters. Right now, the doll talks about her favorite foods, animals, and important people in her life (Its programmed to: Daddy, Mommy, Aaka right now). The crazy thing also knows what time it is, and starts talking about bed time when its..you know..time for bed!

    So a talking elmo doll with a USB jack in its back is begging to be hacked. While I just bought it tonight, it does show up as a HID (Human Interface Device) with no drivers needed. It has load a lot of audio files on your drive during CD installation (it actually installs all 15,000 names and phrases onto your freaking hard drive, making the install long and painful). The audio files are in "RBF" format, with the magic header of "WDMdM". Looking at the files with a binary editor, it is likely a raw format.

    Hacking Knows Your Name Elmo or ELMO_SAYS+[100MSEC]+I_AM_WATCHING_YOU+[20MSEC]+#CHILDSNAME

    There is another file in the base directory called "temp.inf". This file contains a script of various commands. Here's a snip:

    PL_012:
          PLAY HI+[50MSEC]+#CHILDSNAME+[150MSEC]+LETS_PLAY
          RTS
    PL_013:
          PLAY HI+[200MSEC]+LETS_PLAY+[220MSEC]+SQUEEZE+[100MSEC]+ELMOS+HAND
          RTS
    PL_014:
          PLAY HI
          RTS
    PL_015:
          PLAY HI+[50MSEC]+#CHILDSNAME
          RTS
    PL_016:
          PLAY ELMO_LOVES_YOU+[50MSEC]+#CHILDSNAME
          RTS
    
    or this silly number:
    PL_246:
    PLAY
    ONE_DAY+[100MSEC]+ELMO+HAD_A_QUESTION+[200MSEC]+ELMO+ WANTED_TO_KNOW+[50MSEC]+WHAT_DO_YOU+[20MSEC]+ LIKE_TO_EAT+[300MSEC]+FIRST+[100MSEC]+ELMO_ASKED+[20MSEC]+ #FRIEND1+[100MSEC]+WHAT_DOES+[10MSEC]+#CHILDSNAME+ [20MSEC]+LIKE_TO_EAT+[300MSEC]+#FRIEND1+SAID+[20MSEC]+ YOU_LIKE_TO_EAT+[50MSEC]+#FAVFOOD1+[500MSEC]+ELMO+ WANTED_TO_KNOW+[20MSEC]+MORE+[100MSEC]+SOOO+THEN+ [60MSEC]+ELMO_ASKED+[20MSEC]+#FRIEND2+[100MSEC]+ WHAT_DOES+[20MSEC]+#CHILDSNAME+[20MSEC]+LIKE_TO_EAT+ [300MSEC]+#FRIEND2+SAID+[20MSEC]+YOU_LIKE_TO_EAT+ [30MSEC]+#FAVFOOD2+[500MSEC]+ELMO+WANTED_TO_KNOW+ [20MSEC]+MORE+[80MSEC]+SOOO+FINALLY+[100MSEC]+ ELMO_ASKED+[20MSEC]+#FRIEND3+[130MSEC]+WHAT_DOES+ [20MSEC]+#CHILDSNAME+LIKE_TO_EAT+[300MSEC]+ #FRIEND3+SAID+YOU_LIKE_TO_EAT+[50MSEC]+#FAVFOOD3+ [500MSEC]+SOOO+[50MSEC]+NOW+[40MSEC]+ELMO+ KNOWS_THAT+YOU_LIKE_TO_EAT+[50MSEC]+#FAVFOOD1+ [100MSEC]+#FAVFOOD2+[100MSEC]+AND+[30MSEC]+ #FAVFOOD3+[200MSEC]+MMMMMM+[150MSEC]+ELMO+ LIKES_THAT_TOO+[50MSEC]+SFGIGGLE1+[400MSEC]+ NOW+[100MSEC]+ELMO+WANTS_TO_KNOW+[100MSEC]+ IS_IT_TIME_TO_EAT_YET+[300msec]
    RTS

    From first glance, this script file is compiled into some sort of binary data file which links to a glob of audio. The unit has limited space, as i can only upload 3 songs...a bulk of this space is taken up by speech fragments.

    It looks like this Elmo is nothing more than an overgrown audio player in shuffle mode, along with a motorized mouth. It is very, very hackable. Maybe if I have more time alone with the thing, ill be able to get it to something really cool besides its default factory speech routines. I am going to have to work on my elmo voice though.

    ChatNow

    Move slightly over to the left Cybiko, make way for the ChatNow communication system. These 900MHz handsets feature 10 digit voice dialing, text messaging, digital camera, multiple ringers, push-to-talk button. You can even send pictures to other handset users, or assign them to entries in your phone book. 30 ringtones are available...

    Wow, thats gotta kick FRS's ass. I'm going to buy a pair.

    [/gadgets] permanent link

    Google Maps Mobile

    *DAMN*

    After downloading Google Maps Mobile for my SprintPCS Sanyo MM7400, I immedately run this app.

    My screen goes completely blank, and suddenly, I have a full screen satellite view of north america. I can zoom in and out, go to vector map mode, with the same look, feel, and smoothness as google maps. The 1xRTT network makes it load as fast as it does on the desktop.

    After zooming in over my office building, I decide to start messing around with its local search functionality. I type in "Coffee", and 3 Google Map-isk dialog boxes pop up showing me where I can get coffee in Bellevue. It also tells me to hit 1-9. As I hit these numbers, the app quickly pans and centers over the item of interest -- even if they are on the screen or down 5 blocks. The dialog boxes even dynamically point and shape as they swish on and off the screen.

    Need directions? No problem. Click "Directions" and you get a nice green dot you can position on any city street. You then position the end dot. If you do not want to visually describe your start and stop locations, it also accepts addresses.

    After you place your start/stop points, it routes and gives you real-time directions.

    The only downside is that, since it is a third party application without a signed GPS API certificate, it cannot pull location data from Sprint. I am sure that once that is functional, this will be one killer LBS app.

    [/cellular] permanent link

    Wed, 09 Nov 2005

    MindCamp

    MindCamp was COOL. I am working on a post mortem for the issues we had with WiFi. In short, our social experiment involving mesh networking in the client space failed. I will explain more later.

    The backup plan was to use OLSR in the distribution layer, and use access points in the access layer. This allowed us to deploy a wifi network with *no* cable plant. AND NO WE DID NOT USE WDS FOR GOD'S SAKE. It was a success--although it could be greatly improved. Matt, Rob, and I will be putting some serious cycles into making this an even better solution.

    I would have to say the notable experience was a few hours spent offline with Michael Laine after his Space Elevator presentation. Michael is working on something great, and it should bring countless other, more "down to earth" (he he), innovations.

    An unlikely innovation in the DVD arena captured my imagination. Since I first set eyes on a DVD player (ultimately the menuing system, and the apparent extensive scripting capabilities), I thought it would be cool to have a movie that either had a different plot every time you watched it, or perhaps a plot that stopped at various decision points.

    As someone who has experience in the whole video scene, its difficult enough to write one plot, let alone 2^n plot deviations with just two choices alone. I have never had the time or the ability to make such a complex story line.

    Make My Day (DVD) does just this. Its a choose your own adventure DVD!! The viewer is given almost an endless amount of choices as the video progresses. The disc is a comedy, and naturally has a very indy film feel to it. I thought this DVD project was so amazing, that I am going to buy it for christmas.

    Near the end of the camp, I figured id show up to this one talk about "Cell phone programming". I almost didn't go...it sounded like someone explaining how to bypass phone subsidy lock codes so they could be provisioned to operate on other carriers. Thankfully, this was not the case! UIEvolution has just launched something quite amazing called UJML.

    UJML is a programming language done in XML. I have no idea why the hell anyone would want to use the XML framework in a programming language, but they pretty much just use them all as functions and ditched the brackets.

    UJML is a VM that rides on top of BREW or J2ME, and all code is platform independent and automatically scalable. While it is not multithreaded, it has an extensive system for handling events (like a VBL, etc) which makes its perfect for games.

    UJML has all the "meat" of J2ME in a very easy to understand format. Anybody can crank out some amazing software for mobile phones using this system. The best part: Everything is free. The IDE, the compiler, the emulator, even the system that does OTA installs of your software.

    Since UJML makes apps that are truly platform independent (unlike the slight variations seen with J2ME and BREW VM's), you can use the same code, graphics, and sounds from a java-enabled plasma TV, to a Treo, to even a low end 120x120 color cellular phone.

    UJML also has XML call systems, plugin library support, and even a method of retrieving UJML code on an external internet host and executing it after download. This allows the coder to create very large applications that work on even the smallest of memory restrictions.

    Overhead is there, but minimal. The system will handle multiple sprites and events without any issues.

    It sounds like I need to stop development on my WAP MMORPG and move this over to UJML. I might have one heck of a killer app on my hands.

    [/seattlewireless] permanent link

    For past blog entries, check out the archive on the side or click here.


  • Make some extra cash with your blog too: