This site is running Habari, a state-of-the-art publishing platform! Habari is a community-driven project created and supported by people from all over the world. Please visit http://habariproject.org/ to find out more!

BTW, this blog runs on PostgreSQL :-)

Reading about interfaces

Two books I am currently reading are the following:

Interface Oriented Design book    RESTful Web Services book

The IOD book is a bit more abstract, but the information within may be applied in a variety of contexts. The RESTful book, naturally, is about web services. Both are great, I highly recommend them. Please click on the covers to find out more or buy.

Sharing the love

I was reading an essay the other day about the conceptual differences between "open source" and "free" software, in the FSF meaning of the word (you may read this essay here).

I have been a GNU/Linux user for many many years now, and I owe a great deal to all these people who have contributed through the years. Because of "free" and "open source" software, I have a learned so much I now have a career and job satisfaction. For a lot of software packages out there, you could probably freely exchange the terms, but, to me, it was "free" software that taught me and "open source" software that gave me some good jobs.

Reading about the subtle but important differences in these approaches, I have suddenly remembered how my early GNU years felt like (I like to think I'm in my GNU teens, now -- there are GNU grand-daddies out there :-) It was "open source" that penetrated the market, but it was "free" software that gave us the tools and got me to start reading. Motivation sometimes is paramount.

Nowadays, everyone's at least heard of "open source" and a lot of companies are actually using it. So, the outlook's peachy. What's all this fuss about "freedom"? Are these FSF people irrelevant, at last? Could we simply dismiss them as ramblers from a bygone era and focus on practicalities instead?

I am getting all philosophical here, but it's a holiday and people have more time to stop and think and get abstract on holidays, after a nice, relaxed meal -- so please forgive these musings.

"Open source" is cultural product, be it a methodology or sets of computer instructions. "Open source" has been written by people from many different backgrounds, sharing some ideas -- it's not just technical, it's also a cultural thing made possible by technology, globalization, economy, our times in general.

In that sense, all this libre software out there is the result of a culture, in the same way that the Parthenon is the result of the dominant technological and philosophical ideas in ancient Athens, the Pyramids the result of such ideas in ancient Egypt, and so on... You cannot understand the monuments if you don't study the culture. And you cannot build this stuff unless you live the culture.

So, does the "freedom" approach belong to history books? I think this will be decided by the number of people writing and using "free", as opposed to "open souce" software. Let's keep the culture alive.

Happy New Year, everyone!


What a great idea/implementation! A single html file with some Javascript code and you've got a self-contained wiki system (data + code) you may carry with you on a USB stick, post online or send via email -- your choice! No server or software requirements, except maybe for a modern Javascript-enabled browser (preferrably Firefox). Thank you Jeremy!

TiddlyWiki - http://www.tiddlywiki.com/

TiddlyWiki Markup - http://tiddlywiki.org/wiki/TiddlyWiki_Markup

TiddlyWiki (wikipedia) - http://en.wikipedia.org/wiki/TiddlyWiki

You may also be interested in Wiki on a Stick - http://stickwiki.sourceforge.net/

By the way, TiddlyWiki almost works on my Nokia n800. I may read and edit files properly through the built-in Opera browser, but I cannot save them. There is an Opera work-around, TiddlySaver, but it relies on a .jar file and the n800 has no Java support. Pity!


UPDATE: The http://www.checkettsweb.com/tw/gtd_tiddlywiki.htm + n800 temptation made me fiddle a bit more, and saving now works! (after confirming the unsafe operation 4 times :-) All it takes is commenting out or deleting line 549 of the gtd_tiddlywiki.htm file -- the one with saveTest() -- before your first use. And if you have basic Unix command line skills, here is a quick and dirty script for launching your little agenda from the command line, showing the day's entries (if you copy-paste you shall see the entire lines):

sed -i '/<div tiddler\="DefaultTiddlers"/s/\[\[.*\]\]/\[\['$(date +%d\\\/%m\\\/%Y)'\]\]/' \
dbus-send --session --print-reply /com/nokia/osso_browser \
--dest=com.nokia.osso_browser com.nokia.osso_browser.open_new_window \

... assuming the file resides in /media/mmc1/gtd. Backups will be placed in /media/mmc1/gtd/twBackups.

Making sense of your schema with Schema Spy

Data models are good and they are clear, if you're the person writing the application and devising the model. Hell, sometimes, they are not clear even then! So, imagine what happens when you get someone from the street to connect to your database and read your schema in order to understand it. No chance!

Now, this is not about some poor wardriver who doesn't know how to read the implicit relationships between tables in your model - they had it coming! But what about your legit users, working on a particular aspect of your infrastructure or application, such as developers, DBAs etc. ? How on earth do they make sense of it all when they first start?

Yes, yes, in an ideal world everything's properly documented, but when was the last time you saw that in a real life situation? Real IT people don't write helpful comments when they create their tables, views, functions etc. Referential integrity? Don't make me laugh! Most developers avoid database constraints, to keep the application portable between database systems and database error messages to a bare minimum. Integrity rules are usually enforced at the application level. From a DBA's perspective, most enterprise-level databases are big collections of seemingly unrelated tables, with no business logic in the DB system itself.

But don't despair! Help is at hand. Enter Schema Spy:


You dowload the jar file, and then you run something along the lines of

java -jar schemaSpy_3.1.1.jar -t pgsql -cp /path/to/jdbc.jar \
-u user -p password -s schema \
-db dbname -host localhost:5432 \
-o output-dir

After a while, you have a look in output-dir, and the reports are really nice.

Schema Spy even deduces table relationships from field names and types. And it seems to support several different database systems, including Oracle and MySQL. Hurrah!