Despite all the fancy tools we have today, software projects fail as often as 15 years ago.

More frameworks & tools are not a solution. Instead we need to explore more humane ways of collaborating, establish a culture of continuous learning and strive for technical excellence.

Switched from Drupal 5 to WordPress 2.5

After having trouble with the Drupal upgrade I decided to give WordPress a try. The funny thing is to copy the existing posts to the new tables. If you got the same problem, you can use this view: CREATE VIEW wp_import AS SELECT a.nid AS ID, 1 AS post_author, FROM_UNIXTIME(a.created) AS post_date, FROM_UNIXTIME(a.created) AS post_date_gmt, b.body AS post_content, b.title AS post_title, 0 AS post_category, b.teaser AS post_except, ‘publish’ AS post_status, ‘open’ AS comment_status, ‘open’ AS ping_status, ” AS post_password, ‘post’ + a.

Comma separated list in SQL

A short example of how to write a stored function that returns a comma separated list of values (Microsoft Transact-SQL): CREATE FUNCION get_authors (@pubId int) RETURNS nvarchar(max) WITH EXECUTE AS CALLER AS BEGIN DECLARE @authorList nvarchar(max); SELECT @authorList = @authorList + ', ' + authorFirstName + ' ' + authorLastName FROM pdb_authors a, pdb_publicationAuthors b WHERE a.authorId = b.authorId AND b.pubId = @pubId; RETURN(SUBSTRING(@authorList, 3, LEN(@authorList) - 2)) END

Optimizing SQL – Part 1

Design approaches for multi-lingual data In this example, we’re assuming a dataset consisting of 6 multi-lingual fields. Each field holds strings with an average length of 200 characters in the 4 locales en, de, zh and ru. A fallback function is implemented using the CASE expression (doesn’t add much overhead and is faster than fetching data in two locales and implementing the fallback at application level). This is how your queries will look like, if you use the “dictionary approach” (master data in dict_books and locale specific strings in the general table dict_dictionary, which is shared between all master tables):

Plat_Forms 2007: Evaluation and Results

PHP was the best platform in terms of completeness, maintainability and security. Also, the differences between the PHP teams were small compared to Perl and Java – that means, our Team 8 (Zend) was quite good, even if Team 6 (OXID) is the winning team for PHP. Congratulations! Download the full report as PDF: Plat_Forms 2007: The Web Development Platform Comparison — Evaluation and Results I’d like to mention that we had almost no defects in our solution:

Fun with SQL: Common Table Expressions

I had heaps of fun with SQL today (again). Ever heard of Common Table Expressions? Here is an example of a recursive query: WITH nodeCTE (nodeId, nodeName) AS ( SELECT a.nodeId, nodeName = CONVERT(varchar(8000), nodeName) FROM nodeNames a JOIN nodes b ON a.nodeId = b.nodeId AND a.locale = 'en' AND b.parentId = 0 UNION ALL SELECT y.nodeId, x.nodeName + ' -> ' + CONVERT(varchar(8000), z.nodeName) FROM nodeCTE x JOIN nodes y ON y.

LinuxTag 2007

I’ve been on the LinuxTag in Berlin during the past days. It was a fun event and I met lots of nice people – also the recruiting staff of Google, which gave me a nice notepad, some other toys and an invitation for lunch at the headquarters in Mountain View. I’ve also had quick look into “Einstieg in SQL” (“SQL for beginners”) of Galileo Press. The cool thing about that book is, that it is supposed to cover all SQL dialects.

A cybernetic view on Web search

When it comes to Web search, everybody thinks of Google nowadays. But there are shortcomings: Google has just one large index for all users. This is why search engine optimization has become so popular and why you sometimes don’t find what you’re looking for. A possible solution would be to have different indexes, maintained by the users, that cover the various needs (e.g. topics, regions, content quality,…). That way, a user can decide to only get search results from Germany without ads, for example.

Google Developer Day 2007

Heute ist der Google Entwickler Tag. Ich wurde eingeladen hier im Side Hotel in Hamburg teilzunehmen. Die Firma mit den bunten Buchstaben will heute ueber ihre API sprechen (und etwas zu Essen gibt es angeblich auch, was sicher mit ein Grund war die Einladung anzunehnmen). Da ich seit gestern eine Vodafone UMTS Karte in meinem Notebook habe, werde ich so frei sein und live ueber den Event schreiben. Ich glaube zwar nicht, dass der Tag heute in die Geschichte eingehen wird, aber was macht man sonst mit einer UMTS-Flatrate?

Zend Framework: Unicode DB adapter for SQL Server

Yeah, I finally got it managed to publish my proposal for the Zend Framwork ODBTP database adapter component: The default MS SQL database driver does not work with Unicode, as SQL Server expects Unicode strings in the UCS-2 encoding (UCS-2 contains null bytes and the driver is not binary-safe). ODBTP works as layer between PHP and SQL Server and accepts Unicode strings in the UTF-8 encoding. The required classes are attached bellow.

Plat_Forms 2007: The Web Development Platform Comparison

Some of the photos from the plat_forms 2007 contest are published now! Download the full results as PDF: Plat_Forms 2007: The Web Development Platform Comparison — Evaluation and Results A short description of plat_forms: Software development platforms for web applications (such as Java EE, .NET, Perl, PHP, Python, Ruby on Rails, etc.) are among the most critical factors of development productivity today. The pros and cons of the various platforms are by-and-large known in principle, but how the pros trade off against the cons in one platform and how that compares to another platform is the topic of quasi-religious wars only, not a subject of objective analysis, as almost no data is available that allows such direct comparison.