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

Advanced debugging with PHPstorm

Submitted by nk on Fri, 2013-04-26 03:57

It seems relatively easy (ie. zero configuration) to get PHPstorm and Xdebug up and running together, so I will presume you have that going. It often happens that you want a breakpoint in a frequently called function. Just putting one will make the system stop there every time. After a right click, Edit you can add conditions to it which help. Even better, you can add a breakpoint to somewhere else, remove the suspend checkbox from it and make the first breakpoint disabled until the second is hit. This allowed me for example to break in drupal_flush_all_caches only when fired from WebTestBase::resetAll.

Another useful tip from dawehner (I had no idea!): PHP CLI works with xdebug just fine, you just need to run export XDEBUG_CONFIG="idekey=PHPSTORM" first.

Debugging Drupal 8 plugins

Submitted by nk on Wed, 2013-04-24 19:36

When developing (with) Drupal 8, you will occasionally see the superb helpful exception from DefaultFactory: the plugin did not specify an instance class. A what did not a-do a what?? Glad you asked. For example, here's BlockManager:
public function __construct(array $namespaces) {
$this->discovery = new AnnotatedClassDiscovery('block', 'block', $namespaces);
$this->discovery = new DerivativeDiscoveryDecorator($this->discovery);
$this->discovery = new AlterDecorator($this->discovery, 'block');

Drupal 8 progress from my / MongoDB perspective: update #18

Submitted by nk on Wed, 2013-04-17 01:09

Done: thanks to the 18 months long work of swentel and yched (assisted by xjm, larowlan, alexpott and tim.plunkett) field_config and field_config_instance tables are dead and we are using CMI! Not a lot of tables left.

Drupal 8 progress from my / MongoDB perspective: update #17

Submitted by nk on Thu, 2013-04-04 05:08

First, a briefing of already committed patches: Image toolkits, aggregator processors and parsers are now plugins. The form storage is now in key-value instead of abusing the cache system. Twig is now available during install, unlocking much of the conversion -- this needs your help. Alex Pott has been named branch maintainer which will make the whole commit process much, much faster.

A sane(r) workflow to submit work to github

Submitted by nk on Fri, 2013-03-29 21:24

It really frustrates me that while github nicely automated forking, there's no "update fork" button. For me, it's tedious and difficult to juggle two remotes. Instead, I added a single line to .git/config:

[remote "origin"]
        url =
        pushUrl =

Drupal 8 progress from my / MongoDB perspective: update #16

Submitted by nk on Fri, 2013-03-22 23:22

I forgot to mention in the previous one, but I took back and the rewrote from the ground up the Make Cache interface and backends use the DIC issue which since got committed even after being fixed by others :) Obviously, anything using the service container is win for us. Right now I am working on the database upgrade path -- we had tests for that but not every code path had tests as we were unable to write tests for some of them (and accordingly they broke).

Drupal 8 progress from my / MongoDB perspective: update #15

Submitted by nk on Thu, 2013-03-14 09:05

The entity team was busy: Nodes are using the new Entity API and Taxonomy Terms are not far behind. All the field types are also getting integrated with the new Entity API. Given that the new entity query only works with entities and fields integrating with this API, it's really great to see this happening.

CMI got a new override and context system. This, as usual, is only relevant to my goals as I am utterly dependent on the success of CMI :)

Drupal 8 progress from my / MongoDB perspective: update #14

Submitted by nk on Sat, 2013-02-16 08:45

A short one because not a lot of time has passed but two commits worths a quck post: Aggregator support for entity queries has been committed and also we have an aptly named 'drivers' directory database and other drivers can live. I will work on getting drush and update.module support for the db drivers there.

PSA: Twig was not added because Symfony

Submitted by nk on Fri, 2013-02-15 11:28

Before this gets too much traction: We didn't add Twig to core because Symfony uses it. I know it became popular to add anything that Symfony does based on the features it provides. Now, I started the Twig movement and I don't work like that. In fact, I feel frustrated and somewhat insulted that anyone presumes I would operate like that. My No1 priority is security. It always was. It always will be. To quote the original issue:

Are you confused by Behat / Gherkin?

Submitted by nk on Wed, 2013-02-13 20:24

I presume you read some Behat/Gherkin tutorials which go: "With BDD, you write human-readable stories that describe the behavior of your application." Well, WTF, how does that human readable story become code? The answer is, which I have never seen clearly written: you write it, without any help, whatsoever. Behat does not provide any assertions, any helpers, it's an extremely thin test runner. You need to write a test class, mandatory name "FeatureContext.php".