- 2012-08-19: Working on the new Drupal 8 Entity system at Drupalcon Munich
- 2012-06-15: Working on the new Drupal 8 Entity system at DrupalDevDays Barcelona
- 2012-03-23: Working on the future Drupal Document Oriented Storage at DrupalCon Denver. D8 or later ? Bets are on.
- 2011-09-01: Building an Unfuddle to Drupal Casetracker import module using Migrate
- 2011-08-28: Back from DrupalCon London and its WSCCI code sprint. Wow.
- 2009-11-29: mongodb_watchdog module created by dereine, ported to D7 by me in about half an hour, and migrated in a larger MongoDB project by damz before the hour ended. Wow...
It is usually considered a given that "private" downloads, going through Drupal, are slower than "public" downloads, which can be served directly by Apache, or whatever web server the site is running on. This is indeed true in the general case; however, for low-cost hosting, this apparent axiom needs to be revisited.
I recently had to install Drupal 6.x for a french government agency on a low-cost hosting plan. Although the site performed reasonably well considering the limitations of the chosen hosting plan, I soon noticed it was missing mod_deflate and mod_expires, which caused pages to be served uncompressed and every static file to be served without an expiration date.
And, of course, the site had quite a few images: photos on most pages, and several logos at the bottom of each page.
Now, when mod_deflate is missing, using the "Page compression" option on
http://example.com/admin/settings/performance is a good workaround for the download page size, but what about the static files ?
Checking a few cheap hosting plans, it appeared these limitations are actually quite common. And without mod_expires, there is no way to tell Apache to serve static content with specific headers. Luckily for us, with Drupal we have a trick up our sleeves, the so-called "private" file downloads.
Spending most of my web time in Opera, I had noticed that on one of my PCs, hovering over a hypertext link (i.e.
<a href="..." ...>) had ceased displaying the target of the link in the UI, and there didn't seem to be a setting to make it appear again. Even when upgrading, that annoying behaviour kept stuck.
As one can expect, it turned out to be simple to fix, just not obvious in the Opera UI. Here is the procedure:
The problem : Drupal awfully slow on Vista (and Seven) with Wampserver
For some time now, I'd been severiously annoyed by the (utter lack of) performance of Drupal 6 and 7 on my home PC, which happens to be running Microsoft Vista: considering I was used to getting page times around 200ms on a fractional Celeron with Apache 2.2 on a Linux server hosted comparatively far across the net from that same machine, I felt the 5 to 15 seconds response time per page on this local machine with a quad core and 3 GB RAM were really making me lose my time.
After some time spend googling around, I stumbled upon an incredibly simple tip, which made the 5 to 15 seconds per page drop down to around 1 second when logged in, and well below 500 ms when not logged in. It's incredible what ONE single character in a plain text file gets you under Vista :-)
UPDATE 2010-01-23: David Hogg tells us (see below) that this works for Windows Seven too
So at long last, GW8 is becoming reality :
As a long time developer on GroupWise (hey, I did this even before I started on Drupal !), I'm glad to see the product evolve. And already a planned upgrade for a customer :-)
Now, if I could find a project merging both... to this day, I've only used Delphi, both with OLE and SOAP, to communicate with GW.
Having to use Trac instead of our usual Drupal Project* setup for a new Drupal project, I just found out a problem which perplexed me for a moment: after following the instructions from the Trac site for a very basic setup, without SVN integration, all seems to work well, up to the point where I started the server.
# tracd --port 8000 /var/www/trac/proj1
... and went to my browser to http://www.example.com:8000/ only to receive an almost empty page, just saying "Available Projects" and nothing else. No error during
trac-admin initenv. And the page was well-formed, showing it was likely not an actual bug.
Googling around the problem showed the issue to be already known, but offered no hint about the solution. What could be wrong ?
If all of a sudden you notice that the
SELECT elements in your Drupal forms increases to 4 and any smaller size is ignored...
... maybe you've already forgotten you were using Chrome, and it is not a Drupal bug : this is a "usability" feature of WebKit. See http://trac.webkit.org/browser/trunk/WebCore/rendering/RenderListBox.cpp#L67.
Safari users are probably used to it, but for users of other browsers, this is a bit disconcerting.
Using a graphics library, be GD, ImageMagick or anything else, is convenient, but carries a price to pay: unlike most Drupal parts, which are generally database-bound, image generation is typically CPU-bound: generating many images on the fly can significantly increase the CPU load on a system, while Drupal setups are typically not optimized for this, and could result in problems if you are using Drupal on a shared hosting account. So what ?
previous post, we saw how to create a XHTML progress bar widget for Forms API, using
theme_progress_bar. The next logical step is now to create a graphical equivalent to that progress bar, as an example for far more advanced fully graphical widgets made possible using a similar mechanism.
Wouldn't it be nice to have that progress bar available as an extended version of
markup that would graphically display a value in your forms without stuffing it in a
markup element ?
For some reason or another, I've noticed several new Drupal developers these last few days sweating on Forms API, and thought it would be nice to have a smallish example to complement the unavoidable FAPI reference and Guick start guide, for a typical non-basic form: one including set of checkboxes in a table, with a customized display, like the core user, content or modules administration forms. So follow me while we build this example.