News for December 2009

メリークリスマス!(^o^)/25 December 2009
Many thanks to Andreas for the Pro Git book! I'm going to devour it during the holiday break.

I hope everyone's having a fine Christmas with or without Santa Claus ;-) I've got a nice present for you all in store for the new year (*fingers crossed*)!

In other news...

I'm switching to an iMac early January. Damn you Apple for forcing PC people to buy a humongous 27 inch screen to have a decent graphics card. Ah well. I guess I'll get used to it.

More seriously, about a month ago I reconnected the Macbook to a LCD with an external keyboard and mouse.. I tried to switch last year but using the Macbook as a desktop wasn't an option, the Intel graphics chipset is really weak, even for office apps.

It's interesting how my mind switched from PC-must-have-killer-graphics-card mentality to an iMac buyer. First I realized I don't need a portable, I never take it around, and I could sell the Macbook and buy an entry level iMac without spending too much. This would leave me with a PC for gaming and using OSX for development. Granted, there isn't a huge difference between the entry level iMac and a Macbook, but compared to my early 2008 Macbook, the late 2009 iMac is a much more performant machine, and the displays are miles apart.

Switching between two different computers isn't practical. And why should I even need to do this? Why couldn't I use just one? I was mightily impressed with Windows emulation both within OSX and as a native boot option (also known as BootCamp).

From one thought to another, call it enlightenment or something... I came to realize I don't need a fancy 400€ graphics card if playing games is just a fraction of the time I spend on the computer. It was still important for me to be able to run some upcoming games, to have a little gaming session now and then. I started looking at the top level iMacs, based on a decent ATI card.

The late 2009 27 inch iMacs have a Core i5 processor, which is what I was going for with my PC overhaul. That is very sweet indeed. But what about the graphics card? ATI Radeon HD 4670? No thank you, that is even weaker than my ageing 8800 GTS 640mb. So the only option left was the humongous 27 inch iMac with the Radeon HD 4850. Apple doesn't even give you the entry level PC version here, they cut down the 1GB to 512mb. If you want to enable AA (Anti Aliasing) at the 27 inch native resolution, your games will crawl. There is not enough memory (forgive me if I can't find the tomshardware benchmark right now, but that's my source). Then again, with such a card clearly it's not a good idea to run games at the native resolution.

Recently I had a "LAN party" as we call it, where we get together, mostly family (cousins, and step brother) and we have a great time together for... a few days ;) I was very surprised to see my old Nvidia GTS 8800 640mb was able to handle recent games such as Tomb Raider Underworld, Call of Duty Modern Warfare 2, Demigod, Burnout Paradise and even Colin McRae: DIRT 2. Most games could average 30 fps with all details enabled, at 1680x1050. Demigod was a slow at times (~15fps in skirmishes), but playable as a RTS. DIRT 2 is clearly a port from the XBox and I was really impressed with the level of polish, it ran with a very smooth framerate on the GTS 8800 (ps: all these games ran on XP in Direct X 9 mode).

The ATI HD 4850 peforms better than my GTS 8800 according to benchmarks so I concluded, while the top Core i5 iMac has an outdated graphics card from a PC gamer point of view, the ATI card should be just fine and I am guessing that by lowering a few details it should be able to handle the upcoming Diablo 3, or Guildwars 2 and so on.

The last point that made me confident about the switch is that Apple hardware seems to have a healthy resell value. In one year I should be able to sell the Core i5 / Radeon 4850 iMac at half the original price, and upgrade to the latest revision if I feel the graphics card is too far behind for gaming.

Part of my decision was also inspired by a colleague. I was talking about my reservations about the iMac. Then what he said I thought was really funny, he said "You think it's too pricey, and you'll look at the benchmarks and you'll keep coming back to it and thinking about it, and then in 10 months time you'll buy one anyway. So just buy it.". There's something really refreshing in what he said, it made me laugh. Now that's zen!

I think I won't be disappointed. The humongous screen size may turn out to be a good productivity improvement, the Bash/Terminal is going to be so much nicer to work with Git. And if we put the graphics card aside, the Core i5 is a very sweet processor that should last me easily a couple years.

Just buy it! :D

First project on Github18 December 2009
Hooray! My first public code repository is on Github! Juicer is a tool I have built a couple weeks ago, to manage front-end code as reusable components. This tool allows organizing your javascripts and stylesheets in a logical structure, and build concatenated files with all dependencies required on the web page. Have a look at it if you are into web development!

I have built Juicer so that I can effectively reuse all the front end components such as progress bars or ajax sortable tables, on multiple web sites. The front end components will now be a separate repository.

With Juicer the next release of the website will also use only one javascript and one stylesheet on the Study and Flashcard Review pages. Users accessing the site from an iPhone or other device with slower connections/greater latency should see a difference!

Juicer is quite a small project, the gist of it really is a single php file. The rest is a demo that also includes a simple example for managing "revisions" of your javascript and stylesheets and gzip the output files.

The small size of this project for me is ideal, as it is a stepping stone towards releasing bigger repositories in the future.

I hope to get a few contributions or patches and learn more about Git in the process in the next few months.

Soon after the next web site release (which will make use of Juicer), I plan to start a new repository on Github with all the website's front-end components: progress bars, buttons, ajax sortable data tables, and so on.

Starting to git' it!15 December 2009
Amazingly enough this website has never been under version control. Nevermind that I have in the past worked as a team of programmers, for two years using SVN (or was it CVS?) every single day from the command line editing hundred of C files under VIM... of all editors.

This same person has been developing this site for about 3 years now (?) without version control. Personally I think it's rather funny.

In layman's terms this is what would have been happening with any previous release were it be under version control:

There would always have been a stable release. Available, always, anytime. If there is a bug to squash or a small feature to add, I'd have been able to just work on the stable release, and upload that promptly.

Instead, nearly everytime soon after a release, including that last one, I started doing some refactoring and changing a lot of code which make it very difficult to upload changes to the server.. because a lot of code has become unstable.

Well; the good news is I'm starting to "get" Git. I like it. Still have to find how to configure proper merge and diff tools on Windows. But I was able to push and pull repositories and merge changes, make new branches. The next release of the website will be under Git. That means from there on, I will keep always a "master" branch of the site AS IT WAS on the day of release. If I refactor anything, any feature, goes to a new branch. The "master" is untouched.

I'm really happy to have looked into Git as well because it gave me ideas about sharing code and opening code for contribution and patches etc just seems much more feasible. With that said my first public project on Github will be the front-end code build tool which I mentioned in the last site news. It is almost ready.

The next project on Github will be the whole front-end code for RevTK. A good part of the code is written as a small framework of sorts. For example the buttons, the progress bars, these sort of things are written as re-usable components. This package will take more time to put together, but starts to open more possiblities for contributions. For example anybody can contribute fixes to a javascript widget if it doesn't work in some obscure browser.. or on their iPhone, etc.

These two projects will help me learn to be confident enough with Git to look at the next possibilities. But... one step at a time.

If you are a developer and I have roused your interest in Git, here's a few links to save you a lot of pain, trust me! =)

  • Print out this illustration by Oliver Steele (from this blog post). The illustration is incredibly helpful to understand Git tutorials. Ignore the rest of the blog post for now, it is intermediate/advanced Git.
  • Run through this Visual Git Tutorial by Ralf Ebert. Sadly there is no part two yet. This is the most concise and to the point article I have seen so far. This article runs you through all the basic Git commands for a local repository.
  • You may want to print this Git cheat sheet.
  • A big draw of Git is of course the social site Github. At this point you may want to create your account on Github and follow their instructions.
  • From here on things get a little bit hairy unfortunately. You'll have to read a bunch of tutorials and blog posts, experiment.. read ProGit,, GitCasts, GitReady... this isn't very difficult, but takes time. The really hairy part is to learn to configure Git locally and setup some decent merge and diff tools, especially on Windows.
To Git's credit... they have included some decent GUI tools. I don't use them much yet, but typing "gitk" once in a while is very handy as it displays a visual graph of the branches in the current project.

There is a very nice Git GUI on Mac OS called GitX, and the good news is there is an Eclipse plugin in "incubation" phase at, called JGit /EGit.

If you're a developer I hope this can help you "git" it too! :) Christmas count down7 December 2009
JapanesePod101 is offering a 25% discount from Dec 13th to Dec 25th off anything in their inventory. They are also introducing a Buy one, Give one special offer between December 4th-December 13th, essentially giving you a second "1-Year Premium Subscription" package free, for a language of your choice (for example ChineseClass101, ItalianPod101, etc).

Read on for more details if you are interested.

This is the JapanesePod101 announcement:

Can you believe it is December already? We here at have been pretty busy gearing up for the Holiday Season and have come up with some really great offers for Japanese learners.

Buy one, Give one Offer (December 4th-December 13th)

Buy a 1-Year Premium Subscription to and get a 2nd 1-Year Premium Subscription to any language for FREE. You can purchase a year of for yourself, and give a year of great language learning access to a friend. Or, because you deserve it, you could give yourself as well...that is a $180 savings! You can also purchase the Ultimate Getting Started Data DVD for an additional $19.99 (usually $60) and have it delivered by Christmas Day. Follow this link.

Reverse Christmas Countdown (December 13th-December 25th)

Starting December 13th, we are offering a 25% discount off ANYTHING in our inventory: subscriptions, Survival Phrases lessons, iPhone/iPod Touch Applications and much more! You must act fast because our discount will be going down each day until Christmas, so for the biggest savings - buy early! Code goes live December 13th - Use discount code XMAS2009.

Coding coding coding6 December 2009
The last couple of weeks I have been busy writing a tool to optimize page load times and organize all the client-side components of the website as a framework. It is very similar to Sprockets, but is written in php.

Besides writing this tool, I am also moving all the javascript code to YUI 3. Most of the "widget" type code such as the ajax tables, or the progress bars is done. Now I need to adapt the pages themselves.

This front end code rewrite is going to break once again the Greasemonkey scripts (some or all, I can't say), so I have decided to implement the Custom Keywords functionality as part of the next release. The idea is to implement "natively" the one script that has become critical to many users who need to review with non-english keywords, and from there on to avoid needless frustration with future updates.

I am shooting for an update before the end of December.

A big thank you to whomever bought the Regular Expressions Cookbook from my UK Amazon wish list!

I have been trying to get my head around Git and GitHub because I would like to share code, but without much luck yet... I was able to upload a project, but couldn't find how to "merge" changes made via GitHub. :( I continue to finetune the project anyway while it is being integrated and having a "real world" test with Reviewing the Kanji.

My main issue right now with Git is that am comfortable with the SVN support in Eclispe at work.. and I can't see myself now using a command line tool to merge changes between files. Maybe I am missing something? On the other hand I have looked at Google Code but I have no idea where even to start with it. I haven't used the SVN command line in 8 years or more.. I'm just using the GUI In Eclipse X_X

If you have recommendations for simple ways to share code, or you know a great "Git/SVN for dummies tutorial" please shoot an email :)