Archive for January, 2005
It’s freaking cold in Calgary
Minus 34. Celsius. (Not that it would matter much more if it were Fahrenheit.) That’s 14 degrees below my thermal underwear threshold (that would be when I put them on). That’s what it was on my way to work this morning.
What the hell is going on around here?
Calgary has been in the grips of a deep freeze since about the beginning of the year. My longjohns haven’t seen the drawer for weeks. Going outside is a serious consideration, namely, how many layers to wear? One of my co-workers (Scott) has been wearing googles to prevent his eyes from freezing.
This makes the pain in my left shoulder all the more poignant. What’s it from? Injections. Specifically, vaccines for Hepatitus A, B, and a tetanus booster. All of these I got last night at the Bowmont Travel Clinic.
Why? Because next Wednesday morning, at 06:45, Alex and I will be winging our way down to sunny (and considerably warmer) Costa Rica.
I haven’t been any place warm since 1996 (when I did a trip around the southwestern United States with my friends — see [[Road Trip of the Southwest United States]]), and I haven’t been south of the United States since about Grade 10 or 11 (when my family went to Akumal, Mexico). I’ve never been to Costa Rica, and I’ve heard nothing but good things about it. Frankly, it sounds like a lot of fun.
We’re starting off in the capital, San Jose. We’ll be there for two nights before heading out to Arenal, noted for the Arenal Volcano, the most active in Latin America. (Relax, it’s not a pyroclastic volcano, like Mount. St. Helens or Mt. Soufriere in Monserratt — it’s more like Kilauea in Hawaii.) We’ll be there two nights before heading out to the Pacific coast and Tamarindo. We’ll be there for four days, one of which will be Alex’s birthday (which is the reason we’re going there in the first place — she wanted to be on a beach in January … and who am I to refuse?). Then we’re back to San Jose for one more night before flying out.
All of this brings me back to the injections. You’ve no doubt seen that commercial of that tasty-looking tropical drink where the narrator tells you about the Hepatitus A in the ice cubes? Latin America, even Costa Rica — which is by far the healthiest of all the Latin American countries — have high Hepatitus risks. Alex is already up to date with her shots, so it was my turn to get a couple pricks.
All three of them.
Why three? Well, when I talked with the clinic doctor (a requirement — you can get the shots with a meeting), she informed me that I had to get separate A and B shots (I was too late to get Twinrix before leaving), and while going through the list of things I should receive, she also suggested that I update my tetanus, which is a couple decades out of date. (You know you haven’t seen a doctor in a long time when…)
I hate needles. Really hate them. But I seem to hate them less now than I used to. It’s probably the flu shots that I get that help me. The more shots I get, the less I seem to hate them.
Except for Hep A. When the nurse was injecting me, I couldn’t help but notice the fact that she wasn’t stopping. For a moment, I thought that she’d accidentally hooked me into a garden hose and was flooding my arm. Turns out that the Hep A shot is a full millilitre. Doesn’t sound like much, right? That’s quite a lot more than the average. And it HURTS. I actually felt nauseated. (Not that it takes much for me and needles.)
One down, two to go. I had to breathe a few moments before getting the next two.
They were smaller, and went in quick succession. I hopped off the table and had to almost put my head between my legs to let the colour flow back to my head again. I have no idea why on earth needles make me feel this way. I hate that.
The nurse warned me that my shoulder might hurt the next day. “The NEXT day? It hurts right now!”
So this morning, I wake up to -34 degree weather. My shoulder is just shy of severe agony. I can’t raise it. It’s a dull ache that won’t go away. I can’t even lift a can of pop without flinching. Putting on my jackets (outer jacket with a fleece jacket for extra protection) is an ordeal.
But I just keep telling myself: There’s a beach in this.
JavaScript Web Standards
I”ve been getting this question from my colleagues lately, and I think it”s a valid one to ask. The fact that it”s being asked shows that people are thinking about best practices and how to best meet the needs. However, the fact that it”s being asked also shows that people really don”t understand a fundamental principle of web standards.
How do web standards and Javascript get along? How do you employ Javascript that is web standards-compliant? It”s a tough question, and so far, I haven”t come across a clear answer.
A properly-developed, web standards-compliant site (or even just a page) should have separation: content, presentation, structure, and function. A quick recap on those: content is the important information on a page (primarily text and images), presentation is how that content should appear to the user, structure is the HTML that defines the various parts of the page that the content falls into, and function (or more specifically, functionality) is the browser scripting that drives some of the interactive features on a site.
The first major break was between content and presentation. Then came structure. These were culiminated with the creation of the CSS Zen Garden. Given, the textual content is baked into the Garden”s code, and the separation between presentation and structure is trivial. (As a side note, the marriage of the items is just as important as the separation.) This was great stuff. And even though the Garden”s been around a few years, now, the movement is just getting to the fourth and final piece: function.
And make no mistake, folks, this storm is coming.
But what does this mean for you, the developer? Thankfully, it”s not too complicated, at least from a comprehension perspective. Implementing? Well, that”s another issue.
Under the idea of separation for web standards, Javascript should be separated from the page upon which it acts. This means no in-page Javascript, including onclick, onmouseover, onload, or other such event-driven methods. Code is placed into one or more external files, which are then loaded by the browser. This is the same way presentation is/should be applied to each page.
Naturally, this is a little worrisome to developers, since many of us have become very dependent on having that functionality. If we don”t have those methods in-line, how do we control the functionality? We”re used to slapping in an onclick event on <a href> tags to solve our click event patterns. Never mind the countless onmouseover/onmouseout events we use for effects.
Introduce self-awareness. At least insofar as Javascript methods can be self-aware, anyway. Instead of HTML elements having code to handle the event, a Javascript loaded through the onload event finds HTML elements through the Document Object Model (DOM) and inserts the appropriate handlers into the various elements. It”s transparent to the user, and a Javascript developer can modify method behaviours without ever touching the HTML structure.
Loading up the onload event, however, is not a wise idea. Not only is it ugly, eventually the call will become so long that you won”t be able to maintain it. Introduce the onload handler. With a simple piece of code, you can set up a method stack that calls other Javascript methods. The methods are popped and pushed as needed, defined by a controlling function or static list. A very simple version — an array — would look like this:
function onloadEvents() {
for(var i=0; i
}
}
Very simple, very crude, but it works. (Too many evals can slow down a script dramatically, so don''t get carried away.) Events are added to the onload handler through array declarations:
loadArray[loadArray.length] = "functionName()";
A smarter script creates an object list of items, calling them in turn.
I know what you''re thinking: that''s a lot of extra work. It is, and it isn''t. It is because you have to think about how your page is built, and how functions would recognize the patterns needed to build your events. For example, if you''re using a structure for menus or have a specific classname for a link, then it''s not so bad. You create a method that can initialize that structure, applying whatever functionality is needed for the specific purpose. It''s run just once, and provided the method isn''t too complicated, runs quickly.
Where additional work comes into place is the need to build the initialization methods and set up an onload handler (such as above). Once it''s done, though, the rest should be relatively easy.
This is all in theory, and is something that I think about a lot. There''s a lot of "what-ifs" to consider. My personal favourite is: What if this is a one-off situation? Do I spend the time and code to build a one-off onload handler? This is the one I usually end up stumping myself on.
In CSS, one-offs aren''t such a big deal. You create a single class, set up the formatting, and let the browser apply it as needed. But Javascript doesn''t apply automatically. It needs to attach itself, not unlike a leech (just not so bloody). And that''s where you can get caught. Do you take the side of lighter Javascript files and run the method in the HTML, thus defeating the idea of separation? Or do you follow the perceived standard and risk code bloat?
It''s a question I keep asking, and so far, I''ve yet to find an answer. The zen of Javascript and web standards is coming. The question is: who will find the inner peace first?
2004, A Year in Review
2004 wasn’t exactly what I’d call a tumultuous year, but it was certainly marked with some pretty big events for me, not the least of which was meeting Alex. If there was a number one in the list, she would be it. 2005 is already looking to be an interesting year, since there are a lot of things that will be happening for me. It’s not going to be an easy year, but if we always had easy years, we’d never feel a sense of accomplishment.
New Years Eve in Calgary
It’s an interesting start to the year, to say the least.
Alex and I spent the holidays partly apart. As such, we ended up having Christmas Eve on New Year’s Eve. To make it interesting (as if being together wasn’t interesting enough), Alex pulled a scavenger hunt on me, sending me around her condo trying to find the various presents she’d stashed. Each had a clue to the following present. I can amount it either to my extreme intellect [insert derisive laughter here] or to the obviousness of the clues [Alex knows her audience, to say the least], I managed to find them all without being stumped.
The let down wasn’t in the presents, but in the crappy countdowns. We just couldn’t get interested in them, and it’s really lame to be watching the Times Square countdown when it happened two hours earlier. And out here, it’s -41 with the windchill, so going outside really isn’t an option for us.
That’s probably why we slept in on New Year’s Day. I forced Alex to stay in bed while I made breakfast. But I couldn’t keep her in bed forever, especially when there’s a 20x rewards sale on at Shoppers Drug Mart. It was a 10-block walk in -21 degree weather (not counting the wind chill). Warming up actually hurt. But for 20x points, I’m sure Alex would go through pretty much anything. The hot chocolate at Second Cup made the walk back considerably easier.
The big things that happened over the holidays: Wedding planning. And yes, that also means something else obvious: Engagement. (Yes, I know you saw it coming.) This time, I know it’s right.
The funny part is, we started planning for a wedding before we were even actually engaged. We goofed around with a huge number of ideas, including theming it ala Monty Python. We were going to recreate parts of Monty Python and the Holy Grail to keep it interesting and humourous. Whether or not we stick to this come August remains to be seen, of course. Funny as it is, I have my doubts that we’ll actually do it.
A stop at Michael’s over in Westhills supplied paper, ribbon, and various crafts to make invitations. Alex is far more craft-oriented than I am, and wants to make the invitations. (I’d just as soon whip them up on a computer and have them mass produced.) We started working on prototypes at Alex’s later in the afternoon.
This is when the Big Event happened. When I was back home, I picked up the engagement ring. It was Mom’s, and my grandmother’s before that. It’s a Sowrey heirloom now, and something I wanted to pass to Alex. A bit of a risk, mind you, since Alex had certain expectations in mind for what she wanted, and I was about to deliver something she hadn’t previously considered.
As I was tying a ribbon into one of the prototypes, the idea hit me. I had the ring in my pocket. While not the most romantic place to conduct this, it was private (which I was sure Alex would prefer) and related directly to what we were doing. A snap decision, in other words. Tying it in was difficult, but when it was finally attached, I held the card up to show her, and said:
What do you think?
She was a little stunned, mostly because I think at first she didn’t really see the ring, and then had to contemplate how the heck I’d gotten a ring without her knowing, followed by having to accept that she was getting it without expectation and that it was decidedly different than she had wanted.
I had wanted to do this for her birthday later in the month, when we go to Costa Rica. But Alex told me two things: 1) she wanted to tell her friends at a Stitch ‘n Bitch before we left, and that 2) she liked her birthdays to be special and without complication. In other words, she didn’t want to get engaged on the same day. How’s that for putting a wrench in plans?
When Alex finally realized what it was, I looked at her and said:
Only one catch: It comes with me.
Yeah, that’s me, Mr. Romantic…
We ate dinner together and celebrated with wine. But I had to go home afterwards to prepare for the next evolution in my job. I’m down a strong developer and need to backfill, and Cory’s shift to client services means I’m now the Web Development Practice Lead.
It’s going to be an interesting year…
|
Archives by Month:
- July 2010
- June 2010
- May 2010
- April 2010
- March 2010
- February 2010
- January 2010
- December 2009
- November 2009
- October 2009
- September 2009
- August 2009
- July 2009
- June 2009
- May 2009
- April 2009
- March 2009
- February 2009
- January 2009
- December 2008
- November 2008
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- July 2007
- June 2007
- May 2007
- April 2007
- March 2007
- February 2007
- January 2007
- December 2006
- November 2006
- October 2006
- September 2006
- August 2006
- July 2006
- June 2006
- May 2006
- April 2006
- March 2006
- February 2006
- January 2006
- December 2005
- November 2005
- July 2005
- June 2005
- May 2005
- April 2005
- March 2005
- February 2005
- January 2005
- December 2004
- November 2004
- October 2004
- September 2004
- August 2004
- July 2004
- June 2004
- May 2004
- April 2004
- March 2004
- February 2004
- January 2004
- December 2003
- November 2003
- October 2003
- September 2003
- August 2003
- July 2003
- June 2003
- May 2003
- April 2003
- March 2003
- February 2003
- January 2003
- December 2002
- November 2002
- October 2002
- September 2002
- August 2002
- July 2002
- June 2002
- May 2002
- April 2002
- March 2002
- February 2002
- January 2002
- December 2001
- November 2001
- October 2001
- September 2001
- August 2001
- July 2001
- June 2001
- May 2001
- April 2001
- March 2001
- February 2001
- January 2001
- December 2000
- November 2000
- October 2000
- September 2000
- August 2000
- July 2000
- June 2000
- May 2000
- April 2000
- March 2000
- February 2000
- January 2000
- December 1999
- November 1999
- October 1999
- September 1999
- August 1999
- July 1999
- June 1999
- May 1999
- April 1999
- March 1999
- February 1999
- January 1999
- October 1998
- September 1998
- August 1998
- July 1998
- June 1998
- May 1998
- April 1998
- March 1998
- February 1998
- January 1998
- May 1996
- April 1996
- April 1991
- July 1989
- June 1989









