home icon contact icon rss icon

Archive for Blog

Thank you everyone!

Sarah and I have really loved reading everyone’s comments on the baby posts. It’s really been fun to check in every few hours and read all the well wishes. Emily, sorry your comment got caught by my spam filter. It’s out now and right with all the others.

The baby continues to be exceedingly cute. He’s learning how to be a physically separate being and we’re learning how to care for this cute little guy. Everything is going great so far. The baby has been checked a few times by the hospital nursery and is in fantastic health.

Report from the Cuteness

Whew, it’s nine pm and I finally have more than a couple minutes to sit and get down some actual writing.

Baby Ball is acting all supercute, of course. He was wide awake for about three hours after the delivery but has since fallen into a baby coma with only a couple of brief periods of awake.

He hasn’t really cried so far, only a couple of times while the nurses were poking and prodding or bathing him.

We’re in the post-birthing room now. It’s about a third of the size and is much less well decorated. My very long comfy couch has been replaced by a moderately comfortable recliner.

Right now baby is asleep, but practicing sucking on his left hand. Come to think of it, he’s mostly been using his left hand. How sinister :-)

His name is Edward, which is awesome because it has a ton of potential nicknames. He weighs something like 7.8 pounds and is 20 inches tall (maybe, I don’t quite remember).

He is a veritable font of cuteness. So adorable!

Sarah is doing very well and is, like the baby, resting peacefully.

We are rooming in with Edward so I have to take awake and alert until midnight to keep an eye on him.

Brand New Baby

Born just before 4pm, so cute!

Cutest Baby Ever

Baby Kick!

Now the baby has discovered the monitors resting on his personal space and is having fun kicking them. We still hear his heartbeat in the background but now it’s drowned out by the rhythmic thuds of his kicking. It’s making some pretty funky patterns on his heart rate graph :-)

"AJAX Head" Design Pattern

AJAX Head design pattern

Doctor Update

We’ve seen Dr. Cole, who is very nice (and went to NCSSM!), and things are moving along and looking the baby is coming sometime tomorrow. So Sarah and I are just hanging out and watching TV. It’s kind of like sitting around a hotel room…a hotel room with the tell-tale thudding of a baby heart! DA da dummm!

At the Hospital!

5:28

Sarah and I are in our room in Durham Regional Hospital. It’s actually quite spacious and nice, lots of nice touches and wood accents. Soothing by design to be sure, except for the woman who was rather vocally giving birth a few rooms away. Rather disconcerting but luckily we arrived at the very end and I got to hear a baby’s little cry shortly afterward.

It’s a nice stormy day for Sarah’s birthday and the approaching birth of our cuddly baby boy. We’re finally down to the wire and parenthood is right around the corner! I’m wound up and running on a sleepless night and nothing but excited.

5:42

We just had a visit from the nurse who got all the monitors setup. Now we can hear baby’s heartbeat which is hovering around between 125 and 142 and watch the pretty graphs go by. His heartrate shoots up to the 160s and 170s when he wiggles around, so cute! Everything with Sarah and the baby looks right on target. A doctor is supposed to check in with us soon.

Microsoft vs. Users

I thought we had moved on from stuff like this, but no. Count on Microsoft to kick it old school.

Microsoft recently patched Office 2008 (the Mac version of office). All well and good, but a side effect of this patch is that all .doc and .xls files created on a Windows box can’t be opened by double-clicking them on a mac. Double-clicking those files (which for us mac users, is most files) opens Word just fine, but to a new blank document that Word has merrily assumed you wanted to create because as far as it can tell you’ve just started the program on its own.

So, there that is. Imagine you are a mac user working in an office environment. You are probably surrounded by PC users and you are probably used to getting lots of emailed word documents from them or from the web. Now, instead of just quickly getting content by double-clicking that unfortunate plethora of word documents, you have to save the document somewhere on your disk and then use the file/open dialog to open it.

As if that weren’t bad enough, Microsoft and its apologists are coming out and saying that this (wait for it) isn’t a bug, but a feature!

This is not an error. Various file types have been disabled by design.

I am sure more will be removed in future updates.

This is a security measure, it was intentional, and there’s no chance it will be changed.

Comment by John McGhie in PROBLEM: 12.1 version of Word 2008 will not open WinWord .doc files?

While in general I am not in favor of added inconvenience, I strongly feel that if someone using computers doesn’t know that when double-click doesn’t work, they should try another method such as File | Open, then they will really benefit by the lesson in basic computer literacy that MS has forced on them. Learning where attachments and downloads are stored on the hard drive is a slightly more advanced but equally beneficial lesson in computer literacy. In the long run, more computer literacy in the general population will benefit the whole world.

Comment by Daiya Mitchell in PROBLEM: 12.1 version of Word 2008 will not open WinWord .doc files?

I can see the tagline now: “Microsoft. Saving the world one inconvience at a time.”

Notes on Crockford's Javascript Video Lecture 2

Notes I took while watching the second video of Douglas Crockford’s JavaScript lecture

Statements

JavaScript has all the statements that you’d expect to find in any of the other C langauges. e.g. if, switch, while, do, for, break, continue, return, try/throw; but there are some differences in how they are used.

You can label loops and then break out of them by label. Handy if you want to break out of a nest of loops.

The for statement can loop through an array and through the members of objects.

Unfortunately for looping through an object will take you through all the kys of all the objects that the object inherits from. To prevent this you have to test that the object being looped through itself has that property. This is highly recommended to avoid strange behavior.

Switch values don’t need to be numbers, can be strings

Case values can be expressions – handy

You have to explicitly terminate case clauses, as usual.

Switch statements allow a default case.

Throwing exceptions behaves typically, as does try/catch.

You can generate exception objects by calling its new constructor, or use with object literal

JavaScript comes with the following exceptions:
  • Error
  • EvalError
  • RangeError
  • SyntaxError
  • TypeError
  • URIError

You can, of course, make up your own exceptions.

Avoid using the with statement. It was designed to be a convience for dealing with objects, but there is an error in its design leading to ambiguous statements.

There is a function statement used for declaring functions.

The var statement defines variables within functions. JavaScript is loosely typed so you just declare the variable and optionally initialize.

Without initialization variables are undefined.

Unless you limit the variable scope with var they are assumed to be global. :-/

Unlike most C languages, blocks do not have scope. There is only function scope.

Return can return an expression or just return;

return; doesn’t return nothing, it returns undef

When used in constructors they will return the new object.

Objects

Objects contain data and methods.

Objects only inherit from other objects, there is no concept of a Class.

Objects in JavaScript are an unordered collection of name/value pairs. Names are strings, values are anything including other objects or expressions.

Every object is essentially a tiny database

Object Literals

Object Literals are an easy way of creating a new object. The are data wrapped in { }. ”:” separates names and values. ”,” separates pairs. An object literal can be used anywhere a value can appear.

Object Literal Example: var myObject = {firstName: “Stephen”, ‘lastName’:’Ball’, middleInitial:’A’, age: 29};

  // These syntaxes are interchangable
  var theName = myObject.firstName;
  var destination = myObject['firstName'];

Maker functions can be used to build objects. Pass material to maker function and it will make an object and return it

Object Literals can have nested objects, or object literals, as values.

If we pass an object literal to a function, the function doesn’t know if the object already existed or was a literal declared with the call.

Rather than define a function that takes a lot of parameters (e.g. more than two or three), think about passing an object instead.

Objects in JavaScript can be augmented at anytime with new methods and data. There is no class, so obviously no need to define a new one. Just modify the object you want to expand directly.

  // to add data to an object simply set it
  existingObject[newKey] = newValue;
  existingObject.newKey = newValue;

Object Linkage

When objects are created they have a secret link to another object. This is how inheritance is achived.

If a member is requested from an object and the object doesn’t have it, JavaScript silently follows the link to the secret object and sees if it has the member and, if so, returns it. The child object now has the data member locally. Odd side effect: if you delete a data member of a child object that is set in the parent object then the child object’s data isn’t really deleted. If requested the “deleted” data will be fetched from the parent object again without notice.

The secret link is not used for storing new values in the parent object. Data is only retreived.

Obviously this means that there is only single inheritence in JavaScript. Also that there is truly no Class equivalent in JavaScript. Objects only inhereit from objects.

We can use the object function to make a new empty object that has that linkage to an existing object. ex: var myNewObject = object(myOldObject);

Some languages have classes, methods, constructors, modules: JavaScript has functions, and functions do the work of all of those. This allows greater expressive power, but requires a different way of thinking.

There is garbage collection in JavaScript.

All objects are linked directly or indirectly to Object.prototype that has some basic methods, but no copy method and no comparison method.

You can see if two objects are, in fact, the same object; but not tell whether they are equivilent.

Object Construction

There are three ways to create a new, empty object:
  • new Object{}
  • {}
  • object(Object.prototype)

All three return exactly the same object, {} is recommended for conciseness.

Objects can be passed to functions as arguments and returned from fucntions.

Objects are always are passed by reference.

=== between objects will only return true if both objects are the same object.

The delete operator will remove members from objects, delete myObj[key] by changing the value to undefined.

Arrays

Arrays are unusual:
  • array inherits from object
  • array indexes are converted into strings and then used as names for retrieving values
  • very efficient for sparse arrays, but not for everything else
  • arrays aren’t typed
  • arrays have length member, it is always 1 larger than the highest integer subscript which may not be its actual length (!)
  • it does allow a for loop to go through the array easily by just saying less than array.length
  • do not use for…in with arrays

Array Literals

  • uses []
  • can contain any number of expressions
  • new items can be appended, arr[arr.length] = value
  • can’t use dot notation with arrays, subscript notation instead
  • [] is the preferred method to create a new array, not the new array construct

Array Methods

  • concat
  • join
  • pop
  • push
  • slice
  • sort
  • splice

Deleting from array: delete array[number] removes element but leaves a “hole” in the array as an undefined value. To completely delete a value and index you need to splice it out.

Use Object or Array?

Since objects and arrays are so similar, when do you use which?

Use objects when names are arbitrary strings, e.g. associative array.

Use arrays when names need to be sequential.

Arrays all inherit from array.prototype.

If you get a value, there are two methods to tell whether it is an array or an object:
  • value.constructor === Array
  • value instanceof Array

BUT neither of those methods work when value comes from a different frame, a bug in the language.

You can’t inherit from an array because the value produced will be an object, not an array. You can augment an individual array by adding methods to it. You can also assign methods directly to Array.prototype to change all arrays in the program.

Notes on Crockfords JavaScript Video Lecture 1

Notes I took while watching the first video of Douglas Crockford’s JavaScript lecture

Language Outline

“script” suggests that JavaScript isn’t a real programming language, Douglas posits that not only is it a real programming language, but a pretty good one.

The language does contain some design errors.

Early bad implementations resulted in JavaScript getting a bad reputation. The implementation are now good.

Programming for the browser and DOM is extremely difficult. A lot of people think that the problem is javacsript itself, but it’s more the environment.

Books on JavaScript are almost (as of 2007) universally bad. The Definitive Guide from O’Reilly is the “least bad” book.

JavaScript standard defined by ECMA, but the standard is not very good. Very difficult to read which led to the bad book problem – no good authoritive source to reference.

JavaScript is a functional language like lisp and scheme.

JavaScript’s History

1992: Jim Gosling started working on a language he called C++ then changed to Oak. Gosling go into a new startup, Oak was used in applications. Company fail. Moved back to Sun. What to do with Oak? Needed new name, Java. Application to demo new language would be web browser, HotJava.

Meanwhile at Netscape. They looked at Java but decided that it was too heavy for browsers. Brendan Ike had idea to do dialect of scheme in the browser, but management said to make a scripting language that looked like Java. That became Livescript. First scripting language to be put into a browser, and first to be put on a server.

Reason Netscape and Java so exciting at the time was that they were envisioned as a way to escape from Microsoft: applications on the net. They decided to ally. Sticky part: what to do with Livescript. A divide between those that wanted Java to be the language of the web, Netscape refused for above reasons. So Livescript name changed to JavaScript and then Sun took naming control of the language.

Microsoft didn’t like this so they reverse engineered the language into JScript.

Netscape didn’t care for this at all. To prevent Microsoft from assuming control of the language they decided to make JavaScript a standard. They took it to the European Computer Manufactors Association (ECMA) because they thought that their language standard would just be rubber stamped there. Unfortunately Microsoft was a member of ECMA, so from the first day Microsoft dictated the standardization. Microsoft had made some errors while reverse-engineering JavaScript into JScript, and they insisted that those errors become part of the standard. It was very important to Microsoft at that time to never do anything to cause anyone’s programs to break. ECMA agreed.

What is JavaScript?

JavaScript is not a web toy language, it is real, useful, and sophisticated. Also very effective.

JavaScript’s key set of ideas:
  • load and go delivery: programs are delivered to the execution site as source code. Reasoning is that it was intended to be embedded in webpages, which are text. This is, of course, no longer the preferred way to getting programs to browsers but the legacy remains.
  • Loose Typing
  • Objects are general containers: unification of objects and hash tables
  • Prototypal inheritance: much different than Class inheritance. Objects can only inherit from other objects. There are no Classes.
  • Lambda: functions are first class objects.
  • Linkage through global variables. Because of “load and go” JavaScript doesn’t have any kind of linker. Separate compilation units are combined into a global namespace, which is a really bad idea.
JavaScript has a small set of possible values
  • Numbers
  • Strings
  • Booleans
  • Objects
  • null
  • undefined

JavaScript doesn’t have multiple number types (e.g. Integer, Float). There are, in fact, no integers. All numbers are represented as 64-bit floating point (i.e. doubles). This means that common arithmetic can act strangely: .1 + .2 != .3

If dealing with decimals need to multiply by 100 for the operations, then scale back.

NaN is a value that is “not a number”. It is returned as the result of undefined or erroneous mathematical statements, e.g. 0/0. It is toxic: any arithmetic operation with NaN as an input will return NaN. NaN is not equal to anything, even itself. NaN === NaN is false. NaN is also not less than NaN or greater than NaN. But if you get typeof NaN it is Number.

Number function converts string into a number. Produces NaN if it has a problem. Similar to + operator.

parseInt function parses integers from a string. Generally you should include radix argument to specify the base we are parsing.

Like Java, JavaScript has a separate Math object. This is an unfortunate idea. The Math object contains a number of useful functions e.g. abs, floor, log, random, round, sqrt.

JavaScript has Strings. They are a sequence of 0 or more 16-bit characters encoded in UCS-2 (not UTF-16 as it has no awareness of pairs for extended character range). The extra characters of UTF-16 are very rarely used, but it is something to be aware of.

No character type in JavaScript. A “character” is a string of one character.

Strings are immutable.

Similar strings are equal with

String literals can be written with single or double quotes, they are the same.

All Strings have a "length" method that returns the number of 16-bit "characters" in the string. This won't necessarily be the number of unicode characters in the string.

String function converts a number into a string.

Strings are objects and so have methods, e.g.:
  • charAt
  • concat
  • indexOf
  • lastIndexOf
  • match
  • replace
  • search
  • slice
  • split
  • substring
  • toLowerCase
  • toUpperCase

Two boolean values in JavaScript: true and false.

Boolean function will take a value and returns its boolean value.

Null is the value that isn't anything.

Undefined is the value that isn't even null. It is the default value for variables. This is confusing because if you define a variable without initializing it it will have the value "undefined".

Undefined is the value you get when you extract a member from an object that doesn't have that member. It is the "missing value" value.

Values that evaluate as false, everything else evaluates as true:
  • false
  • null
  • undefined
  • empty string
  • 0
  • NaN

After these simple values, everything else in JavaScript is Objects. JavaScript is actually an object-oriented language.

Dynamic Objects
  • unification of Object and Hashtable
  • new Object() produces an empty container of name/value pairs
  • Name can be any string, value can be any value except undefined.
  • Object members can be access with dot notation or subscript notation: myObj.key or myObj['key']
  • Although they are hases, no hash nature is visible: no hash methods

JavaScript is loosely typed, which means that any variable is capable of receiving any value. The values do have a type (so the language isn't "untyped"), but variables aren't bound to them.

JavaScript is syntactically a C family language. Differs from C with its type system which allows functions (which are objects) to be values.

Identifiers follow same rules as most C languages.

  Variable names match: /^[A-Za-z_$]*$/

By convention everything is lowercase except for constructors.

Using the initial _ should be reserved for implementations, but are very popular. Initial $ should be reserved for machines: macro processors, etc. Ajax programmers use $ variables a lot for some reason.

JavaScript has a LOT of reserved words, but only a few are used.

Two comment styles: // or /*

Common operators that you’d expect for a C language.

  +"42" = 42, just like Number("42")

Division of two integers can produce a non integer result

and != do type coercion, so always use === and !== which confirm variables are same value and type.

&& is the guard operator or “logical and”. If first operand is truthy then the result is the second operard, otherwise result is first operand. Can be used to avoid null references.


  return a && a.member;

  does the same as:

  if (a) {
    return a.member;
  } else {
    return a;
  }

|| is default or “logical or” operator. If first operand is truthy then result is first operand, otherwise second operand. Can be used to fill in default values.

  // if formField is true, then userInput = formFieldValue
  var userInput = formFieldValue || default_value;

! is “logical not” operator. If operand is truthy the result is false and vice versa. From this if you do !!value you will get its boolean representation.

JavsScript has Bitwise Operators

  & | ^ >> >>> <<

The bitwise operators convert the operand into a 32-bit signed integer, do the operation, then convert the result back into a 64-bit floating point. Unlike normal bitwise operation, this isn’t faster. So unless you really need a bitwise operation don’t use them.

That robot smashed my house!

Do you enjoy Lucasarts Adventure games?

RPG adventures with clever battle systems?

The artistic style of Mike Krahulik and prose of Jerry Holkins?

Silly Infocom style humor, e.g. Planetfall?

If you answered yes to any of those, then should should definitely check out the first Penny Arcade videogame: On the Rain-Slick Precipice of Darkness. It’s available for Windows, Mac, Linux, and XBox 360’s Live Arcade so if you are reading this you really have no excuse not to at least check out the demo. (Obviously I prefer XBox 360 version because of achivements and gaming on the big screen.)

The game is witty, amusing, gorgeous, and (so far) a ton of fun. The combat system like typical Final Fantasy combat with a twist of real-time action. I am in love with the art style of this game. I’ve just written and deleted three sentences trying to capture it (Comic book paneling cut scenes mixed with 3d adventuring in a 2d world with comic styling. Does that make sense?) but can’t really.

Buy the full game, check out the demo, or at the very least browse through Rain Slick’s gallery.

RiffTrax

RiffTrax, the successor to MST3K, seems to have slipped past Brent, so it may have slipped past you too!

RiffTrax are audio commentaries done by Mike and other stars from the show MST3K. You buy the trax and then start the trax and movie at the same time, they helpfully provide instructions on how to sync them up at the beginning of each trax.

They are all completely, wonderfully hilarious and the best part is that since they don’t need to secure broadcast rights they are free to riff on new and popular movies. Sarah and I give a big thumbs up to their X-Men rifftrax.

Switching to Qwlim

My old theme was fun and all, but if was pretty hackish and didn’t play nicely with the iPod Touch. While designing a new theme in Mephisto is pretty straightforward I don’t really have a solid chunk of time in which to do it, what with the preparations for baby and all. But I do have enough bits of time to switch to a new theme. So I did, and it’s awesome.

I’m using Qwlim, which has most recently been written by Matt Skorina. As you can see (unless you are in a feed reader) it has a great color scheme, nice layout, and check it what happens when you resize your browser window.

No really, go ahead.

Awesome yeah? The various site boxes nicely reposition themselves depending on the available space. It’s a great technique, I will have to steal it.

You may notice that the article tags don’t really factor into this page. They are still around of course, just not utilized. I may bring in a tag cloud into one of the boxes (or a new tag cloud box) when I have the time, but I really dig the layout as is.

In place of tags, this theme more heavily uses the article categories. Up to now I really only lightly used the categories, but I’ll probably try using them more in the future.

Some bits of the theme aren’t up and running yet (e.g. the theme expects a /contact page), but they should be coming up soon. I’ll also be modifying that rss icon on the left to link to the feed of the current category, not just a hard link to the main blog feed.

Connect ssh sessions as local folders

connect ssh directories as local folders

Indiana Jones the Mercenary

Slashdot commenter Sentry21 wrote a really insightful comment on Indiana Jones that was then expounded upon by niktemadur. I hadn’t thought along these lines before, but it really rings true.

Re:That, my friends, is… (Score:5, Insightful) by Sentry21 (8183) on 2008-05-15 14:50 (#23422252)

I saw temple of doom, hoping it would be as good, if not better, than raiders. It didn’t even come close. But it didn’t “suck”, it wasn’t heartbreaking, it just wasn’t as good as Raiders.

One thing that sort of ‘fixed’ my appreciation of the Indiana Jones moves is remembering that Temple of Doom is a prequel to Raiders. While this doesn’t make it a better movie, it does sort of make the movies fit together better.

If you consider Temple of Doom to be the first movie, Indiana Jones is playing more of the mercenary lifestyle, digging up treasure for a Shanghai mobster. After the events of Temple occurs Raiders and Crusade – both of which are similar in style and formula (globetrotting adventure).

After Indy’s experience in India and becoming a believer of Hinduism, he goes back to the states and alternates between teaching and rescuing artifacts for the museum (which happens in Raiders, which proves Judaism, and Crusade, which proves Christianity).

It doesn’t make Temple a better movie, but for me, it made it fit better in the grand scheme.

Re:That, my friends, is… (Score:5, Insightful) by niktemadur (793971) on 2008-05-15 18:43 (#23425902)

If you consider Temple of Doom to be the first movie, Indiana Jones is playing more of the mercenary lifestyle.

Mod this guy all the way up. How did this slip by me for a quarter of a century?

“Too bad the Hovitos don’t know you the way I do, Belloq” – That’s right, Indy and Belloq used to be fellow travelers, then after the events of Temple, they developed a “difference of opinion”. Belloq is Indy five years before.

This also ties in the Crusade teaser, in a broader sense. See Indy the idealist in full force, living the first experience that will turn him cynical. Then back to Raiders, look at the way Marion receives him, with a sucker punch to the mouth – Indiana the cynical bastard we see at the beginning of Temple getting a taste of his just desserts.

Of course for this interpretation you have to discount the tv series, at least somewhat. The teenage Indiana Jones wasn’t really cynical at all. Speaking of the tv series, as long as we’re hanging out down below the main content of this post, I wonder if Crystal Skull will explain why old Indy had an eyepatch. Probably not. Here’s hoping that movie is better that it appears to be. Lucas’ cameo-tastic filmmaking (Hey look! It’s the warehouse of boxes! Oh look there! Uncle Owen!) coupled with Spielberg’s recent Spielbergness (Minority Report, War of the Worlds) makes for a depressing probability. How much you want to bet that a bunch of set pieces from the original series (e.g. the sun will hit an object like a high powered laser and point the way to treasure, snakes in a pit) will be revamped?

Crazy Itch Radio

Listening to Crazy Itch Radio

Crazy Itch Radio Cover

Basement Jaxx’s “Crazy Itch Radio” is my latest album obsession. I listen to my obsessed albums (or songs) multiple times per day. This album is following in the footsteps of Elliot Smith’s “Figure 8” and Josh Rouse’s “1972”.

No review for albums, don’t know how to quantify them and if I don’t like it, I don’t listen (a rare occurance given that I left music radio behind a few years ago).

Comment Feed

Here’s a feed for all comments submitted to the site. My spam protection is holding up quite well, so this should have a very high signal to noise ratio.1

  1. As long as you consider comments signal.

Comments Feed

RSS Feeds

I’ve gotten RSS feeds working for my different sections:

The Final Cylon

It has come to me. The identity of the final cylon. There are several key questions that led me to the answer.

Who has been with the fleet the entire time (i.e. hasn’t died)?

Who has always acted as a neutral party, treating cylons and humans alike?

Who has criticized the war between cylon and human?

Who is a hugely key figure that has saved many lives and kept the fleet’s leadership intact?

Who is the straight talker, cutting through all the crap of both sides?

Who is the one key person that has medically examined all the cylon skin jobs the fleet has encountered?

That last question should give it away.

Dr. Cottle

Dr. Cottle has been with the fleet from the start. Is contemptuous of the conflict and treats all beings alike. He has always been a neutral party, treating injured human and cylon alike.

He also continually declares that there is no way to tell the difference between human and cylon even though we know that to be false (e.g. Baltar’s cylon detector). Now it may well be that he just can’t tell the difference, but I don’t buy it. I think he knows how to tell cylon from human and so he knows who the other final five are.

Or he knew who they were already. Going even more out on a limb, I think that he knows he’s a cylon and has always known that he is a cylon. He isn’t confused or surprised by this, it’s just who he is. Capable, reliable, neutral, ever there in need, and cynical Dr. Cottle.

But I’m not sure how to apply the words of the hybrid: “And the fifth, still in the shadow, will claw toward the light, hungering for redemption, that will only come in the howl of terrible suffering.”

Maybe Gaeda will start singing “All Along the Watchtower”.

Javascript Video Lectures

Javascript Video Lectures

The videos are extremely well done. I rank them right up there with the videos of Knuth lecturing about TeX for clarity and flow.

Catch up!

Sarah and I continue the odd frantic-yet-sluggish countdown to Baby. (B minus two or three weeks.)

Work is busy. I am doing my best to wrap up all of my projects before B minus zero.

Grand Theft Auto IV is amazing. The world is amazingly realized. It really shows that Rockstar had essentially unlimited time and money to polish GTAIV.

Iron Man was awesome and may, in fact, be the best Marvel movie yet.

I had a birthday! Many awesome things including a sweet portable basketball goal, amazingly convienent gas grill, and cool digital picture frame. Also Sarah got me a MacBook Nano. I knew the touch was going to be awesome, but I didn’t know how awesome. I now catch up on my email on the walk from the parking deck to the library and have wifi in my pocket for whenever I need something from the net.

In site news: I’ve been getting the itch again. Rails (by which I mean Mephisto) is great and all, but now I feel like it is time to give Django a shakedown. Mephisto is large and in charge, but rather slow as well. While it doesn’t suffer from the horrible horrible mixture of logic and presentation that plagues Wordpress, it doesn’t exact feel like a lean, mean blogging machine either. Perhaps Blogmaker is the answer.

Watched: Iron Man

Watched: Iron Man

Iron Man Movie Poster

Review: 5/5

A most excellent and fantastic film. I say it’s the best Marvel film yet.