Archive for July 2007

Sapkowski in English is out !


For all my fantasy-loving friends who consider reading in Czech or Polish too inconvenient: the first book of the grand master Andrzej Sapkowski in English is out. It is book of short stories about Geralt, the Hexer (or Witcher if you want), who is the main character of the 5-book saga with the same name.

You can get it on Amazon.

Web based task manager with offline mode – finally !


Yes, such nice tool really exists and it’s name is Remember the Milk.

At first sight, RTM is not extremely visually appealing, but very nice and very usable Ajax application. After some time using it, you may better appreciate the “less is more” design. The offline access is thanks to Google Gears magic. Just flip the small green arrow (which will download your data to local cache) and voila – you can go offline, keep editing or adding tasks – your changes will be remembered. Later on, after going online the changes will be synced back.

The RTM has another killer feature – it integrates very well with Google calendar. Your tasks with due dates (which all meaningful task should have) will appear in you calendar without needing to go to RTM site. You can even edit them from there. For details, see the help.

RTM has pretty much everything what most people may need: projects, lists, tagging, locations (with map integration), contacts – with task delegation, and of course, API. Give it a look …

Most important event of the year


I have been pretty quiet during last month. Few reasons why, none of them business related. The summer is not the season where people in our industry are incredibly busy – that’s what winter is for … and end of March, government fiscal year end ;-). We had family visit – my two nephews were staying with us for few weeks. So instead of blogging, I was spending evenings with them and weekends as a tour guide around Ottawa’s attractions. I have even – finally, after 9 years in this country – overcome my dislike for really long car trips and visited Niagara Falls.

The waterfall and nature was amazing. The stuff built around it by tourist industry was not. Even the drive would not be so bad (only too long) – unfortunately somebody did place Toronto between Kingston and Niagara 😦 … with all the consequences like never ending traffic jams and way above average number of crazy drivers. The crazy means crazy even compared to Montreal.

After the nephews departure at the end of the last week, the most important event of the year 2007 happened: the Book 7 alias Harry Potter and the Deathly Hallows arrived. We finally know where was Snape’s true loyalty and whether Harry made it or JKR ignored plea from Stephen King and other writers and killed him. On July 20th in the evening, I was there, in my home Chapters with my wife and daughter and hundreds of others, waiting for the midnight. It was amazing. Not the marketing hype, but the anticipation and the atmosphere (my compliments to the guy dressed as Lucius Malfoy, he was bang on).

There is something strangely satisfying to see people stand in line to buy a book. Other that HP series, I have never seen it happen on this continent. Regardless whether you like the story or not, what JKR achieved (in addition to make some pretty nice wad of cash for herself and others) is bringing people back to books and to reading. Not only kids. Reading books is essential – just watch Idiocracy to see where the TV will lead you 😉

So hour after midnight I was home with the Book 7 and started to read. I have finished shortly before midnight same day – with short break for sleep. What a weekend ! The book seven did certainly not disappoint. I will not go to details – not even now when Connie finished it and hopefully Shane did as well, some of my friends may still be reading. Gabo – wikipedia has full plot outlined, so unless you want to get a spoiler, do not go here

In some sense, the Harry Pottter saga was like a greatly written piece of software. JKR created illusionary world which was very rich and very consistent. Even with allowing magic, there were rules and things worked within the system. In software, you must pay attention to details (otherwise it will not work) and whenever you are writing larger system, your design should be solid otherwise your own creations may get in your way. In the books 1 to 7, I have not found any major contradictions or ugly hacks. Well thought-over plot, nicely designed story development, perfectly implemented – I mean written. Hats off. You can seldom see this gift in fantasy stories – somehow dealing with magic and dragons often lures the writers to be sloppy, cut corners, ignore details and bend the rules. There are few exceptions – such as Belgariad, Discworld or The Hexer Saga (to read this one you better can read Polish or Czech). From “scientific” sci-fi, one of the best “software-like artworks” is IMHO Dragon’s Egg and Starquake.

Thanks for all the magic, JKR.

End of democracy – or how I turned into platform


Once upon a time, there was an application named Democracy Player. A really neat one, capable of downloading videos from internet and playing them in multiple formats. It even can download YouTube videos.

For some reason, the Democracy Player name was replaced with a new name. My name. The Democracy Player will be know as Miro. I have not discovered why this name was chosen, or if it means something. Maybe the guys responsible for it had similar thoughts as my parents over 40 years ago :-).

It is kind of strange feeling to share the name with piece of software. I am not alone – for example one very famous golfer shares the first name with an operating system. A very likely greatest golfer sharing name with very likely greatest operating system :-). But as we know, after Tiger comes Leopard – so the match will soon be over, unless Mr. Woods would consider a name change :-). I guess Leopard Woods does not sound anywhere as good as Tiger, but certainly better than Vista Woods ….

In all this, I am very thankful that the application I share my name with is a good and decent one. Free. Open Source. Runs on Windows and Linux and Mac. Can even play HD content (free one). I guess I could end up much worse …

So if you are interested in free, opensource, multi-platform video player, go and get Miro. The other one :-). I will do the same and I will maybe even join Miro mailing list and become Miro member :-).

Limits of virtualization


It’s been over 10 months since we have started to seriously use virtualization and run Windows inside virtual machine to ease installation and configuration pain. It starting first as convenient measure of isolation two different development environments (.NET 1.1 based and .NET 2.0 based) and avoid “crosspolination” in the data analytics project. At that time, my expectations what would be the limits of what you can or cannot do in virtual environment were mostly around performance, responsiveness and device support (USB especially). As it turned out, all of that actually worked much better than I have ever expected. With new versions of Parallels, the performance is very good and user experience (user means fellow developer) is barely noticeable difference against developing on host system. Assumed that you have decent dual-core system with 2 GB of RAM, of course. Using Parallels gives you the added benefit of moving the virtual environment between Windows, Mac and Linux hosts, which is very convenient.

We have also started to use virtualization on the server side, using Microsoft Virtual Server 2005 R2 and I am happy to report that it worked very smooth as well. In the biometric project, we were running UA testing on circuit of 5 instances of replicated SQL Servers, each server using own virtual machine. The circuit was hosted on two quad core (2x dual core) servers with 4GB RAM each. Using virtual machines allowed us to achieve repeatability and consistency in configuration setting up the environment – we cloned one install and renamed the VM’s hosts.

And here comes the catch: because it is very easy to copy virtual disk in order to test some new software or plugin or configuration, after some time we have ended up with quite a collection of virtual machines and experienced first limit of virtualization: configuration management. It is pretty hard to keep exact track of what is exactly installed in which VM – what version of which software, what are the network settings, user accounts, access rights. It can easily lead to administrative nightmare and can require effort comparable with managing environment of hundreds of computers (it essentially is that environment). In development shop as ours you can cheat a bit a standardize on same usernames and passwords for each VM, but it is not very secure and hardly recommended approach for production …

Second limit we have seen is Windows update effect. The VM’s which represents “alternative universes” seldom run at the same time. With Windows updates coming almost daily, first things that happens after you get back to start using VM which was sitting idle for 3 months is installation of 37 updates, interwoven with 7 reboots. A pretty time consuming and boring activity. If you are math-geek, you can define a function that will compute number of wasted hours from number of VM’s, their inactivity and frequency of security updates – and find out how many VMs you should own so that all your working hours would be consumed by switching the VM’s on / off and waiting for the updates to finish …

There is no really 100% good solution for this. Running all VM’s all time is not practical and switching the updates off completely is dangerous. Again, in development shop you can (and should) batch the updates an update in “waves” – it will still consume time, but at least the “patchlevel” of the VM’s will be consistent and you will save some time with merging some reboots. And it is not only Windows updates that is causing problems: keeping e.g. versions of assemblies installed in GAC (or Ruby GEM’s) in sync across multiple virtual machines can be a challenge too.

Third challenge is licensing and license management. I do not mean the legal side of software licensing related to running software in VM’s – just pure technical implications of doing it. Many software products and subscription based services are using client requests’ tracking to enforce only allowed number of client installs. For example anti-virus, which must download almost daily new library version, can use the “get update” and current client version as mean to track that only licensed number of clients are getting the updates with same license id. It can get quite confused when you repeatedly roll back the VM state and return to starting point two weeks ago – or alternate running two different snapshots of same VM in time. Even if there is never more than single instance of VM running at the same time with the licensed version of software – and only one licensed copy was ever installed, it is very hard to distinguish this from situation where second (illegal) copy of software were installed on second host – virtual or not. I can imagine this will lead to some quite interesting challenges on both technology and legal sides …

Smugmug "processing image" – follow up


In the previous article I have mentioned the potential issue with some uploaded images hanging in state “Processing image” for surprisingly long time after upload and expressed hope that there is some background “catch it all” process that would take care of all these. As it turned out, there is. All uploaded images that were haging in the processing stage turned up to be fixed by next day or so (it was about 10-20 images out of about 3-4 thousand).

Here is a simple trick how to make sure it is indeed so. After uploading a gallery, tag every image in processing with some distinctive tag, e.g. “checkme”. Regardless in how many galleries, categories or subcategories your images will be, you will show them all by clicking on the checkme tag in your home page. After verifying that the images are OK, you can use bulk edit to remove the tag from all.

First week with SmugMug


Week ago, my SmugMug 14 day trial period expired and (as expected) I signed up for the 1 year service. Here are my first impressions after over week of use, with over 3000 uploaded photos and 6.8 GB disc space consumed :-).

Good news is – it really works as advertised and I still like it a lot. I have not really tried many of the features, but what I did try, worked as expected. The uploader (I am using the default, Java applet based drag-and-drop universal uploader) is very friendly – the small status windows shows not only status of the upload, but also the thumbnail of the uploaded image.

Every photo lives in the gallery and the galleries can be assigned into categories with optional subcategories. The system is pretty smart – when you create a gallery inside category (or category / subcategory), these are pre-set as defaults (which you can change, of course). The uploaded file names are parsed and “meaningful” words are automatically assigned as keywords. As long as the words are separated by spaces or underscore. This works best in English – some of my pictures have names in Slovak and the word stemming generated multiple keywords – but that is the price for not using English :-).

Proper tagging of images is a lot of work. Once you do that, though, the search using keywords is pretty effective. You have the classical tag cloud and can select the images by the keyword. SmugMug offers also related keywords and allows to further limit the search.

I have decided to organize the photos chronologically, using categories and subcategories to denote year and months (one or more). This in theory can be achieved using built in time line, but more than 30% of my images are scans and have no EXIF data in JPG. It would be great if somehow there was a possibility to assign date (at least year or year and month) for the set of images – same way as keywords are assigned. However, this is not yet possible.

Within the categories / subcategories, you can have only one level of galleries. At first I thought that this 2 or 3 level fixed hierarchy will be too limiting and inflexible, but in reality, it is not such a big deal. In the occasions where I have nested folders with images – e.g. vacations folder named Europe and subfolders for Italy and Switzerland (where Europe contains all other images) – I simply created galleries named ‘Europe’, ‘Europe / Italy’ and ‘Europe / Switzerland’. The slash indicated the folder structure on the server and sticking with the naming convention will allow to use the API and do automatic synchronization (using Ruby ;-))

Getting images up there is quite time consuming. But after you have them uploaded, the fun begins. The viewing and navigation is where SmugMug really shines. I have seen many Web2-ish sites, but the paging here is one of the bests (if not the best). You can use either “classic” pager links:


or dynamic (Javascript):


Loading of the thumbnails and images is very fast and with reasonably fast Internet connection, you can get very good user experience. Even the slideshow – about which I did not have very high expectations – works surprisingly well. Much better that you would expect from a browser based solution. Because the images are intelligently scaled down on server side, doing slideshow in full screen with 3-4 seconds delay is not much different than using default Windows viewer with local LAN (where the images are transferred in full size and scaled to fit the window on client side) – especially when you have 3-4 MB images..

The only minor annoyance is long lasting “Processing image” syndrom. After you upload image, the back-end processes the image and during this time (in 99.9% of images few seconds) the image thumbnail and real image is represented by “Processing image” placeholder.




As it happened in 2 or three cases during the upload of 3000+ images, the back-end processing never ended and even after few hours that particular image was still hanging in the state of processing. It is possible that this syndrome can be caused by the user (myself) opening the gallery being uploaded in second tab of the browser … I am not sure whether there is some background nightly batch that will catch it – but it is a good idea visually verify the upload after it finishes.

Btw, if you consider going with SmugMug, here is coupon code that will be give you $5 discount from the $39.95 yearly price: ndkpdNg15cgYI

Total Comander version 7.01 final is out


go and get it – at

It got nice visual upgrades – look and feel and icons are gently nicer and more XP-ish. Plus many other new features. Upgrade is still free for registered users.

If I should pick one single most useful program I ever used on any computer system, Total Commander would be clear winner. I do not remember when exactly I purchased the license – I guess sometimes around 1994-95, when it was named Windows Commander. Since that time, I was using it pretty much every day (except few short periods I was working exclusively on Unix). I still use it every working day (as I often spend weekends on Mac platforms).

Thanks, Mr. Ghisler. As you say in Switzerland – merci vielmals. The 40 Swiss franks spent on the Commander license back then was absolutely the best software purchase of last decade :-).

Book review: Dreaming in Code


Thanks to long weekend and more quiet time in last couple of days (Happy 140th Birthday, Canada!), I managed to read something else than Ruby-ism/Rail-ism. Among others, I finished the Dreaming in Code by Scott Rosenberg, a book promising to explain why software is hard.

It is pretty tough question to answer. The way this books tries to address it is following the story not very well known open source project named Chandler through it’s beginning over period of 3 years. Chandler was – and still is – developed by the OSAF – Open Source Application’s Foundation, founded (and financed) by Mitch Kapor, who was before the founder of Lotus Development Corporation and designer of the “Ur-spreadsheet” Lotus 1-2-3.

The Chandler project – unlike most opensource projects was blessed – or cursed – by very solid financial backing, which allowed to hire fairly large team for fairly long time, without worrying too much about running out of time or out of money. It also contributed to quite ambitious goals (“Outlook killer”) and to lot of time being allocated and spent on design and research projects (known also as BDUF – Big Design Up Front antipattern).

For me personally the most interesting discovery from reading the book was how similar can be the issues in two completely different projects that lacks clearly defined goal and requirements. In Chandlers case, the basic design questions were open for unhealthy long time: what is the platform for the repository ? Is it going to be peer-to-peer system or using centralized server ? What is the proper set of features ? How the user interface would look like ? I found these questions so familiar and reminded me of one other (non-opensource) project …

Throughout the book, you can find lots of quotations, observations and pieces of wisdom related to our profession collected from variety of sources – books, interviews, Web. For illustration few of them:

“Joy is an asset. It may well turn out that one of the most important effects of open source’s success will be to teach us that play is the most efficient mode of creative work” Eric Raymond

“In science, the whole system builds on people looking on other people’s results and building on top of them. In witchcraft, somebody had a small secret and guarded it … Traditional software is like witchcraft …” Linus Torvalds

“In any project that is introducing new technology or design … plan to throw one away, because you almost certainly won’t get it right for the first time” Frederick Brooks

“… we should train developers the way we train creative people like poets or artists…. They study great works of poetry. Do we do that in our software engineering disciplines ? No. You do not look at the source code for great piece of software. Or look at the architecture of great pieces of software. You do not look at their design …” Richard Gabriel

Conclusion: Maybe not as easy read as originally expected – mostly because of the length and level of details related to Chandler, but nevertheless worth reading by all means. If you are professionally involved in building software for living, this books outlines many issues of the field. You may even have feeling terribly strong deja-vu (if you are around for couple of years/decades). Or – if you are younger – it can be a great example of things to avoid 🙂