waking up on whidbey

well, we have arrived on whidbey island. it was three days of driving nearly 1600 miles. it started off poorly when the uhaul truck had brake problems before we even left the lot. and then more problems again before we left phoenix (supposedly loose wiring in the dash). and the radio didnt work, and neither did the windshield wipers (luckily we had good weather for the whole trip, even through portland and seattle). when we pulled up to the new house, there were two service trucks in the driveway because the gas furnace was not working. it was a toasty 42 degrees in the house when we arrived. but, they got the heat fixed and the truck did make it without leaving us stranded. and although i was sure we wouldnt be so lucky, all of our stuff survived the trip mostly unscathed. we still have stacks of boxes to go through and unpack, but we are making progress. we have already tried the local chinese place and the local pizza place (twice). i guess we are no longer arizonans and officially washingtonians.

 

old house sold, new house rented

well, my house finally sold. it was a quick and easy closing, so that part was nice. the worst part was moving out - not the house (since i dont have hardly any possessions), but the garage, since it was filled with hundreds of landcruiser parts of all shapes and sizes. i actually missed out on all of the fun of the move since i was out of the state at the time, but michaleen and her girls saved the day by handling it all for me. i owe them big time.

anyway, now that i am out of my old house, it was time to turn the attention to finding a new place up on whidbey island. since we arent sure what our long-term plan is, we decided that renting a place for now was the best idea. we found a great place that is on 5 treed acres on top of a hill, with great views of the puget sound, mainland, and cascade mountains. you can see the view in a couple of these pictures.

this last picture is of the house we are renting. we have only seen the outside and peeked in a few windows, so we dont even know what the inside looks like yet. guess it will be fun to find out when we arrive up there next month.

 

Flagstaff Adventure Race III

it was a beautiful day to race up in flagstaff - the weather was great, the leaves were changing colors, and mark put together a fun race for the series finale. team Sierra Adventure Sports was hoping to do well following their 1st place division finish at the last race. alas, it was not our day and we finished 3rd (out of only three teams in our division) and only a couple places up from being last overall.



however, since we did well in the previous two races of the season, our 3rd place finish was enough to keep us in the lead in the points series, so i am happy to announce that team Sierra Adventure Sports takes 1st place in the 3-person division for the 1st annual Flagstaff Mountain Racing Series. we even got a little trohpy and some cool prizes for our achievement. as rick said later, "we raced against monster, and we were the ones who came home with the trophy" (even if that statement is slightly misleading).

 

Desert Rage - San Diego 2006

this past weekend was Desert Rage - San Diego, the third race in the Desert Rage series and the first one i had done outside of arizona. the event took place on lake hodges, and although i had high hopes of spotting Hodgee, he was nowhere to be seen that day. as for the race, it was 11+ miles of kayaking, about 9 miles of trekking, and 13-ish miles of mountain biking for a grand total of almost 34 miles. i finished 4th in the solo division, which wasnt all that great of a finish, but i was still pretty happy with the outcome.



you can check out the full results and a bunch of pictures on the sierra adventure sports website.

 

is the end of the world near?

i did something the other day that i never thought i would do. i couldn't conceive of a reason why i would ever even consider doing it. but i did it - i changed my homepage from google *gasp*!

in the name of full disclosure, i only changed it in firefox (google still reigns in IE), and i am not yet convinced it will be a permanent change. but it has been almost a week and i havent gone back yet.

so, what wonder of modern technological achievement could have swayed me from the almighty google? a small little site that most people probably have never even heard of: netvibes.com. aside from being a snazzy web 2.0 site that are so popular with the kids these days, netvibes is actually a pretty cool little app. in its simplest form, it is really just a personalized 'portal', not all that different than what you could get from yahoo or google. but it has a lot of nifty little features that the big guys dont have like easy feed reading, email monitoring, calendaring, etc. and best of all, their API is available so even if you dont find a module that does what you want, you can just add your own.

but the coolest thing about netvibes.com is the interface. of course, it is all ajax-y as you would expect, but it actually uses the technology to make the app *better*, not just fancier. in the limited amount of time i have been playing with it, the app has been responsive and fast and very intuitive. i have been toying around with the idea of a website like this for sometime now, and i guess the highest praise i can give netvibes is that it is the real incarnation of the site i had envisioned in my mind.

so check it out for yourself - who knows, maybe it will change your world too.

 

Gilmore Adventure Race 2006

Team Sierra Adventure Sports takes 2nd in the male 3-person category at the 2006 Gilmore Adventure Race! It was a long hard course, but everyone had a great time. Read Rick's full write-up at Adventure Race Reports.


 

house & landcruiser updates

the home improvement projects are finally wrapping up and the end is in sight. spent most of monday wrapping up the exterior landscaping and, with a lot of help from michaleen, things look great! my house has never looked so good (if i do say so myself). here is just a teaser picture - i will try to post up a whole batch later on. also, the landcruiser is making progress. the body work is nearly done, and it is almost time for painting. go here to check out the latest pictures.

 

Flagstaff Adventure Race II

last saturday was the second race of the first annual Mountain Racing Sports Flagstaff Adventure Racing 3-race Series. team Sierra Adventure Sports finished 1st in the 3-person division (6th overall) in the first race on May 20th and was looking to do well again in the second race of the year. we ended up with an additional racer for this race, making us the only 3-person team with 4 people. we gained time with some strategic puzzle-picking and rick's usual spot-on navigation. we also made up some ground on the bike leg, barely edgeing out in front of the guys from Gilmore Adventure Racing. at a blind-folded rock-climbing mystery event, we put some more distance between us (it helped that Carter just happens to own his own rock climbing wall). in the final ride-n-tie section, we knew that team Gilmore Adventure Racing was right behind us and closing the gap.



we were all beat, but determined to stay out in front. in the end, it was a sprint to the finish, but we edged them out by a mere 7 seconds! it was good enough for a 2nd place finish in our division, 5th overall.



check out some race photos at http://www.sierraadventuresports.com/sierrahome2gallery.htm and see the official results here: http://www.mtnracingsports.com/results.htm

 

cellar door - finally done

i dont know how many of you were lucky enough to get to see the 'interesting' cellar door that was in the house when i first moved in. for those that werent so lucky, imagine a giant trap door in the middle of my dining room, that was first tiled over, and then re-cut out so it could still open. between scratching up the wall, weighing about 100 pounds, and just being incovenient, i knew it had to go. i ripped it out and then was left with the dilemna of how to construct something better. i figured out a ladder-type access that would take up less than half the space, and not interfere with anything else in the room. i did the initial construction a while back, but never got around to finishing it. well, it is finally done! i was a little worried about what it would end up looking like, but i think it turned out pretty nice. here are a couple of pictures so you dont have to use your imagination.

 

new carpet

spent last week ripping out the old carpet in my bedroom and office, painting the walls, and getting new carpet installed. turned out pretty good i think. Bedroom

Office

 

brickfest montage clip 2 - psycho

here is my second attempt at a montage clip for the brickfest montage. it is not technically perfect, but i had a lot of fun making it, and hopefully it is recognizable even though the movie is over 40 years old.

Download the movie

Click to watch the movie

here are some of the things that i wished i had improved upon:


  • animation ended up a little herky-jerky because i had to slow it down a bit to match up with the audio
  • the zoom/pan was much faster than in the real movie, but again i had to match up my animation with the audio
  • the set was so tight that i had to use some extra legos to move the knife-wielder, and then forgot to mask them out, so they are visible in a few shots
  • the lighting is very close to the original, but not exact. the knife-wielder should have been more shadowy
  • the 'scream' mouth. i didnt have any appropriate mini-fig heads, so i had to draw the mouth in photoshop. not my best work, but better than the version i originally did


i was generally happy with the water effect for the shower, although it is not quite as obvious after the compression.

anyway, let me know what you think.

 

new stuff

lots of new stuff in the lego movies section, including: a new lego movie clip from The Blair With Project; a study in facial animation; and a sneek peek at my upcoming feature. read more about it here: Lego Movies also, the Big Sky Breakdown adventure race has been cancelled. read more about it here: Big Sky Breakdown cancelled

 

study 4 - mouth animation

although i have not yet finished my first film, i have still been experimenting with different animation techniques. for this test, i wanted to play with animating the lego figure's face to give more expression and the illusion of actually speaking. a great example of this technique is the Rapunzel short by Jay Silver (download here) - notice how the facial expressions really convey the minifig's emotions.

anyway, i was feeling a little lazy and didnt want to shoot an entire scene just for this test, so i decided to use some existing footage from my upcoming film. i used the corresponding dialog from the scene as well (so this is a little sneak-peak at the final film, although the final cut will NOT use the actual mouth animations).

next up, i downloaded a nifty program called Papagayo (http://www.lostmarble.com/papagayo/index.shtml) that is essentially a lip-synching program that lets you line up 'phonemes' (mouth shapes) with your sound. you type in your dialog, and it shows you the corresponding mouth shapes. turns out there are only a handful of different shapes required for most sounds in the english language (long O, L, B, U, etc). you can also add your sound files and adjust the timing. once you have all of of the timing figured out, it is just a matter of editing the frames.

so i opened up photoshop and created my 5 necessary mouth shapes. this was not too hard, since i took a copy of the original lego mouth and just edited it to the different shapes. then, using the timing specified by papagayo, i had to hand-edit the appropriate frames with the new mouth shapes. save everything and render.

the final result can be viewed here: mouth animation test

lessons learned:


  • adding mouth animations can make a big difference, especially on close-ups that would otherwise have little or no other animation to give the impression of speaking (moving hands/arms, etc)

  • getting the timing correct is important. my clip ended up being slightly out of sync because i didnt spend too much time getting it right in papagayo. the brain easily picks up on it when the mouth is not matching the sound

  • people dont convey all of their meaning with just their words. adding in facial expressions (moving eyebrows, squinting eyes, etc) would make the illusion much more realistic. i will save that one for another study.

 

big sky breakdown - cancelled!

on the eve of our big training trip up in the White Mountains, brad found out at the last minute that the Big Sky Breakdown in montana had been cancelled. their website still says 'Registration is now open', and apparently brad was the first person to hear the news. the organizers said that they had already had a fair amount of teams commit to doing it, but they had started planning too late and the course was still up in the air. they didnt want to put on their first race without it being top notch.

anyway, it is a bummer to not be doing it. but maybe something else will pop up.

 

brickfest montage clip

every year there is this big convention type thing related to legos that is called Brickfest (http://www.brickfest.com/). as part of Brickfest, Brickfilms usually sponsors an animation contest that goes along with the theme of Brickfest. many animators participate, and some of the best lego movies of the year come from competitions like this.

this year at Brickfest, they decided to add another component as well. before the public viewing of the animation competition entries, the organizers wanted to show a 3 minute montage of clips from famouse movies, all re-created in lego. the rules were simple: pick a famous scene from a famous movie, use the original audio track, animate the whole thing with legos, and make it all less than about 30 seconds long. it sounded pretty fun, so i decided to try my hand at it. click the image below to see my lego re-enactment of The Blair Witch Project.



Watch the clip

 

AjaxDelegate

By now, everyone and their dogs have jumped on to the AJAX bandwagon in order to make their web applications faster and enhance the user experience. (What? Your dog doesn't code? Hmmmm.) Like most programmers, I am lazy and didn't like writing my AJAX code over and over, so I went in search of a solid AJAX library. While there are lots of AJAX libraries out there with tons of bells and whistles, I wanted something simple and yet flexible. I also saw a lot of implementations of AutoComplete boxes and various other common AJAX scenarios, but I wanted an AJAX library that I could re-use, no matter what the project called for.

Design Requirements

  • Simple to use.
  • Must be flexible enough to handle any AJAX scenario.
  • Must be able to pass parameters to the XmlHttpRequest's callback function
  • Must be completely self-contained with no global variables, to ensure compatibility with unknown scripts.

Using the code

Using the code couldn't be easier. First, make sure to link in the AjaxDelegate.js file into your HTML page. Then, create two new JavaScript methods, one that will be called to kick off the AJAX event, and the other that will server as the callback when the AJAX call has completed. In the sample below, I created the getDefinition and setDefinition functions, and wired up the the getDefinition function to the onchange event of a SELECT tag.
function getDefinition(term, textareaID, borderStyle, 
borderWidth, borderColor)
{
if(term != "")
{
var url = "lookupDefinition.aspx?term=" + term
var ajax = new AjaxDelegate(url, setDefinition,
textareaID, borderStyle, borderWidth, borderColor);
ajax.Fetch();
}
}

function setDefinition(url, response, textareaID,
borderStyle, borderWidth, borderColor)
{
var word = eval(response);

var textarea = document.getElementById(textareaID);
textarea.value = word.definition;
textarea.style.borderStyle = borderStyle;
textarea.style.borderWidth = borderWidth + 'px';
textarea.style.borderColor = borderColor;
}

Under the Hood

When the onchange event fires, the getDefinition function is called. Within that function, a new AjaxDelegate object is created. The first parameter is the URL of the page that will do the behind-the-scenes processing. The second parameter is the name of the callback function that will get executed when the asynchronous call completes. After that, you can pass any number of additional arguments to the AjaxDelegate constructor. The neat part here is that all of these additional arguments will be available to the callback function when the call completes. Finally, make sure to call the Fetch() method to kick off the processing.

This example is making a simple GET request, but if you set the contents of the .formData property, the underlying function will make a POST request and pass the data to the url specified. This example also uses the responseText as the return value, returning a structured JavaScript object. You could also return plain text, JSON, or any other formatted data you like. Alternatively, you can force the AjaxDelegate to use the responseXML by setting the .isXML property before calling the Fetch() method.

When the remote page has finished processing, the function specified as the callback will be called. Remember, all of the arguments that were originally passed in are available to the callback function, along with the response from the HTTP request. At this point, you can do pretty much whatever you want to do with the returned data. (In this case, I actually returned a JavaScript object and used the eval() function to parse it). I will admit the the example is overly-simplistic and not very useful, but the point is to demonstrate the concept.

Although this is a simple little library, hopefully its flexibility will be useful to other programmers. By using a delegate pattern similar to the .NET Framework, it is incredibly easy to create JavaScript callback functions that take additional parameters. And since the code is self-contained, there is no need to have an XmlHttpRequest object with global scope that may conflict with the usage of other libraries or unknown scripts.

Download the AjaxDelegate library

 

big sky breakdown

so, i have done more than 10 adventure races over the past three years, including 4 just this year so far. but all of these have been of the 'sprint' type, which does not mean you have to sprint during them, but they are fairly short, taking 3 to 8 hours to cover 15 to 30 miles. the most recent Desert Rage at Roosevelt Lake was a little longer, taking me nearly 12 full hours to complete, but still considered a sprint. i have thought about doing a couple 24-hour events, but so far everything has fell through.

but what got me (and probably most people) interested in adventure racing in the first place was the Eco-Challenge. this expedition-type race was much more than a few hours out in the desert. teams had to cover literally hundreds of miles over all kinds of terrain, day and night. strategy and determination became exponentially more important than just being 'fast'.

but most mortal people will never race in the Eco-Challenge. so what is a budding adventure racer to do? enter the Big Sky Breakdown (www.bigskybreakdown.com) - an expedition-type race in montana. the course promises to take racers on a 250-mile course that should take 3 to 4 days to complete. a couple of friends that i met through adventure racing (brad and yvonee of teams Tubac, Start Slow and Taper, and Plan B) have been doing Rogaine's and other 24-hour events and got the idea that they were ready to step up to something bigger. when they asked me if i would be interested, i jumped at the chance. having raced with them several times before, i knew that they shared my outlook on things, namely:


  • stay friends

  • have fun

  • finish the race

  • worry about going fast

... in that order.

the race is at the end of july (27-30), so we only have two months to get all of our gear in order and prepare physically for the event. the race directors have already said that the events will include:

  • trekking (hiking)

  • mountain biking

  • river kayaking

  • tough orienteering/navigation

  • rappelling and Tyrolean traverse

the site goes into more detail about each event, and they also have a blog where they give peeks into the course and other aspects of the race. take a look at their site and see if it is something you would consider doing.

 

new site

well, here it is - my new site. most of this information was available before in various places, but now it is all under one roof. feel free to browse around and see what i have been up to.

 

project update - scene 4 is done

after another (slightly shorter) hiatus, production has started up again. after a doing a couple of test takes of the next scene a couple of weeks ago, i finally got around to filming the final version. filming went OK, although i had to shoot the entire scene three times before i was happy with it. i still had a noticable light change halfway through the scene, but it was nothing a little post-processing in photoshop couldnt cure. anyway, here is a teaser frame from the latest scene.

Movie Frame Clip

 

Removing the Flash border in IE (ActiveX content)

if you have visited a website lately that uses Flash, perhaps you have noticed a thick gray border around the Flash movies that you could have sworn wasnt there before. it isnt there in Firefox or Safari or Opera, only in IE. well, no, you arent losing your mind - it really *didnt* used to be there.

back in february (2006), Microsoft released an update to IE that causes this change. the change was a patch released in response to a lawsuit brought against Microsoft by Eolas, who claimed they held a patent on embedding content in the browser using 'plug-ins'. after a victorious judgement for Eolas, Microsoft decided to just change the behavior of IE instead of pay the judgement (something to the tune of $500 million dollars - you can read more about it at http://www.digitalproducer.com/articles/viewarticle.jsp?id=38506)

so now unsuspecting users who use Windows Update will get the patch and perhaps wonder what the heck happened. Microsoft announced the change (http://support.microsoft.com/kb/912945/en-us) and even provided a work-around to the ensuing problem (http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/overview/activating_activex.asp). Seems as though even they knew this change was a bonehead move and developers would immediately be wanting to get around it. The solution Microsoft offered up was essentially to remove the OBJECT and EMBED tags from your HTML and instead dynamically write them out using JavaScript.

for their part, Macromedia (err...Adobe) knew that this change would reflect badly on them, even though they were innocent bystanders as well. they proposed their own solution(http://www.adobe.com/devnet/activecontent/), which was essentially the same solution as Microsoft, but geared a little more toward Flash developers.

while both of these solutions work, they are more than a little bit crude. a nifty little utility called SWFObject (formerly FlashObject - http://blog.deconcept.com/swfobject/) can be used to avoid the problem, and provides some other features like Flash-plugin detection. still, at the heart of this solution is still dynamically writing out your HTML via JavaScript.

i decided that a new approach was needed. i set the following requirements for any solution:

  • OBJECT and EMBED tags should be in regular HTML and work as normal
  • minimize changes required for developers to implement the solution
  • be cross-browser compatible
  • still allow Flash content for users who have turned off JavaScript

the solution i came up with is actually quite simple. it involves simply wrapping the normal OBJECT and EMBED tags in a NOSCRIPT tag like this:

<noscript id="ActiveContent">
<object attributes...etc>
<embed attributes...etc>
</object>
</noscript>
in addition, a small chunk of javascript is included in an external .js file that performs the magic:
var flashContainer = document.getElementById("FlashMovie");
var flashMovie = document.createElement("div");
flashMovie.innerHTML = decode(flashContainer.innerHTML);
flashContainer.parentNode.insertBefore(flashMovie, flashContainer);
function decode(input)
{
var output = input;
output = output.replace(/</g, "<"); output = output.replace(/>/g, ">");
return output;
}


essentially, all it does is read in the contents of the NOSCRIPT tag, and then write them back out in a new, dynamically added DIV tag. The 'decode' function is necessary because Firefox automatically escapes the contents of the NOSCRIPT tag (i dont know why and could not find any documentation about it - other HTML tags do not exhibit this behavior). some of you might cringe at the use of innerHTML, but in this case, it fits the bill perfectly and is still way better than using document.write and concatenating the HTML string together.

this solution fufills all of the initial design goals:
  • the OBJECT and EMBED tags remain in the HTML source, full editable like normal
  • the changes simply require wrapping the intial code in a NOSCRIPT tag and linking in the external .js file, minimizing tedious changes for developers
  • the technique works across all various current-generation browsers
  • unlike the Microsoft and Adobe solutions, this solution still displays the Flash content if the user has JavaScript turned off since it naturally fails back to the NOSCRIPT content anyway (of course, the original problem of the border still exists, but no functionality is lost and this is a small segment of the population)

the code here is very simple but could easily be extended to automatically handle multiple different Flash objects on the same or multiple pages (document.getElementByTagNames looking for OBJECT would be a good start, then just traversing the DOM tree to get the elements you needed). come to think of it, you could probably get by without the NOSCRIPT altogether and just find the OBJECT content and re-write it out dynamically while nulling out the original innerHTML.

hopefully this will help those of you who have been frustrated by this recent 'feature' released by Microsoft.

 

Dam-to-Dam kayak race

paddled in the Tempe Town Lake Dam-To-Dam kayak race yesterday (http://www.damtodamevents.com/index.html). this was the second year of the event, and my second time participating in it. last year i did it solo in the recreational division. this year, i talked michaleen into doing it with me and we competed in the tandem kayak class. thanks to rick eastman for letting us borrow his two-man kayak for the event. we even came home with a first place finish (nevermind the fact that we were the only entry in our division) =)


 

Desert Rage II - Roosevelt Lake

the Desert Rage II adventure race was yesterday at Roosevelt Lake. rick promised that the race would be really tough, and he didnt disappoint. after the 4am dark start, we had a tough climb on the bike, followed by a crazy bike/hike down an old stream bed that is part of the Arizona Trail. most of the 'trail' was either big boulders in the streambed, or overgrown brush on either bank. after the bushwack, there were several miles of killer climbs up some rocky powerline roads. every team had to hike some of these sections. then there was a superfast descent back down to the road and then back to the TA. next up was a 9 mile paddle on Roosevelt Lake. with the new format of the final orienteering/trekking section, even the fastest teams were out right up until the cut-off time. i raced as a solo and finished with a time of 11 hours 25 minutes - good enough for a first place in the solo division =)

the race report and full results are posted on the Sierra Adventure Sports website: http://www.sierraadventuresports.com/sierrahome2results.htm

 

mountain biking at south mountain

too nice of a day to sit inside, so i headed to south mountain for a ride. being *way* out of shape, the ride (hike) up national was long and hard. but it was all worth it for the awesome descent down. even took the camera along, but only took this one single picture.

 

project update

i know it has been like 6 months since i posted last, but i was gone for 2 of those months. right before i left for my bike trip, i talked with josh and decided to do a film based sort of on the show '24' (his countdown timer was the inspiration).

well, i started off with a lot of enthusiam, but the process is a bit tedious. i tried to write the whole script, but found i worked much better when i just sort of winged it. i finally got the first scene filmed after shooting it about 10 times (kept having lighting trouble and flicker). once i got the lighting issues worked out, i was pretty happy with it. i shot the second scene in one take, so that helped the progress quite a bit.

at that point, i was out of storyline again. although originally supposed to be based on 24, the movie is really now more of just a crime-fighting spoof (half Hong Kong Fooey, half Police Squad). i decided to work on the soundtrack while i thought more about the rest of the story. i put a lot of work into the soundtrack, and i am pretty happy with it so far. i had to go back and re-do some of the early stuff because the later stuff was much better and made the early stuff sound crappy.

i merged the soundtrack with the scenes so far (and wrote a nifty program to help preview and adjust timing as well), and it is turning out pretty good. nothing earth-shattering, but i am happy with it. i hope to shoot a few more scenes in the near future, and maybe even wrap it up by the end of the month...