Technical Difficulties from on Top of the Mountain
  Technical Difficulties of knowing too much
So one of the tasks for the project I'm on is to update a report with some additional data. It's a report showing a list of people and what they did when they heard a certain song (let it play vs skip it). The task was to add another detail report that would pop up when you clicked on one line and show the trend of listening vs skipping the song (and how long the song played before you took action). The example was something like this:

bad graph

Besides being confused by this graph initially, and thinking the thing is pretty darn ugly; I know better than to do this (and its all Don Park's fault).

Besides pointing me at tiny databases, new languages, and a whole assortment of other DHTML goodies; he discovered an article by Edward Tufte on a new concept for graphs that are so tiny, they can be placed within the text itself, allowing small bits of data to accompany the text without breaking the flow of reading. He called these things sparklines.

They're a neat idea, and they've gotten fair interest in the free software community. There's various libraries for generating all kinds of line and bar graphs. I like this one that shows the federal deficit (those black bars are when there was a democrat in office :-). But for what I was doing, trying to jam in a big client side library of javascript or trying to get all the customer servers to add more server side libraries seemed to be overkill.

I thought there ought to be some way of doing it with DIVs, but browsing around just a bit I ran into a bunch of examples that just used tables. With a little bit of experimentation I managed to come up with this:
which is just the following:

<TABLE bgcolor=white  cellSpacing=1 cellPadding=0>
<TR valign=bottom>
  <TD height=20> <TABLE border=0 cellSpacing=0 cellPadding=0 width=2><TR><TD height=13 bgcolor=blue></TD></TR></TABLE> </TD>
  <TD> <TABLE border=0 cellSpacing=0 cellPadding=0 width=2><TR><TD height=14 bgcolor=blue></TD></TR></TABLE> </TD>
  <TD> <TABLE border=0 cellSpacing=0 cellPadding=0 width=2><TR><TD height=13 bgcolor=blue></TD></TR></TABLE> </TD>
  <TD> <TABLE border=0 cellSpacing=0 cellPadding=0 width=2><TR><TD height=6 bgcolor=red></TD></TR></TABLE> </TD>
  <TD> <TABLE border=0 cellSpacing=0 cellPadding=0 width=2><TR><TD height=10 bgcolor=blue></TD></TR></TABLE> </TD>
  <TD> <TABLE border=0 cellSpacing=0 cellPadding=0 width=2><TR><TD height=6 bgcolor=red></TD></TR></TABLE> </TD>
  <TD> <TABLE border=0 cellSpacing=0 cellPadding=0 width=2><TR><TD height=2 bgcolor=red></TD></TR></TABLE> </TD>
  <TD> <TABLE border=0 cellSpacing=0 cellPadding=0 width=2><TR><TD height=3 bgcolor=red></TD></TR></TABLE> </TD>
  <TD> <TABLE border=0 cellSpacing=0 cellPadding=0 width=2><TR><TD height=1 bgcolor=red></TD></TR></TABLE> </TD>
  <TD> <TABLE border=0 cellSpacing=0 cellPadding=0 width=2><TR><TD height=1 bgcolor=red></TD></TR></TABLE> </TD>
Conveys just about as much data (the actual number of seconds is not really important--this is about trends), and its small enough to fit right in the original table instead of needing a separate window. I think I'll just tell the client it was my idea ...
  A cascade of failures
Had some errands to run last night, and as always I try to cover as much stuff as I can. In addition to picking up a truck load of pellets at Mavrick and getting a cheap refil on soda at the local Chevron (only a penny an ounce), I threw in a food stop to pick up something for dinner.

BWW Tungsten TX

While Buffalo Wild Wings is conveniently located and has pretty good food for a pretty low price (what else would you expect from a chain that is located in the same shopping center as Walmart), the choice was actually driven by something much more geeky. I wanted to try out the Tungsten Wifi on their connection. So I finish off my other chores and I pull up and order a couple of snacks, then I pull out the Tungsten and tell the wifi to connect.


Ok, try again. Zilch, nada, no radio, out of luck, give it up. sigh. With some resignation I go back up to the counter an enquire about signal. The first person doesn't even know what I'm talking about. "Wifi? Is that on the menu?" I helplessly pull out my isolated PDA and wave it around like it will magically impart understanding. Another sales droid notices my plight and comes over. "Oh ya, that internet thing. My friend is coming in later in the week to fix it, its not working." I offer to look at it myself, but they assure me the experts will have things repaired in a few days.

Now I have my Treo in another pocket, so I could simply sit down and noodle around the net with it, but the screen is so tiny in comparison to the Tungsten and besides, I use the net on my phone all the time. There's nothing new or exciting about that. Then I have a brain blast (ok, so the kids have been watching Jimmy Neutron). The Tungsten has bluetooth in addition to wifi, and the Treo has bluetooth as well. With the 1.12 update its even sanctioned to let an external device use the Treo as a gateway onto the Sprint data net. At least it is in theory, I've never actually tested it before.

So I begin the dance of the bluetooth handshake. First I turn on bluetooth on both devices, then I make the tungsten discoverable, then I tell the treo to trust the tungsten, then I let the tungsten see the treo, and then I'm ready to start setting up devices. I tell the treo to let the tungsten try and access the net, which seems like an ok thing to do; but then I run into trouble on the Tungsten. I start muddling through what looks like the lesser of three wizards, but it starts off with the unfortunate question:

Do you have a GPRS data service?
GPRS? Yuk. No of course not. It then wants me to put the phone number in on my ISP. This is not going well. I try to fool it into thinking sprintpcs is the same thing as GPRS, but its not buying it. It finally tells me to go check the web site for updates. My geek-foo has failed. I resign myself to a fate of squinting at a small screen through a rather scratched up screen protector, when the food pager/buzzer goes off to let me know my order is ready, saving me from the tech dungeon.

So now, I've got yet another task on my infinite todo list. Call up Palm and berate them for not shipping the tungsten with SprintPCS network support in their bluetooth gateway profiles. Its not like Sprint has better data service then all the GPRS vendors put together, or in fact was the first vendor out on the Treo 650. Oh, wait, yes it was. What are those guys thinking.

  How I spent my day off
Ok, today wasn't really a day off, cause as a contractor I don't get paid when I don't work, but it was a Friday, and I wasn't working. But it was a worthwhile day anyways.

It started out a little rough, Oscar and momma headed off to the doctor as the six month old has been fighting some congestion for a while and it didn't really show any signs of improving, so I held down the fort with the two older ones. Zakary was trying to get the little driver to fit in the Rokenbok train cab and get the door shut while at the same time his brother was trying to drive the train down the track. I sided with Zakary and told Max to knock it off, which had absolutely no effect (we're talking a five year old here after all), so I cut the interface by relocating Max to the other side of the house. He survived in time-out period and went to sulk on the couch after that (which was fine with me), and would have stayed there except for the arrival of fedex with a rather large box.

There were two possible items it could be, and it turned out to be the less likely of the two: the last of the long lost legos. About six months ago, one particular seller started offering a lot of bulk buy items for sale. No picture, and his feedback was kind of sketchy, but I decided to grab a few lots (ok, I grabbed a bunch of lots, totalling 88 pounds). The reason I decided to give him the benefit of the doubt was price--usual lots sell on ebay for four to six dollars a pound (sometimes you can get a bargain in the three to three fifty range), but these lots went for about a dollar and a half. Even with shipping, I was only out slightly more than two dollars a pound. Of course I was out that money in April. Now at the tail end of November I was finally seeing a payoff.

I actually received one smaller box back in September, but a couple of weeks ago I finally got a 46 pound box (which we're still going through), and today the rest showed up in another large box. Well, there's few things that will cheer up a five year old more than a box of legos as large and as heavy as he is. So we spent the whole morning and part of the afternoon sorting blocks, pulling out partially assembled robots, spaceships and bionicles; and even digging out a few complete box sets. A fun time.

After that the kids took off to do errands with mom and I attended to other chores. While there are numerous projects around the house still ongoing, today I focused on the school shop where a number of issues needed some attention. There was a lathe that wouldn't power up, and sander that needed reconnecting, broken regulators to replace and some CAD software to configure. Spent the afternoon with the volt meter, pipe gunk and various other tools of the trade messing around, which brought its own kind of satisfaction as well.

My wife was a little puzzled by my attention to a shop I teach in a couple of hours once a week, but its more than that to me. The metal shop is a resource for the community (both for learning and for making things). Its a skill that hasn't been that important as we have imported materials and labor from overseas, but that dynamic is changing. Also teaching, and helping others making things, helps build bonds in the community; something which I think is going to be more and more important as time goes on.

So today was just one more small step making those connections just like the morning was making connections with my kids. Creating a legacy that will out-live me. In the grand scheme of things, probably much more important then all that XML, perl web-api stuff that makes up a day job. That stuff pays the bills, but you also have to make time for these other things, so that you can look back over the years and see progress towards those big picture goals. That's what puts a smile on my face at the end of the day.

  little one liners
perl is cool for many reasons, but one of them is for how much you can get done in just one line.
for (1..8) { print join(" ", map{ int(rand() +0.5) } 1..40) . "\n"; }
dumps out a perfect little strip on ones and zeros, just right for making some art out of

0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 0 0 1 1 0 1 0 0 0 1 0 0 0 1 1 0 1 0 0 0 0 0 1 1 0
0 1 1 0 1 1 1 1 0 1 0 0 1 1 0 0 0 0 1 0 1 0 0 0 0 1 1 1 0 1 0 1 1 0 0 1 0 1 1 0
0 0 0 1 1 1 0 0 0 1 1 0 1 0 1 1 0 1 1 1 1 0 1 1 1 0 1 0 0 0 1 1 1 0 0 0 1 1 1 0
1 1 0 0 0 1 1 1 1 1 0 1 0 1 1 0 0 0 1 0 0 1 1 0 0 1 1 1 1 0 1 0 1 1 1 1 0 0 0 0
1 0 1 1 1 1 1 0 1 1 1 0 0 1 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 1 0 0 1 0 0 1 1 1 1
0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 0 1 1 1 0 1 1
1 1 0 1 1 1 1 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 1 1 1 1 0 1 1 1 1 0 0 1 0 1
1 1 1 1 0 1 0 1 0 1 1 0 0 1 0 0 1 1 0 1 0 1 1 0 0 0 1 0 1 1 0 1 0 0 0 1 0 0 1 1
  Really cool toys
I don't know where it hit me from, last thing I know I was randomly checking on Bosch hammer drills, and the next thing I know I'm wondering if there are any interesting hi-def cameras out there that record to hard drives. Must have been the curved concrete walkway I had to layout today at lunch. Or maybe it was the year old halloween candy.


In any case, I didn't find a hidef camera like I was looking for, but I did find the JVC GZ-MC500. What a cool looking camera, absolutely tiny, records onto CF and SD cards, and has three hires CCDs (for much better color than single CCD video cameras).

While I like my Canon GL1, I just hate tape. Tape is evil. Imagine a super thin strip of cheap plastic with a bunch of grains of rust glued to it (why do you think tape is brown). Then imagine going along and trying to twist magnetic fields in each of those grains, then sticking the entire thing on top of a cabnet somewhere where it cycles between hot and cold temperatures a couple thousand times, then putting those spools of plastic and rust back into a player and expecting to get the original bits back out. Its like raking a zen garden knowing its going to hail in an hour.

Could be worse, at least its not digital data. One wrong move there and you're data is just gone (punctuated by the sound of the tape drive seeking back and forth, hoping for a better outcome on the 80th pass: zeeshk, zuuurk, zeeshk, zuuurk). You know its going to stop in a moment, but not because its finally gotten the data–it's finally given up and you can forget about that data on the drive. Its just gone. Anyway, flash is the way to go for temporary storage, and once I've assembled a collection of the kids dancing about in their pajamas with socks hanging on their ears, I can burn it all away for safekeeping onto a twenty cent DVD-R where I'll probably still be able to read it 20 years from now.

If I wasn't so broke, in need of other expensive stuff like a new laptop and maybe a new car, and in flux work-wise; I'd so be getting one of these.

  Bits of tech
So now that I'm working on unix stuff again (change of directions onto another project, long story), I updated the cygwin stuff and dusted off my x-server hat to dig into why the system had been misbehaving. I had been using cygwin for sometime quite happily back on my old machine, but at some point things had gotten messed up and suddenly all my cool keyboard shortcuts had stopped working.

See I took the original design to heart, which was that presentation was purely up to the designs of the user. While this is probably not appropriate for every person, for a few of us power users its totally the way to go. I got rid of almost all window decorations, including title bars and other wasted space, and mapped every possible window management function I could think of needing to keyboard operations instead. So ALT+right mouse would move a window down, and ALT+left would raise a different one up. F1 would iconify a window ( as well as ALT + i ), and there were others for things like resize and move. It was a little big ackward when others would come to my workstation and want to do something, but the answer was as simple as shutting down my window manager and starting one from their account ( the applications themselves didn't notice one bit ). Then I could go back to life my own way when it was all over.

This got me a pretty powerful setup (see above for a screen-shot, shrunk down 5X just so it would fit in this window), except of course something had gone terribly wrong and all my keyboard commands were just clunking the bell at me instead of doing what they were supposed to do. I had tried mucking with the keyboard settings, xmodmap, keysyms and every thing else in the translation path I could think of; and given up in frustration before, but now I really needed it to work.

I'm not sure how I found it, but today I ran across xkbwatch. I didn't even look for a man page ( there isn't one anyways ), but seeing those little green squares solved the problem. Turns out that there are a few more modifiers being tracked these days. There's the usual shift, control, alt, and caps; but someone had thrown num-lock and scroll-lock into the mix as well. It was sitting there glowing at me, and as soon as I turned it num-lock off, all my buttons were back to normal. Looks like I'll just be able to define a second set of bindings with mod1 added in and I should be fine in any case.

Well on with the fun.

  Catching up on old TODO items
I was out Monday night trick-r-treating with the kids (Zakary decided to tag after his older brother Max this year), and I was discussing various things with the other dads that were in our pack, when we got on the topic of digital pictures. After our discussion on various shooting styles, places to print out photos and how to deal with the explosion of files; one of the other fathers mentioned that he had lost a year of pictures when his hard drive died.

[hard drive crash]

That got me thinking that I should really back up my photos onto DVDs. That got me looking at what I currently have and how to organize it into groups to fit onto DVDs. That got me looking into the various top level folders where I realized that some months weren't organized. ( I used to group photos by year, then by catagory, but this year I've taken way too many pictures. ) So that got me going back and just doing a quick sort of the photos before backing up, and there I found some old blog business that needed catching up on.

[hp kayak]

About a year ago, I wrote about my battles with my computer and a CDR burner. In addition to amusing a few people, this also got me on the first page of certain esoteric searches on Google, usually made by people at wits end because they couldn't find the information at HP's own site. I don't know if the information just isn't there, or maybe its hiding behind an especially difficult user-interface that Google can't circumvent, but in any case a few people have turned up at my corner of the world asking for help with various bits and pieces of info. The most recent was the dip switch settings.

Sorry its not text so you can't search it, but there's the settings for the HP KAYAK XM600 (and here's the motherboard layout for both series 1 and series two). It will be curious to see what other questions end up here.

Life in the middle of nowhere, remote programming to try and support it, startups, children, and some tinkering when I get a chance.

January 2004 / February 2004 / March 2004 / April 2004 / May 2004 / June 2004 / July 2004 / August 2004 / September 2004 / October 2004 / November 2004 / December 2004 / January 2005 / February 2005 / March 2005 / April 2005 / May 2005 / June 2005 / July 2005 / August 2005 / September 2005 / October 2005 / November 2005 / December 2005 / January 2006 / February 2006 / March 2006 / April 2006 / May 2006 / June 2006 / July 2006 / August 2006 / September 2006 / October 2006 / November 2006 / December 2006 / January 2007 / February 2007 / March 2007 / April 2007 / June 2007 / July 2007 / August 2007 / September 2007 / October 2007 / November 2007 / December 2007 / January 2008 / May 2008 / June 2008 / August 2008 / February 2009 / August 2009 / February 2010 / February 2011 / March 2011 / October 2011 / March 2012 / July 2013 / August 2013 / September 2013 / October 2013 / November 2013 / December 2013 / December 2014 / February 2015 / March 2015 / July 2016 / September 2016 / December 2016 / April 2017 / June 2017 / July 2018 / November 2018 / January 2019 / February 2019 / April 2019 / December 2019 / March 2020 / April 2020 / May 2020 /

Paul Graham's Essays
You may not want to write in Lisp, but his advise on software, life and business is always worth listening to.
How to save the world
Dave Pollard working on changing the world .. one partially baked idea at a time.
Eric Snowdeal IV - born 15 weeks too soon, now living a normal baby life.
Land and Hold Short
The life of a pilot.

The best of?
Jan '04
The second best villain of all times.

Feb '04
Oops I dropped by satellite.
New Jets create excitement in the air.
The audience is not listening.

Mar '04
Neat chemicals you don't want to mess with.
The Lack of Practise Effect

Apr '04
Scramjets take to the air
Doing dangerous things in the fire.
The Real Way to get a job

May '04
Checking out cool tools (with the kids)
A master geek (Ink Tank flashback)
How to play with your kids

Powered by Blogger