Author Archive

Sunsetting this blog

I will most likely be sunsetting this blog soon, and moving on to something like a static site generator for any future content. (I’m currently leaning in the direction of Hugo)

I started this blog back in May of 2006 as a place to post my thoughts, and during that time I’ve accumulated quite a lot of content. However, the rate of posts has slowed considerably, to only a handful each year, to the point where I don’t feel it makes sense for me to maintain this WordPress installation anymore. Continued

Getting the Garmin Connect IQ SDK to work with Java 9, 10

If you’re developing with the Connect IQ SDK and have Java 9 or 10 installed (or any version beyond Java 8), you’ll probably run into an issue like this when trying to compile your app with monkeyc or run it with monkeydo, whether from the command line or the Eclipse Plugin:

$ monkeydo myApp.prg fenix5
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
  at com.garmin.monkeybrains.prgreader.EntryPoint.parse(
  at com.garmin.monkeybrains.prgreader.EntryPoints.parse(
  at com.garmin.monkeybrains.prgreader.PrgParser.parse(
  at com.garmin.monkeybrains.monkeydodeux.MonkeyDoDeux.execute(
  at com.garmin.monkeybrains.monkeydodeux.MonkeyDoDeux.main(
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(
  at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(
  at java.base/java.lang.ClassLoader.loadClass(
  ... 5 more Continued

Java PhantomReferences: A better choice than finalize()

We’ve talked about soft and weak references, and how they differ from strong references. But what about phantom references? What are they useful for?

Starting with Java 9, the intended usage of PhantomReference objects is to replace any usage of Object.finalize() (which was deprecated in Java 9), in order to allow for this sort of object clean-up code to be run in a more predicable manner (as designated by the programmer), rather than subject to the constraints/implementation details of the garbage collector.


Java and Soft References

In a previous post, I described what weak references were and how the JVM interacted with them and how they contrasted with strong references. In summary, a strong reference is what we typically think of as a reference in Java; that is, when we instantiate an object and assign its reference to a variable, that is a strong reference. Obviously, these objects will not be cleared by the garbage collector (GC) until the reference is removed.

By contrast, a weak reference doesn’t prevent the garbage collector from clearing the referred object. That is, if the only references that remain to an object are weak references, that object will be treated as if there are no strong references to it, and thus it will be cleared by the GC on its next run. Weak references are implemented mainly by the WeakReference “wrapper” and WeakHashMap, the latter of which only maintains weak references to the keys, so that once the keys are inaccessible (i.e. no strong references exist), the WeakHashMap will automatically drop/remove the corresponding entries, which can also make the value objects eligible for GC so as long as there are no other references to them.

But how do these references contrast with a soft reference?


Analysis of the 2011-2015 Boston Marathon results

I recently analyzed the 2011-2015 Boston Marathon results. You can see the results in this GitHub Repo, or go straight to the IPython/Jupyter Notebook for the details.

Boston’s getting competitive Continued

Converting an IPython Notebook to PDF

If you have an IPython Notebook (*.ipynb file), you may want to convert to PDF for distribution. If you read the documentation for ipython nbconvert, it seems fairly straightforward:

$ ipython nbconvert --to PDF <your notebook>.ipynb</your> Continued

Remote Python debugging using PyDev/LiClipse for OpenStack Swift

We all know what debugging is – stepping through running code, line by line, inspecting variables and trying to figure out what’s wrong with your program while simultaneously tearing your hair out. However, usually when debugging Python code, the Python process is running locally on your system. What happens if you want to debug through code running on another server?

This is typically the case when working with OpenStack Swift, since the Swift-all-in-one (SAIO) instructions tell you to use a VM to run your Swift installation in, and a Vagrant VM provided by SwiftStack simplifies this. However, this means that the Swift code is not running locally; it’s running inside of your VM – so how do you debug into it?

Remote debugging aims to solve this by allowing you to inspect, trace and step through code running in a Python process on another machine. Setting this up requires some work, but is well worth the effort when debugging a non-trivial application running on a remote server or VM.


Accessing the host file system from a Docker container on OS X or Windows

Mounting (or sharing) a directory from the Docker daemon host into a container is simple enough. Example:

$ docker run -v [host directory path]:[container directory path] -it [image name]

However, on OS X and Windows, the Docker daemon (currently) runs inside of a Linux VM, that by default is run using VirtualBox. (Since Docker only runs natively on Linux) So, you’d be mounting a folder from the Linux VM, which is probably not what you want if you want to share files from your host machine into the container.


Golang: Promoted methods, method sets and embedded types

In Go, interfaces are implemented implicitly by ensuring that the implementing type’s method set contains all the methods of the interface. That is, if a type A contains a method set that is a superset of interface I’s method set, then type A implements interface I.

This seems pretty straightforward, but can get a little convoluted when dealing with struct types that have embedded/anonymous fields.


Converting CAD to USD using the DLR ETF

If you’re converting a large amount of CAD to USD (to buy US-listed/denominated securities, or to purchase US goods, or whatever) the spreads your bank offers you may not be the best way. Instead, if you have a brokerage account (one for both CAD and USD), you can use the Horizons DLR ETF to do the conversion for a lower cost.

Horizons has a nice PDF detailing the procedure, but I wanted to go through my experience with the process.


Python script to search CBC Radio 2 broadcast/play log history

I’m a fan of CBC Radio 2. Okay, that’s not exactly true, but I do have my $10 radio alarm clock tuned to 94.1 FM to wake me on weekdays. I often find myself in a stupor or only semi-awake when the tunes start blasting away before dawn, and as such, I often have trouble remembering what was exactly on the radio that morning. However, once during the day I remembered that a certain Ben Folds Five song had received airtime on CBC Radio 2 during my morning wake-up, but could not recall the exact day. It bothered me.

Thankfully, they did have broadcast/play logs of all tracks they had aired, along with the date/times, providing for a succinct history. Unfortunately, it didn’t seem possible to search them, and I didn’t feel like searching through each day’s play log for the particular title. What to do?

Scripting to the rescue!


React animations for a single component

React is a great framework for building web UIs. (And perhaps other UIs as well) I’ve recently started using it in some side projects, and love its ability to easily manage view state and efficiently update the DOM, reducing a lot of the “grunt work” of building dynamic web UIs. On the other hand, it feels relatively lightweight in that it doesn’t impose a lot of structure in how you design your app. This may be a Good or a Bad thing, but the upside is that there isn’t a steep learning curve.

One thing I recently wanted to do with React was to build a component that would animate during its transition from state A to B; an example would be an On/Off button. It is possible to do so with React’s built-in animation addon, but it just required some attention to detail.


RequireJS shim configuration, jQuery plugins and enforceDefine

If you’re using RequireJS’s shim configuration to load jQuery plugins while setting enforceDefine: true in your configuration, you probably noticed the following uncaught error in your JavaScript console: (The following example is for the iCheck plugin)

Uncaught Error: No define call for iCheck Continued

SoftLayer data type Java class generator

The SoftLayer REST API doesn’t seem to have an XSD, so you can’t use xjc to generate classes. That’s a shame for a strongly-typed language, since you’d now have to manually create classes based on their Data Type Reference.

I didn’t like that and decided to code up a Java class generator (it’s written in Python) based on the Data Type Reference. You can use it to generate a Java class based on the SoftLayer Data Type you pass in. Enjoy!

JavaScript single-threadedness and timers

If you’re coming from a programming language that has support for multithreading and concurrency, (such as Java) then understanding the flow of asynchronous events in JavaScript such as timers can be a bit confusing.

However, once you understand the single-threaded nature of most JavaScript, things may actually becoming easier as you don’t have to worry about parallel access to non-local variables.

Let’s take a look at how JavaScript executes when a function is passed to window.setTimeout().


Analysis of the 2013 Chicago Marathon results

With close to 39,000 results, the 2013 Chicago Marathon Results combine two of my favourite topics, statistics and running. I decided to take this opportunity to learn more about pandas by using it to analyze the result set to provide some insight into how people run marathons. (I myself ran this race)

The result of my work is in a GitHub repo and published as an IPython Notebook. I’ve extracted some of the more interesting parts.


Spring MVC request parameter conversion with minimal configuration

I’ve been playing around with Spring Web MVC a bit and was looking for something similar to Jersey’s Parameter Classes that would provide conversion to custom types. I liked how with Jersey, you could encapsulate the conversion logic in a single class and have that reused across multiple methods with minimal configuration.

Here’s how I achieved a similar result in Spring Web MVC. (Note: the following examples were done with Spring 3.2.1)


Java: final, finally and finalize

One of the most popular Java interview “screener” questions is often, “What is the difference between final, finally and finalize?” In fact, it occurs so much that one should probably have the answer memorized. But knowing when to use these features is better than just knowing what they mean.


JAX-RS/Jersey needs an @Required annotation for parameters

I’ve been using Jersey as a JAX-RS implementation for a little while now, and one thing that it could benefit from is the addition of an @Required annotation for resource method parameters. Right now, when parameters are not provided by the client/request, they are simply set to null, creating the need for duplicated null-checking in resource methods. An @Required annotation would solve this issue and reduce code duplication.

This isn’t so much of an issue for @PathParam parameters, (since you won’t even get to the proper resource method without a matching URI) but it does affect @HeaderParam and @QueryParam (among others) since they aren’t needed for Jersey to determine which resource method to invoke. By that definition, they are implicitly optional. There should be a way to make them required.

The behaviour of such a required annotation might be as follows:

  • If the request does not have the parameter, then by default a Response with Status.BAD_REQUEST (HTTP 400) would be returned to the client.
  • Some way of customizing the HTTP response code and message should also be provided.

Right now, there’s not really an elegant way to make something like a @HeaderParam required. Here are some solutions I’ve tried.

Java’s Pattern class and regular expressions

One of the easiest things to get tripped up on is the syntax for creating regular expressions (regex) in Java using the Pattern class. The tl;dr version of how to do things is that you must use double-backslashes in the regular expression Strings you use to create a Pattern object; so something like \b would have to be written as "\\b". Read on for a more thorough explanation.


The Game of Life and emergence

I have had a side interest in emergent behaviour ever since reading about various forms in nature, so when a co-worker sent me a link to Conway’s Game of Life, I was immediately intrigued.

Long story short, I just had to implement it (albeit a simple version) in JavaScript. The result is available on my website and I suggest you give it a try; a good pattern to start out with is the F-pentomino.

The reason I find emergence so interesting is that it provides a possible framework or explanation for the complexity and order seen in our universe, based on a fairly simple or rudimentary set of rules.


Shuffle sort and other fallacies of randomization

Quick, how do you write code that shuffles a collection of objects? In the real world, it’s fairly easy to see how a deck of cards is shuffled – but how would you do that in code? Obviously, you would have to use some sort of random number generator, but beyond that it’s not straightforward. Furthermore, how do you ensure that the shuffling is fair; that is, all permutations appear with equal probability?

The astute among you will know that one way is by implementing the Fisher-Yates shuffle algorithm. But, let’s investigate what happens when other, seemingly adequate solutions, are used instead.


The Flyweight Pattern: (Mis|ab)used at times.

In my brief career in software development thus far, I have seen a lot of “WTF” code, that is, code that deserves to be posted to The Daily WTF. Some of this code was admittedly developed by myself and upon reviewing it a few months after it was written, I secretly wondered what I’d been thinking.

This isn’t going to be an indictment of bad programming; in fact, I think it’s good if you can look back at your old code and see where it could be improved. Such a process suggests that you are continually self-improving, a skill crucial in software development. Besides, all of us have made a mistake or two at times when we were stressed, tired or just plain not thinking straight.

However, there’s one mistake that I’ve seen that I think warrants bringing to light, and that is the misuse of the Flyweight pattern.


Goodbye, old friend…

I’ve had the same pair of prescription glasses since about 2004, having changed the lens more than once. I just got so used to them that whenever the opportunity arose to replace them, I couldn’t find a pair that felt or looked right. So, I just continued with the same old dependable pair.

They’ve fallen off of my face more than once, have tumbled many times to the hardwood floor from my nightstand while I fumbled for them in the dark, been lost in my bed covers and rolled onto during numerous occasions, and of course I’ve fallen asleep with them on more times than I can remember. Despite all of this, they not only held together, but retained much of the original lustre and remain in excellent condition.

Only one of the earpieces is starting to look worn, the nose pads are looking a little old and one of the lens screws had to be replaced when it fell out and got lost, but other than that, they’re as good as new. This was the first “thin” pair of glasses I had ever worn and I initially had some reservations about durability, so I’m more than pleased with how well they’ve held up. (I think the frames are made up of some titanium, but I can’t remember)

But this past weekend, I decided it was time to finally replace them.

We’ve had a good run, old friend, but I’m afraid it’s time to part ways.


Boston reflection and updates

It’s been two months since the 2011 Boston Marathon, which was my first attempt at this historic race. As some of you may know, it had been one of the focal points of my life for the past several months, ever since I qualified by 13 seconds back in September of 2010.

I took a new approach to training and really dedicated myself to it. There were many mid-week 4 AM mornings, followed by 1.5-2 hour runs in the dark, snow/rain and wind. I arrived at the starting line being as prepared for any race as I’d ever been.


Excess packaging

I recently ordered some extra Sanyo eneloop batteries when they were on sale at Dell. They’re great rechargeables, but I don’t know why most packages always come with a charger – I now have three of them from previous purchases.

However, when I received the package from Dell, I was surprised at the size. It came in a huge 18″x13″ bubble envelope: Continued

Java, Weak References and WeakHashMap

Most any Java Developer will be familiar with the concepts of references, as in pass-by-reference vs. pass-by-value. (Pointers, now that’s another thing…)

When calling methods, primitive data types are passed by value, while objects and arrays are passed by reference. This means when you call a method with an object as a parameter, you are merely providing that method a way to access/manipulate the same object via a reference; no copy is made. Contrast that with primitives: When calling a method that requires them, a copy of that value is put on the call stack before invoking the method.

In that way, references are somewhat like pointers, though they obviously cannot be manipulated by pointer arithmetic. But what about weak references? What are they, and how do they contrast with strong references?


Folding changesets with the Mercurial Queues extension

Mercurial is my distributed revision control system of choice, a trait I picked up at my previous job. I haven’t had the opportunity to deal with Git for any period of time, so I can’t comment on the various “Why X is better than Yarguments out there.

Most of you using Mercurial/Hg (or revision control in general) will be familiar with the concept of merging, where the changes in a source branch are merged into a target branch, creating a new revision or changeset on the target branch. But what about the times when you would like to combine two or more changesets/revisions into a single one that has the combined/overall changes of all of them? In that case, the Mercurial Queues extension provides for the concept of folding, which accomplishes just that.


What I’ve been up to

I’ve had a serious lapse in updating this blog with useful information, and for that I apologize. I would have liked to continue to provide helpful guides and other tutorials, but I continually found excuses to be lazy. Writing these guides is as helpful for readers as it is for me, so it’s something that I need to engage in more often if I am to continue with personal development.

With that in mind, I thought it’d be useful to provide an update on what I’ve been up to for the past few months, to keep things in perspective.


Qualified for the Boston Marathon!

On September 26th, I ran the Toronto Waterfront Marathon, thus completing the GTA marathon three-pack within one year. (GoodLife Toronto Marathon, Mississauga Marathon and the Toronto Waterfront Marathon are the three major GTA marathons) More significantly however, I qualified for Boston, getting my ticket to the event for 2011! My time of 3:10:46 qualified me by 13 seconds, and it was an epic battle for every one of those seconds. For these reasons, I felt this marathon experience to be the best of the five marathons I’ve run so far.


Completed the Mississauga Marathon!

On May 16th, I ran in the 7th annual Mississauga Marathon. This was my fourth marathon, and I’d decided to run it sometime back in March, after being unhappy with my result in the Toronto Good Life Marathon in October of last year. (Which I had run only two months after the Edmonton Marathon)

Though I had qualified for Boston during the Edmonton Marathon with a time of 3:02:50, I decided not to register for Boston after my poor performance in the Toronto Good Life race. I wasn’t sure I’d be ready again for another marathon in mid-April, and the timing with my schedule wasn’t ideal either.

However, by the start of February I was feeling better and started getting back into training mode. I had a May marathon in mind, which would give me a solid three months of training – more than enough considering the base level of training I’d maintained over the winter. However, I didn’t want to push myself and commit to something I couldn’t do – so I did not register until the end of March, when my condition was more certain.

And so when May 16th came, I was feeling pretty confident. I’d run the Sporting Life 10K two weeks before, finishing in 39:38, within my target time of a sub-40 minute run. I had a target time for this marathon of anything under 3:20, not enough to qualify for Boston since I didn’t want to push myself, since this was partly the result of why I’d done poorly at the Good Life Marathon last year.

The first three-quarters of the race went well, and I was able to maintain a fairly even pace, passing the halfway point at 1:33:55. While things went smoothly for the first 30 km, at about the 35 km mark I started feeling some slight leg cramps and had to slow things down. I lost quite a bit of time in the last 7 km, and managed to finish in 3:13:06, less than three minutes away from qualifying for Boston again.

While I was disappointed at coming so close to a qualifying time, overall I was happy with the result, having met my original target and improved substantially from my previous marathon. Despite this being my fourth marathon, I still feel that I’m very much a beginner at this, as I need to work on my overall race strategy, pacing and training if I want get more consistent results. I’ve thought about doing another marathon in the fall, perhaps the Toronto Waterfront Marathon (thus completing the GTA marathon three-pack), but I don’t want to push myself. I’ll see how the summer plays out.


Opera Mini approved by Apple for the App Store

On the heels of a controversial update to the iPhone SDK’s license agreement, Apple has unexpectedly approved Opera Mini for iPhone for distribution in its App Store.

Opera had previously announced that it had submitted its browser to the App Store for approval back on March 23rd, in an effort to drum up support for its inclusion in the App Store. Back then, many suspected it would likely be rejected on the basis of it duplicating built-in functionality on the iPhone, namely the included Safari web browser. (Though some questioned this analysis)

Whatever the reason, this comes as a surprise to many, especially given Apple’s most recent behaviour towards potential competitors and development on the iPhone in general. Nonetheless, let’s give Opera Mini for iPhone a quick test drive!


Triggering links from JavaScript using jQuery

Sometimes, you may want to trigger a link (that is, an anchor element) directly from JavaScript. That is, you may want to simulate the user clicking on the link programmatically.

If you’re using jQuery, you’ll no doubt be aware of the click() method which can be used to trigger that event on an object. One would think that executing click() on an anchor element would cause the browser to navigate to the URL, but this isn’t the case. You cannot use jQuery’s click() method to fully trigger or simulate a user clicking on a link.

Instead, click(), when executed on links, only seems to trigger any event handlers attached to the DOM element rather than any default behaviour. I’m not sure if this is the case with other event methods or other DOM elements.

The solution

Instead, the solution is to directly manipulate the window.location object from JavaScript. One would think that since preventing the default action is quite simple (with jQuery’s event.preventDefault()), triggering the default action of a link click would also be. But this isn’t the case. Here’s a simple example on how to simulate a user clicking on a link.


Awesome Note for the iPhone is awesome!

I’m a bit of an information pack rat. When I have an idea or something I need to keep track of, I have an immediate need to write it down or record it. In the past this has resulted in an assortment of post-it notes, notebooks or even loose papers lying around my desk, all used to document my thoughts. Eventually, I tried to move my note-taking over to the PC in an attempt to make it easier to manage, but over time the notes became spread over a variety of formats and storage mediums, from text files on my local PC to online services such as Google Calendar and Dropbox.

This sort of digital storage Balkanization was becoming a nightmare to manage and effectively neutralizing any benefit from taking notes, since finding and keeping track of what I’d written down was becoming a chore by itself. Clearly, a unified solution was needed. Ever since I got my iPhone last year, I’d been looking for an app or service that would allow me to easily keep track of todo and shopping lists (what most of my notes amounted to), while storing the the data online so that it could be synced or updated from my PC as well.

I think I’ve finally found that with Awesome Note.


Toronto goes open… sort of


Back on November 2nd, the City of Toronto launched their service – a project aimed to be the “official data set catalogue” of the city. Part of the OpenTO initiative to make various data that the city has collected available to developers in formats that make them easy to manipulate, is the first step to making the city and its services more “open and accessible”.

The hope is that if the city makes this information available in a readily-usable form, developers will take the time to create various services around them, helping citizens enjoy and take advantage of what Toronto has to offer. For example, data on garbage collection, public transit or upcoming city events could be used to create a service that would alert users through various means of communication. But at present, the amount and types of data available are fairly limited.


Google Street View finally comes to Canada


After much delay, possibly due to government meddling, Google Street View finally went live in select Canadian cities last week! Most of the GTA is covered, along with Kitchener/Waterloo, Ottawa, Montreal, Quebec City, Halifax, Calgary and Vancouver. This likely ensures coverage for a majority of Canada’s population, if only a very small minority of its geographical area.

This is a welcome move, since street view has been available for our neighbours to the south for the past two years.


Joining the iPhone cult

iPhone 3GS vs. iPod Touch 2nd Gen.

Well, I finally gave in and joined the cult of iPhone. At the beginning of this month, I decided to splurge and get an iPhone through Fido, Rogers discount brand. Why? I suppose it had something to do with the extension of the 6GB/$30 “promotion” or the fact that I was able to find a 3GS for sale locally, but mostly it had to do with the fact that I needed a new toy. (Note that the iPhone is hardly a novelty item, with >21 million of them out there)

Keep in mind that I didn’t have a mobile phone until late 2007, and even then I decided to only go with a prepaid provider (Virgin Mobile) because I didn’t have much of a need for a phone, but really just wanted Internet access. However, this past summer my phone got more use than usual, especially with regard to Internet access. With Internet browsing being anemic on most non-smartphones, I decided it was time to upgrade.


Evaluation of boolean values in JavaScript

If you have a background in a strongly-typed language such as Java, you’ll be used to using logical operators only with boolean values/expressions. However, in most dynamically-typed languages this doesn’t have to be the case, due to the nature of dynamic typing: The type of the variable is often determined based on the context in which it is used.

With JavaScript there are actually two concepts at play when using logical operators: What is actually returned from the result of a logical operation, and how variables are converted to boolean values when the context requires it.


Separating UI from implementation

I saw this comic about usability (linked from this question at Stack Overflow) and couldn’t help but let out a distressed laugh. How often have you seen this happen at your workplace, or in an application you’ve had the “pleasure” of using? For every elegantly designed UI that exists, there seems to be a plethora of poorly designed ones that do their best to confuse users.

To me, a lot of this UI complexity stems directly from a lack of separation between the UI and business logic layers.


Determine your visitor’s location based on IP address

If you’re running a website that provides a service, it’s likely that it would be beneficial to know a user’s location (or have a rough idea) so that the content could be tailored to their specific geographic area. But how do you get their location, without having to ask them? By using their IP address, it’s possibly to determine their general area with fairly good accuracy. In this tutorial, I’ll explain how to do that using the free IP address geolocation database from IPInfoDB.


Problems updating to WordPress 2.8 using SVN

If you’re like me, you run your WordPress installation off of a SVN checkout, making it far easier to stay up to date with new versions. In fact, using version control checkouts is an excellent way to maintain web applications running on production servers, especially if they don’t require compilation.

However, if you recently tried to upgrade to the latest version using the instructions at the WordPress Codex, you likely ran into a problem with an error mesage like this:

$ svn sw . 
svn: ''
is not the same repository as

This is because sometime between the release of 2.7.1 and 2.8, the URL of the WordPress SVN repository changed from to


Sun plans to launch an App Store for Java Desktop applications.


As reported a little while ago, Sun plans to launch their own app store for Java-based desktop applications. With Apple’s App Store having passed the one-billion download mark last month and thus proving to be a roaring success, it’s clear that Sun, like many others, is hoping to imitate and perhaps improve on the effort. But does it make sense?


Resolving log4j 1.2.15 dependency problems in Maven using exclusions


If you’re using Maven to manage your project’s build and dependencies, you may have encountered some problems when trying to include the latest version of log4j as a dependency. Specifically, log4j 1.2.15 depends on some artifacts that are not available in the central Maven repository due to licensing issues, and thus when you try to build a project that depends on this version of log4j, you may not be able to download the artifacts and your build will fail.

We could download and install these artifacts to the local repository, if we really needed them. But in most cases, they’re not needed and thus you won’t want your project relying on these artifacts just because some parts of log4j do. Thus, we need to exclude them.


Open Cygwin Bash Shell Here


If you’re like me, you love shortcuts and other tools that improve productivity. One of the other things I’ve gained a liking for is the Bash shell, after spending time in a Unix environment. Since I couldn’t live without this, and the other tools that typically come with a Unix environment, I installed the great Cygwin, in order to create a Linux-like environment on my Windows PC. (Not ready to make the full jump to Linux yet, for gaming reasons)

However, one thing that always irked me was having to manually navigate to a certain folder after opening up a Bash shell in Cygwin. For Windows, there is a PowerToy called “Open Command Window Here”, that provides a context menu option for quickly opening a (Windows) command prompt with the location set to the selected folder. This is helpful, since you often have the folder open when you want to also have a command prompt at the same location. Now, all I needed was the equivalent function, but for the Cygwin Bash shell, instead of the Windows Command prompt.


Using cURL in PHP to access HTTPS (SSL/TLS) protected sites


From PHP, you can access the useful cURL Library (libcurl) to make requests to URLs using a variety of protocols such as HTTP, FTP, LDAP and even Gopher. (If you’ve spent time on the *nix command line, most environments also have the curl command available that uses the libcurl library)

In practice, however, the most commonly-used protocol tends to be HTTP, especially when using PHP for server-to-server communication. Typically this involves accessing another web server as part of a web service call, using some method such as XML-RPC or REST to query a resource. For example, Delicious offers a HTTP-based API to manipulate and read a user’s posts. However, when trying to access a HTTPS resource (such as the delicious API), there’s a little more configuration you have to do before you can get cURL working right in PHP.


Google App Engine for Java: First thoughts


When Google launched App Engine about one year ago, many were excited about their expected move into the cloud computing space, but at the same time, dismayed that it only supported Python, a language seemingly favoured at the Mountain View-headquartered company.

However, Google was adamant that they would begin supporting new languages and began taking requests on their issue tracker for what language to support next. So, it was no surprise that support for Java was announced last week as part of an “Early Look” at the feature.


Getting a new pair of shoes – the Adidas Supernova Glide and Mizuno Wave Alchemy


I have had the greatest difficulty in finding a pair of shoes that fit and feel right. I think I can remember back to a time in grade school, bugging my Mom to buy me a pair of shoes that I so badly wanted, only to rarely wear them because they just didn’t feel right. All in all, I probably have accumulated a closet’s worth of shoes during my lifetime that just didn’t get much usage because they didn’t work for me.

Thus, for me, trying on a pair of shoes at the store and walking around for few minutes just doesn’t cut it. I won’t feel comfortable until the shoes have been “battle-tested” for hours… unfortunately this sort of intense “try before you buy” approach doesn’t work for most types of footwear, because it’s not fair to the store especially if you’ve worn the shoes outside.


How the Twitter StalkDaily Worm spread so fast


If you use Twitter a lot (unlike me) you’ll likely have been alerted and worried about the presence of a worm that’s been making the rounds at the popular micro-blogging website. The so-called “StalkDaily” worm was first noticed on Saturday, and it appeared to be able to “infect” a user’s Twitter profile, causing random tweets about the StalkDaily website (don’t go there) to show up on their profile. Furthermore, other user’s Twitter profiles could also become infected, seemingly by only viewing the profile of another infected user.

Eventually the source code of the worm was uncovered, (safe to view) and a quick analysis of the worm shows why it was able to quickly spread through Twitter so fast. Here’s an overview of how the worm worked.


Lowering the barrier to entry to attract users

Flickr photo by greensambaman
Flickr photo by greensambaman

There’s an interesting article out that points to the fact that every day there are 10,000 canceled installations for Firefox; this meaning that each day 10,000 people download the Firefox installer, “fire up” the *.exe and then click “Cancel”. (A further 40,000 apparently downloaded the setup file, but didn’t even make it far enough to start and then subsequently cancel the installation)

Even more interesting were the reasons why the 10,000 canceled their install. A large part of the respondents were “confused” with some part of the install process (nearly half) while most of the other half identified that they did not have the proper permissions to complete the install.


Aspect-Oriented Programming

I’ve started looking at Aspect-Oriented Programming (AOP) recently, because of its potential for improving code readability and maintainability. This is mainly provided by the “separations of concerns” goal that AOP aims to achieve. To get started, I decided to jump in using the jQuery AOP plugin. Why jQuery/JavaScript instead of something more mature like AspectJ? Well, for one thing, I have spent quite a bit of personal time developing with JavaScript and it seemed like a logical place to get a good footing before diving deeper with something like AspectJ.


Sunset after a Spring shower

Just thought this was an amazing view from my balcony this past Sunday.

Belleville Sunset after Spring Shower (Vivid)

See more at my Zooomr Photostream

JavaScript functions: First-class objects

In JavaScript, functions are first-class objects, meaning that they can be created, manipulated and passed around in the same manner as other objects/variables in JavaScript. For example, a function can be created, stored in a variable or even be the return value of another function, as seen below:

function getPower(power)
  return function(x)
    return Math.pow(x, power);

var x3 = getPower(3);
window.alert(x3(3)); // Outputs 27.

In the rather stupid and contrived example above, we make a function getPower() that returns another function which raises the given value to the exponent supplied by calling getPower(). (This is a bad way to do things for numerous reasons, but is just shown for the sake of providing a simple example)

We then call getPower with a power of 3 and assign the returned function to the variable x3, and the output is as expected. Defining “inline” functions this way and manipulating them is closely associated with the concept of anonymous functions.


Using the Basic Constraints extension in X.509 v3 certificates for intermediate CAs

It’s not often that you’ll be creating your own X.509 certificates for a web server, since any certificates that you create (self-signed or signed by your own CA) will not be trusted by most browsers (IE, Firefox, etc.) since they were not signed by one of the many Certificate Authorities (CAs) that have been automatically trusted by the browser. If you do decide to use one of these certificates on your web server, you’ll have to navigate through a Byzantine series of screens to “confirm” that you trust the server’s certificate. (Though this is annoying, it may be ultimately beneficial in today’s era of phishing and other malicious behaviour.)


The misguided war against IE6


IE6 is universally reviled among web developers for its poor support of web standards, namely with CSS and even PNG transparency. Many hours of hair-pulling frustration have been wasted when developing web applications, trying to “get things working right” in IE6 after having already spent so much time making a site look good in most of the other browsers. IE7, while better, is still not that great.

So, you may be surprised to know that I think the “War against IE6” is misguided and perhaps a bit out of touch with reality. It’s not that I don’t believe in their message, but rather that I believe it’s somewhat impractical. The unfortunate reality is that support for IE6 will have to continue for some time.


JavaScript Event Delegation

JavaScript Event Delegation is a technique you may have heard of. It’s a different way of using event handlers that offers clear benefits and is becoming more popular amongst web developers. I’ll give a brief overview of event delegation in JavaScript, along with why you should consider it. Note that this tutorial will use the great jQuery library (v. 1.3.1) for most examples.


Delegation is a fairly well-known design pattern. In short, it is a way for a method to produce its result simply by calling a method on another object, thus delegating responsibility to that object to provide the functionality needed by the method. For example, a Cashier object could store a delegate object called Calculator. Calling Cashier.addToTotal(value) would simply delegate to the contained object, calling Calculator.addToTotal(value).

How is delegation different than inheritance? With inheritance, the subclass inherits all of the functionality/behaviour of the parent class. You may not want or need this; in the preceding example, it would not make sense to have Cashier extend from Calculator simply because we wanted the addToTotal() behaviour/functionality. Delegation allows the behaviour advertised by a certain object/class to be provided by another.


Java Polymorphism and Overriding Methods

Most Java developers will be familiar with polymorphism – we’ve all seen the example of the Dog and Cat classes inheriting from some abstract Animal class and having their say() methods produce different results. But it’s still worthwhile to look at a few simple examples to reinforce the concepts.


iPod Touch

Turned on!

I finally bit the bullet and got an iPod Touch 16 GB, after months of telling myself I shouldn’t. And yes, I’m thoroughly enjoying my new toy. 🙂 So why did I get an iPod Touch when I could have just got an iPhone for the same upfront cost? A few reasons:

  • I don’t use my cellphone a lot. In fact, I’m on a pay-as-you-go plan with Virgin Mobile since my cellphone is basically for emergency situations. I still don’t like cellphones all that much.
  • I don’t want to pay the exorbitant monthly fees that carriers in Canada charge to use the iPhone. Basically, the minimum monthly cost is $60, but this does not include the “System Access Fee” or essentials such as Caller ID, and adding those brings the total to over $80/month without taxes

I don’t want to turn this into a huge iPhone vs. iPod Touch debate, so let’s just say I don’t have the cash for an iPhone subscription at present. Anyway, here’s a few pictures from the unboxing. Enjoy!


Getting Xdebug to work with Apache/XAMPP to debug PHP


I’ve written about Eclipse and how useful it can be, with its extensible plugin-based system. It’s so useful that I use it everyday for almost any language – Java, PHP, JavaScript to name a few. It’s even great for things like CSS and XHTML.

PHP is currently my favourite “hobby” language and has been for some time. While I like PHP, one of the things that hasn’t been straightforward with it is setting up a proper debug session, where you can step through code. This contrasts heavily with a language like Java, which has always had strong developer tools. This has resulted in a mass of third-party tools aimed at facilitating PHP debugging. A while ago, a reader emailed me asking about this very topic, so I decided to put together how-to detailing my experience with the topic and how I went about learning it.


Getting Google Chrome to work with Hotmail


Like many, I’ve been using Chrome occasionally ever since it came out back in September.
I never really had any problems with any sites, and was impressed with how fast it left the “Beta” stage, considering Google’s affinity for the term. Continued

How I bought a car to complete my first marathon

2008 PEC Marathon Medal

The following is a somewhat long-winded first hand account of my first marathon, which I completed earlier this year, but took some time to write about.

It was a usual Friday afternoon, the time of the week that I usually can’t wait for. However, this Friday I was feeling a little bloated and slow having come back from a lunch buffet where I’d overindulged.

To work off this lethargic feeling, I decided to visit the gym after work – something that I only do infrequently on Fridays, being keen on getting home as early as possible in anticipation of the weekend. I’m fortunate enough to have a workplace that has a gym onsite – but this also means any excuses I’d have for not going would only be made weaker.

Dragging myself to the gym, I started into my routine. In between reps and trying to catch my breath, I starting making some small talk with Brian, one of my coworkers, who was on the bench beside me.

“I don’t normally see you in here this time of day,” I said.

“I usually come in at lunch,” he responded. “But a lunch meeting ran overtime today.”

“Are you working out to prepare for hockey?” I asked, referring to the recreational league that was starting in September.

“No,” he replied, slowly. “I’m in here crossing-training for the marathon.”

That last word, marathon, set off a trigger in my mind.


Driving Gloves

Ever since getting my new car back in September, things have been great. That is, until things started getting colder. Besides having to brush off snow/ice after every snowfall, the cold weather also makes driving more uncomfortable.

More specifically, holding a cold steering wheel after you’ve just spent the past few minutes outside chipping ice off of your car sucks. Not having the benefits of a heated steering wheel (do such things exist?) I was left with the option of keeping my gloves on while driving, at least until the car warmed up sufficiently. The only problem was that my gloves didn’t provide enough grip and thus driving wasn’t as fun.


Handling mutable fields in Java

In Java, a mutable object is one whose state can be altered after it has been instantiated. An immutable object is one whose state is fixed after instantiation; that is, the data represented by the object cannot be changed in that object. Perhaps the most well-known immutable type is the built in String class; while there are methods on the String class that seemingly alter its state (such as toUpperCase() and trim()), in actuality these methods return a new String object if changes had to be made. In this article I’ll discuss how mutability will affect how you expose private fields in objects.

Pop Quiz

Consider the following code fragment. We create a MapContainer object, and then get the contained map, which is guaranteed to have a certain value associated with the key “today”. We then alter the value associated with this key, using our local reference to returned map. We then query the MapContainer object and get the contained map again. What is the value associated with the key “today” in this map?

final MapContainer mapContainer = new MapContainer();
final Map<String, String> map = mapContainer.getKeyValuePairs();

final String today = map.get("today");
assert null != today;
System.out.println(today);  // Returns the current date-time.

// Change the value using our local reference.
map.put("today", "tomorrow");

final Map<String, String> mapAgain = mapContainer.getKeyValuePairs();
System.out.println(mapAgain.get("today")); // What is output?

Don’t waste too much time on this problem, as it’s a trick question. The answer actually depends on the implementation of MapContainer. Depending on how it’s implemented, the second output could be unchanged from the first or be changed to the new value of “tomorrow”.


A (Canadian) Coalition of the Willing

Or perhaps the title should be, A Coalition of the Willingly Stupid. Canadian politics, normally a nice and relaxing reprieve from the politics to the south of us, has suddenly taken an unexpected ride on the rollercoaster, with talk of a “constitutional crisis” and “undemocratic seizures of power”. (You’d think this was an underdeveloped country ruled by a despot) It seems as though the opposition parties are intent on removing the current Federal Conservative minority government from power, using any means possible.


Getting Feedback with UserVoice

When developing any application, getting proper user feedback during the early stages is essential if you want to have the application suit your customers’ needs. Often this is done with staged tests, but with web applications you can have the benefit of using an online method of retrieving your users’ opinions.

However, doing so can be tricky. If you want to get feedback, you can implement your own system for soliciting it, however, this takes up extra time that could be used to further develop your core web application. Alternatively, there are some existing online services that can provide survey-like questionnaires to users, but honestly, these present more trouble to the user than they’re worth.

When I first started using Stack Overflow, I noticed that the feedback service they had been using, UserVoice, was an elegant and functional solution to this problem.


Google’s SearchWiki: Promote Search Results!

Yesterday, Google launched its SearchWiki tools, which allows registered users to promote or remove entries from a Google search to further personalize results. This will allow users to customize and tailor the results to what they’re interested in, but it’s worthwhile to note that Google has probably done something similar with their personalized search histories, already offered to registered users.

A few things to note: Firstly, while the act of promoting or removing a search result seems very akin to Digg, the result is not the same. The changes you make only affect your own search results, and Google is very clear on this. However, it would be madness to believe that Google would not use the data gathered from this social experiment to further improve their algorithms. You also have the option of adding your own results to further personalize your searches and there is an option for seeing what others have recommended/promoted or removed, providing for an interesting social experiment.


Stack Overflow is a great community and resource

When Stack Overflow publicly launched back in September, I registered immediately after learning about it from a coworker. The product of Joel Spolsky and Jeff Atwood (among others), the site aimed to be a collaborative Q&A site focused on programming and software development. You could ask questions or provide answers to any of them. In their own words it was combination of “Wikis, Blogs, Forums, and Digg/Reddit”. Furthermore, they made no attempt at hiding the fact that they were designed to be better than other questionable sites, such as Experts-Exchange.

Though I registered over two months ago I’ve mostly been lurking since, but have been most astounded by the rate at which questions – often complex and very specific issues – get answered. Since the site allows users to rate/vote up other people’s answers, it provides an incentive for users to give good answers that will be recognized by others, gaining them points and increasing their “reputation score”. In this sense, it’s like Digg, but with a global ranking system.


Subscribe to Comments for E-mail notification of replies

In response to the numerous comments received on my Acer Aspire One 6 vs. 3-cell battery comparison and subsequent full review, (thanks people!) I’ve added the popular Subscribe to Comments plugin to make dealing with responses easier.

Many of you posted questions in the comments, and having to keep checking back to see if anyone has posted a reply can be tedious and time-consuming. Instead, you can now subscribe to a comment thread when you post a reply; any subsequent comments will generate a notification that is e-mailed to you, keeping you up to date. The e-mail will also contain a link to where you can manage all the threads you are subscribed to and remove yourself from any subscriptions, so you have full control over what e-mails you receive. So don’t be afraid to use this feature!

The feature is disabled/unchecked by default until you enable it. This means it is purely an opt-in subscription, to prevent connotations of spam, which we all hate. I have tried it out and it appears to be working, but let me know if you have any problems.


Properly setting Axis Ranges and Data Scaling using the Google Chart API

The Google Chart API is a great way to dynamically create chart and graph images for any non-static data you might want to display to your visitors, such as stats for a runner’s training log.

Although you can use your own server-side solution for generating charts, using PHP’s GD Image Processing Library or even a fancy chart library like pChart, this can increase the drain on your server’s resources. Client-side solutions that utilize the canvas element and jQuery or Flash can be very nice and easy to use, but may slow down the browser if there are a lot of charts.

Google Charts offers a nice trade-off; by using their service you offload the processing and bandwidth and get back a simple PNG image, but you must learn to use the API. Additionally, there’s also the risk that the service may throttle you, even if there’s no current usage limit.

Problems specifying Axis Ranges – Data points are not changed!

The API for Google Charts essentially consists of passing different query string parameters and their values and getting back a PNG-format image. As a result of this, passing in parameters is a bit quirky, and information in the API guide is a bit sketchy in this respect.


The Beatles are coming to Rock Band!

Beatles and Rock Band

After much speculation about an upcoming game, it has been confirmed that the Beatles will be coming to a game produced by Harmonix, the makers of Rock Band. There is much to be excited about, besides the fact that this has to do with The Beatles.

Just the details, ma’am

Wired live blogged the event and while much of it is tangential ephemera, there’s a good summary at the top. The key points: The deal is exclusive, the game will be released during the 2009 holiday season, the game won’t be branded with the “Rock Band” name, and Giles Martin will be involved!

The lack of the “Rock Band” name was expected – The Beatles clearly didn’t want to dilute their trademark but from what I am guessing, the core gameplay will remain the same, with the “musical and visual journey” providing lots of trivia, information and history to placate rabid fans, such as myself. (Think of it as Rock Band fused with The Beatles Anthology)


Extracting X509 Extensions from a CSR using the Bouncy Castle APIs

The Bouncy Castle Cryptography Java APIs are an excellent set of APIs that act as a provider for JCE and JCA. Additionally, they take care of the mundane and tedious (some would say overly complicated) details involved in reading and creating the data structures associated with the X.500 and PKCS standards. (The APIs are also available in C#, for .NET developers out there)

One thing they handle well is the concept of certificate extensions. X.509 v3 certificates introduced the concept of these extensions, which are basically additional (potentially optional) fields containing information not contained in the older original X.509 specifications. Each extension is specified by an OID (Object Identifier); a good list of these extensions is available.

While it’s easy to read these extensions from an existing X.509 v3 certificate using the Bouncy Castle APIs it is a bit more involved to read these extensions from a Certificate Signing Request, or CSR; this is the data structure that is sent to a CA to request a certificate. The CA then reads the data from this and creates a signed certificate issued to the requester. In this guide I’ll present a brief way to extract X.509 extensions request from a CSR so that they may be included in the resulting issued certificate.


Google changes iGoogle, making gadget development more profitable

On Thursday, Google rolled out an update to its personalized home page service, iGoogle. Among other UI updates, the major new features were increased flexibility in what “gadgets”, the personalized “chunks” that make up an iGoogle start page, can do. This, in turn, allows developers much more freedom with what they can provide to the user through an iGoogle gadget.

Previously, gadgets could only occupy a small box that took up only a third of the screen. While this was okay for reading headlines or perhaps glancing at stock prices, it limited the usefulness of gadgets and the information that could be provided. For more detail, users would often have to click a link in the gadget that would take them away from iGoogle. While this is perhaps the proper use of a “start page”, Google may now see things differently.


Rock Band 2 Unboxing for PS3

Picture 001

Yesterday, Rock Band 2 was officially released for Playstation 3 across North America. I managed to snag a copy of the SE Bundle after some looking around. Here’s a brief overview of what you get along with my initial impressions. Expect a full(er) review later. And yes, I am going to be lazy and link to the Wikipedia article on Rock Band 2 for those of you in need of some background information. (For those of you looking for just unboxing photos, we have those too, along with a comparison between instruments of Rock Band 1 and Rock Band 2)

For $190 US/CAD (the CAD version actually being cheaper with the exchange rate changes of late), you get the updated guitar, improved wireless drums, microphone, and of course, the game. For comparision, the original Rock Band SE bundle cost only $170 US when it was released 11 months ago. So, where is the extra $20 going to?


Voting Day in Canada

Today was voting day in the 2008 Canadian Federal Election. I just got back from voting, and thankfully the polling station was nearby (just as with the Ontario Provincial Election last year), being only a five-minute walk away from my building.

I headed over there right after work and was surprised to see that the polling station was not busy at all. It was in the gymnasium of a secondary school and I was the only person voting at the time. (Though I did see people coming in on my way out) Perhaps this was to be expected, as Belleville is a community with quite a few retirees who probably voted earlier in the day.


Completed my first marathon!

Today was the PEC Marathon, something I’ve been looking forward to for the past little while.

Yesterday, I was very anxious and somewhat nervous. Ate a decent breakfast, a small lunch and a huge pasta dinner around 5 PM. I may have overate, as I felt somewhat bloated, however I knew I had to since big breakfasts and running do not go well for me. I woke up just past 5 AM, having almost overslept (something turned off my alarm clock, well at least I don’t remember turning it off…) and ate a small breakfast. (Coffee and a smoothie) Thankfully my bathroom schedule was in order. Continued

Training for the marathon

I recently signed up for the PEC Marathon, which this year is on October 5th. This will be my first marathon and I’m looking forward to it.

I actually have not been doing any strict “marathon training” per se, but have just been running my regular schedule for most of the summer, which consists of a 10K run three times a week. I usually run it at a relatively quick pace (for me), finishing it in around 41-42 minutes. Continued

Acer Aspire One (Canadian) Review

All set up

The Acer Aspire One has certainly taken the world by storm, proving itself to be the first viable competitor to the dominance established by Asus and their Eee PC. The so called “netbook” market has also exploded, less than year after Asus introduced the first Eee PCs. Netbooks, also known as subnotebooks, are low-cost laptops designed primarly for Internet usage and other tasks that don’t require lots of power.

Aspire One 6-cell version

It’s been some time since I first unboxed the Aspire One and then got a 6-cell version to test and compare with. The 6-cell version will be the one I am reviewing since it’s the one I’m currently using.


Chrome fallout

Since Chrome’s official release some two days ago it certainly has gotten a lot of press, both positive and negative.

What’s good

On the positive side, there are some reports that Chrome’s market share has already surpassed that of Opera, coming in at close to 2.5% when I last checked. These results should be taken with a grain of salt, as Clicky’s web analytics might only be used by websites that tend to be visited by those more technically-inclined and thus more likely to try out something like Chrome. (Though Chrome’s visibility on Google’s main page no doubt has some small part in its fast growth)

For what it’s worth, Google Analytics on my lowly-trafficked site amounted to over 4% of hits in the past five days. (Google Analytics has since started identifying Chrome as a specific browser type, no surprise)

Chrome browser share
Chrome browser share on my site


Google Chrome: What it offers

Google Chrome

After much speculation yesterday, marked by a leaked web comic and finally an acknowledgment by Google, Google Chrome, the much anticipated web browser, is here.

I encourage you to download it and give it a try, as I did as soon as it came out. Here are some of my initial impressions.


Google released a fairly long web comic that delves into quite a bit of detail about Chrome – it’s not your typical comic! Touted as being built “from scratch”, Chrome uses the WebKit rendering engine, the same one that powers Safari and Konqueror.

The first thing you notice is how minimal the “Chrome” or UI of Chrome is. If you’re used to a half-dozen toolbars, buttons and widgets all over the place, Chrome will seem like a greenfield to you. By default, there is only a tab bar and then an address bar containing back, forward, a combined reload-stop button and the address bar. There are also buttons for bookmarking a site and for page and browser settings. The bookmarks bar is not displayed unless you specifically change that setting.

Keyboard shortcuts are also present so that you don’t have to click through context menus. If you’re used to the keyboard shortcuts of Firefox and IE7 you’ll be pleased to know that most of them transfer over without change: Ctrl-T opens a new Tab, Ctrl-W/Ctrl-F4 closes a tab, Alt-D focuses the address bar and Ctrl-J opens Downloaded Files.

The address bar also functions as a search bar, and this combination just makes sense. It’s something I’ve always been doing using Firefox Quick Searches

By default the home/start page is set to set to show an Opera-style “Speed Dial” page containing most recently-accessed pages/bookmarks. You can also configure Chrome to restore the previous tabs/websites on startup, which is my personal preference ever since I started using Firefox.


Acer Aspire One 6-cell vs. 3-cell battery comparison

Since my initial unboxing of the Acer Aspire One, I’ve managed to get my hands on a 6-cell version for testing. I was interested in seeing what this unit was like, considering that most complaints stemmed from the inadequate battery life of the 3-cell version, which was also evident to me. Here are some comparison pictures to help you decide whether the extra bulk is worth the additional run time. My opinion follows.

6-cell/3-cell comparison
6-cell add some slope/tilt


I’ve since completed my full review of the Aspire One. Please read if you’re interested.


Acer Aspire One Unboxing – Canadian Version

I finally received my much-awaited Acer Aspire One this week and have been enjoying it ever since. I ordered the 1 GB/120 GB HDD/Windows XP Home edition from last Friday (an online store that is most likely a front for, which I’ve also ordered from) and the package arrived on Monday – this was with the free shipping option!

Keyboard is close to full-size for most keys


I’ve since completed my full review of the Aspire One. Please read if you’re interested.

I’m still forming my final opinion of the device but my initial impression was very positive – I don’t have any major complaints. The device is well-designed, stylish, easy-to-use and very snappy. The 1.6 GHz Intel Atom N270 that powers the laptop is more than enough for the things you’ll the Aspire One – and it supports hyper-threading and so shows up as “two” cores in Windows.

The Canadian Keyboard

The one downside to the Aspire One that is specific to the Canadian version is the inclusion of a “bilingual” keyboard layout. Apparently, it is required(?) that laptop vendors sell a version of the laptop with this layout in the Canadian market, so many laptop vendors are just switching completely over to this layout for their Canadian versions in order to simplify things and not have to deal with multiple models. This keyboard layout differs from a standard “US” keyboard layout in two ways:

  • The left-shift is shortened to half-size and a pipe/backslash key is placed to the right of it, between the left-shift and the ‘Z’ key.
  • The enter key is not on a single row, but is instead an inverted L-shape. Another pipe/backslash key is placed to the left of it, in between the enter key and the quote (“) key. Thus, the pipe/backslash key is moved down from the “QWERTY” row to the “ASDF” row.

This is an absurd layout and probably no one more than I hates it; it makes no sense that a “bilingual” layout would require such a ridiculous change. However, after typing on it for a bit, it becomes apparent that it’s not that horrible. The biggest problem is the poor positioning of the backslash key, which makes typing Windows-style pathnames difficult. The extra key near the left-shift can hopefully be remapped using the registry editor or some helpful utilities.


Expect a full review in the future. In the meantime, check out of some of the unboxing photos below or see the full set in my Zooomr photostream.


The effect of heat on exercise

Heat: Everyone knows that when there’s too much of it, things can get very uncomfortable, especially if there’s an accompanying high humidity. However, a high temperature is also something that needs to be considered if you are training under these conditions. Besides the general notions to drink plenty of fluids and stay hydrated, excessive temperatures can also adversely affect your performance, so any benchmarks or goals you set for yourself need to be adjusted depending on the conditions.

Take, for example, the route that I have been running for the past several weeks. During that time, I’ve kept records of my run times along with the conditions that day. (Specifically, the temperature, dew point and relative humidity)

On days where the temperature was above 25C my run times were averaging between 45-46 minutes. On days where the temperature was 20C or lower, average times decreased to around 43 minutes. That’s roughly a 4-6% decrease in time when going from 25C to 20C, or conversely, a 4-7% increase in times when going from 20C or below to 25C or higher.


Decoding Google Maps Encoded Polylines using PHP

I’ve talked about the Google Maps encoded polyline format before. While there’s some nice utilities for encoding polylines that take the work out of implementing it yourself, I couldn’t find many polyline decoders.

This made it somewhat tedious to decode them, as the only way to get the original list of points was to create a GPolyline and then pull out the points from that object. This is not ideal since the work must always be done on the client side with JavaScript and using Google Maps.

To solve this, I quickly ported the algorithm over to PHP from the JavaScript source. Please feel free to download/modify/use this script.


Bought a PS3

After discovering that Rock Band for Wii turned out to be a disappointment, I recently decided to sell it off and save up for a Playstation 3, which I bought last week. I also picked up a copy of Rock Band for PS3 and am now playing Rock Band the way it was meant to be played: With downloadable content (DLC), properly-rendered gameplay and character creation. (I actually bought a used copy of just the game and then forked over $100 for the PS2 special edition, taking advantage of the current promotion and saving about $40 after taxes)

Does this mean I’ve lost faith in the Wii? Well, probably not. My disappointment in Rock Band for Wii was not entirely Nintendo’s fault, even if they have acknowledged storage/space issues, since many have pointed out that Harmonix may have cut a few corners by simply porting the PS2 version over to Wii, saving time but perhaps selling short its full capabilities. This point is further underscored by the fact that the upcoming Guitar Hero IV: World Tour, will feature DLC in the Wii version – though perhaps we’ll see if that’s the case when it arrives later this year.


Protecting SVN metadata folders on a web server

I recently changed my WordPress install over to an SVN checkout in order to get rid of the tedious steps required to upgrade every time a new version is released.

Thankfully, following the well-written guide on the Codex was easy and straightforward – both for changing this existing installation over to SVN and for setting up a new blog for RunTrackr. I now look forward to updates, just so I can relish in the ease of upgrading. 🙂 Continued

Announcing RunTrackr: Create and track running route distances easily!

I’ve just launched RunTrackr. It’s a site where you can create a running route in order to track, among other things, distances. It’s designed to be a tool to aid anyone who runs/jogs a lot, either recreationally or for training. A training log is also provided so that you can easily keep track of your running records and record your progress during training or just to watch your personal improvement.

Here’s a quick overview of what’s possible with RunTrackr as well as what we have in store for the future in terms of improvements to the site.

Adding/Creating a route

Creating a route probably the main reason you’d want to use RunTrackr. By creating a running route, you can measure its distance and keep track of it in your training log every time you run it.

RunTrackr Preview

Plotting a route is very easy; all you need to do is enter your location (Eg. “Belleville, ON”) and then click to add points. Existing points can be dragged around to alter the route. When you’re done, just click “Save Route” to finalize! You can also choose to enter a short description, tag your route with descriptive labels or rate your route’s difficulty.

Later on, I plan to add support for uploading automatically-generated routes/plots from GPS devices like those from Garmin, et al. This will make adding routes even easier for those who have access to such devices.


I’ve been busy

I haven’t been posting updates or writing as many articles here as I’d like to, and it’s mainly because I’ve been busy putting the final touches on a website I’m about to launch. I don’t want to give away too many details or build too much hype, because frankly it’s not that big of a project and was never intended to be.

However, it was a project that I intended to learn from, and in that regard, I think I’ve succeeded – and that’s really what I want to continue doing for the rest of my life. Furthermore, while the project was an exercise in improving my web and software development skills, the end result will also be something that I will actually use myself – not just some pointless academic exercise. Another nice effect was the experience of seeing a self-directed project come to fruition over the last few months – albeit at a slow rate, usually only several hours per week, but nonetheless I’ve improved my self-discipline as a result. Continued

The Beatles and Rock Band or Guitar Hero?

With the recent rumours that Beatles representatives met with both the makers of Rock Band and Guitar Hero to discuss the possibility of a Beatles-themed game, I’ve been more than a little excited at the prospects of rocking out to these tunes. (See more coverage at Wired and the original FT article)

Whatever the outcome, it could be a deciding factor in what console (if any) I decide to buy. I’m already feeling the pain of no DLC for the Wii version of Rock Band, which is putting doubts into my mind as to whether I should have bought the Wii version.


Google Static Maps API key issues

I’ve just starting playing around with the Google Static Maps API as a complement to the regular Google Maps API, which as you probably know, is for JavaScript. The Static Maps API, on the other hand, provides a way to display static map images. This is useful in situations where you just need a non-interactive map and don’t want the overhead of an Ajax/JavaScript-based one.

However, I ran into some minor problems related to the API key usage with the Static Maps. Basically, an API key is tied to a certain domain name so that Google can keep track of your site’s usage. This means that the API key is tied to the domain name of the web site where you’re using the Google Maps API.


Upgrade jQuery for better Opera support (Or just upgrade Opera)

I ran into a weird problem while testing one of my sites that used jQuery with Opera 9.26. (I happened to be using this older version of Opera because I am lazy to upgrade; I’m still using Firefox 2 despite the successful launch of FF3)

The issue was with an Ajax request I was sending. The return value was an array in JSON form. More specifically, the server was returning something like: Continued

Rock Band finally comes to the Wii

I’ve waited for this day – June 22nd – for a while, since today is the day that Rock Band finally comes out for Wii. While my PS3 and Xbox 360-owning friends have had access since last November, I had to be content with Guitar Hero III while I gazed with jealousy at the wonders of Rock Band and its superb multi-player aspect.

Picture 001

Was it worth the wait? For me, it was. However, there are some obvious shortcomings when comparing the Wii version of Rock Band to those on the Xbox 360 and PS3, most of which were expected. Whether these were the fault of Harmonix (the developers) or Nintendo is a matter of debate.


What Bell doesn’t want you to know: The full extent of their throttling

Copyright Bell Canada

When Bell instituted their throttling of Internet services back in March, it was almost universally-reviled. It wasn’t so much the throttling that was disliked but rather the secrecy with which it was done. Bell did not notify any of their customers of this change of service, nor did they change their advertisements to reflect this new “level” of service. Thankfully, the CRTC has ordered Bell to publicly disclose the full details of whether Internet traffic levels warranted throttling. Unfortunately, this doesn’t seem to include the full explanation of their throttling policies.


Bill C-61 gets a reading: Are DMCA-style laws coming to Canada?

This Thursday, Minister Prentice tabled Bill C-61, otherwise known as “Canadian DMCA”. This move was widely expected as well as the contents of the bill. Though there have been provisions added for some “fair use”, the details reveal DMCA-style rules that may leave consumers in legal limbo when it comes to making personal copies. In fact, these rules are even more stringent than the US DMCA, and for a bill that’s been paraded as “Made in Canada”, there’s been a frighteningly small amount of feedback that the Federal Government has taken from its citizens. Add to this the rumours that Prentice met with “U.S. trade representatives and entertainment industry lobbyists to discuss the legislation,” and you have to wonder just who wrote this bill.


Bully: Scholarship Edition for Wii is a great game

Bully: Scholarship Edition for Wii

I was at EBGames last week and they were having a sale. Many of the titles with the red-discount mark (of shame?) were laughable and typical of the “shovelware” companies throw out just to capitalize on a popular gaming system like the Nintendo Wii. However, one caught my eye: Bully: Scholarship Edition for Wii was only $24.99 CAD. It’s easy to justify an impulse buy like that, especially when I had heard great things about the original, which was released for PS2-only back in 2006. (The “Scholarship Edition” is a re-released version for the Xbox 360 and Wii and contains additional content; it debuted on March 4th, 2008)

Turns out this “bargain-bin” game has been one of my better purchases for Wii. If you like the GTA-style of games, you’ll probably like Bully, as I learned.


Fixing the small title bar text in GNOME with Compiz enabled

If you’re running GNOME and have enabled Compiz effects, you may have noticed that title bar text – the descriptions at the top of windows – have inexplicably got smaller. This problem is especially relevant and noticeable in Linux Mint and other Ubuntu-based distributions, as I learned when setting up a machine for my Mom to use. You can see an example of the small/broken title bar text size below. (This was with the default settings)

Small (broken) title bar text

A quick fix would be just to increase the title bar font size in the appearance settings, but this would result in larger-than-normal title bar text if you were to disable the Compiz effects. This smaller text is actually a slight bug, and can be fixed by entering the command compiz --version in the terminal. After doing this, you’ll see the title bar text increase back to the normal size – invoking compiz seems to cause the manager to reset the size back. However, the changes do not persist after a reboot or after logging back in and it’s impractical to have to do this every time.

As with all tedious tasks, the best way to accomplish them is with a script. Here’s a nice workaround.


Wii Fit cometh

Picture 061

After much anticipation and waiting, Wii Fit has finally arrived! I pre-ordered my copy from EBGames, which was good since it’s apparently sold out in many places. Wii Fit has been hyped up ever since the release day for North America was pushed back in order to increase the strength of the balance board to support more than the 300 lbs of the Japanese version. (The NA version supports 330 lbs) I picked it up on the release day, May 21st and have been using it on-and-off for the past few days.
Here are my initial impressions.

330 lbs!


The importance of Draconian validation for method parameters

I recently ran into a problem where the callers of one of my methods was using it improperly by suppling a parameter that did not conform to the required values. However, the problems did not surface until I changed the implementation; previously, things worked by chance due to an implementation detail.

I had been using input validation, but my validation procedure was not stringent enough to detect the improper parameter. This was tied to the fact that before the implementation change, things worked perfectly fine even with the improper inputs. However, the implementation change “broke” this work flow. All of this has led me to believe in the great importance of:

  1. Draconian validation: For inputs, only accept what you say you will accept. Nothing else should pass.
  2. Proper unit testing: Test your method with a variety of inputs, both expected and unexpected or non-conforming. You never know what callers will pass into your methods.

Let me go into some more detail.


Playing with Google Maps and encoded polylines

I’ve been playing around with the Google Maps API for a bit and it’s turned out to be a great way to get started with “mashups” and the like. One of the best uses of the API is the ability to create paths or routes on the map.

This is done by creating GPolyline object and then adding it as an overlay to the map. Basically, a polyline is just an ordered list of geographical points/coordinates on the map, each of which is a GLatLng object. For serialization/storage of polylines, there is an algorithm you can use to Base64-encode a series of points; the resultant string can later be passed directly into a factory method to regenerate the GPolyline. By using encoded polylines, you also get access to a few more interesting and useful options related to rendering and performance issues.


CakePHP and error/exception handling

Copyright CakePHP

I’m currently using CakePHP and finding it to be quite useful. The “automagic” handling of tables is useful for basic relationships, though more complicated setups usually require manual work. The MVC implementation has also clearly drawn inspiration from Ruby on Rails, which may be advantageous to some, though this has no bearing on me. Though there are a few things that nag me about CakePHP (such as lack of a good testing suite, though that’s supposedly fixed in 1.2, which really should be marked as version 2.0), overall it’s a great framework that adds badly-needed structure to PHP and has saved me time.

One thing I’d like to see, however, is a proper exception handling model. I realize this would require making it PHP 5-only, but in my opinion, PHP 5 adds some sorely-need features, such as the aforementioned exception handling model and a class/object system more in line with other languages.


The fallacy of adding probabilities

I’m an avid reader of Maximum PC and have had a subscription since they were known as boot back in the late 90’s. (I’ve remained a subscriber despite the fact that they put most of their content online, a good move nonetheless, but I still like the printed version). They’re fairly accurate in most of their reviews and I respect them for both this and their useful guides and other features.

However, when reading their review of the FragBox II, I came across an interesting quote about failure rates: (Emphasis mine)

So why would Falcon configure RAM in single-channel mode? Falcon gave us three reasons for this decision: There’s only a minimal performance advantage to running dual-channel mode with this box; RAM is the second-most-likely component to fail (the GPU is first), so using just one DIMM cuts the chance of failure in half…

The emphasized part of the statement is wrong in the general case. But why?


Using Logitech’s SetPoint Connect Utility to fix your mouse’s wireless connection

I recently bought a Logitech VX Revolution off eBay from a discount-store selling open-box and refurbished items. I intended to use it for my laptop as a portable mouse with just as many features as a desktop mouse. When I received it, the mouse could not connect to the receiver no matter what I tried. (Perhaps this was why it was an open box item)

Nothing appeared wrong with the mouse and plugging in the receiver did cause Windows to automatically detect it as a mouse. I was about ready to contact the seller and request a refund but some searching turned up a helpful forum thread with users describing the exact same problem as me. Thankfully, the fix is very simple: Use the Logitech SetPoint Connect Utility to re-synchronize/reconnect your mouse with the receiver.


ThreatFire hanging or slowing down MySQL?

XAMPP and ThreatFire

After seeing glowing recommendations for the heuristic-based ThreatFire anti-malware app from PC Tools, I decided to install it to complement my antivirus scanner and other anti-spyware tools such as Spybot-S&D and Ad-Aware.

Initially, it worked fine. While I don’t know how much protection it really added, it was intuitive, easy to configure and didn’t slow down my system like many other real-time scanners might have. However, I ran into some trouble with my web development environment, consisting of Apache, MySQL and PHP (in the form of XAMPP) that I could only attribute to ThreatFire’s presence.


Unscheduled downtime

If you tried to reach this site sometime within the past 24 hours, you probably were either unable to connect or served with inexplicable 404 errors. It appears that the server this site was hosted on experienced some downtime yesterday. Sorry for any trouble this may have caused.

The good guys over at Site5 are busy fixing the problem and my site appears to be have been safely restored from a backup. It appears that there was an unexpected catastrophic failure of the file system and as a result, they had to reformat and restore from backups. Hopefully the restoration goes well.

Bell’s throttling considered harmful

Copyright Bell Canada

Over the last week, many people became aware of Bell implementing throttling on their Internet services. Throttling, (or traffic shaping) aims to improve the overall Quality-of-Service (QoS) by delaying or limiting certain types of packets so that the network is not overloaded.

Traffic shaping itself is not insidious; in fact it’s a widely used method to maintain the stability of networks. However, the reasons that Bell and other providers have done this, as well as how they’ve carried it out, have created much controversy.


The new system

A while back, I talked about my new computer. The biggest change? Going quad-core. True, I have no use for such hardware currently, but it’s a bit of future-proofing that I could afford. I don’t use a laptop that much, so that’s why I’ve poured money into my desktop as with my current usage habits, my four-year old Dell Inspiron 5100 is still more than enough. Since I first mentioned my new system back in January, I’ve had some time to play reflect on it. Here are a few of my notes from that.


OpenID pros and cons

The OpenID Logo

When I first heard of the OpenID concept back in 2006 it seemed like a novel idea that would go well with the increasing prevalence of web services and applications. Most of these services require registration, and who could possible remember different passwords for all of them without using a specialized tool? Instead of using the same password for every site, OpenID presented a solution to allow you to organize your online accounts under one login, using the concept of Single Sign On (SSO).

It seemed like a daunting task. Up until that point, single sign on had had limited success on the web. Microsoft’s Passport system, since rebranded as Windows Live ID, had mixed success with popular websites such as eBay and Monster, and both of those eventually discontinued support. It appeared that they did not like having their user base under potential control and monitoring of a third party. OpenID aimed to solve that by being, well, open. Just as any website could support OpenID login, there could be a multitude of OpenID providers that would allow you to obtain an OpenID-enabled URL, which would form the basis for your online identity.


IE8 cometh

Internet Explorer

If you’re into web development you’re likely aware of the big news from Microsoft that Internet Explorer 8 Beta 1 is now available. This comes less than 1.5 years since IE7 was released, and represents a much faster development cycle than was observed with IE7. (Over five years passed between the initial release of IE6 and IE7)

With Firefox Beta 3 released not long ago and the final version due in the first half of 2008, Microsoft has been feeling the heat and probably has decided to devote real effort towards improving Internet Explorer in order to regain market share lost mainly to Firefox.

However, what’s most interesting and impressive about IE8 is not its fast follow-up to IE7, but its broad support for web standards and other improvements that many did not expect, especially after the poor track record of IE6 that wasn’t improved much by IE7.


Eclipse: The best and only IDE you’ll ever need*

Copyright The Eclipse Foundation

* Sensationalist headline inspired by previous posts

Eclipse is my IDE of choice, as you’l probably have noticed from some of my previous articles. I had been wanting to write an article about why I use it (and why I switched to it), but kept putting it off. Recently, Matt Mullenweg wrote about his problems with Dreamweaver, and this perhaps prompted me to organize my notes on why I’ve chosen to use Eclipse. Don’t get me wrong – I’m not advocating that you immediately switch and throw out your current editing tool (the headline above, as noted, is purely for sensationalism) – but rather I’m just urging you to consider Eclipse for your next project.


Microsoft’s bid to buy Yahoo!

The obligatory Microsoft-Yahoo! image

If you’ve been reading the news today, you’re likely aware of Microsoft’s $44.6 billion bid for Yahoo!. When such rumours were discussed last year, I doubted the validity of the claims; however this time the hearsay was truth. Yahoo’s declining stock price and current business troubles may have also played a role in the bid actually taking place this time. Continued

Going Quad Core

new computer parts

It’s been over 1.5 years since I built my current computer, and back then it was pretty decent. Heck, it’s still pretty decent right now and there’s no real reason why I decided to upgrade, other than the fact that I had the upgrade itch. So, that’s why last week I ordered a bunch of components (again from Netlink Computers) to build a new computer with. The parts arrived yesterday, after some haggling with Purolator, but everything seems to be in good shape and I’m excited to put things together!

I decided to go with the Intel Core 2 Quad Q6600 processor. Why? Well, it was a sweet price – $270 – and it’s quad-core. Just the name sounds so badass – it’s reminiscent of the “Quad Damage” power up of the Quake FPS series, and heck, quad is better than dual, no? But let’s be real here – I probably have no real need for a quad-core processor, and claims of future-proofing may be dubious at best. After all, I am on a roughly two-year upgrade cycle, so by the time quad-core becomes commonplace (like dual-core is right now) I will most likely have upgraded to a new CPU.


JavaScript and inheritance

JavaScript has a complicated history. The name itself seems to indicate a relationship to Java, when in fact, the two languages share little in common except for a common syntax relationship by way of C. Add to this the myriad of browser incompatibilities and numerous examples of bad usage, and you have what is perhaps the world’s least understood popular programming language. (I had to add the ‘popular’ qualifier, since I am sure there are some esoteric languages out there that only a handful of people know)

This is why inheritance in JavaScript is probably one of the least understood concepts. While languages like Java have well-defined constructs for inheritance, the topic is of less importance with JavaScript. In many situations, you’ll never have to deal with these aspects when programming in JavaScript, simply because it isn’t required for a lot of client side scripts. However, for larger-scale web applications, applying object-oriented principles to your code may make it easier to design, improve and maintain.

There have been many articles written about inheritance in JavaScript and how it can and should be done. You really don’t need to read mine to gain an understanding. Rather, I’m just going to write about what I’ve learned, the process I went through and the experience I’ve gained along the way.


The worse purchase form ever


Okay, so maybe I’m being a bit melodramatic or maybe I’m just a bit stressed out. I had previously talked about how website purchase forms that require you to enter a credit card number in a specific format (e.g., no spaces) were poorly designed since most people don’t deal with large groups of numbers very well. Furthermore, it’s trivial to format the number server-side, so why require the user to? Well, today, I ran into a form that not only required you to enter all of the numbers without spaces, but also punished you if you did not.

A bit of background

I am a member of the IEEE. They’re a great organization, and I find some of their publications such as IEEE Spectrum to be fairly interesting. You also sort of need to be a member if you want to publish anything in the field (I did two summers of research while in university), and since I’m an Electrical Engineer, I feel that I need to be part of the largest organization dealing with the field.

So, when a renewal notice arrived in my mail recently, I didn’t hesitate to pay my dues to remain a member. (Well, actually, it sat on my desk for a week before I did anything, but my procrastination is another topic) I thought that renewal would be painless process; it started out great, because as soon as I logged into the site, there was a big button/link for renewing. Clicking it added a “Renewal” item to my cart.

Checkout, or, things take a turn for the worse

Clicking “Checkout”, I thought I’d just have to enter my CC number and a few details, and things would be done. After all, I’ve ordered a ton of stuff online and have never really had a problem. That was, until I encountered the payment form from hell. Just how bad was it? Well…


Using Assembla’s Trac with Eclipse Mylyn XML-RPC access

I recently found out about Assembla, an awesome service for managing software development projects. It provides free SVN hosting (like other sites such as SourceForge and Google Code) but also provides tools like Trac, a Wiki, Scrum reporting, public or private access and up to 500 MB of disk space. (Additional features/space are available for a cost) For many, setting up services like Trac can be notoriously difficult, so with free services like this, it’s hard to find any nits to pick.

I won’t go into too much detail about the features since I wanted to talk about integrating the Eclipse plugin Mylyn with a Trac setup on Assembla. There can be some issues getting things to work so I’ve outlined what I did to get everything running nicely.

Assembla has come out with what appears to be their own Mylyn connector for Eclipse, which simplifies a lot of the configuration required. It’s available at their site along with a great tutorial on how to use it.


Sun acquires MySQL for $1 billion USD

There was some unexpected news this morning when Sun announced plans to acquire MySQL. (Offhand remark: What is up with that handshake?!?) Though rumours of a MySQL IPO had surfaced and re-surfaced throughout last year, this was quite a shock to me, and apparently many others. The price – $1 billion USD – had no small part in this surprise. Indeed, when you consider that their main software product is open source, some may question the valuation.

Software is only a piece of the puzzle Continued

Passing the 100,000 mark

This week, Akismet reported that it had blocked its 100,000th spam comment on my site/blog. While that’s not a remarkable number, in light of how little traffic my site gets that figure becomes somewhat more significant. Since this site has only been around for just over one and a half years (19 months), that works out to roughly 5200 spam comments every month, or a little over 1300 every week. Note that the current averages are actually much higher since in the beginning I got a lot less spam before the bots discovered my site.

Props definitely go out to Automattic for creating such a reliable and accurate service. When I first wrote about it over a year ago, I was very impressed with its precise filtering of spam and non-spam (aka ham) comments along with its unobtrusiveness. Akismet truly makes spam filtering transparent to the end user, unlike other methods such as CAPTCHAs. Continued

Using the “call” and “apply” methods to change the context of a function in JavaScript

In JavaScript, the context that function is executing in is very important. What is context? Basically, the context of a function is what object it is “attached” to – this object will be the reference of the “this” keyword within that function. Every function has a context -that is to say, every function is attached to an object. By default it is the window object.

You may have run into this particular aspect of JavaScript when working with event handlers. For example:

function alertId()
  alert (;

document.getElementById('someId').onclick = alertId;

This will return the “id” attribute of the element that the function has been attached to. You could attach the same function to multiple objects and each time you called it on a different object, it would return a different value, since the context is different. (Minor note: using element.attachEvent(), as part of the Microsoft event handler model, does not change the context of the function so “this” will still refer to the window object)

However, there may be times when you want to change the meaning of this without actually having to attach that a function to an object. Using the call() and apply() methods of the Function object can allow you to do this.


The “Canadian” DMCA bill


There’s been lots of news lately about the Federal Government’s plan to table new copyright legislation. Though current information about the proposed bill appears to be hearsay and quoted from unnamed sources, all signs point towards the new laws being akin to the DMCA in the US. The DMCA, widely seen to be benefiting corporations in lieu of protecting consumers, is relatively unpopular and it has also been argued that it’s being used to stifle innovation.

Copyright reform in Canada is coming – that much was no surprise. What does surprise me is how the bill was rumoured to have been written – under pressure from both Canadian and US-based industry advocacy groups, both pushing for DMCA-style reforms that will undoubtedly benefit the companies associated with them. I have always been wary of excessive corporate influence in governmental affairs, but am especially disturbed by some of the provisions supposedly in the bill.


The Sansa Express MP3 player decision


I recently bought a Sansa Express 2 GB MP3 player as a replacement for my old but trusty Creative MuVo TX FM, which I got back in January 2005. Back then, 512 MB was enough, but fast forward to 2007 and 512 MB is now paltry and unacceptable – I have more storage in my mobile phone by way of a microSD card. So, it was clear that I needed a replacement player. But with the market even more saturated now with MP3 players than it was back in 2005, making a choice was difficult, especially for me since I have a habit of researching everything to death. Here are some of the considerations I took into account in my search for something that would fit my needs.


Super Mario Galaxy!

Super Mario Galaxy!

Aside from Wii Sports, the first “killer title” for Wii may be Super Mario Galaxy – it’s definitely the title to have for Wii this holiday season, and is sold out at many stores. I managed to snag a copy off eBay, and it finally arrived today! Continued

Exception handling in JavaScript

Exception handling is a topic that may not be well-understood by some web developers, depending on what languages they have the most experience in. In particular, PHP, one of the most common server-side languages for web development, did not have support for exception handling until version 5. In the four years between the release of PHP4 and PHP5, the language became increasingly popular among developers, and as a result, a lot of code was written without exception handling in mind. The situation did not even improve much with the release of PHP5, since PHP5 was meant to be backwards-compatible with code developed for PHP4. Three years later, there are still movements to get developers to transition to a purely-PHP5 model.

Some of this may have transferred over to JavaScript, a language that is already poorly understood and often implemented even worse. It is often hard to find well-written, maintainable JavaScript code, as it is often left as an afterthought in a project or otherwise not given much consideration, having been delegated to the realm of popup scripts and mouse-overs. While exception handling may be overkill for a lot of JavaScript applications, many do not even know of JavaScript’s exception-handling capabilities. In this article, I’ll give a brief overview of exception handling and some recommendations on how to use it in JavaScript to improve the readability of code.


Going mobile


I finally caved and got a mobile/cellphone after years of seeing pretty much everyone around me, from grandmas to infants, use the devilish things. What prompted my conversion? Well, the main reason I never bought into one before was my fear of contracts – it seems that to get a decent price on a cellphone, you have to sign into a three-year contract, with the threat of huge cancellation fees should you decide that the service isn’t for you. I never really liked that and more importantly, didn’t really need a mobile phone in the first place, so paying all this extra cash just didn’t make sense.


Nintendo Wii-mote Jackets!

Well, after about three weeks of waiting, my Nintendo Wii-mote jackets have finally arrived! Not bad for a bunch of free stuff! At the beginning of October it was revealed that Nintendo would be giving up to four free Wii-mote covers to each Wii owner, which apparently has cost them $18 million dollars. Seeing how Nintendo has sold over 13 million units, one could see how this could be the case; the shipping costs alone must’ve been pretty high, even with a bulk-order deal they probably got.

They add protection


Using SpeedFan to automatically control your PC’s fan speeds

SpeedFan Guide

SpeedFan is a great utility for enthusiasts who’ve built their own PC. Besides being able to show the temperatures inside your system (from various sensors in the CPU, motherboard and HDDs) and other vitals such as voltages and fan speeds, it can also automate the cooling cycles of your machine. As its namesake implies, SpeedFan is able to automatically control your computer’s fan speeds based on the temperatures reported by various hardware sensors. This can allow you to find the right balance between a cool system and a noisy one. However, it does require some configuration, as I’ll attempt to show you in the following article.


Using DD-WRT to turn the Linksys WRT-54G/WRT-54GL into a wireless bridge

DD-WRT firmware for Linksys WRT-54G/GL

I recently got a new Wireless-N router (based on the Draft 2.0 of the 802.11n spec.) to replace my old, but trusty WRT-54GL, an 802.11g router. I bought this router just over a year ago to replace another 802.11g router that was acting up. I specifically bought the WRT-54GL (as opposed to the regular WRT-54G) because I knew that I’d eventually want to flash it with third-party firmware. (The WRT-54GL runs on Linux and has better hardware than later versions of the WRT-54G)

I recently got my Xbox (with XBMC) setup in my living room. This placed it far away from the wireless router in my apartment and not wanting to run an unsightly CAT-5 cable around my place, I decided that I’d need a wireless bridge since the original Xbox does not have a built-in wireless adapter. (Nor does the 360, I believe). A quick look around the web showed that most dedicated wireless bridges were quite expensive and of dubious quality. Since I already had the spare WRT-54GL, I decided to flash it with DD-WRT, one of the most popular third-party firmware replacements, and see how it would function as a wireless bridge for my XBMC setup.


SirReal’s G15 plugin: The best and only Logitech G15 SDK applet you’ll ever need

Logitech G15 running SirReal's applet

I’ve had a Logitech G15 gaming keyboard for over a year and a half already, and it’s pretty much been the best keyboard I’ve ever used. While it can’t compare to my old Fujitsu 4725, a “clicky” keyboard, in terms of tactile response, it’s built-in LCD and extra gaming macro keys put it on top in terms of usefulness. The LCD even has its own set of buttons for controlling programs or applets that are running on it.

Logitech bundled several applets with the G15 for displaying things like volume, resource usage and a clock. However, these things were on different screens, so if you wanted to see the clock you’d just have to wait for it to appear in the cycle, or else navigate to it using the buttons. This was annoying, and I ended up not really utilizing the screen to its full potential. That is, until I discovered SirReal’s multipurpose G15 plugin. This is the only G15 applet you’ll ever need. Please check out the screen shots and read more, and I guarantee you’ll love it.

SirReal has setup his own website for his G15 plugin. Please refer to it for the latest version. The latest version, 2.7 as of this time, adds Unicode support as well as a preview window. I encourage you to check it out!


Installing a Keyboard Shelf/Tray

Keyboard Shelf Installed...

I recently got an IKEA FREDRICK work station desk as part of my new furniture ensemble after moving into a new apartment and though I liked it a lot for its clean, open approach, I wished it had some sort of keyboard shelf. I didn’t use to be a fan of keyboard shelves, but after four years of university with an $80 Wal-Mart desk that had a surprisingly good keyboard shelf, I’ve been somewhat hooked. (As hooked as one can get to a particular furniture feature)

IKEA has their own SUMMERA keyboard shelf, which is meant to be used with this desk. However, it wasn’t wide enough to accommodate my keyboard and mouse, something I believe is necessary for good ergonomics. Additionally, it didn’t feel too sturdy when I checked it out in-store. So, I had to resort to an online search to find the keyboard shelf I needed.


The IKEA list


I recently moved into a new apartment and ordered a bunch of furniture from IKEA to get started. Despite a few setbacks during the order, I eventually got everything and it took me about four evenings plus a weekend to put everything together and subsequently clean out and setup my apartment. Here’s a list of what I got, plus a few tips and my opinions on the furniture.


Fortress Forever brings back the glory of TFC

Fortress Forever, a Team Fortress mod for Half-Life 2

Back in 1999/2000, I was still in high school, and thus had lots of free time for gaming. One of the biggest time wasters for me was Team Fortress Classic, better known as TFC. It was the first “true” online team game I played (besides CTF for Quake 2), and one of the first online games I got into after getting a high-speed Internet connection. It was simply loads of fun, and a testament to the power of the SDK for the original Half-Life.

Fast forward some six years. Team Fortress 2, the much-awaited successor to the original TFC, has gone through multiple development cycles and countless redesigns. Some believed it was pure vapourware, and that it would never see the light of day. Much to everyone’s surprise, we recently learned that TF2 was alive and kicking, and scheduled for an October release. Meanwhile, an ambitious but much lower-key project had been in the works for many years as well – it was Fortress Forever, a mod for Half-Life 2 that aimed to bring the glory of TFC to the Source Engine.


Google moves to monetize YouTube

Google, YouTube and AdSense

You knew it was coming, but perhaps just never figured that it would take this long. Just about a year after Google bought YouTube, it has announced plans to integrate AdSense with the popular video site. Many analysts questioned Google’s acquisition of YouTube, since at the time they were not yet profitable. However, with Google’s large cash reserves, they could afford to buy the dominant video-sharing site (after failing to take over the market with their own offering) and let it incubate while thinking up a game plan.


Ontario Provincial Election

2007 Ontario Provincial Election

Well, today was the 2007 Ontario Provincial Election, and though voter turnout was light early on, things are expected to pick up as people show up to vote after their workday. Besides being a provincial election with all the usual major issues, there is another important decision facing voters – the referendum on whether to change the electoral system from the current first-past-the-post riding system to the mixed-member proportional system that’s being advocated. Continued

The dreaded shipment notice

Shipping companies

You know the feeling – you arrive home from school or work to find a slip posted on your door advising you that an attempted delivery of your package failed. The slip will often also say that one or two more attempts will be made, but barring that, you’ll have to make a trip to a shipping depot that’s usually located in the middle of no where to obtain your goods.

I’m willing to bet that 90% of adults aren’t home between the hours of 9 AM – 5 PM, the time that deliveries usually occur at. So, why do most shipping companies only delivery parcels at these times? I understand that likely a majority of their shipments are to business addresses, making the current operating hours suffice for those situations, but certainly a significant number of packages are addressed to homes as well. While online shopping has slowed in recent times, it still accounts for $116 billion (USD) in the United States alone, and all that merchandise has to be shipped.


Life Transitions

It’s been while since I’ve updated this site (almost a month), but not because of a lack of interest. I recently moved out of my parents’ house into a new apartment to begin work, in the real world. Yes, I’m no longer a student, and while I will never regret my university years, there comes a time to move on. (I have yet to update the about page, but will get around to it) I started work on the 4th of September and have been diving my time between getting adjusted to the job and getting settled into my new place and surroundings.

Living room almost complete

So, how have things went since then? It’s been a mix of good and not-so-good, but thankfully things are getting better now that I have most of my stuff setup. I actually moved into my new place about one week before starting work, knowing that it would take some time to get things setup. Getting unpacked and setup however, took more effort than expected. Having to basically buy everything I needed was a task itself, but not having a car and having to bus-it or take a taxi everywhere was hard.


Windows Vista: Living in the shadow of XP

Windows Vista

It’s been almost seven months since Windows Vista was released to retail customers, and so far, sales figures haven’t been that good, with an estimate of two years before Visa sales overtake those of XP.

Why all the trouble? With Vista being Microsoft’s first major OS release since XP debuted over five years ago, one would expect that people would be desperate for a change. Turns out, however, Vista doesn’t really offer much more in the way of practicality over XP. Furthermore, performance issues are perhaps the biggest flaw in Vista that is preventing its widespread adoption, despite other claimed reasons. For the average person, upgrading to Vista just isn’t worth it – and with the recent problems with WGA servers, people may end up having more than just resentment for Vista.


Share This in jQuery

Share This icon Copyright Alex King (

Share This is an excellent WordPress plugin written by Alex King. The plugin provides a neat and customizable pop-up menu for allowing readers to easily share one of your blog posts using many of the social bookmarking or social websites out there. It’s an intelligent solution to the problem of having too many sharing icons that may potentially distract or irritate readers.

Since launching, Share This has become very popular, with many blogs using it. I recently began using the plugin for a site of mine, and was impressed by its usefulness. (And the icon project it launched) However, I had also decided to use the jQuery JavaScript framework (and its plugins) for this site, and since Share This uses Prototype for its JavaScript functionality, there were some conflicts.

So, I decided to do a minor re-write of Share This, altering only the JavaScript portion to use jQuery instead of Prototype.


What I thought were rabbits…

… were really hares. My neighbourhood (and Edmonton in general) seems to be well-populated with these creatures, and today I was able to snap a picture of one in my backyard through a window without scaring it off. A bit of research on Wikipedia revealed it to be a common type of hare known as the White-tailed jackrabbit, prevalent in North America, especially in the western regions such as Alberta.

He's on alert. Continued

The MacEwan fire in Edmonton: One of the city’s most devastating

View of damaged homes

I was briefly awoken this morning by the sounds of fire engines sometime before 6 AM, but quickly fell back asleep. When I woke up for real, I found out that many residents in a neighbourhood adjacent to mine did not have that luxury, as their homes were consumed or damaged in Edmonton’s largest residential fire. The huge fire destroyed nine duplex (twin-family) houses and damaged a further 76, mostly from one condo complex, and left hundreds without a home. Continued

Sicko: A good message, but there will always be detractors.


I recently watched Michael Moore‘s Sicko and was very impressed by the effort put into the documentary. I wasn’t a fan of Moore’s previous work in Fahrenheit 9/11 or Bowling for Columbine, but Sicko does a great job of presenting the case for change in the US health care industry. Moore uses his skill very effectively to showcase the hardships caused by the current system on normal, everyday Americans, and in the end one is left almost with a feeling of shame at what has been donein the name of the almighty dollar. The film accomplishes its goal of making people aware of the need for change.

Wii will have fun

I finally gave into my inhibitions and bought a Nintendo Wii this past Tuesday. Just as with the Nintendo DS Lite, which I got late last year, I was attracted to its unique and innovative features, which allow it to offer an experience that other consoles just can’t. This has allowed both of these systems to attract more than just hardcore gamers, and have served to increase Nintendo’s customer base out to a more general audience. It’s no small wonder then, that the Wii is still in short supply, and may continue to be so even into this year’s holiday season.

Nintendo Wii, in stand

Perhaps that played a small part in my decision to pick one off the shelves at Wal-mart this week. Or, perhaps I was just tired of debating on whether or not I should get one. Thankfully, however, by buying during this summer season, I avoided the craziness during the Wii launch.

Facebook Application Development – Pros and Cons

Facebook Platform

It’s been a while since Facebook introduced the concept of “applications” to their API, providing developers a very flexible set of tools to create and add features to Facebook itself. Applications on Facebook are best described as “widgets”, since they offer functionality that’s often provided by widgets on other sites, so why Facebook chose a different name is somewhat peculiar.

I’m not going to debate the merits of these applications, or whether they’re leading Facebook down the road to a MySpace-hell dominated by personalized profiles that are an eyesore (there’s already enough discourse on that subject, both on Facebook and outside of it), but rather I’ll take a look at this from a developer’s point of view. What is the potential for developing an application for Facebook, and at the same time, what are the pitfalls?

Security and Usability

Security and usability

In general, security and usability often come into conflict with one another. After all, security is designed to make things tougher for the bad guys and usually some of this spills over onto regular, non-malicious users, making their experience often less easy than it should be.

One good example of this is with authentication. Authentication is perhaps the cornerstone of most computer security systems and is a crossroads where security, usability and other important matters meet. Designing a good authentication system requires consideration of all these points if it is to be effective at keeping bad guys out while still allowing normal users access. However, a few simple steps can be taken to alleviate the burden that such systems place on users. As an example, I’ll look at online credit card payment.

Using Launchy to improve productivity with a graphical command line

I recently ran across a Digg news item about an article over at the Mozilla Labs where UI designer Alex Faaborg discussed hypothetical “Graphical Keyboard User Interfaces” in Firefox, and how they might be implemented. Interfaces like this, such as Quicksilver (for Mac), offer a hybrid of features found in CLIs (Command Line Interfaces) and GUIs (Graphical User Interfaces), and thus can have the best of both worlds.


Basically, a graphical command line is a command line that pops up on screen when you activate a keyboard shortcut/combo. This command line allows you to easily launch any program, file or action by easily typing its name. This offers you the advantage that good CLIs offer – such as auto-complete and speed-of-use, while retaining the advantages of the GUI. I recently learned of a Launchy, a nice program for Windows that offers these features. (Sort of like Quicksilver for Windows)

T-Mobile now allows unlimited cellphone calls over WiFi


Despite all the coverage that Apple’s new iPhone is getting, there is still innovation going on at other cellular providers. Last week, T-Mobile announced their new “HotSpot @Home” service. For an additional $10 a month, you can use your WiFi-equipped cellphone as a VoIP device. When you’re in range of a WiFi access point, the cellphone will use the Internet to make VoIP calls (instead of the cellular system) – and the minutes used here won’t count towards your monthly plan, giving you essentially unlimited usage time when you make calls this way. Your phone still retains all its original functionality, such as call hold and caller ID, so your phone isn’t crippled.

The best part, however, is the seamless integration. As you move out of range of a hotspot, the phone will automatically hand off to T-Mobile’s cellular network, in much the same way as hand off occurs between adjacent cellphone towers when you’re moving. This is not only beneficial, but a prime example of the convergence of wireless networks that many people believe is going to play a bigger and bigger role in the future. Kudos to T-Mobile for offering innovation in this area, instead of just a new phone with a lot of fancy features.

Runner’s Low

There’s nothing quite like jumping into an ice cold shower after a long run in the heat.

And then not moving for the rest of the day.

Peer-to-Patent to improve the patent process?


Back in in June, the USPTO started a pilot project called “Peer-to-Patent” with the aims of opening up the patent review process to the public. By doing this, it hopes to leverage the help of the community in speeding up the patent process by having teams of volunteers looking for prior art that can determine the relevancy of the patent application. The IEEE Spectrum had a good article/interview with the founder of Peer-to-Patent; it’s a short read (2 pages), and I suggest you read it since it does a good job at explaining the goals and the means with which the project aims to accomplish them.

There is apparently a huge backlog in patent applications, so the needs for a project like this are obvious. However, will the “wisdom of the masses” prevail in helping to resolve the numerous problems in the patent system, evidenced by the seemingly endless litigation related to it?

The CBC’s Great Canadian Wish List turns into a Great Flame War

CBC’s Great Canadian Wish List

Just over a month ago, the CBC launched their Great Canadian Wish List project on Facebook. Reaching out to the young people of Canada (who use Facebook), the project aims to gauge “grassroots” support among them by allowing users to create a “wish” or cause that others can then support. The most popular “wishes” will then be made part of the CBC’s Canada Day coverage special. With so many issues facing our modern Western society, the project had lofty goals in attempting to stoke the interests of youth. However, as expected, the “wish list” has mostly descended into another yet another debate on abortion, and gay marriage.

Good and bad companies

The good and the bad

I’ve recently had a few experiences with some companies and thought I’d share my thoughts. It’s really quite interesting to see the level service offered by big companies, and how they can differ so widely – they’re not all bad.

Some are bad, of course, and don’t seem to put any effort towards customer satisfaction, and continue only to operate because there is no viable competition. This is unfortunate, as this puts the customer in between a rock and a hard place – with the result being a feeling of losing one’s hard-earned cash.

Google Docs updates its interface, sort of

Google Docs & Spreadsheets

Google has updated its interface for their Docs & Spreadsheets application. Besides the visual improvements, they’ve also “replaced” tags with folders, and added a “Google Suggest” function to the search box, that finds matches as you type. (Neat!)

While some may consider the move from tags back to folders a step backwards, the change is really superficial – under the hood, it’s still the same old tagging system. The only difference is how most users will interpret it.

Web-based e-mail providers: The big three reviewed

Web-based e-mail providers

If you are using a web-based e-mail provider, chances are you’re using either Google’s Gmail, Microsoft’s Windows Live Hotmail or Yahoo!’s Mail, or a combination of the three. These are the “big three” when it comes to web-based e-mail services. Microsoft and Yahoo’s offerings have been around for about 10 years or so, with Gmail, the upstart, only being about three years old. Together, these services boast millions of users and bring in huge advertising revenue for their respective companies. But which one is the best for you?

Before Gmail, web-based e-mail was anemic: storage was limited to only a few MBs, and functionality was limited. Indeed, you probably couldn’t get by just using a web-based service, and probably just used it for temporary stuff, relying on your trusty desktop e-mail client and POP3 service for most stuff. Gmail spurned innovation with its announcement of 1 GB of storage, later upgraded to 2 GB and beyond, and made web-based e-mail a viable alternative to desktop clients. There was no question at the time that Gmail was far superior to both Microsoft and Yahoo!’s offerings. However, things have changed in the three years since then, and Microsoft and Yahoo! have both fired back with new and feature-filled web-based e-mail services that offer serious competition to Gmail. How do they stack up against the young champ?

Update on Logitech SetPoint and uberOptions


It’s been a while since I wrote about uberOptions, the excellent utility that allows you to configure the extra mouse buttons on your Logitech mouse in just about any way you could want. Basically, uberOptions can unleash the potential of Logitech’s mice, expecially their higher-end models like the MX610, MX1000, G5/G7 and VX and MX Revolution that have many extra buttons.

Update – 2008-02-01

The uberOptions site is back up at a new URI

While SetPoint itself has a lot of functionality, supporting multiple mice, uberOptions manages to up the ante by allowing any button to be assigned to any function or keystroke. Furthermore, you can assign these settings on a per-application basis (application specific settings), so that buttons can perform different functions depending on which window currently focused. This is especially useful in games, where sometimes, the extra mouse buttons aren’t detected by the game itself. This can be fixed by using uberOptions to assign/bind keystrokes to the mouse buttons just for that game – that way your mouse will still work normally outside of the game. This can make the extra buttons on your Logitech mouse very useful in games that have lots of different actions, normally assigned to keyboard commands only.

Severe weather in Edmonton

Weather for 2007-06-21

The weather sure does change fast out here – I guess it’s because the land’s fairly flat, and there’s no big lake nearby. We got a thunderstorm ‘watch’ for this region a few hours ago, when it was still bright and sunny out. Sure enough though, storm clouds rolled in, and about 10 minutes after it got dark, the hail started. It only lasted for about 5 minutes or so, but during that time it sounded like we were under attack! Continued

Using Feedburner for feeds


I finally decided to move to Feedburner for managing the RSS feed for this site. I had known about Feedburner for a while but didn’t really look into them a lot, until their acquisition by Google piqued my interest. After using their service for a while, I can see why Google would want to buy this company – their service, even the free version, simply rocks.

Feedburner, at its most fundamental level, allows a publisher to keep track of the readership statistics regarding their feed. This makes it easy to manage your feeds, and see how many people are reading them, and look at the overall trends in readership level over a time period. Seeing as how Google Analytics offers this sort of service, but instead for your website, it’s easy to see why Google would want to make Feedburner part of their list of services.
Continued redesigns again has recently redesigned their front page, just about a year after they underwent a major redesign, incorporating a mostly standards-based approach. While there doesn’t seem to be a big change, they’ve made a few small changes to direct their readers’ focus to different areas. For example, three big blocks in a horizontal row (with accompanying images) now direct users to the top stories in news, sports and arts & entertainment. Even more attention is drawn to the big header at the top of the page, that is used to focus users’ attention to the CBC’s traditional media offerings on TV and radio, headlining what major shows will be airing that day. One might wonder why the CBC is attempting to push people back to traditional media when online media is all the rage nowadays.

While I find the new design to be refreshing and more visually attractive, there are some deficits with it.

Clutter in My Documents

My Documents

I recently begun to clean up and organize files on my desktop. It’s been about a year since I built it, so as you can image, there were files and documents scattered all over the HDD in various unorganized and cryptically-named folders. This chaotic mess of files was making it hard to find anything, even with search, so something had to be done. I endeavored to organize everything into the “My Documents” folder for easy access from a variety of programs, and then remembered why I’d stayed out of it in the first place – all the clutter that’s already there.

Measuring distances for your running route

Running routes with MapMyRun

If you do a lot of running, you’ll often find that you’d like to keep track of how much distance you’ve accumulated. This is especially important if you’re training for some event, or even if you’re just a casual runner looking to build up your endurance and stay in shape. However, short of running around a track endlessly, it can be hard to gauge how far you’ve gone on your running route.

Short of having a fancy device such as the Nike iPod Kit (which requires calibration), or an even more costly GPS watch (that’ll probably eat through batteries), you can still manually measure your running distance using the many free tools out there, all of which are based upon the fantastic Google Maps API. Let’s have a look at some of them.

RunTrackr (shameless plug)

I have since launched my own running route tracking site: RunTrackr. Please check it out; it’s fairly new and I would appreciate any comments or feedback via the contact page. This will help me to improve the site. Thanks!


(Read more about RunTrackr)


Google Street View and privacy

Google Street View

Google Street View has been out for some time now, and its proven to be a pretty nifty feature. Basically, Google has sent out teams of people in vans with cameras mounted on the tops to major cities across the US. They’ve been able to capture 360-degree panoramic views of most of the streets in these cities, so you can view the surrounding area on almost any point in the street. This is obviously a great feature for people who find that maps don’t provide the best experience of “getting to know a place”. With Street View, you get the best experience of seeing what a new place will be like, short of actually visiting it. It’ll be great for visitors. Google hopes to extend to feature to more cities as time goes on.

However, the new feature has obviously raised some privacy concerns, but perhaps not in the strictest legal sense. Since Google has taken these pictures from public areas, they’re probably in the clear. However, they is somewhat of a difference when these public pictures are being integrated into the largest search engine for everyone to see.

The Beatles Love (2006) compilation album

The Beatles - Love

I recently got The Beatles’ latest compilation album, entitled Love. Released back in 2006, the music was originally compiled and produced for the Love Cirque du Soleil performance. For those of you not familiar with the Canadian act, Cirque du Soleil, it’s basically a lot of acrobats and dancers doing impossible and eye-catching things against the backdrop of extravagant and novel stage setups.

I’m a fan of The Beatles, so naturally I was excited to listen to this album. Since it’s a soundtrack to a theatrical production, all of the tracks blend into one another and it’s best to listen to it as a whole, at least once. I was pleasantly surprised with what George Martin (the producer of most of The Beatles original studio albums) and his son, Giles, were able to accomplish. Basically, they’ve taken the sounds from songs you know and love, and mixed them together to produce some nice results. The album flows very well, which is expected since it’s part of a bigger production.

Ultraedit, PHP 5 and the function list.


I was working on some PHP development recently with my editor of choice, UltraEdit. In my view, UltraEdit is the text editor to use. (Assuming you’re in a Windows environment) It basically has everything I need, and is especially well-suited for web development. Where it may fall short is for developing desktop applications, as then a specific IDE may offer more features, though UltraEdit can be configured to work with compilers and so forth. (UEStudio is probably a better choice in this case)

While I don’t want to argue about the merits of UltraEdit, as people’s passion for their text-editors seem to border on the religious, I wanted to point out a potential solution to a code highlighting problem some of you may have encountered when developing with PHP 5.

APC 750VA from Dell Canada


Last week I ordered an APC 750VA UPS for my main system. As I’ve noted before, the power can be flaky around here at times, and it’s also prime season for thunderstorms. As it was on sale at the time for $80 CAD with free shipping, I thought it was a pretty good investment for a backup power supply. I placed the order late Tuesday morning, and to my surprise, it came, via airmail just past noon the next day! Mind you, it was only shipped from a Dell warehouse in BC, but still – airmail for a free shipping option was quite unexpected.

Facebook’s platform adds integration to applications

Facebook Platform

Facebook recently launched the latest version of their Platform, which combines their API with FQL and the new FBML. Facebook launched the next version of their platform at their developer’s conference, and accompanied the launch with many partner companies that rolled out applications designed with the platform simultaneously. This was also a huge event for independent developers, many of which got to work immediately on their own Facebook apps. (Thousands are now available) This is a huge event in the history of Facebook, and perhaps the next step in where the hugely-popular social networking site will go. As with any change in a social networking site, this one was met with some resistance and concern, but is it warranted?

Shuttle XPC replacement power supply

My old computer was a Shuttle SN45G XPC that I used from 2004-2006 before I replaced it last year with my current Athlon X2-based system. I outfitted the SN45G with a AMD Athlon 2500+ (Barton), 1 GB of RAM, an ATI Radeon 9500 Pro and a 200 GB HDD. It served me well, but started to show its age, especially in this era of dual-core and multi-core systems. I have since retired it to the green pastures of my parents’ home (where I am for the summer), where it peacefully serves the duties of Internet browsing, e-mail, and video, though it is capable of much more.

Recently though, the 200 W custom-sized PSU powering the rig died after an untimely power outage – contractors working in this new neighbourhood apparently severed a line while doing some construction work. It seemed weird to me that a mere power-outage could cause the power supply to die, so I wondered if it was because of the UPS it was plugged into, which failed to provide battery backup. The UPS was an older Belkin model that has also since failed, leading me to believe that it could have negatively affected the PSU. Though, it’s more likely that the PSU was already in poor condition, and that the power outage was just the straw that broke the camel’s back, so to speak.


This past weekend, I attended my convocation at Queen’s University. I now officially have a B.Sc.E. in Electrical Engineering! I also won some awards for my time at Queen’s. It’s been a long four years, but well worth it – I’ll never forget my time at Queen’s, and I think it’s an experience that everyone should try. While the work was at times intense, so was the fun, and it’s unlikely that you’ll find such a combination anywhere else.

The convocation ceremony itself was long and somewhat dull, but necessary. Thankfully, it wasn’t too hot in Jock Harty Arena, where convocation has been held for quite some time. This year is actually the last year that convocation will be held there, since it’s being torn down this summer to make way for the grand Queen’s Centre. It was also nice to be back in Kingston and to see all my friends again in one place for one last time before undergrad is over. Continued

Getting a passport

I went down to the passport office yesterday (in Edmonton) to apply for a passport, and the process was a lot more quick and painless than I expected. As long as you’ve read the directions, filled out the form properly and brought proper credentials, it shouldn’t take long. I was only in there for about half an hour, and this was at lunchtime, when there would probably be more people than normal. I was initially worried because my former housemate had applied for a passport through the mail, and it took close to four months for his to arrive. They said mine should arrive within a month or so, so let’s hope for the best – it looks like the big “rush” to get passports is mostly over.

If you can, definitely go to the local passport office to apply. It will be much faster and you don’t have to send sensitive stuff like your birth certificate in the mail.

AMD Dual-Core fix for games

After I built my AMD Athlon X2-based dual-core system last year, I started noticing some weird speed issues in certain games. At seemingly random times, the games would speedup and slowdown, making things very jerky and jumpy. This would basically make the game unplayable. It turns out that this is a known problem and can occur when single-threaded games run on a dual-core system. (So you may even experience these problems on an Intel dual-core system.)

The solution is nicely outlined in the [H]ard|OCP Forums, where it’s aptly known as the “Benny Hill Effect”. Turns out that the problem has to do with power state management issues and how they affect the read time stamp counter instruction (RDTSC), which is used for timing. I followed the guide, and it fixed my problems.

iPod shuffle 2nd gen

My Mom recently won a second-gen iPod shuffle. After helping her get it setup, I have to admit I was enamored by its design. It is definitely one of the most stylish MP3 players, and the integrated clip is just plain nice. However, I just can’t see myself getting one because of the lack of a screen, and I also don’t like that you can’t simply dump MP3s onto it like a storage drive. Despite these shortcomings, it’s still one heck of a cool MP3 player, and if you don’t care about a display, it’s probably your best choice.

Fixing sound interference on the Asus A8N32-SLI Deluxe

If you’re running an Asus A8N32-SLI Deluxe motherboard like me, and are using the onboard Realtek ALC850 audio (AC ’97 compatible), you may have experienced high levels of sound interference on the audio outputs. This interference manifests itself as “static” on your speakers, and appears to be correlated with system activity, such as: accessing the HDD, network activity or even moving the mouse. The static can be quite noticeable, and is especially annoying when there’s nothing else coming out from the speakers, or if you’re using headphones. In particular, the interference is unacceptable at high volume levels.

Facebook Marketplace debuts

Facebook recently launched its Marketplace, a local classifieds service. It allows users to freely post wanted or for-sale ads, localized by the networks that the user is in. For example, a member of a university-based network will be able to view all the classified ads in that area, simplifying the buying and selling process.

It seems that before the launch of this service, Facebook decided to solicit some feedback from its users about its usefulness to them. After the “debacle” that surrounded last year’s introduction of the “News Feed”, perhaps they were a bit edgy about introducing new features without getting their users’ opinions. However, I believe this new service will be a big success, and should have come earlier. It also perhaps signals that there are more services to come.

Going widescreen and dual-monitor

I recently splurged and bought a Dell UltraSharp 2407WFP, a 24-inch widescreen flat panel. I had been using a Samsung 172T for the past 3.5 years, and it has served me well, but I was looking for something a little more. All the reviews of this baby seemed to indicate that it was “the one” to get, so I decided to use some of the money I’d been saving to indulge a little. All I can say is that I’m very impressed – this display certainly lives up to the hype. Not only does it provide a large native resolution of 1920 x 1200, but it does so with a great picture quality. Gaming is also very nice on it, even at non-native resolutions.

Another key feature was the inclusion of many inputs. Not only does it support the standard DVI and VGA connectors expected of any LCD monitor, but it also has composite, component and S-video inputs, making this of jack-of-all trades when it comes to displays. It also has a 4-port USB hub and a memory card reader built in, adding extra value. About the only downside I can think of is that I now have a reason to upgrade to HD-DVD or Blu-ray for movies!

Constant Partial Attention as Multitasking

I was multitasking the other day across two computers, and it reminded me of a conversation I had with another student one summer ago. We were talking about the rise of communication devices, such as cellphones, BlackBerrys and the like, and how they are potentially disruptive to productivity, because they interact concurrently with the daily tasks we must perform. He gave me an example of a meeting he had attended when working for a big company, where everyone was “plugged in”, either using their laptop or PDA, for the entire duration. No one was really listening to each other, and the only time they stopped using their communication devices was when it was their turn to speak.

Of course, this is an extreme example, and is not indicative of most situations. But certainly all of these devices are affecting the way we interact with each other and get work done. In fact, I think that overuse of these devices and their “always on, always connected” nature can lead to something I like to call Constant Partial Attention. This is a state where you are alert, but because you are multitasking between so many different jobs, you aren’t as productive as you could be.

School’s out

I’m finally done my undergraduate studies at Queen’s University, and if all goes well, I’ll be receiving my B.Sc.E in Electrical Engineering soon. It’s been a fun, but hard, four years, and I don’t regret the experience at all. This last semester was particularly hard – due to a combination of our fourth-year project and the fact that this truly was the “last mile”. It certainly wasn’t as easy as I had expected.

Synonyms for “blend”

If you ever are in need for 10 or more synonyms for the word “blend”, and don’t have access to a thesaurus… just look at the settings on any blender. The makers must have had a tough time coming up with all those descriptive settings.

Upgraded to WordPress 2.1

I finally upgraded to WordPress 2.1, a month after it came out. I’ve been really busy with school work and whatnot, and while it doesn’t take long to upgrade, I wanted to set aside time so that I did it correctly.

As expected, a lot of the plugins I was using needed to be upgraded, which was somewhat of a tedious process. Most of them now work, though for some of them I was unable to find updated versions. However, they all seem to be working. Please let me know if you see something that isn’t working.

A nice day for photos

Today, it was nice and cold (but not too cold) outside, so I decided to take some photos of the frozen waterfront in Kingston just around the university. I was somewhat inspired by this photo, taken by a fellow Kingstonite, so I wanted to capture my own view of it.

'Time', a sculpture on the Kingston waterfront

Xbox 360 Controller Review

Xbox 360 Controller

If you’re looking for an easy-to-use, well-designed and functional PC gamepad that works well across many games, the Xbox 360 Controller is a good choice. Besides fitting well in your hands, and offering the standard feature set, it’s got the backing of Microsoft, ensuring that it’ll work well in all of the games that come out with the new Games for Windows branding. Quality is top-notch, (as expected, since the controller is in wide use with the Xbox 360 system), and it’s available in both a wireless and wired version. I decided to buy the wired version over Christmas, and here’s my quick review on how it’s been since then.

A new semester

After a grueling last semester, followed by a relaxing break, the new semester has started. Because this is the last semester of my undergraduate studies, I wanted to free up as much time as possible to allow me to pursue “real-life” activities, such as, deciding what to do after university.

New toys

Christmas has come and gone, and with it, the opening of new gifts for a new year. I got some nice presents this year, and also decided to splurge and get myself a few things having saved up some money over this past year.

Taking the www out of the web

Despite the phrase “World-Wide Web” being as dated and passé as claims of Al Gore “inventing the Internet”, the term persists today as the most popular and unnecessary subdomain for websites. Should it really be necessary to type “www” before every domain name? Furthermore, does it even have any more relevance?

Since the major use of Internet is for accessing websites, the “www” prefix shouldn’t be needed anymore. It is an archaic holdover from a previous era, one where browser wars meant IE vs. Netscape and where Geocities was the place to be. Thankfully, the folks over at no-www have been aiming to improve this for some time.

The semester finally draws to a close

Well, actually, it’s been done for a week now – I had my last exam last Tuesday (Dec. 19th), but have been spending the last week unwinding, shopping, and then unwinding again. And, the rest has been sorely needed. This past semester was probably the toughest I’ve had in all my four years of undergraduate study here at Queen’s. But that was by design – my next (and last) semester ought to be somewhat easier.

Dove and Viral Marketing

By now, you’ve probably heard of the Dove “Evolution” YouTube marketing video. Having been out for a month, it’s made its way around the Internet, and even got a mention in the Globe and Mail yesterday. In addition to being an impressive spot on what really goes into making a billboard model (and thus continuing their “Real Beauty” campaign), what’s even more engrossing is how Dove decided to distribute the it – the ad was only made available online.

Let the madness begin…

Nintendo DS Lite

I finally caved and bought a Nintendo DS Lite a few weeks ago after seeing a few of my friends play with their’s. All I can say is that I’m totally impressed with it. Arstechnica’s review gets it right – the DS Lite is almost perfect, and is much better than the original DS, (which I do not own), it seems.

The DS Lite is not only a lightweight and portable gaming platform, it’s almost a revolution of sorts. The the touchscreen input and microphone allow for games to be much more intuitive and easy to learn, which is good for attracting the non-hardcore gamer crowd. (Most of the population). And, the price is right, being just around $150 CDN before taxes. This has allowed for a whole new breed of games to become popular, in addition to the console classics such as Mario Bros. and Mario Kart.

Lest We Forget

Remembrance Day Poppy: Image copyright the Royal Canadian Legion

With all the hecticness of everyday life, which mainly consists of school work for me, it’s easy to forget that the liberties we have are not shared by everyone. Indeed, injustice and oppression continue to this day in many areas of the world. Living in Canada, we are very fortunate that our basic rights are not infringed upon, thus allowing us to pursue our hopes and dreams. Many people do not have this opporunity. Continued

Music and the digital media revolution

It’s really quite amazing how digital media, (or specifically, the lowered cost of flash memory and ultra-portable HDDs) has revolutionized the portable music player market. In just under eight years, we’ve gone from the most basic MP3 players to portables small enough to fit in your pocket, yet hold more music than most people have in their entire collection. Furthermore, MP3 players are starting to become the norm in other personal devices, such as cellphones and some PDAs.

When good CMSs go bad

I have previously wrote about how it’s a good idea for a university to adopt a Content Management System (CMS), not only to streamline managing content, but also to improve the consistence of the “look & feel” of the site. Generally, having a consistent look is a good thing – it gives an air of professionalism, something that is important about an institution one is considering attending and paying money to.

However, is it possible for a CMS to be counter-productive to those who have to use it? By this, I am referring not necessarily to the readers, but to the publishers that depend on it to disseminate their information. For a university, the publishers of content on the site are usually the professors. Short of the main site that acts to attract prospective student and faculty, a university’s website is mainly used by existing students to get access to course material and to communicate with the professors and teaching assistants. The true measure of a CMS should be how easily it allows the main publishers (in this, case the professors), to put their material on the site and make it readily available in a manner they like.

Google buys YouTube(!)

Since it’s not Thanksgiving in the US, news has been anything but slow today. Google has officially bought YouTube, sending shockwaves throughout the online world. Now, a $1.65 billion USD deal is going to be news-worthy anyday, but what makes this even more remarkable was how fast the Google-YouTube deal went from a rumour to a fact. I’d been hearing rumours of potential YouTube buyers since way back in the summer, but in no way was Google a top prospect.

Some will say that this deal officially marks the beginning of “Bubble 2.0”, since YouTube is not yet profitable. I’m assuming Google has some pretty bright people working for them, so what was their reasoning behind this move? Certainly, $1.65 billion USD isn’t a lot for them, ever since their IPO, but the real concern is YouTube’s high operating costs – serving up all those videos takes up a lot of bandwidth, which in turn translates into large monthly bills.

Zooomr Photostream

If you’re on the front page of my site, you’ll notice my Zooomr Photostream in the sidebar, which I just recently added. Zooomr is a neat photosharing site that I use since it’s currently free for near-unlimited usage. (There’s a 2 GB monthly upload limit for Pro accounts, which they were giving away for free)

As far as I know, Zooomr doesn’t offer any neat “photostream” widgets like Flickr does, but they do provide an RSS feed of your photos, so naturally, it was only time before a Zooomr WordPress Plugin came around that took advantage of that RSS feed to offer photostream-like capability to your blog. I decided to give it a try, and was quite impressed. It’s simple, but works well, as you can fully control the format in which your photos are displayed. It’s a nice workaround/solution until Zooomr decides to implement something themselves. Continued

Google Reader gets a makeover

Google Reader recently got a makeover, with the user interface changing drastically in order to make things easier to use. In addition to being able to easier navigate through one’s feeds collection, the changes better organize information and present it in a manner that makes the application look more like the familiar GMail.

I’m a big fan of Google Reader, as I use it everyday to keep track of my feeds. As I mentioned before, I think RSS is one of the good buzzwords surrounding “web 2.0”, though some may disagree. Since RSS is a web-centric technology, it only makes sense to view them in another web-application, in my opinion. I’ve always liked using Google Reader, but admittedly some changes were needed. Continued

Jobs, jobs, jobs

Yes, that time has come – the time to start thinking about a job. This being my last year of university, things are shaping up to be tough, and the added pressures of looking for a job add just a little more stress. Not that I mind; personally I’d rather be busy than bored. But, it just seems as if everything is due at the same time.

I’m thinking about graduate school, so I have to apply for funding for that – NSERC and OGS applications are due on October 16th and 23rd, respectively, so I’d better get started on that. Additionally, the deadline for many job applications are also in early October, making October the “busy month”, especially when you consider most midterms fall around that time. I intended to make my fall term more busy, since I thought that most job searching would take place in the second semester – boy was I wrong! Continued

Are you a queue or a stack?

I had a few things to do today, and started thinking about how one usually organizes a “to-do” list. Some people do things in the order that they come to mind, while others tend to do things right at that very moment, pushing other things to the bottom. The first group of people would be classified as a queue – think of a lineup at a grocery store, while the second would be called a stack.

The defining property of a queue is the First-In-First-Out (FIFO) property. Things that come to mind first should be accomplished before others, while the analogous property of the stack is Last-In-First-Out (LIFO). I tend to think of myself as a queue-type person, though admittedly sometimes I push things to the back in a stack-like fashion. Continued

Engineers by nature are not good presenters

Besides all of the jokes about the ineptitudes of engineers when it comes to explaining things, I’ve found that most do a reasonably good job at explaining or teaching the concepts of some topic. However, this does not mean that they are good at presenting information to the general public or “selling” a product or service. Why? They tend to go into too much technical detail regarding the inner workings of the system, oftening leaving the layman feeling bewildered and befuddled.

I’m guilty of this, probably moreso than most engineers. You see, the tendency for engineers is to gloss over the aspects that would be of interest to a potential client and instead go straight to the heart of the system, explaining all of its inner workings. (“You see, this is how widget A interfaces with module B, using sub-system C. This was done because using the direct interface caused all sorts of bad harmonics that threw the system out of control…”) This is especially true if this system was designed by the engineer in question, who inevitably spent many, many hours slaving away at minor details to get things working just right. (Or, just working at all) Continued

Clean out your laptop’s heatsink/fan

My laptop, a three-year old Dell Inspiron 5100, was recently suffering from some heat-related issues that manifested themselves in slowdowns and sometimes shutdowns. You see, the CPU in this laptop is an Intel desktop 2.8 GHz P4 – one of the truly hot-running CPUs, made before Intel decided that clock speed wasn’t everything under the sun, and thus is probably not the best part to include in a laptop. When I first purchased the laptop, it was able to run CPU-intensive apps well, though it did occassionally overheat. However, after three years of use, it would routinely overheat to the point that it would always throttle itself to a lower speed, resulting in my system becoming very slow – things like browsing the Internet or trying to watch video on YouTube just wouldn’t work very well.

I finally decided to take a look at the heatsink/fan area – it didn’t look like it had a lot of dust in it, but then again, I had been lazy. Not any more – I took a can of compressed air and aimed straight at it. Immediately, a huge puff of extremely fine dust spurted out and I had to cover my face. I then proceeded to spray out the rest of the dust until no more was seen. Now, the laptop runs like it was brand new. If you have a laptop that’s getting very hot, invest in a can of compressed air, but make sure you’re in an area that you feel comfortable scattering with very fine dust particles.

Back in Kingston for another year of school

Got back from Edmonton yesterday after a decent flight to Toronto and a bus ride to Kingston. Arrived around 6:00 PM, and so I had time to enjoy a good meal and then do some grocery shopping, lest I starve. The city is a lot more busy now, with all the students being back – it was almost a shock to me. You know you’re getting old when you shake your head at the “noisy kids”.

School starts tomorrow, and my course load for the first semester is quite heavy. I’m signed up for seven courses (which includes a fourth-year project course), and my schedule includes 8:30 AM starts on most days. I also have a conflict between one of my technical course and an elective course that I really want to take – but it’s only for one particular lecture, so I’m hoping I can work through it. We’ll see. Continued

Bell Sympatico increases their speeds, but are bandwidth caps on the way?

Bell recently increased their speeds for their “Sympatico High Speed” service (of which I am a subscriber) from 3 Mbps to 5 Mbps, which is great. I wasn’t really aware of what the speeds were before (though I did notice peak speeds of close to 400 Kbps, which translates into 3+ Mbps), but this is a welcome increase, and one that’s somewhat expected considering they recently raised the price of this service from $44.95 to $46.95 per month.

$50 a month for a 5 Mbps connection isn’t that bad considering it’s still for unlimited bandwidth usage, although those days may be coming to an end. Out here in Edmonton, Telus offers DSL offers a 3 Mbps package for $40.95/month (with a 60 GB cap), or a 1.5 Mbps package for $30.95/month (with a 30 GB cap).

Of more concern is Bell’s future plans. As I mentioned before, their “High Speed Edition” and “Ultra High Speed Edition” (which is still at 5 Mbps despite the former’s increase) are still set for unlimited bandwidth usage. However, this is very likely to change in the future, as indicated in a recent interview with Kevin Crull, President of Residential Services for Bell Canada. In it, he says:

It used to be that the real heavy users were 2 percent of our subscriber base, but now we would consider heavy users to be 30-35 percent of our subscriber base.

This quote is supposed to justify the rolling out of their new “Optimax” service, which I understand is their shiny-new fibre optic solution, probably similar to Verizon’s FiOS in the States. However, what isn’t so blatantly advertised is that Optimax will feature caps, set at 50 GB for the 10 Mbps service or 75 GB for the 16 Mbps, with each additional GB costing $1.25 (for the 10 Mbps) or $1.00 (for the 16 Mbps), quite a hefty fee.

Facebook users vent their rage at “privacy” violations

It seems that many, if not most, Facebook users do not like the changes made to the system, namely, the addition of the “News Feed” and “Mini News Feed” that quickly allow one to see all the updates that another Facebook user has done. In effect, these new additions make it easy to “track” what another user has been up to, since the events are tagged with a timestamp and provide all the details.

Since the changes were put into effect, scarcely a day ago, a bevy of groups voicing their opposition to the new features have sprung up on Facebook. Many of them are united by the fact that the news feeds crowd their starting page now, and cause information overload – something I criticized as well. However, most of them decry these new features as being huge breaches of privacy and point to how they make stalking much easier.

Facebook updates its interface (sort of)

Logged into Facebook today (who doesn’t?), and was surprised to see the new interface, added just in time for the new school year and thus just before increased usage of the service will start. Added were two features – firstly, a “News Feed” that displays when you first login, instead of the old notification page that most people just clicked through. Besides displaying the usual notifications (new friend confirmations, upcoming birthdays), which have been relocated to a sidebar, it displays an RSS-style feed of all things that have changed or been updated with your friends.

The Apple Dock in Windows

After setting up a PC with Ubuntu for my Mom to use, I decided to add a few things to the Windows XP system that’s also occasionally used by Mom and Dad. Since I was aiming to make things easier to use, in order to encourage my Mom to use the computer more, I took a cue from Apple, and started looking for a program that would emulate the Apple “Dock” that’s so often showcased at their stores. I had previously seen Glen using a program like this, so I knew they existed – while I didn’t have a need for it at the time, I’ve begun to think different (excuse the blatant Apple slogan rip off) when it comes to usability – not everyone is like me.

RocketDock in action - like the Apple Dock


Mysterious memory controller problems

Yesterday, I decided to setup an old computer for my Mom to use, who, like 80% of Canadians, only really used the Internet for browsing and e-mail. The PC previously had Win98SE installed on it, but that just wasn’t going to fly, so I decided to give Ubuntu a try, and see what all the hype was about, and get some experience with an OS other than Windows. Ubuntu seemed to also be the perfect fit for what my Mom would want – basically just web-browsing and e-mail, and Ubuntu would easily be able to deliver that in a secure environment.

However, I ran into some difficulties during installation that turned out to be result of some faulty hardware, which eventually turned out to be likely a problem with the motherboard – and ended up costing me an afternoon of headaches.

Website usability and the double-click

For most of us who are accustomed to using computers and their interfaces, the use of the mouse (or other pointing device; for the sake of brevity I’ll call them all “mice” for this entry) is nothing short of second nature. Indeed, for many actions required in a modern user interface (UI), a mouse is required, or at the very least, it makes performing the task much quicker. For the most part, the mouse is quite intuitive to learn and use; move it in a direction, and the on-screen pointer moves similarly. The concept of the single-click vs. the double click may also seem simple as well, but for newcomers, things can often be confusing; this gets even more complicated when websites change how the double-click functions on their site, and can even confuse experienced users.

The new home

Having been home for a few days, I can say that I love my parents’ new place – I haven’t even been home for that long, but I’m already dreading going back to school! 😉

I’m liking the new house a lot, as there’s a lot more room and the layout is just less cramped – though maybe that’s just because I’ve been living in Kingston student housing for the entire summer. 😉 Location is pretty good as well, as most of the services are close enough for a bearable bus ride or just a bike ride. Continued

Akismet problems

I’ve been using Akismet to control comment spam and so far, it’s performance has been excellent – out of close to 300 comments, it didn’t report a single false positive and only let through one or two cleverly-crafted comments. However, for some reason, in the past day it’s started letting through comments that are clearly spam, and I’ve had to manually label them as such and then delete them.

I wonder if this is related to the recent update to the system (as it’s a centralized service), or something else. The update seemed to be only related to improving the statistics tracking of the service, and not something related to the spam-detection algorithm. I’ve tried disabling/enabling the plugin, so we’ll see if that helps – has anyone else been having these problems?

Home in Edmonton

After some travelling, I finally got back home to Edmonton, my parents’ new location. Travelling was a bit of a pain, as I had to catch the 2 AM bus from Kingston to Pearson Intl. Airport, to arrive at around 5:30 AM to catch my 7:15 AM flight to Edmonton. I didn’t get much sleep that day (got up around 7:30 AM), and only got about four hrs of sleep – two on the bus, and two on the plane.

But, I witnessed a sunrise for the first time in years while waiting in the airport terminal! I wish I could’ve taken a picture, but didn’t want to look suspicious or anything in these post-9/11 times… (I was really just too tired to care at the time) Continued

The summer draws to a close…

I’m almost done work for this summer, where I worked at Queen’s University for the Electrical Engineering Department under an NSERC grant. The professor I worked for, Dr. Geoffrey Chan, was a great prof. to work under, and so were the people in the lab. I learned a lot, mainly in how to implement signal processing concepts in Matlab, and it was nice to see stuff I’d learnt in class actually getting put to use.

My research area was mainly in Speech Quality Assessment, which deals with the design of an algorithm that can determine how a human would interpret the quality of a speech signal file that has been degraded somehow. Look for an upcoming entry describing this more in detail. Continued

Facebook adds “Notes”, a basic blogging tool

Hot on the heels of their API release, Facebook has just added “Notes” to their service. It’s a basic blogging/journal entry platform, allowing users to write entries about anything they wish. (Most entries will probably boil down to the mundane) It seems like Facebook is responding to users’ suggestions, and adding the features they want in an effort to better keep them happily on the service, rather than forcing users to rely on another service’s blogging tools to share their thoughts.

Getting Matlab to run on a newer Athlon 64 (X2) CPU

I recently installed Matlab v7.0 (R14) on my new computer and ran into some troubles. After starting Matlab, the program window would open as normal, but then it would shutdown almost immediately, usually after about a second or so delay, allowing me to tantalizingly see that it almost working. I did a search and found this helpful article on how to fix the problem.

The issue (Matlab closing right after start-up) stems from Matlab (at least this version, the newer versions might not be affected) not “recognizing” the processor string for newer AMD Athlon 64-based processors; in my case, I had an Athlon 64 X2 3800+. Matlab relies on different Basic Linear Algebra Subprograms (or BLAS) routines for different types of CPUs, and these are stored in different DLL files.

The BLAS file responsible for telling Matlab which DLL file to use for what type of CPU is located at:

(where %MATLAB7% is the path to your Matlab installation)

To fix the problem, open up the file in a text-editor, and add the following two lines to the bottom:

AuthenticAMD Family 15 Model 12 atlas_Athlon.dll # Athlon 64 (Newcastle)
AuthenticAMD Family 15 Model * atlas_Athlon.dll # AMD64

This will tell Matlab to use the proper DLL file with your newer AMD-64-based CPU, instead of apparently defaulting to using a Pentium DLL file when an unrecognized CPU is detected.

Google moves to add facial recognition to search?

Google recently acquired Neven Vision, a company with lots of technology related to image-processing, specifically, facial recognition. The initial aim of this IP acquisition is to integrate it with Picasa, Google’s photo-organizing tool and online-photo sharing site. According to Google:

“It could be as simple as detecting whether or not a photo contains a person, or, one day, as complex as recognizing people, places, and objects…”

The article goes on to speculate that Google may use this technology to enable searching of people on the web by any photos of them that may be online. Certainly, this wouldn’t be out of their league, and they’ve been interested in this technology for some time. Indeed, Sergey Brin, one of the co-founders of Google, has said that image recognition is something they’d like to do. Despite the obvious usefulness of such a tool, it does raise privacy questions.

The obligatory “Snakes on a Plane” post

Yes, I went to see SoaP last night. Despite the obvious expectations of seeing a movie “so bad, it’s good”, I didn’t think it was that bad; there are certainly more horrible movies out there. Though I don’t think it was originally intended to be this way, the movie eventually became a sad commentary on the clichéd rubbish that Hollywood pumps out, and to that effect, SoaP accomplished its task, keeping me (and the rest of the theatre) basically chuckling or in outright laughter throughout most of the movie – you just can’t take anything in this movie seriously. And of course, all of it builds up to the Samuel L. Jackson one-liner that fans had requested.

However, what I think is more important is how the hype and buzz about this movie came about – all of it happened through entirely untraditional channels, and SoaP may be the first movie that was heavily promoted and spread through viral marketing on the Internet, actively encouraged by New Line Cinema. This sets a precendent that other marketers are sure to notice

Google finally releases Writely as an open beta

Google recently opened Writely, their online Ajax word-processor, to the public as an open beta, though in web 2.0 terms, “beta” basically means “final” or “we’ll continue to update and change it randomly”. It has been many months since Google acquired Writely; during that time it was a private beta, open only to a select few and fueling rumours that Google was going do something super with it as part of their growing “online office” services list, which includes things like SpreadSheets, and their Calendar web-app.

While I am impressed by the features offered by Writely (and in general, what’s possibly with technologies like Ajax), it doesn’t offer anything, feature-wise, that would make it a killer of current online word processors, such as Zoho Writer. Don’t get me wrong – Writely does seem like a good web-app, but if it’s going to eat into the market share of its competitors, it’ll probably be because of the Google brand name.

September 11th in the media

In the lead up to World Trade Center, I’ve recently been reading up on some of the background, though it was such a major event that I still remember the day quite clearly, even if it didn’t directly affect me. While searching the web for more information, it’s quite hard to discern fact from fiction, with all the “conspiracy theories” that are out there. The Wikipedia article does a pretty good job on the main background facts, and the 9/11 Commission Report is probably the most in-depth report you’ll find. (I actually bought the paperback version when it came out)

I won’t bother to cover the conspiracy theories here, instead sticking to the “official version” because I believe that’s more than enough – I’ve always been interested in the events surrounding September 11th, mainly because the coverage seemed so surreal because the actual events were so astonishing – perhaps the most important geopolitical event of our time, and if not, the most sensational. Here are some other documentaries about the event that you might find interesting.

WordPress and password-protected directories: How to make them work together

If you have WordPress installed in the root directory of your website, as many people do, then the entire website is subject to the .htaccess rules defined by WordPress, if you’re using a permalink structure that uses mod_rewrite. (Again, most people use this option, as it allows for human-readable URIs instead of ones filled with GET queries) Because the WordPress .htaccess file resides in the site root folder, it allows WordPress to handle all URIs relating to requests from the site – this is good, as it allows WordPress to handle 404s nicely, and you can define 404 pages from within WordPress rather than having to resort to server directives.

However, this can create problems if you want to create password-protected directories. Accessing them sometimes doesn’t work because of WordPress’s .htaccess file, however this isn’t a WordPress problem per se, but rather a problem with how Apache has been set up. I ran into this problem – I tried accessing a password-protected directory that I knew had been set up properly, but I kept getting a 404 error and was redirected to my WordPress theme’s 404 page. After a little bit of searching over at the WordPress support boards, I found some solutions that were sort of messy, involving editing WordPress files or adding a lot to the .htaccess file.

Facebook opens an API to developers

Facebook recently released an API for developers in order to allow them to create new applications that use the data available from Facebook, adding to the functionality already offered by the website. There are already applications in development, despite the recent release; the API is in a beta version, and doesn’t offer a whole lot of methods, but it’s a great move and will help to improve the staying power of Facebook, as if it needed it.

Oblivion and Oscuro’s Oblivion Overhaul mod

If you’ve been playing TES IV: Oblivion for a while, you’ve probably noticed that while it’s a great game, there are some downsides, mostly due to balancing and the new levelling system. In Oblivion, most NPCs (and enemies) do not have a fixed level, but instead increase their level everytime you level – the idea behind this was to keep the game challenging, so that going into dungeons at a low level would not result in a complete pounding, but conversely, going in at a high level would not be a cake walk.

Three bike rides later

I finally started biking again, and so far have gone out three times since Sunday. I’ve gone a total of 70 km since then, with 30 km of that today. Can’t say I feel better (I’m feeling kinda tired/exhausted right now), but everytime I go out it’s an enjoyable, if not a testing, experience. Though, I don’t know if I can keep up the three-times-a-week thing; maybe twice a week is more sustainable. Here’s a few stats in summary.

IE7 still not up to task on CSS

With all the attention IE7 has been getting and the long development time, (Internet Explorer 6, the last major version, was released almost five years ago), you’d think Microsoft would have devoted a lot more time to following web standards this time around. Unfortunately, things are not looking so good in this respect.

While everyone (myself included) has applauded Microsoft for making moves towards supporting standards, a mere slight improvement over IE6 is not enough this time. I mean, come on – they’re Microsoft, one of the largest software companies out there. Why can’t they seem to get things right?

How “web 2.0” is actually changing things

With all the talk about how Digg, the community social news site, is supposedly worth $200 million, and the ensuing cries of BS, you’d think we were well on the way to Bubble 2.0 instead of web 2.0. Semantics of the “web 2.0” term aside, the current revolution in the web is changing how things are done, and is having an effect on the industry, for better or worse.

A spider web

Nothing complicated, intricate or hidden in this title. It means what it says – but the photo does a better job.

A spider web

AOL search query data release: The aftermath

As expected, there has been much discourse following AOL’s release of the search query records of 650,000 of their users over a three-month period. After the publically-released data (which was originally put up for research purposes, with no ill intent), was discovered by a blogger, news subsequently spread throughout the online communities, prompting many people to download the data and AOL to eventually pull the data from their site. However, some of those who had already got the data began to offer it up for download, either from their servers or through Bittorrent, providing a very good example of “letting the cat outta the bag”.

Started biking again

Well, I’ve finally started biking again, sort of as an alternative to running, and to get at least some biking in before the summer’s out. I usually keep running during the winter months, but biking then is usually not an option. Biking can also be a little more interesting than running, giving you more scenery options, and like all forms of exercise, is a great way to burn off stress and get into a relaxed mode. The weather’s also been better this week as well, with today’s high being only a dry 24 °C – perfect summer weather in my view, and certainly much better than the humid sauna-like conditions we had last week.

AOL releases search queries for 650,000 users in blatant disregard for privacy

Well, the “blogosphere” (I hate using that word) and various online communities are abuzz with the news that AOL Research just released 20 million search queries of some 650,000 users over a three-month time period from March to May of 2006. Though the data were released in order to provide “a real query log” to aid in search engine research, it constitutes a huge violation of privacy, as though usernames have been removed, they have been replaced by unique identifiers, which can be used to track an individual user’s searches, allowing information to be collected about them and a profile built.

The download was taken offline sometime yesterday (August 6th, 2006), but enough people had already downloaded it to ensure that mirrors would quickly be set up, ensuring its continued spread. While the intent of this release of data was obviously not malicious, it was a poorly thought-out move that AOL is sure to receive more bad PR for – especially in light of their recent troubles.

Why Flash-based websites are bad

Despite there being many tips on separating content from presentation in web design, and the existance of entire websites devoted to practicing this ethos (which has been around since at least 2001), there still remain a plethora of websites that don’t seem to take any of this account, despite the demonstrated benefits. Much of this can be attributed to sites that aren’t well-maintained or updated; however, many new websites are still being designed without regards to standards and best-practices.

Furthermore, websites done entirely in Flash are still being pushed – indicating that proliferation of best-practices and advantages, as pertaining to web-design, are still not well known. Perhaps it’s time to outline (at least briefly), why doing an entire site in Flash is a bad idea.

Why poorly designed websites persist

I originally meant this to be part of my post, “Why Flash-based websites are bad“, but when I started typing the section, “A brief history of the problem”, things got a little too long. What can I say? I have a problem with being overly verbose, but I can’t bring myself to delete something I spent typing. This is probably also why I’m a pack rat – as I type this, there are five or six cardboard boxes sitting in my room that should probably be thrown out. But I digress.

If you’re a web designer, you may be disenchanted everytime you visit a poorly-designed or poorly-structured site. Why do these still persist, despite proper techniques of content/presentation separation having been around since 2001? Has the whole world gone mad? Fortunately no – but it is a complex problem.

Enabling all options on Logitech mice using uberOptions and SetPoint

This guide is aimed at owners of Logitech mice that have extra buttons and would like to configure them for various program or application-specific settings. By using a program called uberOptions in addition with SetPoint, Logitech’s keyboard and mouse control software, you can configure your mouse buttons to do different things in different programs, without having to manually change button configurations all the time. This is especially useful to the Logitech mice that have many extra buttons, as the buttons, being close to your finger tips, can be used for time-saving shortcut commands across multiple applications and games.

Update – 2008-02-01

The uberOptions site is back online at a new URI. Please ignore any outdated or broken links in this article as I work to fix them.


Chat with your website visitors using MeeboMe

Meebo, the popular web-based service that allows you to chat with any of the four major IM networks (MSN, Yahoo, AIM or Jabber), launched their MeeboMe service, which allows website owners to chat with any visitor using their site, by way of a handy flash widget that is inserted into the site.

Serving up better (X)HTML

Tantek has posted some nice tips on how to improve the quality of your pages and to make them more standards-compliant and in the spirit of the HTML specification. This is a great guide for web designers and developers wondering about how to improve the quality of their code, and what’s the correct way to do something – there are far too many old and outdated HTML design tutorials and sites out there, but Tantek sets the record straight and his post serves as a nice starting point for producing valid code that adheres to standards, and will make maintenance easier.

Photosharing with Zooomr

Zooomr is a relatively new photosharing site, started by an 18-year old late last year (when he was 17 – boy I feel old), as a direct competitor to other photosharing sites, many of which aren’t that old themselves. It’s got all the catchy web2.0 features – a nice Ajax interface, the use of Lightbox for image loading effects, and the catchy “er” to “r” transformation. It also features geo-tagging, by way of integration with Google Maps, allowing you to show where the photo was taken. They recently opened their beta to the public, and began offering free Pro accounts to bloggers. Naturally, I had to give it a try.

Comment spam evolution

Spam is pervasive; it is everywhere. If Ben Franklin were alive today, he’d probably be quoted as saying that “In this world nothing is certain but death and spam. In fact, it’s one of the major downsides of the web as we know it. With increased availability of information, comes the inevitability of spam – direct consumer marketing thrown in alongside legitimate content that decreases the SNR (Signal-to-noise Ratio), effectively making it harder to find quality, real information on the Internet.

Off to another cottage weekend of fun

Well, it’s time for another cottage weekend, thanks again, to Meaghan. The first one was a blast, and the weather’s even hotter now. Hopefully, there’ll be less bugs this time of year, but if not, I’m loading up on the bug spray. Unfortunately, my shoulder’s still a little sore, so I probably won’t try waterskiing again… not that I was all that great before though. I look forward to the relaxation though, and it’ll be a nice change to get away from computers and the Internet (and all of its tubes) for a while.

Should be back on Sunday, hopefully with some more pics!

CMS watch: Queen’s Engineering Society adopts Drupal

I’ve written about CMS platforms before and how they’re finally getting greater usage among large institutions like universities. Back then, it was about how Queen’s adopted Apache Lenya, perhaps a lesser-known CMS, in a pilot project to unify Faculty and Department websites. Having a common “look & feel” is important to an institution such as University, if it wants to present itself as professional and competent; besides this it also makes content much easier to manage. That was why I was pleasantly surprised to see the Engineering Society of Queen’s adopt Drupal to manage their website.

Apple releases Bluetooth Mighty Mouse; Fanboys rejoice

Apple recently released their new Mighty Mouse, this time clipping the cord to make it wireless and adding upgrading the tracking from optical to laser. While it’s certainly an improvement, it’s by no means groundbreaking. Yet, fanboys everywhere seem to be rejoicing about this momentous occassion and harshly criticizing anyone who dares disagree with the significance of this event. Why?

Windows Live Mail: slow, bloated, and not very usable

I wrote about Windows Live Mail before, back when it was apparently having some server problems. Those problems have been solved, but the issue of quality and usability remains. While I don’t like uninformed bashing of Microsoft products just for the sake of doing so, Windows Live Mail has some real problems with usability that need to be resolved before it goes out of beta and becomes “live”.

RSS – not just for geeks anymore

With all this hullabaloo about how neat and nifty web 2.0 technologies need to be made more mainstream, useful and practical technologies can often be forgotten. One of the things out there that I believe is a core part of web 2.0 is syndicated content, known variously as (thanks to competing standards) RSS, Atom, and XML (in the early days) feeds. What exactly do all these acronyms represent? Well, it’s complicated, but basically it’s a way to stay up-to-date on the newest content and information from your favourite websites – essentially subscribing to them, and allowing you to focus on quality content instead of having to weed out the junk. It’s a form of crack for tech news junkies who have to be “in the know” about everything new that happens.

Black Dawn: The Next Pandemic (Or, Bird Flu: The Worst Case)

I recently watched a re-run of the CBC’s Fifth Estate on Bird Flu, which was done in a docu-drama format (whatever that is), entitled, Black Dawn: The Next Pandemic. It originally aired back in January of this year, right at the height of flu season, and is quite an alarmist view of what would happen if the H5N1 strain of Avian Flu were to mutate into a form spreadable from human-to-human.

Injured shoulder

This Wednesday, while playing ultimate, I sprained my shoulder in an unfortunate situation – I went for a dive for a disc, got bumped by another player, and came down a little hard on my left shoulder. I thought I heard it *pop*, but then again, I yelled “OW” pretty loud, so it’s hard to say – I don’t really remember. But, it did hurt. A team mate thankfully drove me to a clinic, where the doctor didn’t have anything particularly bad to say. Another good sign is that I got ice on it pretty fast.

So, now it’s just pretty sore – I don’t have full range of movement but I am doing range-of-motion exercises to keep it from getting stiff, and it doesn’t feel that bad. I had previously injured my right shoulder last year, so I had been doing shoulder exercises with weights to strengthen them to prevent this sort of injury – though I did come down pretty hard on it, and the doctor seems to have thought it could have been a lot worse if I had had less muscle there. So, maybe the training did help. Continued

The dinosaur that is web-standards

If you’re into web design or development at all, you’ve probably run into the term “web standards” and the W3C, the body whose job it is to organize and draft these specifications. The truth is, web standards are still by-and-large, just suggestions on how to do certain things, and are as of yet, not completely and widely followed. This is more an artifact of the way the web and browsers have evolved, but sometimes, you gotta wonder what the W3C is thinking.

Netscape’s digg-clone not doing so well?

I wrote about the new Netscape site a while ago (back then it was in beta), which was basically a Digg clone meant to replace their traditional news portal site that had been in its current form ever since AOL acquired them. The idea seemed great – copy the basic idea of such a supposedly popular website as Digg, but push it into the mainstream and add editorial control to prevent mob rule. However, as some would say, it looks like they may be rearranging the deck chairs on the Titanic over there.

And the Earth cried…

After quite a few days of hot and humid conditions, we finally got an unexpected break. Out of seemingly no where, a decent thunderstorm has broken out, finally breaking the siege that this balmy weather has imposed on us.

Rain on my street


The dark side of Internet advertising

Advertising on the Internet is perhaps more ubiquitous than advertising in traditional media – and for good reason. For many companies out there, it’s either their major or only source of income, and it brings in tons of cash, in many times for something as seemingly simple as running a successful website. (If you’ve ever wondered how Google makes money, it’s time to stop doing so.) There’s nothing inherently wrong with making money off of advertising, as it’s just another way to earn money, the ultimate aim of any company. What’s wrong is the way some less-scrupulous companies go about getting their ads onto your computer.

Switchin’ styles

I finally added in a style switcher, to allow users to select between viewing the site in either a fluid or fixed (default) width layout. Up until now, the layout has been a fixed one, restricted to a width of 780 pixels, so that it remains usable in even 800×600 resolution screens. Before you so smugly point out that hardly anyone you know runs at 800×600 anymore, recent facts seem to indicate that up to 1 in 5 screens are still at this resolution – so you must be able to design for this, as having to scroll horizontally greatly reduces usability.

However, this design constraint also imposes some problems on people with higher resolution screens who want the website to use more of the available space. (I personally run at 1280×1024, but prefer the smaller, fixed width as easier to read due to the smaller line lengths.) Well, taking a cue from some websites out there, I decided to implement a style sheet switcher that would allow users to pick which format they wanted. It’s now available – see that icon in the upper right corner that looks like this?

Style sheet switcher

Simply click on it to toggle between a fixed a fluid-width layout, and view this site how you like it. At this time, I have no plans to add other different styles, as in my mind a simple switcher like this is all that’s needed. And, I don’t really feel like a re-design at this time; I think this current design is good at least for a few more months. (On a somewhat unrelated note, I’m currently working on a WordPress theme for public release though, stay tuned for more details.)

Implementing Litebox

Litebox is a neat set of scripts used to allow images to load and overlay the current window, which is useful for loading the original images of thumbnails. It’s based off of Lightbox (note “Light” vs. “Lite”), but uses a different effects library plus some other changes to bring down the total script file size. The original Lightbox scripts were on the order of 100 KB in size, while Litebox weighs in at just over 24 KB, all while providing basically the same functionality – neat. (You could strip out all whitespace and comments to further bring down either of these numbers)

So, what do the effects look like? Well, take a look for yourself:

Kingston waterfrontThe view out my lab's windowLil' Ladybug

Click on any image, and the larger, linked original image will popup and overlay the page – from here you can even go back and forward through the image set, by clicking on the left or right side of the current image. What’s even more neat is that if for some reason JavaScript is not enabled in your browser, the links still work as normal – opening up the location to the original image. You can still open the image link a new window if you so desire.

Enabling all options on your Logitech mouse

I recently switched to using a Logitech MX1000 mouse because I liked the feel, ample number of buttons, and rechargeability of the unit. It’s very comfortable, cordless, and just looks plain sleek. However, there was once sorely-missed feature: The ability to set button profiles on a per-application basis. This wasn’t a fault of the hardware per se, but rather a “limitation” of the software. However, after some searching, I found a handy solution.

Microsoft and Yahoo! team up for IM

Well, it has finally happened. After much talk about interoperability, (which many thought would amount to nothing but that), Microsoft and Yahoo! have finally made their instant messenging clients compatible, allowing some 350 million accounts to communicate with one another and finally ending the “Cold War” of instant messenging.

A patent on social networking?

Late last month, social networking site Friendster was awarded a patent relating to social networking. Specifically, the patent deals with things like allowing “individuals to indicate other individuals with whom they have a personal relationship”, and several other broad aspects of social networking in general. If Friendster decides to act on this patent, things could get ugly for the world of social networking.

The lasting power of Guild Wars

I started playing Guild Wars over a year ago, during last summer when I figured I’d need a good game to “get into”. Being a general fan of the RPG genre, but never having got into a MMORPG yet (for fear of wasting too much time, and the monthly costs), I was a bit hesistant to try out one. (Guild Wars actually calls itself a CORPG – Co-operative Online Role Playing Game, but that’s somewhat just semantics.) I was initially worried that the game would eventually become boring, and would suffer from the usual grinding and farming sessions that come with most online RPGs, but thankfully, a year later, the game is still holding appeal for me.

Learning to use Illustrator

For the past few days, I’ve been trying to teach myself how to use Adobe Illustrator for graphic design. My experience with vector-based graphics (and any sort of graphic artwork in general), has been very limited, and is in particular one part of the web design/development environment that I really need improvement in.

The web 2.0 divide

Web 2.0 – chances are you’ve heard this buzzword before, if not from me, then perhaps from O’Reilly Media. In a general sense, it refers to the “new” direction the web is taking, being more user-content-centered, more social-oriented and featuring/implementing new technologies that make the Internet more interactive. But just how much of a difference is it really making, for the average user?

Running route

I was playing around with Google Earth a little yesterday (due to boredom) and decided to map out my running route after I discovered the “Measure” tool. It’s pretty neat, and hopefully not too inaccurate. (Unfortunately the overhead image map data for Kingston is pretty lacking, so you don’t really get an idea of what’s along the path. However, it’s still nice to plot out paths.


WordPress 2.0.3 “tuneup”

I recently updated to WordPress 2.0.3, basically as soon as I noticed it was available. It was touted as a “security fix” release, so I thought it would be a good idea to upgrade ASAP. However, it introduced a few bugs, that while not extremely detrimental, were nonetheless annoying.

Open data standards and microformats across networks

There’s been a lot of talk about microformats lately, brought about the increasing presence of web-standards, awareness and development of design patterns and concern about open data formats for information exchange. Microformats are not something revolutionary, but they hold a simple, yet effective concept, that aims to take the best practices of the web and multiply them, thus, among other things, improve the way we interact with data on the Internet.

Churches of Kingston

Kingston is a city that’s literally overflowing with churches. That was one thing I noticed that set it apart from other places I’ve lived in. It’s almost as if someone used that Simcity 2000 cheat that causes churches to pop up everywhere in the city, while they were designing Kingston. I’m not sure why they are so abundant here; maybe it has something to do with the age of the city (Kingston is one of the older Canadian cities), or maybe it has to do with a need to balance out the inherent immorality of a large student population. Whatever the reason, I decided to take a few pictures of the many churches that call Kingston their home.

University Preregistration

Today was that time of year again: preregistering for courses from the coming year. Now, anyone from Queen’s will tell you that this can be a dreadful time, not only because you have to figure out what you courses you want to commit to for next school year, but also because of the outdated and awful QCARD system you must use in order to select courses.

Web accessibility: Both sides of the coin

Web accessibility is a hot topic nowadays. Many articles have been written about the topic, so that there’s no shortage of information should you want to design an accessible website that at least aims to be usable by all, regardless of any disabilities. This, after all, is a good thing, since if public buildings are mandated to be accessible by the disabled, shouldn’t public websites be as well?

Back from a cottage weekend of fun

I spent the weekend with friends up at Megagh’s (aka Meaghan) cottage, and boy, was it a fun, but sore weekend. Being with friends is always nice, especially after being cooped up in the lab with a bunch of computers all week. But, it’s even better when it’s up at a cottage with plenty of outdoor stuff to do. Brought my camera along, and managed to get some pics.

Lake Waka-wata-something...


Battle of the instant messengers

Two big companies, Microsoft and Yahoo, both recently released their new instant messenger clients. Microsoft’s client is now called “Windows Live Messenger”, and Yahoo’s is a more mundane “Yahoo Messenger 8.0”; however, both are heavily integrated into their respective company’s web services, with the overall aim of both offering more features to users and attracting them to services they may not have known about.


Search engine spam

I recently read about how Google was the latest victim of search engine spam, or the intentional creation of useless pages in order to get a high ranking or listing on a search engine results page. The story was later Dugg, and you may have seen it on my “Recently visited” list. While Google has fixed this current problem, this type of Internet spam has been growing at a very fast pace for the past few years, for a few reasons, and will probably out-grow conventional e-mail spam in the future. It presents its own set of unique problems, many of which have yet to be solved by Google, or, in my opinion, other search engines as well.

Looking for a good WordPress tagging plugin

Since tagging is all the rage nowadays, I’ve been looking for a good plugin that adds this functionality to WordPress. Tagging is a nice, quick way to add useful metadata to an entry or post, and besides this basic feature, it allows for other useful features as well. For example, for an entry I could display a list of similar or related entries, based on common tags. It would also make entries integrated better with Technorati. WordPress doesn’t currently include a tagging function, instead relying on its old categorization system, but I assume that tags are an upcoming feature, slated to either replace or complement categories. But there are just a few snags preventing me from fully adopting a tagging system, despite the benefits it would offer.


The new Netscape site – proof of the power of community

Netscape AOL has launched their “version” of a Digg-like site, which is still in beta. While there have been other Digg clones, this is the first from a major player in the Internet arena, and surely signals the acknowledgement of the power of community, whether a good or bad thing.


Universities and web-platforms

Traditionally, university websites have been very hodge-podge and piecemeal, as a result of the many departments and faculties that comprise the institution. This has resulted in pages whose “look & feel” varies widely and can either confuse the reader (humans adjust easily when there are clear patterns) or just come off as looking non-professional. The obvious solution is to adopt some sort of CMS that will make it easier to apply styles site-wide, but this can be a problem in a university setting, where departments and faculties can sometimes be very territorial.


wikiCalc – a real corporate alternative?

I posted about Google Spreadsheets recently, and why I thought it wasn’t really a good step for Google, since their product lacked features of already-available online spreadsheets and didn’t really have a chance at attracting a large user base, especially in a business environment. However, wikiCalc is an application that looks it might make some headway here, especially after its agreement with SocialText.


An Overview of Image QA methods

The following is a presentation I gave for the Multimedia Coding & Communications Laboratory about current and proposed image quality assessment methods. It briefly covers the major types of methods, attempts to show the pros and cons of each, and also outlines the difficulties in producing a viable image QA method with clear advantages over traditional techniques. Continued

Ajax References

From Ajaxian, I discovered a nice resource from Max Kiesler, entitled 50 AJAX Reference Websites From Around the World. This would seem to be a good list for budding Ajax developers, (pretty much everyone out there, since AJAX is relatively new), it’s also a good learning tool for people like me, who are looking to get in to this sort of stuff.


Google spreadsheets: Neat, but necessary?

Google recently rolled out their online spreadsheet application in a limited test. (I signed up the day after the fact and got my “invitation” within hours.) While it’s certainly a neat demonstration of what can be done with Web 2.0 applications nowadays, I have trouble finding its spot within the Google hierarchy.


Bruce Lee: A Warrior’s Journey

I recently watched this documentary, which does a decent job on letting the viewer in on the major aspects of the late martial artist’s life. It starts out near the end of his life, talking about how involved he was with his final movies (Enter the Dragon, Game of Death) and how upbeat Lee was that he was finally making it big. His death comes as a shock to the world, especially the Asian community. Continued redesign

If you visit for everyday for news, like I do, you’ll have noticed their newly-designed website that went live today. My initial impressions were very positive – right away I noticed the new site had paid good attention to detail, in regards to web-standards, semantics, good design and the like.

Facebook frenzy

If you’re in school, chances are you’ve heard of Facebook, the wildly-popular social networking site geared towards college/university students, that has also recently opened its doors to highschools and the workplace as well. Well, apparently big business has heard as well, and recent reports indicate that an offer of $750 million USD has been made for the company. Perhaps even more surprising is the fact that the offer was turned down – and a counter-offer of $2 billion put on the table. Not bad for a site that’s just over two years old and started by a guy who’s only 22.


New computer

I finally “upgraded” my computer, which is to say that I basically bought a new one. Purchased the parts online mainly from Netlink Computers, because they had very good prices, shipping wasn’t bad and because they’re in British Columbia, I didn’t have to pay PST because I’m in Ontario. Continued

Meta-crazy with

So, I’ve been using for a little while now, and I’m very impressed. I don’t know how I lived without this before, when I was stuck in the dark ages of offline bookmarks and always worrying about how I’d synchronize my bookmarks between my computers and wondering how I’d combine them and their many (overlapping) categories. It was an organizational nightmare, but I put up with it because, well, I’m a neat freak and like organizing stuff. Continued

Google Calendar experiences

So if you’ve been following the continuous rollout of more and more Web 2.0 applications, you’ll have known that Google Calendar was officially released back in April. Since I haven’t had time to use it until now, I knew relatively little about it; but after having used it a bit I am impressed. That Google has finally released a calendar application should be no surprise since one of their main competitors, Yahoo!, has had calendar of their own for some time. Continued

Windows Live Mail hiccups

For those of you who opted in to Microsoft’s Windows Live Mail beta, you may have noticed some problems recently. It appears that Microsoft latest version of the its mail service had some bugs in it – the following was shown after the login screen today.


You may have noticed that some of the new features in Windows Live Mail Beta have gone missing! Well, you’re right. We hit a couple of bumps with our most recent release, but we’re working hard to bring back the great new features.

In the meantime, we’ve restored the service to the prior release so that you can keep using Windows Live Mail Beta. For all you Firefox users out there, this means that you’re getting our Classic Hotmail experience again.

Don’t worry – we’ll get your new Windows Live experience working as soon as we can! This is all new stuff we’re doing so we appreciate your patience while we work the kinks out.


Thunderbird 1.5: Not polished, but usable

I’ve been using Firefox for well over a year now as my main browser, and I’ll never go back to IE. For me, Firefox is pretty much the browser to use – it works well with CSS, is fast, and for the most part is bug-free. Every computer I regularly use has Firefox on it.

So, naturally, I decided to give Thunderbird a try. After having spent most of the last year mainly using various webmail services and not really using a POP3 client, I wanted to see how Thunderbird had progressed, and to see if it was really worth it to go back to a POP3 client. (Some wonder if there is even a future for POP3 clients with webmail become so widespread and versatile.) Continued

TES IV: Oblivion

I’ve been playing this game on and off again ever since it came out on March 20th, and I’m very impressed with the scope and depth of its gameplay. Having played and enjoyed its predecessor, Morrowind, I had high expectations for Oblivion, and wasn’t disappointed at all with Oblivion. Like Morrowind, (and most serious single-player RPGs), Oblivion requires a lot of time to get into and enjoy – it’s not really that type of game that lends itself to short 20-minute gaming sessions. Continued

AJAX and Web 2.0

If you’ve been using the Internet for a while, you’ll have noticed a slight change in the way certain online services have provided content, in the past 1-2 years. A sort of mini-revolution is going on, leading to the term “Web 2.0” to describe this new breed of web-based services. A lot of exciting things are promised, and some have been demonstrated and are in semi-wide use. Continued

Google adds Notebook

Google recently added Notebook to their ever-increasing array of web services. It is basically a direct competitor to and other social bookmarking services, and aims to allow you to better keep track of sites/links that are important to you, and access them from any computer while also allowing you to share them with others. Continued

The Google build-up: what’s to be expected?

Most of you probably already know of the numerous products and services offered by Google nowadays. From their ubiquitous search engine on which they founded their business, to their industry-changing GMail, you can’t really use the web without running into one of these Google-branded services. Continued

Blog from Word 2007

Seems as though Word 2007 will provide built-in blogging. This doesn’t come as a huge surprise, since blogging has been a huge success on the Internet, with more companies offering blogging services every day. Now, I know what you’re thinking: How can you expect Microsoft Word to generate sane, readable XHTML markup? Continued


Finally, my website is online. Or maybe back online would be a better term. For the past week or so, I’ve been spending my spare time getting this domain and my website online, setting up this WordPress installation, designing the theme, and transferring old data on to it from my previous host, which was one of my own computers. Finally having decided to go with a paid, hosted solution, I can say this takes a burden off my back, and with hosting and domain registration being fairly cheap nowadays, it doesn’t really put a dent in my student-sized wallet either. So, without further ado, welcome to, the home of Peter Chng!

The current setup is running WordPress on a LAMP (Linux, Apache, MySQL and PHP) setup hosted by Site5. I chose WordPress because firstly, it’s a great blogging platform, and secondly, it’s written in PHP, which I’m familiar with, so tinkering with it should be easier for me. Thus, customization, which I love to do, shouldn’t be all that hard, and I should get a good return on any investment in time I spend in tweaking WordPress. Building this site should be a fun learning experience, though I should probably also learn look more into Linux and Apache, which haven already been taken care of for me, but that’s for another day.

About separation of behaviour and presentation

If any of you have visited SimpleBits (the personal site of Dan Cederholm), you’ll probably be aware of their great SimpleQuiz series of discussion-provoking questions that are mostly about semantics. While I’m not a huge semantic nut (though I think semantics are useful, but at times impractical), one quiz caught my attention over the summer, and I’ve still been thinking about its topics for a while. Continued

Finally got a GMail account

Thanks to a nice fellow SCI ’07 Engineer at Queen’s, I finally have a GMail account. I’m sort of excited, though I guess people who’ve already had one for months aren’t too impressed. But I am. I’ll be testing it out for the next little while, and playing with countless 3rd-party GMail utilities available to gauge my experience. Look back here in a bit if you’re interested on hearing my take. (By then, GMail will most likely be fully-public.)