July 20, 2008
I am pleased to announce the release of WordPress URL Rewrite v1.0. It has been over 1 year since the initial release so I thought it was time to re-visit this plug-in and clean it up a bit. I have made some performance improvements in the URL processing, along with a change that will allow much longer URLs to be processed correctly. I took the time to update the documentation that accompanies it as well, so hopefully it is more complete now and easier to understand. I would urge everyone that is using the older version (v0.1) to update to this new version. There are 32 and 64 bit builds available and both are digitally signed to prevent tampering. As always, if you find any bugs or need any help I would encourage you to visit the Support Forum.
For those of you who aren't familiar with WordPress URL Rewrite, let me give you a quick tour. It is an ISAPI filter for IIS 5 and 6 that takes the default ugly WordPress URLs and turns them into meaningful, easy to remember URLs. It has been tested with all the WordPress v2.x versions and is super-easy to setup. If you are using WordPress on IIS I would encourage you to check out WordPress URL Rewrite today.
July 19, 2008
In the last few weeks I have had the urge to broaden my skill set. I have started reworking my WordPress URL Rewriter (C++) to improve performance, along with memory usage, and it will be ready for release in the next couple days. Also, I recently purchased a Logitech G15 keyboard (which I'll be reviewing at a later date) that has an embedded programmable LCD screen. I have written a plugin that I'll be releasing shortly as well, also written in C++. I feels good to get outside C# once and a while, into the crazy world of unmanaged code. It's like the wild west of coding. You have complete freedom, but you'd better know how to use that freedom, or you'll end up creating a leaky, buggy, creaky old piece of unmaintainable code. Working in C++ again has been great, but I have felt the urge to expand in other, non-coding areas as well. This is where the book review fits in. Since I take the bus to work, I figured there must be a more productive way to spend my 30 minute bus ride than listening to music. With that thought in mind, I jumped onto the Amazon website and grabbed up 3 recommended books.
The first book I decided to read is called Don't Make Me Think: A Common Sense Approach to Web Usability by Steve Krug, and it was a great read. This is the second edition of the book, and was updated and released in 2006 to provide more up-to-date advice than the first edition. The great thing about this book is how technologically independent it is. It doesn't matter if you write web applications in ASP.NET, Ruby on Rails or straight up HTML - this book will apply to you. The only mention of a specific web related technology is the few bits on CSS, but it's pretty light. The book's chapters flow together in a logical order, and all of them contain little gems of advice. I have been doing web development for many years now, so some of the information seemed obvious, but the chapters were full of little bits of wisdom that seemed to fill in the gaps. The one chapter that provided the most useful information for me was the chapter on usability testing. I have never had the opportunity to work for a company who provides a budget for usability testing. One of the little gems from this chapter is this:
After you've worked on a site for even a few weeks, you can't see it freshly anymore. You know too much. The only way to find out if it really works it to test it.
This is so true, and not just for software development. I have always held the belief that you need a second set of eyes to review your work on a regular basis just to let you know if you're still on track. You get so close to the interface design and you're so used to using it that you can't see the glaring errors anymore.
The next great chapter was the one titled "The Home Page is Beyond Your Control". This paragraph pretty much sums it up:
Everybody wants a piece of it. Since it's the one page that almost every visitor sees - and the only page some visitors will see - things that are prominently promoted on the Home page tend to get significantly greater traffic. As a result, the Home page is the waterfront property of the Web: It's the most desirable real estate, and there's a very limited supply. Everybody who has a stake in the site wants to get a promo or link to their section on the Home page, and the turf battles for Home page visibility can be fierce.
Does this sound familiar? Where I work it's a constant struggle to try and reduce the volume of content on our home page, and one that I rarely win. It's nice to know that at least Steve Krug is in my corner.
The "Usability as Common Courtesy" chapter provides a summarized list of "dos" and "don'ts" for web design. I'm not going to re-post the list here, but I will post the biggest "don't" on his list. This is one that frequently bothers me when shopping online.
Don't hide information that I want. [...] Some sites hide pricing information in hopes of getting users so far into the process that they'll feel vested in it by the time they experience the "sticker shock".
I can't count the number of times I have priced out some items on a website, added them to my virtual cart, then proceeded to the checkout. At this point, the most important thing to me is how much they are going to charge me for shipping. Some websites providing a shipping cost estimator at this point, the poorly designed ones don't. Some sites I have been on want to have you create an account, collect all of your personal information including all the payment information, then they show you the shipping cost on the final payment confirmation screen. It's usually at this point that I realize why they waited so long, it's because they're trying to rip me off. All sites should just be up-front about their shipping costs. Most of the time if a site won't tell me how much shipping is going to cost up-front I won't give them any information to find out.
The 11th and final chapter in the book is titled "Accessibility, Cascading Style Sheets, and You". Accessibility is something that I don't have as much experience with as I should (or would like to). One of the first tests he does for accessibility in this chapter is to increase the font size of the current web page. If the page breaks, it fails the test. Very simple first test. He goes on to talk about other testing methods and other ways to provide better accessibility. I have never had the privilege of watching someone use a screen reader to browse the web, but he provides this bit of information to help you imagine how they do it:
Screen-reader users scan with their ears. [...] They listen to the first few words of a link or line of text. If it does not seem relevant they move quickly to the next link, next line, next heading, next paragraph. Where a sighted user might find a keyword by scanning over the entire page, a blind user may not hear that keyword if it is not at the beginning of a link or line of text.
It is so important to have relevant information contained in your links. Instead of something like:
You could try something like:
It's more simple, to the point, and someone with a screen reader will immediately know that it's a link to buy shoes. Everyone wins.
Overall this book was brief (just 185 pages) but very concise. The pages were full of right and wrong design examples, along with example scripts to use when performing usability testing. The book was easy to read and the information was easy to digest. I think it is aimed at more of a novice, or someone unfamiliar with proper web design principles, but the information it shares can benefit everyone. I would gladly recommend this book to someone starting out in web design, or someone interested in setting up their first usability test.
July 13, 2008
My wife is a huge Tetris nut. I'm not saying she enjoys Tetris, I'm saying that she has a hardcore addiction to the game. She started playing it when it was first introduced on the Nintendo GameBoy and her love for the game was re-ignited when we bought our Nintendo DS last year. She plays it every night before bed, always online, and doesn't accept defeat. So, when I heard that someone was making Tetris ice cube trays, I knew they would be the perfect gift. They are made by a company called Mystake in Russia. I contacted them last month to order a pair of trays but was told they aren't available yet. I pleaded my case and Dima agreed to ship me 2 trays. Well, they finally arrived a couple of weeks ago and I've had a chance to try them out. My first attempt at using the trays proved to be a huge disaster. I tried to make Tetris shaped Jello pieces, but the Jello just stuck to the silicone Tetris trays and I couldn't get it out. Does anyone know how to prevent Jello from sticking to silicone? I sure don't. So, on my next attempt I stuck with making ice cubes and they turned out perfectly. My wife was pleasantly surprised to find Tetris shaped ice cubes in her drink one night - the present was a huge success.
On a side note, if you think you've got the necessary Tetris skills to put my wife in her place, please let me know. I've been trying to beat her for years and have never been able to. So, I figured that if I can't beat her I'll just find someone who can. Any takers?
July 13, 2008
ShockDraw is a proof of concept program that I wrote to learn how to read the accelerometer in notebooks. Just start up ShockDraw and tilt your notebook to draw on the screen. Tilt it left and the line on the screen will move left, tilt it back and the line will move up on the screen. It isn't meant to be a full game or anything other than a tech demo. I have provided both an executable and the source code if you are interested in seeing how it works.
If you are interested in the nerdy details, here is pretty much all you need to know. This is the Win32 method and the struct layout that you need to read the Accelerometer data in your notebook. Either this is poorly documented or I'm terrible at Googling, but all the example structs I found were incorrect. Most of the documentation I found didn't have enough properties in the struct, which caused the ShockproofGetAccelerometerData method to overflow the struct and start writing over program memory. A buffer overflow in all it's glory. Some other examples didn't have the correct data types, which also caused some crazy problems. So, for future reference, here is what the struct looks like in C#:
[DllImport("sensor.dll")] public static extern void ShockproofGetAccelerometerData(ref AccData accData);
Presto, now you're rolling. Enjoy!
Update: I have changed the video from being hosted on my site to being hosted on YouTube for anyone that wants to share it.
July 10, 2008
FileSeek v1.5.1 has just been released into the wild. This release is a quick maintenance release aimed at fixing a few minor issues. Here is a quick rundown on the changes:
If you have auto-update notification enabled in FileSeek you will be prompted to download the new version, or you can just head over to the FileSeek page to download it.
July 9, 2008
I can't believe I forgot to write about this, as it was a pretty big event in my wife's life. Last month my wife tried out for the TV show So You Think You Can Dance, the Canadian version. We woke up super early and left our house around 4:30am, arriving in Toronto at about 6:30am. It was a very early start to a very long day. The audition process got underway around 9am and wasn't done until after 9pm. I wasn't allowed inside the actual audition building so my day was full of sitting on the sidewalk waiting with all of the other supporters, and walking around downtown Toronto. My wife had been training and practicing for months and months leading up to the audition and was out pretty much every night dancing at the dance studio and dance clubs. Unfortunately she didn't make the cut, but she had a blast trying out. She says she doesn't want to go through the stress of the auditions again next year, but I'm sure by the time the auditions roll around again she'll get the dance itch. Anyway, here are some pictures of what I saw during the auditions, which is pretty much just waiting in gigantic lines and hanging out all day. Unfortunately no cameras were allowed inside so there aren't any actual auditions shots. Enjoy!
July 2, 2008
Not too long ago I purchased a rather expensive MSDN subscription so that I could expand my testing efforts to operating systems other the basic versions of XP and Vista. At first I was very pleased with being able to get all the versions of Vista, XP, 2003 and 2008 for testing. However, I recently tried to put more of a focus on testing with older versions of Windows as well, like Windows 2000. When I tried to download a Windows 2000 ISO I was surprised that I can't get anything older than Windows XP using my MSDN subscription. It really makes the large amount of money spent on the MSDN license seem a bit less justified. This is where the story takes a bit of a turn for the weird. This is the message displayed as a placeholder where the Windows 2000 ISOs should be:
This product is no longer available from Microsoft in any form, but may be available through third-party resellers or Web sites.
It's available from websites? Which websites? Thanks for helping me out Microsoft. At this point I decided to talk to one of their online support agents and I was shocked by his advice. Here is a snippet of that conversation, with the agent's name removed:
Jon: I see the operating system listed in my subscription, but it says it is no longer available for download. How can I test my software to ensure it works on older platforms?
So, apparently in order to fully use my MSDN subscription I have to either borrow the software from a friend, or use bittorrent to download a cracked version. Great, thanks for helping me write software for your ecosystem Microsoft. You really know how to treat your developers.
June 30, 2008
For the longest time I haven't really done any official monitoring of my hosted server. However, over the last few months I have become more and more dependent on my server being available 100% of the time. A little over a month ago I got a tip from Andrew, a buddy of mine, that he had just started using a service called Pingdom. I signed up for the 30 day trial and was very impressed with the polish and ease of use of the service. For under $10/month you get the basic service, which allows you to monitor up to 5 different services. It is highly configurable, allowing you to specify how long a service has to be down before notifying you, how many times to re-notify you and many other options. Pingdom can notify you by email or SMS text message. Along with the uptime monitoring they also provide response time monitoring as well. This allows you to see how responsive your site is in a given date range. Here is the average daily response time for this site for the month of June:
As you can see, I need to work on the response time. The reporting is great, the service is rock solid, they have a blog where they openly communicate with everyone and they even have an API to get at your data in case you need to do some extra reporting. In my short time using Pingdom I haven't experienced any issues with the service at all, and I can easily recommend it to anyone who is serious about uptime monitoring.
June 26, 2008
This evening I received an invitation for iRacing from one of the fine gentlemen in the rFactor league I run with. When I first heard about iRacing a few years ago I was very excited. I ran in a Grand Prix Legends league for a couple of years, and it was my introduction to online sim racing. iRacing is made by the same people that made Grand Prix Legends, and they've been working on it for around the last 4-5 years (maybe more). iRacing is so radically different from every other racing sim, I don't even know how to properly describe it. Let me put it this way: if you're not a hardcore sim racer then stay away from this. It has a monthly subscription fee starting at $13, and it comes with very few cars and tracks to choose from. When you first purchase the game you start with a rookie license, and only 2 cars to choose from.
When I first found this out a few weeks ago I was appalled that you don't get more for your money. But after spending the last 3 solid hours with this game I can fully understand what they're doing here. This isn't Project Gotham Racing. This isn't Forza. This is a tight community where you have to earn your right to race. This works just like any form of real racing. If you constantly smash up your car you're never going graduate to the next license level, and you won't get the faster cars. You can purchase more cars and tracks, but that's not the point of this game. This really is a simulation. With only 2 cars and a handful of tracks to start with it gives you the chance to figure out how each car works on each track, without being overwhelmed with dozens of cars to learn. Speaking of cars, this is my baby in iRacing: the #32 Pontiac Solstice.
So far I have only participated in 1 full race event, but it was intense. Every time you drive off the track, or make contact with another car you get points taken off your license. You need these points to progress through the different licenses, so you need to drive as cleanly as possible. My race took place at the Lime Rock Park circuit. It's a decent beginners track with a short lap time of just over a minute and not very many corners. I managed to qualify 2nd and started on the front row. When the lights turned green I got the jump on the field and was in the lead by the first turn. I managed to hold the lead until I spun a couple of laps in. Oops, a spin cost me some points... time to ease off and finish in one piece. Once the dust had settled and the race was over I finished in 3rd place. I spun a few times and had a few excursions onto the grass, but I managed to earn points towards my license, so it was a net gain. I learned a lot from this first race, and I can't wait to play again tomorrow night.
June 24, 2008
I'm very happy to announce the release of FileSeek v1.5 today. This release includes some important fixes, and a couple of new features. Most notably, the exclusion pattern is now applied to folders as well as files. For the complete list of changes I invite you to check out the change log.
I encourage everyone who is running an older version to update today. If you have auto-update checking enabled in FileSeek you will be prompted to update next time you use it.