The drop is always movingYou know that saying about standing on the shoulders of giants? Drupal is standing on a huge pile of midgetsAll content management systems suck, Drupal just happens to suck less.Popular open source software is more secure than unpopular open source software, because insecure software becomes unpopular fast. [That doesn't happen for proprietary software.]Drupal makes sandwiches happen.There is a module for that

Drupal and Java (we want to be friends with Enterprise, right?)

Submitted by nk on Mon, 2010-08-16 23:57

Drupal 7 might work with Java databases. Eventually, we might even be able to run Drupal 7 on Google App Engine.

Serving static content from a different domain in Drupal 7

Submitted by nk on Wed, 2010-08-11 19:14

We wanted to serve static content from a CDN -- but it's the same if you only want to move your static content to a different server. This is fairly well researched and done in Drupal 6, here is the Drupal 7 version. It seems that some theme stuff (like the favicon and the logo and probably unaggregated CSS/JS) is passed as Drupal paths into file_create_url while aggregated CSS and JS is served from public://. So we need to implement file_url_alter and override the getExternalUrl of the DrupalPublicWrapper class (thanks goes to Damien Tournoud for pointing out the latter):

Scraping webpages with Python and QWebElement

Submitted by nk on Wed, 2010-08-11 04:07

Python is famous for being fun and it is. I have a pet project here and I have tried scraping with PyQT. Particularly note how easy it is to traverse the DOM with QWebElement (new in QT 4.6): use a simple CSS2 selector and that's it.

# These lines will get us the modules we need.
from PyQt4.QtCore import QUrl, SIGNAL
from PyQt4.QtGui import QApplication
from PyQt4.QtWebKit import QWebPage, QWebView

class Scrape(QApplication):
  def __init__(self):
    # Apparently there are a number of versions of this init and PyQT

DBTNG, array sorting and PHP crashfixes

Submitted by nk on Wed, 2010-08-04 20:55

One of our coders have pinged me that he is getting a weird error message "Warning: uksort(): Array was modified by the user comparison function". The array sort callback was doing a database query on the first run, stored the results and used that to sort. For sure it was not modifying the parent array. Fairly innocent, isn't it? Well, actually not. It turns out that last August a check was added to PHP 5.2 and 5.3 (released in 5.2.11 and 5.3.1) to verify that the array being sorted does not change, however debug_backtrace() fools this check. Guess what?

The iPad, the AmigaOne X1000 and the future of freedom

Submitted by nk on Thu, 2010-07-01 18:35

When I was a little kid, we had these eight bit home computers. To start anything you needed to type a BASIC command. The machine had a BASIC interpreter in it and came with a BASIC manual. If you had the smallest inclination towards programming, it was shockingly easy to go ahead and hack a program together. And then the BASIC interpreters have disappeared from the machines. The proliferation of GUIs made coding a little bit harder but still you could add something like Delphi to your Windows PC and hack ahead happily.

So why do I hate git?

Submitted by nk on Sun, 2010-06-20 16:11

One can copy-paste the mod_rewrite quotes from the Apache handbook pages verbatin just replacing mod_rewrite with git:

The great thing about git is it gives you all the configurability and flexibility of Sendmail. The downside to git is that it gives you all the configurability and flexibility of Sendmail.

Despite the tons of examples and docs, git is voodoo. Damned cool voodoo, but still voodoo.

Nokia Mail for Exchange invalid certificate

Submitted by nk on Tue, 2010-06-15 21:16

I was setting up push mail to https://mail.example.com when I got this message. The solution (brace yourself)

  1. openssl s_client -connect email.examile.com:443
  2. Copypaste the lines between and including -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- to a .pem file
  3. openssl x509 -outform der -in certificate.pem -out certificate.der
  4. You need the whole trust chain, however, so in my case I needed the GlobalSign Root CA, which provides a DER file too
  5. Copy your der files to the phone

Doxygen standards

Submitted by nk on Tue, 2010-05-11 18:07

Please read the much evolved Doxygen standards. Common mistakes include forgetting a newline before @return, and function doc has to start with 3th person verb. Props to aspilicious for working tirelessly on fixing these errors and to jhodgdon our API documentation maintainer.

Put up or shut up

Submitted by nk on Sat, 2010-05-08 08:18

If you have not participated in core development then please do not write ill informed, baseless derisive blog posts and especially not to the Drupal Planet. Critique is good, baseless bashing just makes those who actually do the work feel depressed, angry and sad. I now abstain from reading the development list, the forums could we please keep at least the Planet a place which a developer can read without wanting to hit something? kthxbye

How to foster contribution?

Submitted by nk on Fri, 2010-04-30 19:38

I often lament that new Drupal community members are not like "old" and they are not contributing enough. But... do they have enough incentive and guidance? I go to drupal.org, click download, gather everything I need to create a site, I can't see much asking for contributing. The Documentation top tab is better because that does ask but then again it's a bit of a "wall of a text" and people might just skip it. How can we better guide the newcomers to turn to contributors?