Sunday, December 21, 2008

Stay classy, Seattle

Palms in Seattle? Really?

Ah, winter. Which, generally speaking, I love - but, if it comes with any kind of persistent precipitation, cripples the Northwest. Not just because they're wimps when it comes to snow, it's at least partially justified by tendency it has to turn into ice and the number and variety of hills which make up Seattle proper. Outlying suburbs, not so much - for them it's mostly the wimpy part.

The studio I live in now is probably hermetically sealed, as evidenced by the condensation that forms on the windows. A couple days into the various storms it managed to drip down to the bottom and freeze, pictured here.

I also keep it cold in here.

Tigger, our inherited orange tabby, has an odd habit of licking things which suit him: gloves, coats, pant-cuffs, hands. It's anybody's guess what it's going to be, we have yet to identify any common element amongst his targets - there are other things which cats would typically love, like the wrapper from a stick of butter, which if given the opportunity to inspect he'll attempt to bury the same way he would his leavings in the litter box. However, he does leave a pretty pattern on the window:

Tigger Tongue Tracks

Given my easy proximity to work, and my distrust for the driving ability of others in these conditions (as well as a healthy respect for the elements and an acknowledgment of my own limitations), I haven't been driving since it snowed. That means my car's been parked out on the lonely street accumulating snow this whole time, along with a few others in the neighborhood.

We've had about 8" so far - the first night was the strangest though, it started snowing in pellets before changing to conventional flakes. Not hail, honest pellets of snow that you could hear hitting the foliage - around 5am it was accompanied by a couple bolts of lightning less than 1/4 mile north of me, too. First time I've ever experienced lightning first-hand during a snow storm.

Last night added its own strange condition to things, blowing in tiny flakes for much of the night and eventually causing everything to ice over. I'm not sure if it was a change in temperature, or a fog which settled in on everything, or what, but the top 1/8th of an inch of snow has frozen into a texture like frosted glass. Every footstep crunch-crashes through the crust into the fine powder below. It made digging out the car an experience too, since it was not spared this treatment - in fact, any area not covered in snow is also covered with this same sheet of ice.

Ice sheet from snow - broad view
Ice sheet from snow - edge view
Ice sheet on side mirror

Which brings me to the title of this post: Stay classy, Seattle.

When I was 17 I got into a minor car accident in the Northwest. There were almost 2 lanes westbound on this street, but not quite (or at least not officially). There also isn't a turn lane, and shortly after an intersection the car directly in front of me stopped in order to turn left. I hesitated a moment, decided there was probably enough space to the right that I could go around him, and put on my blinker after checking my rear-view mirror to make sure traffic behind me was indeed stopped and was making no indication to go around me. Between the time I put on my blinker and started to move, the driver behind me decided that was a good idea too and pulled around on the right, and managed to clip the front third of my passenger side.

After pulling off to the side of the road to inspect things we wanted to make sure everything was in order and call the authorities in case a report needed to be filed. This was before the time when cell phones were common place, so neither of us had one - it was therefore decided that, since the other driver lived nearby, he'd run home real quick and give them a call from there. Which he did, and promptly returned, and everything was squared away - no report was needed because the damage to either vehicle didn't exceed the threshold, and no ticket was issued although I was apparently at fault for failure to yield right-of-way (another one filed under lessons learned).

It didn't dawn on me until days later that the driver of the other car didn't have to return. It was some time after that I realized that I too could have just taken off (we hadn't completed our information exchange yet) while he was gone and just left him in the lurch. My realization wasn't a "would have gotten away with it too if it weren't for you meddling etc." epiphany, it was more akin to a rumination about what a remarkable area to live in. That's just what the culture was.

Was. Past tense.

Hit & Slide

No note, no indication of ownership. I've heard spinning tires up and down the road and knew it was bad shape out there. I've always turned down the music and paid close attention, listening for the fateful crunch that would indicate assistance was necessary and/or somebody owed someone else money. Never heard it though - which means this probably happened some time Friday while I was still at work, and I missed it when I arrived home that evening. There are no recent tire tracks (and they're easy to spot in 8" of snow) that correspond to the accident, which is my only other clue as to the timing (it snowed fresh Friday night and most of yesterday afternoon and night). I'm fairly certain they were headed West (toward the rear of the car), as evidenced by the fact that the remains of the hub-cap were all slightly to the west of the rear tire.

Hub Capped

Though I suppose it's just as possible they were sliding to the East, knocked the hub cap off, and a spinning tire ejected it to the West on their way. Either way I don't think someone could have done this unknowingly, which makes the lack of ownership disappointing.

Fortunately the door opens, moves its full extent, and closes just fine. There's no disposition in the tire which would indicate axle damage, and the sidewall is completely intact. It hurts the resale value of the car, and will probably contribute to the deterioration of the body, but the immediate serviceability appears intact. I'll find out when I move it later today to go to church, and eventually stash it in the garage of a friend for an extended stay while I visit Utah next week.

And if I hit anyone while I'm driving, which is unlikely, I'll be sure to leave a note.

UPDATED 2008-12-21 20:28

I was informed by a fellow motorist in passing (whilst stopped at an intersection) that it appears one of my rear wheels is about to fall off, based on how it's wobbling. A little more than superficial then I'm afraid - I have either a bent rim or a bent axle. I'm hoping it's the rim, since it's an order of magnitude less expensive - we'll find out when I finally have a chance to take it in for repairs after the holidays.

Tuesday, December 16, 2008

Lessons Learned

Let It Be Known, That:

Even In A Pinch, Despite Mutually Agreeable Holiday Sentiment, That:

Egg-nog Makes A Really Nasty Creamer for Hot Chocolate, and That:

This Use is Not Recommended and May Be Punishable By Blech.

That is All.

Sunday, October 26, 2008

Video Glasses

As if the world didn't need further evidence of my nerddom, I have gone and purchased video glasses: Vuzix iWear AV230 [site is down as of time of writing], as sold by woot in a bundle with an iPod adapter for $99 (plus $5 shipping). I've wanted to try out a pair of these things since they were monochrome and $500+ in yuppie product magazines - at this price point and feature set I'm pretty happy. With the new job I'll be doing considerably more traveling by plane (and potentially commuting great distances by bus and/or train) - which, combined with video via an iPod touch, makes these ideal for passing the time in fun and educational ways (yes, educational - I'm a big fan of the TED video podcast, the MIT Open Courseware lectures, etc.).

Vuzix iWear AV230 BoxThe specs are a little on the light side as far as the current offering of video glasses are concerned - 320 x 240 (old school VGA), equivalent viewing distance of 44" 4:3 screen at 9' (which, for my arm length, looks about like an 8½ x 11" piece of paper held at full reach). Nothing super-stellar or all encompassing from the viewer's perspective, but certainly comfortable for standard definition video. It accepts RCA video (and audio) in, making it versatile and accommodating for a broad range of devices and applications. It will also automatically demux field-sequential stereoscopic signals onto the independent screens, making full 3D a possibility (though poorly supported by available media).

Vuzix iWear AV230 UnitThere are Zero controls or configuration options for the main unit electrically speaking (though the individual lenses can be adjust by +2 to -5 diopters via focus wheels in the bottom): it turns on when it detects a video signal and turns off when it doesn't. No volume choices, brightness, contrast, etc. The speakers (not headphones) can be bent lightly into position above or near the ear in order to change the effective volume, but there are no options in-line. Given that many media devices output a fixed volume on their audio, this may be less-than-ideal in many situations, although what I've demoed so far seems to run too loud (easily corrected with position) rather than too soft. It's also possible to remove the speaker stalks, enabling head-phone use. This is helpful for those situations where whatever device has its own gain handling and separate headphone jack, which for the iPod is perfect and also very necessary for in-flight use with the high ambient noise and the high-gain audio required to overcome it.

Vuzix iWear AV230 Unit POVThe adjustable (and removable) nose piece has large soft rubber pads which make it not-uncomfortable to wear for extended use, but which will leave marks on a person's bridge. I don't recommend trying to use these for very long without the lanyard either, which helps to secure it to one's face and preserve the viewing angle (which otherwise can be tricky for reasons I'll get into later). It also helps prevent them from slipping - 4oz. doesn't sound like a lot, but when all of the weight is forward and on an inclined slope, physics does tend to take a hand and they will slip.

Vuzix iWear AV230 Lens ImageThe image quality is good, although photographing it turned out to be one of the most technically challenging pictures I've ever attempted. The result here is a little blurry, but that's an artifact of the difficulty of maneuvering the camera into place and getting the focal depth set just right - the comparatively long shutter speed didn't help either. These were not designed to be photographed, but they do work excellently with the optics of the human eye (other species mileage may vary). Now here's the tricky part: these are based on high resolution LCDs (320 x 240 may not sound very high, but fitting 320 x 240 x 3 [RGB] addressable LCD cells within a ½" is not a trivial feat). LCDs have optimal viewing angles in 2 axes, which left the designers up to figuring out a balance between determining best average pupillary distance, or best main-unit tilt. The outcome of this decision dictates where the broadest axis will be placed and whether the displays will be addressed from the top or the side and the resulting structure of the interior and lay-out of the circuit. So let's take a look.

Vuzix iWear AV230 GutsSeveral competing factors and decisions are illustrated in this image. First, nearly ¾ of the depth of the unit (and who knows how much of the overall weight) is dedicated to the optics in front of the actual LCD (little clear & white box under the yellow tape on the right). If there were ever an argument for high-resolution Fresnel lenses, this would be it (assuming that the etching resolution doesn't inadvertently turn it into a diffraction grating). They also chose to mount the displays symmetrically, with their input regions both oriented directly toward the main circuit board.

This is actually Bad News. While LCDs don't have a top or bottom per se, they do have common properties in terms of the breadth and bias of the viewing angles they support. Since they chose to put the widest range in support of the pupillary variation, that means the supported vertical tilt range is dramatically reduced. These are also identical displays - they were not manufactured in mirror image of one another, so essentially what's been done here is to rotate one of them 180° from the other and use some sleight-of-circuitry to render one display upside-down in order to correct for that rotation. This seems more costly in the development and design to me than simply running the generously long ribbon cable to the far side of one of the displays and using a combined signal wherever possible - I wonder what cost savings they actually realized from of the symmetrical physical assembly they chose instead, if any. The real reason this is a problem is that in the right-eye display, the bias angle to see the best contrast is a degree or two below horizontal, while the left-eye display is a similar offset above the horizon. If one wears the device perfectly level across the face, either A) both displays will be suboptimal and a little washed out in their contrast, or B) one image will appear brighter than the other, creating an uncomfortable viewing experience. From what I've read and personally experienced, B seems the more common option.

It is possible to correct for this in 1 of 2 different ways. First, the wearer has the option to arrange the glasses slightly askew - enough to better align the two disagreeing angles but not enough to throw off the stereoscopic reconciliation and produce a double image, or secondly: to tilt just one of the LCDs within the unit until it agrees with its sibling. The latter option is preferable but problematic, in that the displays are affixed to the frame with a mild adhesive. Glues and electronics are a nasty combination even without throwing optics into the mix - I might be able to perform the kind of delicate surgery required to correct this, but not with the few crude tools I brought with me to the apartment (the rest being left behind in Utah pending the sale of the best house ever and subsequent family move). So for now I'm opting to downgrade from "Nerd" to "Complete Tool" when making use of them by wearing them lopsided - and at these power consumption and battery specs, for 4-5 hours at a time.

Totally worth it.

Friday, October 10, 2008

A Good Geek in a Bad Economy

(e • KAAAAHN!! • o • MEE)

As previously mentioned here, I need to sell my house due to my relocation to Seattle. The current economic and real estate climates are anything but friendly to this kind of venture - we plan on recouping some of that when it comes time to buy a new house in Washington, taking advantage of the buyers' market, but first we have to suffer through it as a seller.

Enter "m4d g33k 5ki11z" stage left: creating the Best House Ever site was just a beginning; it isn't really useful just sitting there, people have to know about it. Putting it on the fliers or associating it with the MLS data only serves as a limited enhancement to what the fliers and the MLS are already providing. In the strictly online realm there are so many places to find information about listings now that there's just too much noise to stand out in; especially when considering that the price range is not uncommon for the region, even though the value represented by that price is a good deal. There's just no way to immediately represent that and draw the kind of attention that will sell the place.

Our thinking, which is perhaps naive, is that with a place as gorgeous as this one, at that kind of price point, someone is bound to recognize the bargain and snatch it up. In order to increase our chances and/or decrease the timeline we need to draw attention and get as many people informed of the details as possible. We know the traditional avenues are saturated, so we'll expand our options a little bit.

On the main transportation corridor in the Salt Lake City area there are 2 LED billboards, one north-bound and one south-bound at places where traffic already naturally bottlenecks during rush hour (maximizing gridlock exposure). I don't fault the billboards with that slow-down though, they don't use any animations, they have immediate transitions (no special effects) and use 8-second exposure windows - so it's not terribly distracting, any more-so than other multiple print billboards (which typically use rotating slats to accomplish the same thing) have been: they just have excellent position. It turns out that it's really not that expensive to buy ad space on these things, so we whipped up a billboard graphic according to their guidelines and signed up.

BillboardThe thinking here is that you can't normally advertise a single property on a billboard - the address information makes it impractical. At best you can list a housing development or various real-estate offices, or things that promote developer brand recognition and the like. The URL we have positions us uniquely though, and gives us an opportunity to try out an otherwise incompatible medium. I've had Google Analytics installed since the beginning to give me a good idea of who was hitting the site and where they were coming from. I thought to use this to see what changes there were in the trend of repeat untracked traffic (coming in directly) by region to measure the effectiveness of the ad. At first I was a little disappointed by the results, showing no real change (not that we're talking about a huge volume here anyway, this is so hyper-niche). I broadened the view and found out something interesting though - visitors were coming in from Google search after having typed in "best house ever," ostensibly from having seen the billboard and/or hearing about it.

Problem is, beyond the URL that text isn't highly featured on the site, nor has the site itself been around long enough to appear on the front page search results (it's top on the second page as of this writing). This means there are a few things I need to change in the contents, and that I should use the webmaster indexing and site mapping tools to increase the relevance of the content from the spider's perspective, and find some way to increase the in-bound linkage. All those things take time to register in the index ranking though, and this campaign is live now - and potentially time sensitive, since we have an open house this weekend.

So I signed up for Google's keyword advertising (I like Google, can you tell?), and snapped up ads relating to "best house ever," "best house," and "sandy house" since all of those are potentially active derivatives from the content on the sign. I restricted the target region to anything inside of Utah and turned it on. Their plans are really economical, and the controls and restrictions available even in a basic account I'll only be spending money for legitimate interest. Being so niche as this is, that means I'm A) saving money over other advertising because I'm only going to owe them anything when it generates activity, and B) I can restrict that activity to the most likely sector and not bother with a lot of costly noise.

I've alse tied the billboard graphic into the main page in order to create a visual association so folks know they're in the right place, as well as a notice of the impending open house. These will automatically deactivate based on a timer after the closure of each event, keeping the maintenance cost low and hands-off. A little bit of technical savvy might go a very long way in this case - and for those also in the geek community, not that it will necessarily impact the sale of the home, I whipped up an ad that might help it get some viral distribution traction online: Free House with Purchase of Domain Name!

I'll let you know how it goes. If this prevents us from having to lower the price, or from having to lower it as far (which is always the standard realtor's refrain for attracting buyers) we're ahead of the game.

Monday, September 15, 2008

Best House Ever (.com)

I've settled into the Seattle area reasonably well, and even have a few blog articles in the works courtesy of time commuting on the bus. They're enough in-depth that they need a little bit more polishing though, and that's hard to do without sitting down at a desk - and when I've been at a desk, I've been working on

Best House Ever (.com) Preview
Being a geek I decided to see if I could make it a little easier to get our house noticed (Utah's got a saturated real-estate market), and to transmit that information by word of mouth. I was fortunate that an easy to remember, difficult to misspell, and catchy domain was available for exactly that purpose. Usually there is a unique domain per house these days for those which do actually get web sites, but they're derived from the address like "", which works OK on a flier or in email but not conversation where it would requiring writing down and later review. For purposes of compliance I picked up the address-as-domain too, and promptly pointed at the Best House Ever site.

I'll probably sell or rent the domain name to others after the place sells, or maybe even hang onto it in order to launch a company which does an extremely limited / premium service, maybe 1 house per-region with regions auto-selected based in geotargetting (but overridable through navigation to see other regions) for a pretty penny. For the moment I'm just hoping it brings enough attention to sell this house, which we're offering considerably under market (and drastically below tax assessment) just to unload it quickly so we as a family are not separated for too long. Selling it at this price shouldn't be hard - getting it noticed in the current market is the sticking point, so tell your friends, neighbors, co-workers, colleagues, associates, relatives, acquaintances, etc.

They won't even have to write it down.

Sunday, August 10, 2008

Seattle Bound

Mount Rainier
Effective September 1st I'll be working as a Sr. Manager of Software Development for in Seattle, Washington.

This is a decision a while in the making, and a tremendous opportunity for the family - but not without sacrifice. There are many in Utah we'll miss deeply, and much extended family we'll be away from. Rather serendipitously, we do have some family ties in Washington, and having grown up near Seattle I do still have a network there we can plug into.

I'll have more updates as soon as I can, but the next 3 weeks are going to be packed getting ready for the move and prepping the house for sale. Oh, and for those unfamiliar, the above picture is of Mount Rainier, Washington's highest peak, as visible from the plane on my return flight from the Amazon interviews.

Wednesday, June 25, 2008

Chapter 1, Scene 2, of something I'll probably never finish.

So, after 13,000+ words of manuscript text and who knows how many in the outlines and various scene roughs, I'm pretty sure that the current novel attempt had contracted a terminal case of World Builder's disease. This happened a few months ago, when I realized that there was quality in the writing that editing could save, but that it would require a larger effort than I could dedicate to it within my time constraints. Instead, I lovingly laid the files aside and decided "That one's for practice... or at least for a time far away from here."

Which means I feel entirely safe sharing bits and pieces from the unfinished rough of the manuscript, because these are posthumous as it were. Continuing on, then...

Yuri's breath reflected a hollow kind of echo into his ears in the isolation suit, forming a rhythmic barrier between him and the howling of wind in the thin atmosphere only inches away. Small beads of sweat tickled down his cheeks and nose in defiance of the built-in sweatband. The rest of him was sure to be soaked as well, when he finally stripped down.

He finished muscling the new greenhouse frame into place and bounced easily back to the cargo hatch of the crawler. Two more trays of green-black slop waited for him there, typifying the infinite patience available only to dirt. With barely a grunt of effort he hauled them into place and swung the hinged transparent lid down to lock above them. Almost instantly the tiny spikes of hoar-frost that had sprung to life on the short journey between compartments evaporated from the lumps of muck and turned instead to a fog of condensation on the interior of the golden-hued crystal glass. Yuri nodded approvingly.

He reached into the control box and twisted valves for the hoses connecting this stand to its several hundred siblings, then touched a microphoned finger in his left glove against the junction. The short, high hiss ended abruptly with a melodic snort as air sloshed and rebounded between chambers. Satisfied, he mounted the slow six-wheel and began the forty-minute trip home.

"Honey, are you on your way back yet?" His wife's voice interrupted the labor-bestowed reverie, suddenly making it feel much shorter than the several hour respite he felt he deserved. He waited until his sigh was done and cleared his throat before activating the pickup to respond.

"Yes, darling, just finished. A little more than a half-hour out now."

"Everything go OK?"

"Mostly. There is still more dust on the roof than I like." The latest attempt to thwart the constantly shifting deposits of Martian soil had only succeeded in arranging the micro-drifts into interesting patterns. "And FIDO's charge seems to be a little short."

"Will you be able to make it home?" Her sudden concern sounded more needy than anxious for his safety. Or even his convenience.

"Yes, with several hundred kilometers to spare. There is no worry, it is just an annoyance. I'll bring it into the shop tomorrow and have a look." A few amps wouldn't make a difference one way or another, and it's entirely possible that the non-linear initial drop was in keeping with the power profile for the unit. Still, no sense in taking risks. And maybe he'd get the quiet he was looking for.

Lynette sounded disappointed after a moment's hesitation. "Alright. Just be careful. And let me know when you're getting close so I can start dinner."

"I will need to shower first."

"Come straight home then, but please hurry." She sounded fragile in his earpiece. "I love you."

"Love you too, darling." Yuri closed the channel and guided the large vehicle back across the worn and rocky path toward the outpost.

Some distance to the east, Lynette returned the radio handset to its dock and slumped deeper into her depression. As though mourning a lost world and family weren't enough, she now pined for a man somehow distant even when he was in the same room. Her sworn strength and lifeline.

She looked out a porthole window at the too-small evening sun; another day gone.

Wednesday, March 26, 2008

Persistence, Part II

PoV Screenshot A few more words and details about the Persistence of Vision hack previously mentioned. Pictured at left is a screen-shot of the application in operation. The astute observer will note that there's enough room for at least 3 more columns to the right of the one on display, and may even wonder why I didn't incorporate that space as well. Honest truth is I did - but the switching time (based on navigating the object model behind the scenes) was painfully slow when the additional 18 cells were added to the process, enough so that the entire effect was rendered defunct (the speed required for movement to match the manifest processor lag was slow enough as to nullify the PoV phenomenon). While it may be possible via native code (sans-framework) and/or enhanced algorithms to achieve a sufficient switching rate, the refresh rate of the screen still poses problems.

The photos of the demo operation in the original article testify of this. Looking closely, there are a few instances where one of the 5 columns composing the virtual letter is absent even in the interior (not on the edge of either the wave or the letter). This demonstrates the mismatch between target refresh rate and screen draw/refresh. Also in that picture my fingers were being held such as to cover the battery/status bar visible at the top of the screenshot (although imperfectly, as evidenced by the tracer in the demo photo). All this griping and analysis is fine for diagnosing the problem, but doesn't do anything to improve chances for success other than defining a starting point. So...

  • Full-screen draw available via native libraries (eliminates the battery/status bar)
  • Improved drawing routines (faster object navigation via native libraries, bitwise AND comparison to minimize number of addressed cells per call, etc.)
  • Automatic brightness control (demo was taken at half-brightness w/auto adjust turned on - sub-optimal test, and an error of omission on my part).
  • Processor and/or screen overclocking (don't know if this one is possible yet) OR tapping into hardware accelerated GL routines for performance
  • Not being so @#$& picky.

I'll state for the record here that I have satisfied my original curiosity in the exercise and do not anticipate investing the time to explore the above (or other) solutions. I'm willing to let this one die on the floor and move on to the next project(s) I have in mind, which may or may not eventually be disclosed here. Anybody interested in the source code to this point is welcome to contact me.

Friday, March 21, 2008


Not too long ago I was fortunate enough to pick up an iPod Touch (bonus had come in from last year's work). The device has been remarkable, smaller than it looks and packing a nice little portable media punch. It also happens to be a fairly robust mobile computing platform, as evidenced by the strength of community development for the device even prior to the release of the official SDK. Being a developer myself, I was intrigued enough to give that part of it a shot.

Rather than put together an Intel hacintosh or risk the wrath of my wife by messing with her new Intel iMac (used for her wedding photography) as required to run the X Code IDE/SDK, I decided to use Jiggy's JavaScript based framework and IDE. While this surely introduces some functional limitations and performance overhead, it was also a very painless way to slap together a proof-of-concept to get a good idea of the problem space I was approaching.

Given that the device contains a set of accelerometers (used by the iPod/iPhone user interface to determine landscape and portrait layout), I thought it would lend itself well to a Persistence of Vision hack - which is to say, using a thin portion of the display, flash certain bits of it on and off as the device is shaken back and forth. The flashes correspond to certain spaces of the visual field during the swipe, and as a result of the mechanics of the human eye (which takes roughly 1/60 of a second to clear out the stimulus) appears to create many little spots floating in the air which can be used to write letters, display images, etc.

I first encountered the effect at a novelty store when I was about 9, when I saw a clock which consisted of a sturdy base and a spring-loaded wand which, when flicked, would flash it's LEDs as at waved back and forth and created the illusion of floating time. While several devices have picked up the gimmick since then, I've never actually bothered to own any of them. Now that the opportunity was right in front of me with a low barrier of entry, why not give it a shot?

PoV Space MathFirst came the math. Working with my wife we were able to determine that a good hand-wave average was roughly 16", making a full cycle (back and forth) every 1/2 second or so (11 over 5 seconds). In order to achieve sufficient resolution to be able to display any letter of the alphabet discernibly, while still keeping the overall number of cells sufficiently low (so as to have low logical and processing requirements) we chunked this 16" section into 6 letters per wave, with each letter broken into 5x6 segments. 6 letters per wave is pretty low, but the idea was to have a word persist only through a single wave - as soon as the accelerometer detected a significant shift in direction it would load the next word, allowing sentences to be spelled out sequentially.

( 6 letters * 5 columns = 30 columns ) / 16" / 0.25 sec (single wave phase) = 120 columns / 1 second, or 120hz switching. In order for a line to pass through 1/2" of space during the course of a single wave, it would need to be on for only 0.008333... seconds. That's for a perfect line - I would of course be switching a region rather than a mathematical construct, so I would in theory need to divide that 120th of a second by the width of the region in order to achieve the target resolution. I fudged this part, and for the sake of the proof-of-concept development decided to have the region correspond to the width of the column itself - 1/2" square, which means that if everything worked perfectly a total of 1" would be illuminated, a 1/2" of virtual overlap with itself (area of continual brightness) giving a linear fall-off to either side. So the letters would look a little fat and maybe just a touch blurry - but that's acceptable to start with.

However: most displays only refresh at a rate somewhere between 70-90hz. If I'm trying for 120hz it means that each cell would fall quickly out of sync, ending up only partially drawn or have some frames of display skipped altogether (compounded by the actual switching rate of the LCD). The second component of the problem is the brightness of the display itself - in order to sufficiently invoke that perceived persistence of stimulus, a certain intensity is required. If intensity is not available contrast may be substituted, but this means it will only ever work in a darkened environment.

Despite the math working against me I decided to give it a go. Setting the interior timer to 120hz is easy enough, but I suspect the time to navigate the DOM logic to the desired cells and switch their states runs slower than that anyway, plus whatever overhead the Jiggy framework required to assist in doing that. I set up the code to follow this plan, draw a column of cells and switch them over the course of fractional sections to the different mapped columns which comprised an entire letter table (in this case a letter is an array of 5 different numbers 0-63 which corresponds to a 6-bit binary display indicating which cells to turn on and off - makes for very tight book-keeping and rapid addressing, and binary logic is just fun anyway so why not?). My test consisted of letters A through E sequentially set up in memory in a per-wave array (all in a single wave) with events tacked to the accelerometer which would catch significant departures from one direction to the next and determine whether that array was being walked forward or backward, even capable of reversing mid-display.

PoV Wave Demo And it almost worked. In the end I had to simplify the display to at most 2 letters, and it only works if 1) the room is dark and 2) one covers the persistent battery-level display at the top of the screen (otherwise it wrecks the PoV effect). Photographing this is especially difficult when one is both the photographer and demonstrator, compounded by doing it in a dark bathroom shot "through the mirror" without being able to effectively test the composition. In the end I got a few good shots and many not-so-good - shown here are 2 images (ISO 80 f/2.0 @ 1/25 sec, the display simplified to just the letter 'A') combined and slightly enhanced for contrast. This shows the difficulty of keeping in sync with the animation - something that with enough tuning of the accelerometer event code and a steadier hand would become easier, but which I don't plan to pursue due to the aforementioned global limitations. The predicted linear fall-off is visible, as are the very slight gaps between vertical blocks on the display.

Overall I'm very pleased with the exercise: it taught me more about a really fun toy, gave me a chance to play with some simple science, and allowed math to Save the Day. Everything worked almost perfectly the first time and I come out richer in knowledge for the effort. The fact that any of this at all pleases me just reinforces the fact that I'm in the right line of work - I'm pretty sure most of the world would find this pretty dull. Hurray for geeks!

Wednesday, March 05, 2008

Not Dead

I ain't dead, or even disinterested. Just very very busy.

And happy. Much is going on, it's good, and active enough that several pending articles remain incomplete for now. I'll be back in a while.