Monday, November 12, 2007


Guillermo Mordillo is one of my favorite illustrators ever. In spite of the fact he must have created tons of fun illustrations I am not able to find a lot of free stuff on internet. Wikipedia article does not link a lot of resources as well as his official web page. However, I found some of his (may be earlier?) works here and some nice preview pictures of his calendars can be also found here.

I wish there were more illustrators like him!

Friday, October 26, 2007

Tuesday, September 4, 2007

Switching from LOG4J to SLF4J

I have already mentioned that I was going to give SLF4J a try. Now, I am going to summ up what it took for me to switch from LOG4J to SLF4J logging library in a few items for maven based web project:
  1. discarded dependencies: commons-logging (1.0.4) and log4j (1.2.8)
  2. added new dependencies: slf4j-api (1.4.3), logback-core (0.9.8) and logback-classic (0.9.8)
  3. added one more dependency: jcl104-over-slf4j (1.4.3)
  4. created a logging configuration file logback.xml in the root of classpath (replacement for
That's it!
Of course, I had to modify java code so that it uses Logger instead of Log now.

As for the item #3 it deserves a little bit more clarification. Since my final war is going to be deployed in Tomcat bundled with several other jar libraries (mostly apache commons, Spring and great Stripes framework) then dependency on JCL still resists. The solution to this problem is jcl104-over-slf4j.jar which implements the public API of JCL but using SLF4J underneath [see slf4j manual].

Monday, August 27, 2007

Is it possible to create SW that grooves like this?

Let's take this fantastic music video from youtube:

Billy Cobham on drums.
Highly optimized fast relation database running on a cluster of two independent servers (double kick drum). Experiencing indices maintenance and optimizations from 5:24 to 6:11. All other SW components (keyboards and bass) are rather idle at this time. You can see that tuning of database is a very hard task. Every piece (drum) must be hit at least once or twice for better. Only few can do it well and only real masters can do it with their eyes closed.

George Duke is playing keyboards.
Fast and light Perl based web UI. Only a real poet mind can use Perl effectively like that with such smile on the face while the same thing can be expressed in such many ways (at least 4 keyboards each with plenty of options). We can see that relatively simple commands in this layer can cause dramatic response in the DB layer (4:32-5:19).

Larry Kimpel drives the bass.
The glue between the Perl and DB is a system kernel with simple, yet very effective command line interface. Just couple of commands can do a lot for you but one has to be very careful about order of individual commands, options, pipes and arguments. Cron daemon is your good friend when it comes to repeating calls in ridiculous frequency (like 19/16 or so...)

As for boot up time:
You can see that the most expensive service is the DB layer. Perl starts very fast and the command line is just present (it seems as if it does not require any time for initialization at all).

As for releasing the resources: (simply the end of process)
Again we can see that the DB takes its time. But we can see that both the Perl and kernel layers wait until it finishes properly (good practice).

This must be some real time application (internet service?) or heavy I/O involving calculation (indexing of database content?). But somehow I feel that this music session grooves one (or two) steps further then any of SW compilations I have ever seen...

Sunday, August 19, 2007

Machine Learning Databases Repository

UCI Machine Learning Repository is a collection of 160 databases which can be used for machine learning algorithms. It was started in 1987 and now a new web interface with search functionality is being tested.

Saturday, August 18, 2007

Scalability and Efficiency of Data Mining

There is a nice video presentation about scalability and efficiency aspects of parallel computation. It touches MapReduce paradigm and a wide portion of the presentation is devoted to a classical problem called Frequent Itemset Mining. Experimental results of other classical data mining tasks are presented as well.

Interestingly, Doug Cutting (one of the leading developer of Hadoop) have a post on his blog about how to use MapReduce to implement ten different machine learning algorithms.

If I understood correctly one of the main points of Wagner's presentation is that current MapReduce is great for stateless computations but it can be a problem (less effective) when stateful approach is needed. For their needs they created MapReduce derived implementation where each Reduce phase can store results and other metadata into external repository so that other tasks can learn about it very fast (so that subsequent Map task can start earlier if it has all the information it needs and does not have to wait until the whole Map phase finishes).

Friday, August 17, 2007

Do You Want To Live Forever?

I have just finished watching this video. It makes me think what can happen if computer developer gives up the job...

(This video is not a joke... ok, may be I should have said it is not a fake. That is more convenient formulation I think.)

Sunday, August 5, 2007

The most interesting world's cities in VR

The project called 360cities an interactive collection of panoramic photos from some of the most interesting cities in the world. It also contains a lot of beautiful photos from Praha. It seems to be built on top of Google Maps technology and not only it can help you when planning vacation but can be also interesting tool if you want to rent or buy an apartment. They say the city collection is growing fast so be sure to check back soon.

Thanks to my brother for this interesting link.

Wednesday, July 18, 2007

LOG4J configuration and JAR libraries gotcha!

I experienced unexpected behavior of LOG4J library. The problem was that I modified configuration of LOG4J and I added SMTPAppender but I forgot to distribute required JAR libraries (activation.jar and javamail.jar) into production.

The outcome was that LOG4J library was not initialized correctly and commons-logging library simply started to send INFO level messages to standard output (not to FileAppender and SMTPAppender). It is not that surprising, however; the problem is that I didn't have a chance to learn that LOG4J was not initialized due to missing JARs.

Is there any easy way to avoid such issues if Maven (or other options) can not be used and one have to rely just on Ant for particular project?

I was thinking about this again and I think there should be a proper way how to learn about this issue - checking error output. I haven't had a chance to test this theory yet but I think this should be a way to go (assuming commons-logging does not swallow important messages).

Tuesday, July 17, 2007

I lived on the Moon

A short film called I lived on the Moon is a beautiful music animation.
Link found thanks to Drawn!

Monday, July 16, 2007

Google Maps street level - new experience

I have never been to San Francisco. But now, thanks to new Street level feature in Google Maps I can experience one of the most crooked street (Lombard St) in an very impressive way! I am amazed :-)

Monday, July 9, 2007

Podcast: Basics of SW analysis

I found a nice podcast about SW analysis (in Czech language only). Slides available too.
I like part starting at 01:15:12 (about time estimations).

Sunday, July 8, 2007

Collection sort method and Java Generics - how to

I was looking into one of my old Java source files and found out that I was struggling with correct syntax of Collection.sort() method using Generics when Java 1.5 was released.

Correct syntax is Collection.<CustomType>sort().

[Excerpt taken from 1]
The sort static method is designed to work with a class T that implements Comparable on T or some superclass of T [see 3], e.g. Object. (Infuriatingly, generics use the term extends [see 2] when they really mean implements).

[2] Collections.sort()
[3] Comparable.compareTo()

Friday, July 6, 2007

Living in Three Centuries - The Face of Age

This seems to be an interesting exhibition project. Black and white photographic portraits of very old people. Notes & quotes section is also worth reading.

Tuesday, July 3, 2007

Pavel Kohout is blogging again

Pavel Kohout is blogging again. I am looking forward to his posts! Actually, I am reading one of his books right now and I found it very interesting (I think every software developer should have some kind of economic education :-).

Thursday, June 28, 2007

Google Desktop for Linux now available

This seems to be a good news! They say that Linux version of Google Desktop should be more focused on developers. It should support specific search over source code - however; I was not able to find out which programming languages are supported and any further details. It would be cool it if could provide something similar to Krugle Enterprise search (see datasheet).

Wednesday, June 6, 2007

Jiří Grygar - radio podcasts

I have just finished listening to ten autobiographical podcasts about Jiří Grygar (in Czech only) from archive of Czech Radio - Vltava. It is simply worth the time.

Friday, June 1, 2007

Google Developer Day 2007 - Video Sessions Available

I am not lucky enough to have a chance to attend one of the Google Developer Day sessions around the world this year. However; I am lucky enough to have speed internet connection so I can at least watch sessions from Mountain View.

Monday, May 28, 2007

Perl DBI Module - Examples

I found nice article about Perl DBI Module. If you would like to know how to set up autocommit, bind values, manage transactions or call stored procedures then you should not miss this document:

BTW: This is a good example of KISS style document.

Sunday, May 27, 2007

Java Persistence Query Returning Simple Custom Object

Consider the following situation: We needed to retrieve just a small fraction of information from the database about particular business objects and transmit this data over network. It is probably not very surprising that the following query:

Query q1 = em.createQuery("SELECT, e.salary FROM Employee e");

returns List of Object[] instances. OK, what if we would like to return something much simpler then our original Employee object but still more concrete then general Object type? I found there is one very easy and effective solution:

Query q = em.createQuery(
"NEW mypackage.EmployeeDetail(,, e.salary) " +
"FROM Employee e");
List<EmployeeDetail> result = q.getResultList();

The mypackage.EmployeeDetail object is just POJO object with particular constructor without any JPA annotations or mapping file.

(Source: Michael Bouschen's Blog - Java Persistence Query Return Types)

Saturday, May 26, 2007

Groovy things to do with Groovy

A very nice Tech Talk about upcoming Groovy 1.1 release.
(Source: blog - which in my opinion is another page worth reading.)
However; code samples in this presentation are too small to read :-(

Wednesday, May 23, 2007

Spider Cat

Spider Cat
Originally uploaded by Lukáš Vlček.
I didn't know we have a very special neighbor until recently. It seems that this cat has been watching us for a years without our knowledge!

Tuesday, May 8, 2007

Jakarta Commons Logging and SLF4J

As a regular user of Jakarta Commons Logging (JCL) library I was surprised by the fact that there is a class loader problem in version 1.0.4. You can find more information here along with examples. There is also a specific JCL Wiki page about this problem. However, according to actual release notes of version 1.1 this issue seems to be fixed and adapters for various implementations are provided in commons-logging-adapters-1.1.jar (at least this is my understanding). The reason why I haven't been suffering from this issue yet is probably due to the fact that we ship all jar files with each application and does not rely on any server shared libraries.

Related to this fact I found that some people recommend using Simple Logging Fasade for Java (SLF4J) library instead of JCL. They claim it is faster, more robust, simper and does not rely on specific class loader machinery. I haven't tried it myself yet but the part I like most is the parameterized logging message (with performance benefits).

Also I came across one another interesting page by Rod Waldholff (and author of JCL). Specifically the last part where he discusses scenarios where the JCL should be used and where it should NOT be used. I think I will consider his words the next time I use logging library in my new project.

Thursday, April 12, 2007

I like Google Reader

Normally, I use Sage to read all my favorite web pages but this week I have to use slow internet connection via cellular phone (it does not give more then 460Kbps). It gets way too long for every page to load. I found that in this situation it is very practical to use Google Reader instead of Sage because you don't have to wait for all the feeds to get loaded and it is very easy to export them from Sage to Google Reader. The only problem is that Sage use folders to organize feeds (and I use also subfolders) but Google Reader does not so the result is that after the import into Reader the structure of feeds can be changed.

Monday, April 2, 2007

Mobile City Block

mobile city block
Originally uploaded by Mattias Adolfsson.
Mattias made another brilliant illustration sketch. This reminds me some of old Soviet army vehicles.

Sunday, April 1, 2007

Fools Day

It is April the 1st today. You know what that means, right? Sure ... Google is releasing a new service called Gmail Paper. It is the simplest way how you can have all your emails printed and shipped to your address (free of fees). And there are pleanty of happy users of this cool new service...
One happy customer asks himself: "It's paper, plain and easy. I sometimes find myself wondering: what will Google think of next? Cardboard?"
I have once secret tip for the next hot Google style service. Web Paper - you can have printed all the pages from the global web which were visited more then specific number of times during the April the 1ts (and of course the threshold could be fully customized).

Friday, March 30, 2007

Weather Forecast Model for Central Europe

Medard is a weather forecast model for Middle Europe and the Czech Republic. It also provides forecasts of concentrations of some pollutants, especially tropospheric ozone. I found this model very useful and reliable and I plan my outdoor activities based on it (it provides detail forecast for next 68 hours).

This non-profit project is run by the Academy of Sciences of the Czech Republic. The web interface is not the best I think (yet it supports users well), it is all based on AJAX technologies while SEO is heavily underestimated. The enter page has almost no relevant texts in it and even the TITLE element is empty.

Tuesday, March 13, 2007

Guice - Spring's DI younger cousin

Guice is a new dependency injection framework for Java. More information can be found using the following sources:
I think it is positive message for Spring users. If there is anything which can be done easier in other framework then next release of Spring can be improved, simplified and even better :-)

Thursday, March 1, 2007

Firefox Utilities for Web Developers

I have been using Web Developer extension for some time and it serves me quite well. However, 3rojka stopped by my office recently and told me about wonderful Firebug extension. I felt in love with it very quickly!

Wednesday, February 28, 2007

Maven ftp:sitedeploy (HOWTO)

I published this article in June 2006 on internal company blog. I decided to re-publish it on my public blog because this way it could help wider audience.

Maven site:ftpdeploy goal does not work as expected?

Maven site plugin is used to generate and deploy a complete web site for project. There is a goal site:deploy (or site:ftpdeploy if you like) for this purpose but you can be disgusted by the fact that it may not work correctly when using maven 1.0.2.

Recently, I have been facing to this trouble and here is the workaround which works for me.

The root cause of this issue is quite well described in maven JIRA. In short Maven 1.0.2 is using ANT 1.5.3-1, which depends on NetComponents.jar. NetComponents.jar does not come with regular Maven distribution so you have to download it and pack into Maven configuration manually. The following mail thread discusses how to do it in detail.

In basic all you have to do is just copy NetComponents.jar into ${maven.home}/lib/ folder and modify ${maven.home}/bin/forehead.conf (add NetComponents.jar reference into [root] portion). This should make the site:ftpdeploy goal work as expected.

Interestingly, this issue should be fixed in Maven 1.1, unfortunately, as of writing it hasen't been officially released yet (RC1 is available). Developers are now more focused on M2 (Maven 2) which will probably introduce a lot of other headaches... :-)

If you are using site:ftpdeploy goal in you code then every member of your group should be familiar with this workaround and make modification of maven configuration on his/her local computer.

Monday, February 19, 2007

Interesting Study About Hard Disk Failure Trends

Several Google engineers performed analysis of hard disk failure trends of their storage infrastructure running inexpensive commercially available hard drives with interesting results. The study itself [2] is a nice reading for statisticians. For more popular (light) version see a BBC article [1]. If I were to highlight the result in one short sentence then I would pick the following one:

We found very little correlation between failure rates and either elevated temperature or activity levels.

Putting aside the results what impressed me is that they had to collect high volume of quality and well structured data from a distributed real time system. Their system (System Health Infrastructure) is briefly described in [2]. It is mostly built on top of Google own technologies (MapReduce, Bigtable, GFS) which allow for a large data set to be effectively stored. Final statistical analysis is done by R system.

[1] Hard disk test 'surprises' Google (BBC news)

Tuesday, February 6, 2007

Manila Flashback

Originally uploaded by Lukáš Vlček.
I was ordering photos from Manila trip and found this one. It was taken during the last day from hotel window (image was digitally post-processed). View from Alabang to Manila center.

Pineapple Ball

Recently, I bought a new brain-teaser called Pineapple Ball. It is wooden rebus made of 33 different pices. I solved it after couple of days and I found that it is more about dexternity then brain power. Sometimes two hands are not enough, may be that is why they say it is an intellective game.

Wednesday, January 31, 2007

Cultural exposure II.

I haven't tried a lot of different beer brands here in the Philippines yet; however, I think that San Miguel is one of the most popular on local market. It has a great taste and I like it, but still I can't stand that they serve it with ice. That is simply something I can barely accept. Beer is not a coke!

Saturday, January 27, 2007

Manila - Let's show more photos

Weekend is here! At least I can take more rest and get tanned :-) While there is a tough winter in Europe I can enjoy sun here. Let's show some more photos. All taken from hotel windows.

Laguna lake. I was told that they raise a fishes there.

East view (Laguna lake and Alabang Market).

Manila in the smog cloud.

North view.

Sunsets are quite fast here.

Thursday, January 25, 2007

Cultural exposure

We visited Japanese restaurant two days ago. All their production looked very tasty in the shopwindow so we ordered some sort of Japanese food, bottle of Philippina beer and enjoyed a good dinner.
Today I mentioned this restaurant to my colleagues and they told me that all the exposed food is made of plastic. In the first moment I didn't believe them but then I dropped by that restaurant again to check the reality and I found that it is true. It is all made of plastic! And it is hard to realize even when you take a closer look.

Note: I should mention that they serve a *real* food.

More about Japanese plastic food:

Sunday, January 21, 2007

Manila the heart of Philippines.

I have arrived to Manila today. This is my first visit to Asia so it is quite new experience for me. I will put more posts on the blog soon; however, I made one basic observations today:
  • I was wondering why we are told to use a taxi. Why we just don't rent a car? The answer is very obvious: We wouldn't survive. The traffic is very *dynamic* here. I can't wait till Monday - the first working day. The taxi driver told me that what I have experienced today is nothing comparable to working days.
The following are two photos which I made from my hotel room before the sunset:

Tuesday, January 16, 2007

Are you scared to open Pandora?

One colleague told me about Pandora internet radio (thanks Ted!). What I like about this radio is that you can customize the style of music it broadcasts to you, yet it still brings new and interesting content.

You start by listing a few artists or song names you like and then it delives content of "similar" style. Then you can thumb-up/down individual songs in order to further tune your radio style. In spite of the fact that I haven't find all my favorite artists in their database (Mustafa Aziza Zadeh to name one) I really enjoy this service because the flow of music is not interrupted by adverts and you can skip songs.

Pandora is more then just a radio. Check their blog and podcasts to find out more.

This Pandora is worth openning!

Thursday, January 11, 2007

Mattias Adolfsson is inking

I am a fan of visual arts. I started my own account on Flickr some time ago and I was wondering what kind of artists (and especially illustrators) I can meet on Flickr. Soon I found that there are plenty of them.

One of the first artists I met on Flickr was Mattias Adolfsson and I felt in love with his drawings because they are quite unique both in style and humor. I have been watching Mattias Inks blog for some time now and it is simply amazing. Mattias posts a new doodle almost every day.

Mattias' vision of the future:

Tuesday, January 9, 2007

They are all blogging!

I can't start my first post without mentioning my already blogging colleagues:
They are all good fellows and fun makers.

I think that's it for the first post.