ToDo: TeuxDeux
Alright, so it has a stupid name. TeuxDeux.com should not (and for me will not) be pronounced ToDo. Anyone who has spent anytime around the French language knows that deux (which is the number 2) is not pronounced do. It is pronounced something more along the lines of d-ugh, which I am guessing that it is not what the creator of the site was going for. Anyway, misname aside I will give a brief review of the site.
The site does exactly what you would think it would do, it creates a list and lets you cross stuff off. Having said that, it is missing many things that a fully functional ToDo app needs.
What it does
- Lists item per day or 'someday'
- If an item has not been completed by a given day, it moves it to the next day
- Provides you with a simple and attractive layout that makes it easy to manage items
- Easily lets you drag items from one day to the next
What it lacks
- Scrolling through days of days is tedious adding a '>>' (jump week) to the '>' jump day would be wonderful
- Adding notes to items would be most convenient
- Multiple lists would also be great
- A mobile solution (the FAQ says one is coming)
- Setting a specified time to an item is a must in my book
- As well it needs notifications (email/pop-up)
Verdict
I love the minimalistic feel, and there is supposed to be many more features coming, but for the time being it doesn't fulfill all the required needs of a good ToDo app.
BGI: Browser Tips – Cleaning Up Firefox
Do you find that you have the same browser windows open all the time? (All of your Google stuff? Hint! Hint!) Well I certainly do. I have my GMail, Google Reader, and Calendar open all the time, I never close them. Anyway, I found this great hint on how to integrate them more cleanly into the browser.
Original link: Set Up Space-Saving, Permanent Gmail and Reader Tabs in Firefox
First you need to download the following firefox plugins:
- Permatabs Mod: https://addons.mozilla.org/en-US/firefox/addon/7816
- FaviconizeTab: https://addons.mozilla.org/en-US/firefox/addon/3780
- Better GReader: https://addons.mozilla.org/en-US/firefox/addon/6424
- Better GMail 2: https://addons.mozilla.org/en-US/firefox/addon/6076
Install all 4 of those, and restart Firefox.
Now restart and open the tabs pages that you want to integrate, I would suggest:
Now right click on the tab and select Permatabs > Permanent tab. Do that with each tab.
PermaTab
Next right click on the tab and select FaviconizeTab. Again do this with every tab. This gives you a very small icon in the top left hand corner where you can always go to get your important tabs.
FaviconizeTab
Now to optimize a little more (unread counts).
Start with GMail.
- Open Tools > Add Ons
- Then select the preferences for Better Gmail 2.
- You will want to select: Show Unread Message Count on Favicon (Bogs)
GMail Unread Count Setting
Now we will do the same with Google Reader
- Open Tools > Add Ons
- Then select the preferences for Better GReader 0.8.
- You will want to select: Show Unread Message Count in Favicon
GReader Unread Count Settings
If everything has gone according to plan your Firefox should now have permanent tabs, that take up no room. Something like this:
Clutter Free Firefox
BGI: Picking A Browser
The largest market share of browser's hitting this website is Internet Explorer! 38% of all visits to this website are with Internet Explorer, Firefox is next with 35%, then Safari at 12%. I hate the fact that Internet Explorer is still winning! I crave the day when I check these stats and see something, ANYTHING other than IE. Having said that I should point out that I am actually doing pretty well. In the wild and not using this website as a reference, IE holds about a 66% market share. This number needs to change, especially in regards to IE 6.
Internet Explorer 6 was released on August 27, 2001. That is roughly 8 years ago. It was not a particularly great browser when it was released but due to Microsoft Bundling it with Windows it eventually won out against Netscape. In its peak in 2002-03 it had market share in the high 80s. Now it dwindles for good reason in the less than 20% range. Yet in the corporate world, it is still used extensively. In fact I still have IE6 (along with 3 other browsers) installed on my computer at work.
At this point I cannot fathom how people still use IE6. It is a hideous browser, to compare it to an Automobile that was released in the same year. It is a Pontiac Aztec:
Pontiac Aztec
Now an alternative would be Firefox 3.0. It is a good deal faster, with much richer features. It is a safer browser and better yet it is free! Would you rather drive a 2001 Pontiac Aztec or would you rather drive this (keeping in mind that it is free!):

BMW M3
Well 66% of all people are still driving the Aztec. Now since I have slammed IE enough I should go into greater detail as to why it sucks, and give some alternatives.
Firefox 3.0
This looks to be the current favourite to unseat Internet Explorer as the browser champion. In its current state, it is hard to question Firefox's supremacy in the browser race. Firefox is based off the old open source code base of the now defunct Netscape project.
Firefox has a lot going for it. It is a very fast browser, especially in comparison to IE. It should be getting even faster after the upcoming release of FireFox 3.5, which should come with the TraceMonkey JavaScript engine enabled. Yet if you are looking for pure speed, Firefox is not the king. Where FireFox wins hands down, is its extensibility.
Firefox has a vast theme and plugin catalog (created by everyday users) to be able to make the browser do whatever you want it to do. The Firefox themes allow you to change the appearance of the browser to suit your personal tastes.
Beyond the appearance, the plugins capability of Firefox, allows you to add functionality to suit your needs. Email notifier? Yep Gmail notifier handles that. Ad Block Plus blocks ads. GMarks integrates with you Google Bookmarks. The list is never ending, there is a Better Gmail plugin, that ads features to Gmail. Plugins for improving google reader, links to del-i-cious, digg, you name it. You can make firefox do pretty much anything you want, and that is its strength.
Most importantlyFirefox is standards based. This means that it renders web pages to look the way a published set of standards dictate they should look. Differences from the published standards are treated as bugs by the Firefox developers.
Also important to note is that Firefox is available on all computing platforms.
Google Chrome
Google Chrome is in it's infancy. It was only released in beta form in September of 2008. It has a singular goal in optimizing browser performance to bring web-apps to the desktop. Google has a great deal invested in web applications (Google Docs, GMail, etc...) and to make them truly compete with desktop applications they felt they needed a faster browser; which is exactly what Google Chrome is.
Chrome has far and away the fastest Javascript engine on the market (name V8). The javascript processing time of a browser is crucial to the performance of the newer web applications. Beyond that there are many other advancements. The name chrome comes from the fact that that is exactly what it is lacking, the chrome. It tries to give as much content as possible content of websites as opposed to the browser itself. As well each tab in the browser operates in a seperate process. This means that if a bit of bad javascript crashes the browser, in Chrome it will only crash the single tab, rather than all existing tabs.
Chrome's biggest short comings are the strengths of Firefox. It lacks customizability, although a plugin in frastructure is coming. As well for the time being it is only available on Windoze although OS X and linux versions are in the pipeline.
Regardless of the current small market share of Chrome, I think that it actually has the best shot of unseeding IE. Google is pushing this browser very hard, they have taken it out of the beta state remarkably quickly for a Google product. They are marketing it a huge amount; they are even rumoured to be taking out television ads. Beyond the advertising they are said to be negotiating with computer manufacturers to OEM Chrome, which would be a major coup against IE.
Chrome is my browser of choice on Windoze.
Safari
Safari is Apple's answer to the browser. It started out as being OS X only, but has now been extended to the windows platform. Like Firefox and Chrome it is standards based, as well it is a very fast browser, yet it does not compete with Chrome. Yet it is faster than Firefox on OS X, and very comparable on Windoze.
Where Safari lacks, is it does not seem to be a polished application on the Windoze platform, and it lacks the extensibility of Firefox. Safari is very close to being my browser of choice on OS X, but with the upcoming version of Firefox, I think I will continue with it.
Internet Explorer
Saving the worst piece of shit for last. This browser is everything that is wrong with the internet, and it is leading the downfall of Microsoft. The only thing that is has going for it is the update infrastructure being tied in with Windows Update so that it can be pushed to the client in a corporate setting. Other than that! It's a nightmare.
Is it standards based? Nope. Internet Explorer says FUCK YOU to standards. You create a website according to the web standards and it will work in Firefox, Chrome, Safari, Opera, ... pretty much every browser EXCEPT IE. You need to put in all kinds of conditional work to make the website look good in Internet Explorer.
Is it fast? Nope, one of the slowest browsers on the market.
Is it extensible? There is a growing amount of plugins, but it is extremely limited in comparison to Firefox.
Available on all platforms? Nope it is windoze only. A few years back there was an attempt to create a Mac version, but that one was even more fucked up then the windows version.
So with all the shittyness spewing out of IE why does it have the most market share? The easy answer: People are too stupid/lazy to download a far superior browser. I have high hopes that when Chrome starts being bundled on OEM machines (hopefully Dell and HP) then we may see IE die the death it so richly deserves.
In short, when picking a browser pick ANYTHING except Internet Explorer!
Google Bookmarks
I am going to be writing a little bit about things that I have found that make my life easier. This is one google product that I have been using and loving , yet it doesn't seem to get any publicity; it's Google Bookmarks.
I had been looking for a while for a way to handle my bookmarks. There are options out there. Apple's MobileMe will sync your bookmarks to the cloud, but it didn't seem to have a solution with Windows (and thus my work machines), there are tons of linking services; Digg, Delicious, etc... But those were all social bookmarking. I wanted something that was in the cloud, that was private, easily organizable. I thought to myself: Why the hell does Google not do bookmarks?!?!? Which led me to wonder if they did.
I did a quick search for 'Google Bookmarks' and sure enough there it is! It lacks the spit and polish of most of their products, but it is quickly working its way up my favorite products list. You see I was sick and tired of emailing myself links that I found at work, or at other's computers. It would be something like, see an interesting link off a blog, follow a few more pages, bam! This is a great tutorial! Now I need to get that tutorial to somewhere I will remember it, and that I could easily find it again. That was done through tags in Google Reader or through emailing it to myself, both of whice were crappy solutions.
Now I just use Google's booksmarks service. The key is placing a link (this one: Bookmark This Page - you can just drag it to your bar), in your bookmark bar in your browser. When you click it, it will open a dialog box with the information of the current page in it. You can add coma seperated tags, and add a description. Clicking OK adds it to your bookmarks, which is accessible at: http://www.google.com/bookmarks/. This gives you a similar searching and browsing structure as GMail.
I absolutely love that I have all my bookmarks with me at all times. It is also very very easy to add a new link to the system. It really is a simple yet elegant solution to my problem. Are there are any other solutions that you like? This may not be typical Google clean, but it certainly the best solution that I have found.
What Not ‘TODO’
So it isn't very often that I blog about programming. In fact I don't know that I have ever done it before, which is kind of strange since I spend a huge amount of my life doing it, but this is a moment that I feel the need.
I just lost a ton of time due to some dead, unused, and generally crappy code. I was working with a class that had a private reset method (and it was called), that should set off alarm bells, why would a class need to reset itself. As well this manager class owned a single instance of a 'handler' class. If it has a single instance of a handler, why does it need a manager. What made this worse was that handlers were handed out and returned from a pool of handlers. Ughhh. It was terrible.
Ok so I spend a few days untangling things so I can make some changes. I was able to get rid of the reset functions, the class was never reset, new instances were created. I was able to take out the handler pooling, a new handler was created not taken from a pool.
So it was painful to fix, but the part that really set me off while working on fixing this stuff was when I removed the pooling I got to a comment that was something along the lines of:
//TODO: implement pooling
I wasted tons of time just to find out that there was no pooling, and that there was a new instance created everytime, and that the idea of reseting a handler wasn't needed (even though it was done). This brings me to my next point: NEVER LEAVE TODOs IN YOUR CODE! I know you have done it, I have done it, but it shouldn't be done. In the code is not a place for a TODO, the code should appear to do exactly what it does, nothing more and nothing less. Leaving a TODO like: //finish the implementation of this class because I am a lazy and useless programmer does nothing to help anyone, it is just a time waster for a future programmer.
If a bit of code will someday be used to cure cancer, don't put in a function called cureCancer() that does nothing and has a //TODO: cure cancer comment. That just makes it look like it does something it doesn't. If it needs to cure cure cancer in the future, document that in the backlog, provide notes, provide sample code. But! Whatever you do, do not make the code look like it will cure cancer.
Almost Volunteer Work
I agreed to make a website for the ski team. There was some stuff that I wanted to do with it. The first was to use some AJAX to load data. I also wanted to use a relatively clean googlesque menu system. I told them it wouldn't cost them much. In and around the $1000 range.
Well the site is online now: www.clubmsm.org
I just put together my invoice and I included my hourly rate for this job. Yep $3.50/hour. Sometimes it feels good to help out a not-for-profit team. The hope is that at some point its appreciated.
Tyler vs. JavaScript/PHP/AJAX/Charsets/Form Submissions: Hard Fought Victory!
Web development is not refined. The whole industry seems to be quite kludgy, it seems like the whole thing was designed by a few guys sitting in their parents basement getting high on cough syrup. The idea of object oriented design seems to be lost on most projects, short of some of the newer .NET development, but even then, the quality of work I have seen is somewhat lacking.
That little rant has absolutely nothing to do with my current victory, it is just to outline the fact, that what has been done is not the right way to do things, what works in Firefox -a real browser- may not work in that piece of shit IE, and what works with old style form submission may not work with new fangled AJAXing.
Here is the battle that I was dealing with, and -I hope- a clear solution which I could not find anywhere on the web. I'm currently writing a multi-lingual website for a ski team I coach. By multilingual I mean English/French. For most of the admin console I have been using old style form submission, I mean why would I waste the fancy stuff on the backend. Yet I have a -quite kickass- photo manager that I have written and reused a few times now, that uses AJAX form submissions. This shouldn't be any different right? Wrong!
The problem I was having is that some of my French characters (ie. ç, é, è, etc...) were getting muddled on the way to the database. As it turns out they were getting muddled in the transfer between the Javascript AJAX post and the php server side script. It appeared to me that I was doing everything right. I had my charset that I specified in the AJAX post correct:
ajaxRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=ISO-8859-1");
Or perhaps I didn't so I switched it to UTF-8. That seemed to make no difference, a quick browse through the shitty information on the interweb led me to this:
Your are in luck! Transforming text in ISO 8859-1 to Unicode is the identity transform (as in no change at all), as the code points they share have the same meaning in both encodings. For all other encodings (save US ASCII, in part a subset ISO 8859-1), you need to resort to laborious replace() hacks.
Unfortunately that is a load of crap. For all the ASCII points they are the same, and I would imagine for many of the upper range characters that they share they are the same, but there is a range that is not shared. The latin characters that can be expressed as extended ASCII characters. For instance:

As you can see the character encodings for 'é' are not the same between the two. This is where the challenge got interesting. Some more research let me determine that the Javascript function encodeURI() would always produce UTF-8 code, and I was specifying the charset to be UTF-8. Perhaps the problem was decoding the URL on the other end. I tried the PHP function urldecode() but it produced the same two character output. é transformed to é
It was at this point that I realized that there was an issue in conversion from UTF-8 to ISO-8859-1. Why was my PHP script not able to decode it? The short answer is that PHP does not support UNICODE, and you need to convert incoming parameters. Easily there are two easy ways to do this: utf8_decode or iconv, iconv appears to be only part of PHP5. I used utf8_decode() and it worked as expected. So the transformations appear as such: ISO-8859-1 charset page > UTF-8 encoding to go over the wire > ISO-8859-1 to be usable in PHP.
Did I mention that I find an awful lot of this I18N business very frustrating? Although I suppose that the multilingual nature of the world I have the choice of getting better at it or giving up being a programmer.
This Developer For One Welcomes Our New Internation Business Machine Overlords…
Alright perhaps not overlords... It has been suspected for sometime that Cognos (my employer) would be acquired by a larger company. The even bets were on IBM, Microsoft, and Oracle. To be honest I didn't really have an opinion one way or another as to whether this would be a good thing or a bad thing. For the record I still don't.
I did feel that IBM was going to be the best fit for Cognos at least technologically. Microsoft is not an Java shop, and with their current position they never will be. With the current trend at Cognos that just didn't seem like it would be good fit. From that perspective I welcome IBM. As with all of this M&A stuff there are bound to be some pains, but I am quite confident that I will come out the other end free and clear. And that is what really counts isn't it?
As for the prospect -in about 3-4 months once the deal closes- of being a Big Blue employee. It seems good. A quick perusal of the IBM Canada benefits. It looks like the working hours are more flexible. I do like the idea of working 4 days a week -and spending 3 days a week skiing during the winter. As well in my travels I found a blog in regards to some guys work experience at IBM. It sounded positive for the most part with the exception of him getting low-balled salary wise on entry.
Step No. 3
Learn from my own mistake... Do not accept a job with IBM unless your starting salary is appropriate for your education and skill set. Check with your professional organizations to make sure the IBM salary offer is what the industry pays. IBM benefits are no longer the industry's best, but simply industry standard, and salary is the only negotiation you control at the beginning.
All in all it sounds like a pretty good place to work. Perhaps not Google good, but what can you do this side of working for Google. As for what this means for Cognos as a company? Well I'm not a business guy but I do think that it will allow Cognos to be more competitive with larger organizations, but that isn't my forte and if you really want evaluation on the IBM purchase there are hundreds of articles to the effect.
Where Google Falls Down…
Google rules. They release a seemingly endless array of cool products and a seemingly constant pace. Everytime they turn around they are releasing some product that I use almost daily. Yet there is one product that I use daily that isn't perfect, or even particularly good: Google Desktop.
The best feature of Google Desktop is the ability to hit <ctrl> twice and have a search window pop up. The list of flaws is endless. My first issue with the product is that if you quickly type in your term (ie. 'mysql_connect') and hit enter, its first inclination is to do a web search. This is a huge flaw in my mind; I downloaded Google Desktop to search my desktop not to have a faster interface to the web -quite frankly the Ctrl-K in Firefox to put focus in the Google search bar is fast enough.
The second issue that I have is the workflow to search for something specific in some specific location. My standard workflow goes something like:
- Hit <Ctrl> twice
- Type in search term
- Select 'Search Desktop'
- Get results page
- Select 'Advanced Search'
- Click 'files' radio box
- Select 'Enter other type...'
- Type in file type (ie xml or php)
- Select in location browse...
- Browse to the location I want to search
- Hit search.
Its at this point that I may have some results. There are huge flaws in this behavior. Why are they advanced options not visible on the page, they are not that advanced. Why do I have to select 'Enter other type...' to tell it what type I want, I should just be able to enter the file type I want, as well it would be nice if the file type I entered would get added to the drop down list. Now the location I want to search is saved to the list, but I don't like having to use dropdowns and it only saves 3 items. I would like it to be able to type and have it auto complete.
Now is there a better option? Yes there is! Copernic Desktop Search Engine has a much nicer UI that is greatly easier to navigate. Why do I not use it? Because my version has a bug where if I enter things in quotes -ie. "require_once('fileName" it will find nothing- so it is unusable to me.
What does Google need to do to fix the desktop search? Well for starters improve the search results window to make easier use of advanced options. After that is complete then it can start looking for other intelligent googlesque usages. Such as a right-click in Windows Explorer that had a 'Search With Google...' option. This would allow you to quickly search a folder that you are in for a term. What a great feature, windows has it, but it is terribly slow an ineffective. Oh well perhaps the support is better in Windows Vista and windows will win the desktop search battle because Google is throwing it away.
Stream of Conscious Emails
I am guilty. Very very guilty. Do you work with people like me who do this? I am starting to think that it is very common in the software industry.
To explain the torture that I am providing people, the situation plays like this: You receive a question, you think quickly and realize that you have a clear and concise answer to the question. It may not be the answer you want to provide, you may be saying something to the likes of 'this will be very difficult and time consuming', as you continue to write and explain why this will be difficult you start to realize that maybe just maybe there is a really smart solution to the problem. Before you know it you are starting to explain your solution and maybe just maybe things won't be as painful as you originally estimated. Now you are rethinking and saying things along the lines of 'if we can find an elegant way to solve this one issue...' but you start to realize that there may not be a good solution to that problem. Now you are wondering is my design flawed? and this starts to find its way into the email by way of perhaps a quick little refactoring exercise in this location. You realize that what you have said is starting to make less and less sense, and that you yourself are confused and you are worried about just how confused your reader is. You finish off the email by saying that you are pretty confident that you can complete the work in a week. This date means nothing and you just picked it because it sounded kind of safe. You end the email by saying that you are concerned that you have confused the issue further and to please phone you tomorrow if there are questions. There most certainly will be.
So. Do you have any questions? I do. Why do I write emails at the very end of the day?