There is a discussion going on in php land about introducing closures and lambda functions, there was even a discussion on haskell-cafe about it (chx strikes again ;). About time, I would say. Having this functionality is a bonus. Having it implemented badly or half-arsed is going to do more damage than help. This is a short summary of what do I understand from the rfc and what do I think about it.
What helped immensely of all these first days was The Drupal Cookbook (for new drupallers). It is a great resource, indeed. The only problem is (I think) that if this is your first CMS, you will find you need to be like an intellectual Shiva, learning on the go new concepts, new ways of thinking about the site structure, a whole new vocabulary to learn and, at the same time, get your hands dirty with the nits and bolts of the actual site.
http://drupalfordummies.blogspot.com/
And you gain super cow powers. Nuff said ;)
Kudos to the docteam.
Lately I was looking into how to reduce the spam traffic to this website. Not just comment spam, but various harvesters and other nasties. They steal too much http bandwidth.
.htaccess methods are tempting, but they have a huge disadvantage - they are static. DNS blacklists can be used to dynamically query 'is this ip a known threat?'. One such list is provided by project honepot. They have an apache module in beta implementing it. If you don't have the option, or want a bit more dynamism, you can do the checks from your own php script.
In drupal there is already an httpbl module, but I decided not to use it. It looked easier to just insert the checks in index.php. The other benefit is that I can interfere before the drupal bootstrap has even started. The downside - none of the goodies provided by the module. I used a modified version of the script provided by planet ozh.
There are quite a few interesting computer science artefacts in Drupal. I'm going to try to highlight a few of them. Sorry, this is unfinished, and might not be finished ever, but I'm just trying to capture a snapshot of confused meandering thoughts.
Late binding came to popular life with the advent of object oriented languages. Essentially it means binding of values, for example functions, to names at object creation, as opposed to compile or link time. In drupal, this can happen at any time, more even, it is algorithmic - that is you can change at runtime what is to be executed at a specific control point. The hook system is one of the ways to do it.
The state of affairs with files and file handling is strange.
The second alpha of the docs module for drupal is out. I've been doing a bit of code cleanup, and I'm moderately happy with it.
There are a couple of unfortunate consequences of the reliance on upload.module, for example the node edit. While the maintenance is simple, which is paramount, docs doesn't provide a mechanism to upload a revised version of a file. That is due to the way upload.module has it's revisions logic. It is possible to do it, but I decided to leave that out completely, opting for creating an add-on module for that. The logic is simple - not everyone will need it, so keep the core docs module as simple as possible. It is complicated enough, without doing anything really special.
This is for John, mainly, but anyone else read on, if you fancy it. Expect me to follow my website motto. This post is a patchwork of thoughts coming from going through actions module, some of those can be damaging or tedious or both.
I had a look at actions, it looks good. Can be cleaned up, but it is better to see what needs to mature further. The api reminds me of one ofthe evaluation models for lambda calculus (don't ask which or what - no clue, I'm bad with those things, if ain't in me bookmarks it ain't in me head).
The primitive, that is php coded actions, are atomic, and defined in some (environment) context. Something like action( $context, $arguments). Conditionals can be defined, for D7, for example. If the conditionals are cond( $context, $pred, $then, $else ). Since we are passing the context explicitly, nothing stops us implementing action closures - not on atomic actions, but on the upper level by adding something like a procedure, or abstraction, or whatever you like to call it, which has very simple 'stack' semantics. abs($context, arguments ) body the arguments get added to context if this form is used. Effectively something like this might happen (the meaning of the following, not how you would write it):
After 8 months of development we are ready to release Drupal 5.0 to the world. Today is also Drupal's 6th birthday, so the timing could not be more perfect. Drupal 4.0 was released in 2002 and finally we feel confident to increase the major version number from 4 to 5.
There are improvements in the install, the administrative UI ...
It is a bit scary under the hood.
Garland is simply gorgeous.
The final result, as voted for by judges from The Open Source Collective, MySQL, the Eclipse Foundation, and 16,000 users on http://www.PacktPub.com saw a tie for first place between Joomla! and Drupal. In the event of a tie, a fourth independent judge would be brought in. This was Apoorv Durga who is a member of CM Pros and runs his own blog http://apoorv.info/ on portals and content management. This crucial vote ended up with Joomla! triumphing over Drupal by one point.
The final result was as follows:
1. Joomla!- $5,000
2. Drupal - $3,000
3. Plone - $2,000from http://www.packtpub.com/article/open-source-content-management-system-award-winner-announced
FSFE started drm.info - a collaborative information platform. Collaborative + information => Drupal. Obviously the designers/developers though so.
While on the topic of DRM - you could check (yes, you Apple fans and iTunes addicts, I'm looking at you, and I'm not blinking) the Deffective by Design campaign. Looks like it has been drupal fueled as well.
If you are inspired, feeling lazy yet subversive, you could tag appropriate, that is products encouraging/using DRM (Digital Restrictions Management) with the defectivebydesign tag on amazon.