
As always, I took some pictures at FOSDEM 2010. Disappointingly I took less than last year: only 55 instead of 132 (and even that is cheating, because that includes a picture *of* me taken by xvello). Still, better than nothing, I guess... In any case, as always at FOSDEM, I had lots of fun, and that's what counts! 
"There's nothing easier" -- you say -- about packaging and deploying SQLite. "Just take the software with default settings and package as a shared lib plus SQLite shell".
It's not that simple.
The SQLite project is developed at impressive speed assuming complexity of the software. It's already part of many operating systems like OS X and Symbian. Linuxes use it somewhat at system level. Browsers use SQLite for storage via HTML 5, earlier via Google Gears.
The fact is that all of the uses we can spot are for a specific cases. For each case slightly different configuration is beneficial. SQLite has two kinds of configurable options: runtime and compile-time. The latter includes configurable limits. SQLite deployment is typical to embedded software, which is efficient but requires developers to be aware the specifics.
Google Gears expected SQLite to have certain features enabled. This is also the case with Kexi or in general any app that uses SQLite for desktop databases. As you can read in the backlog of Kexi development for January, I have switched to system SQLite. I even proposed update to FindSqlite.cmake to make sure minimum version with enough features is in place. That lasted just one day.
Then I have immediately switched back. There were a few subtle and one main reason - security. SQLite provides one nice compile-time option:
SQLITE_SECURE_DELETE
This compile-time option causes SQLite to overwrite deleted information
with zeros in addition to marking the space as available for reuse.
Without this option, deleted data might be recoverable from a database
using a binary editor. However, there is a performance penalty for using this option.
I have assumed that we want this flag to be on, so one important workflow in Kexi is more secure. When you delete tables or even just table rows (records) from a database, and send the .kexi file (which is based on SQLite database) to others, you basically expect not to have the deleted information in the file. Unless SQLITE_SECURE_DELETE is enabled, this is not the case. Databases, includeing SQLite, like to just mark the deleted records are deleted without removing the empty space or cleaning up the bytes.
Enabling the feature at the cost efficiency is the current design decision. An alternative to SQLITE_SECURE_DELETE would be to vacuum the database on closing. But what if the application was terminated uncleanly (application or system crash)? And what if user sends the database by email while Kexi is still running? These question do not exist when SQLITE_SECURE_DELETE is on, and that's why I like the flag.
SQLITE_SECURE_DELETE is not always needed however, for example when you share the data through a web server or remote connections. But these use cases are not yet supported by a stable implementation in Kexi.
All in all, the current set of options for Kexi's copy of SQLite is as follows (kexidb/drivers/sqlite/CMakeLists.txt) -- look to just get an idea of possible future features of Kexi and Predicate library (KexiDB 2):
ADD_DEFINITIONS(
# sqlite compile-time options, http://sqlite.org/compile.html
-DSQLITE_SECURE_DELETE
-DSQLITE_ENABLE_COLUMN_METADATA # Some additional APIs that provide convenient access to meta-data
# about tables and queries
-DSQLITE_ENABLE_FTS3 # Version 3 of the full-text search engine
-DSQLITE_ENABLE_FTS3_PARENTHESIS # Modifies the query pattern parser in FTS3 such that it supports
# operators AND and NOT (in addition to the usual OR and NEAR)
# and also allows query expressions to contain nested parenthesesis.
-DSQLITE_ENABLE_MEMORY_MANAGEMENT # Extra logic to SQLite that allows it to release unused memory upon request
-DSQLITE_ENABLE_RTREE # Support for the R*Tree index extension
-DSQLITE_ENABLE_STAT2 # Additional logic to the ANALYZE command and to the query planner that can help SQLite
# to chose a better query plan under certain situations
-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT # Optional ORDER BY and LIMIT clause on UPDATE and DELETE statements
-DSQLITE_ENABLE_UNLOCK_NOTIFY # Enables the sqlite3_unlock_notify() interface and its associated functionality
# (http://sqlite.org/unlock_notify.html)
-DSQLITE_SOUNDEX # Enables the soundex() SQL function (http://sqlite.org/lang_corefunc.html#soundex)
)
As mentioned in the reviewboard comment even while SQLite is not packable for general use as a shared library, this is by design. Because there are many compile-time switches, so many not-fully compatible versions of SQLite can be found in particular distros.
By having own copy of regularly updated SQLite, whas has been started in 2004, we can also patch SQLite to add some esoteric features, e.g. provide progress information of the .dump operation, so we can have display the progress in the GUI, what is good for large files.
I am also thinking about related proposal: having a copy of SQLite moved from Kexi into some place like kdesupport, with sane build defaults. With the lib name altered to something like libksqlite to avoid clashes with distro-packaged SQLite. Then something like simple FindKSqlite, would be used within KDE.
Do you have any opinions on the matter? Please share it in the comments below.
With 2010 we've started to employ identica (then connected to Twitter and Facebook) as an channel for our live changelog at the {power}user level. Here's the dump for the past ~30 days (oh I should have used an XSLT).
It matters greatly who wins the war because the winners write the
history and they rarely -- if ever -- characterize events accurately.
That's what makes history fun. It's a puzzle and it's always changing. In this case I'm talking
about Caesar, who in 58 A.D.
destroyed the Celts in Gaul (France), killed and enslaved millions,
took the gold, propagandized the history, and went on to rule Rome as
Emperor. Nice guy. That is of you like vicious dudes running psychotic
military dictatorships. But whatever. The point is that the Romans won,
so their view of things survived throughout the ages. But I'm more interested in what was lost? What did the Romans conveniently leave out of their history?
For that, check out The Primitive Celts, an entertaining and fascinating look at the Celts, who the Romans say were mere barbarians. But were they? Seems some archaeologists are discovering the Celts actually had a highly developed society with the most advanced calender at the time and a sophisticated economy based on a variety of trades. They minded gold all across Europe, and they built a vast network of roads to facilitate international trade. Generally, the contrast to Rome was nearly total. Where the Celts decentralized things into a web and community-like structure, the Romans centralized them into a rigid hierarchy. And that proved a critical and fatal difference -- at least in ancient times. Centralization won. Big time, actually.
But I wonder if that distinction remains true today? What's the better concept around which to build a society in 2010? And who wins the war when these differences collide for whatever reason? How much has really changed in two thousand years? You can look at this from the perspective of a county or a company or even a project. It's just the management of resources to achieve a goal. Nothing more. But my question asks which is better. Who wins in modern times?
As always, we had the KDE Group Picture taken at FOSDEM. It went pretty smooth this year, apart from not immediately hearing when the autotimer of the camera clicked 
[Edit: Hmmm why does this not show up in the feeds?]
Hi,
Bill from Kitware just announced that the CMake tutorial from the "Mastering CMake" book is now also available online.
If you're interested, have a look.
(Btw. their new blog also contains other interesting reads, e.g. about open science etc.)
Alex
Here is a nice example from Serbia demonstrating the value of building a local OpenSolaris community. It can lead to some very interesting organizations paying very close attention to what you are doing. Congrats, guys! Some of the OpenSolaris User Groups are doing some really interesting work out there, and they are contributing to the overall community in a very big way.
XXX cl_runtime: [ID 856360 kern.warning] WARNING: QUORUM_GENERIC: quorum_read_keys error:
Reading the registration keys failed on quorum device /dev/did/rdsk/d7s2 with error 22.
406 int
407 quorum_scsi_sector_read(
[...]
449 error = quorum_ioctl_with_retries(vnode_ptr, USCSICMD, (intptr_t)&ucmd,
450 &retval);
451 if (error != 0) {
452 CMM_TRACE(("quorum_scsi_sector_read: ioctl USCSICMD "
453 "returned error (%d).n", error));
454 kmem_free(ucmd.uscsi_rqbuf, (size_t)SENSE_LENGTH);
455 return (error);
456 }
457
458 //
459 // Calculate and compare the checksum if check_data is true.
460 // Also, validate the pgres_id string at the beg of the sector.
461 //
462 if (check_data) {
463 PGRE_CALCCHKSUM(chksum, sector, iptr);
464
465 // Compare the checksum.
466 if (PGRE_GETCHKSUM(sector) != chksum) {
467 CMM_TRACE(("quorum_scsi_sector_read: "
468 "checksum mismatch.n"));
469 kmem_free(ucmd.uscsi_rqbuf, (size_t)SENSE_LENGTH);
470 return (EINVAL);
471 }
472
473 //
474 // Validate the PGRE string at the beg of the sector.
475 // It should contain PGRE_ID_LEAD_STRING[1|2].
476 //
477 if ((os::strncmp((char *)sector->pgres_id, PGRE_ID_LEAD_STRING1,
478 strlen(PGRE_ID_LEAD_STRING1)) != 0) &&
479 (os::strncmp((char *)sector->pgres_id, PGRE_ID_LEAD_STRING2,
480 strlen(PGRE_ID_LEAD_STRING2)) != 0)) {
481 CMM_TRACE(("quorum_scsi_sector_read: pgre id "
482 "mismatch. The sector id is %s.n",
483 sector->pgres_id));
484 kmem_free(ucmd.uscsi_rqbuf, (size_t)SENSE_LENGTH);
485 return (EINVAL);
486 }
487
488 }
489 kmem_free(ucmd.uscsi_rqbuf, (size_t)SENSE_LENGTH);
490
491 return (error);
492 }
56 -> __1cXquorum_scsi_sector_read6FpnFvnode_LpnLpgre_sector_b_i_ 6308555744942019 enter
56 -> __1cZquorum_ioctl_with_retries6FpnFvnode_ilpi_i_ 6308555744957176 enter
56 <- __1cZquorum_ioctl_with_retries6FpnFvnode_ilpi_i_ 6308555745089857 rc: 0
56 -> __1cNdbg_print_bufIdbprintf6MpcE_v_ 6308555745108310 enter
56 -> __1cNdbg_print_bufLdbprintf_va6Mbpcrpv_v_ 6308555745120941 enter
56 -> __1cCosHsprintf6FpcpkcE_v_ 6308555745134231 enter
56 <- __1cCosHsprintf6FpcpkcE_v_ 6308555745148729 rc: 2890607504684
56 <- __1cNdbg_print_bufLdbprintf_va6Mbpcrpv_v_ 6308555745162898 rc: 1886718112
56 <- __1cNdbg_print_bufIdbprintf6MpcE_v_ 6308555745175529 rc: 1886718112
56 <- __1cXquorum_scsi_sector_read6FpnFvnode_LpnLpgre_sector_b_i_ 6308555745188599 rc: 22
21 -> __1cNdbg_print_bufIdbprintf6MpcE_v_ 6309628794339298 quorum_scsi_sector_read: checksum mismatch.
Here are two really nice articles in the Japan Times talking about the international tech community in Tokyo:
The message was simple:
Today's my last day at Sun. I'll miss it. Seems only fitting to end on a #haiku. Financial crisis/Stalled too many customers/CEO no more
Please post your thoughts on Jonathan's leaving. Its a mixed emotion... on one hand he set some great goals and put a fire under things. A lot of us believed in him. And yet, he failed to execute and ultimately was responsible for Sun's demise. Could someone else have done a better job and still kept the culture alive? I don't know honestly.
I'll continue to stay neutral on the subject and reserve judgment until the behind-the-scenes stories trickle out over the next months and years. Jonathan screwed up, yes, but I think that Jonathan also got screwed himself, more than we realize. Time will tell.
In other news, Oracle is finally doing what has needed to be done for years: Oracle to Revamp Sun Supply Chain. One of the biggest complaints by customers for years has been inability to get timely delivery of systems. Its good to see signs of that era ending.
Also, Project Darkstar & Kenai are being axed. Project Kenai, a SourceForge like project hosting service provided free by Sun, will close its doors on April 2nd 2010. You have untill then to get stuff out. One of the most important projects there, Immutable Service Containers (ISC) has moved to OpenSolaris.org.
The Ubuntu Platform team (the people Canonical employs for Ubuntu) is having a sprint in Portland. Portland is a nice city where you can be wandering down the road and come across 100 tweed wearing cyclists coming the other way.
My how they've grown
Kees' collection of every shipit CD ever nears completion
Voodoo doughnut, a local speciality. I got half way through eating this before gaining diabetes