MVC in (Fuel)PHP

(originally posted on fuelphp.com)

While developing FuelPHP 2.0 we took a critical look at all established web application concepts. Nothing was considered out-of-bounds, not even the most well known of all: Model-View-Controller.

When attempting to explain the concept of ViewModels within our framework I often get the question shot back “but what advantage does that have over a controller?” The problem this signifies isn’t that the ViewModel duplicates functionality, rather it’s a symptom of a fundamental misunderstanding of the Controller concept – indeed the whole MVC pattern.

Don’t feel bad if you are one of those people scratching your head over this, it’s a logical consequence of the common and widespread implementation in PHP and other web frameworks. But that’s not where MVC originates, the pattern was designed in the context of old fashioned PC applications. For this type of applications the environmental constraints are very different from those imposed on your web application by the HTTP protocol. And to understand this difference we have to start there.

The origins of MVC

The fundamentals are of course always the same: a seperation of concerns. You divide the logic between the concerns of your application (the controller), the data retrieval/manipulation (the model) and user interaction (the view). But the implications of this in a continous persistantly running application are very different from those on the web that need full request-response processing for each user interaction.

I have seen it argued that this very difference makes the MVC pattern unfit for the web, but I always felt that’s missing the point. The seperation of concerns is always a good idea, a principle more logically sound than MVC is hard to find. The problem however is that the common implementation of a controller and a view no longer fit their original concepts. And when you don’t separate the concept from the implementation, such a charge is actually more of a straw-man argument than an actual critisism.

The common implementation

With a display language (HTML, Javascript) that is different from the backend (PHP, Python, Ruby) some new hurdles need to be taken that were not a problem in the original implementations.

Views used to be entities that generated what was displayed and ran the user interaction. Not the actual actions that the interaction lead to, but it did make sure those interactions were routed to controllers that decide what to do with them. In PHP however the views were HTML, with which came the logical consequence that they are best kept logic-free. Otherwise you’d get an unreadable mix of HTML and PHP in a single file. Something you would expect a decent framework to prevent.

This however does create a problem: the View specific logic has no place anymore…

…and it is where the problem starts for Controllers. People tend to solve this problem by putting the display logic (that has little to do with running the application) into the controller instead. It prevents the unwanted mixture of HTML & PHP in the View, but creates a new mixture of application and view concerns in the Controller. Which completely breaks our original intend when implementing the MVC pattern: seperating concerns.

Another problem is that the concept of a Controller changed. A controller was meant to be a functional entity that handles the application flow and interacts with Models and Views. For the web the Controller was implemented as a class with methods that the routing might lead to. But in almost all cases this fundamentally changes the concept. No longer a single functional entity, but more a container for a set of entities. Entities that for most developers are not considered as smaller parts of a bigger whole. The routing ends up deciding which method is called and the controller has no say in this and is actually little more than a container label.

Which introduces the concept of routing in a web framework. Without the persistant state of a PC application we can’t couple a View interaction directly to a Controller call, it needs a new HTTP request to do that. And the new request runs completely isolated from the previous one. Routing adds a new layer of logic to this that takes the input and decides which controller will be used.

Ok… why does this matter?

Obviously these implementations were done for a reason and they are not bad in themselves. But the problem of an implementation that gets copied instead of the concept is that the concept and its intentions get lost. Which is what happened with MVC. Views became incapable of doing anything functional, and of the controller concept little more was left than buckets of loose sand.

Something new arose that shouldn’t really bear the MVC label anymore.

But things also started to get a little bit confusing. The Laravel framework for example introduced the concept of MVR (Model-View-Router) with routes that contained Closures instead of Controller class paths. The problem here is not the executable routes themselves, a fine concept we have implemented as well. The confusing part is the label, which implies that this is something new and different while it isn’t: An executable route is a functional entity that handles the application execution based on user interaction, also known as a Controller.

(note: this is not meant to be a dig at Laravel, it is just an example of how mixed up the terminology has become)

How does FuelPHP handle this?

In our current stable 1.x branch we handle Controllers pretty much like everyone else. Routing is done to methods (“actions”) and the Controller is little more than syntax. Closures/callbacks are also allowed and handled differently from Controller classes (implying they’re not controllers).

ViewModels are already a part of the solution. They are functional entities that handle the view logic and decide which “view” (HTML template) to call. This allows you to remove any view-specific concerns from your controllers. In our implementation, ViewModels are not really a new concept. They are in fact more of an implementation of what Views should be in MVC. Making the common PHP implementation (of view files containing HTML and variables) little more than another resource loaded by the ViewModel, just like a config or language file might be loaded.

In the current alpha of 2.0 we went back to the original concept even further. Routing is no longer a simple bit of string manipulation to translate an input URI to something that maps to a Controller’s classname. Instead, routing now always returns something executable, whether that is a Closure, a callback or… the common instance of a Controller class. This last part is handled by giving the Controllers a PHP magic method __invoke(). This will allow instances of the class to be called like a Closure.

The executable controller returned by routing gets passed an array of URI segments that may help it decide what to do. In the case of a controller class this will most likely be calling an ‘action’-method.

While this will be mostly philosophical to many users, with little practical implications, it is not trivial. Interpretation and implementation of concepts is important. And to keep the concept of MVC relevant and useful we should remember how the pattern was meant to be implemented, not just the implementations we learned first. This is part of our job while continuing to develop our framework, especially when working on a new version and re-evaluating concepts and implementation.

Posted in PHP

FuelPHP: Why the 2.0 changes?

(originally posted on fuelphp.com)

A question that has been asked many times about 2.0 is “why the big changes”, in this blog I will attempt to explain the choices made and place them in context. But let me also begin by saying that if there weren’t any big changes in it, it wouldn’t be a 2.0 version but just a 1.x version that got bumped beyond its station.

First to ease some of the fears: we will make a static interface available for 2.0 classes and a Legacy add-on that will almost completely mimic the 1.x usage. And for those classes that already work primarily with objects after forging them: little will change but for the way you forge them.

A bit of history

Fuel began when Dan broke with CodeIgniter because it had become stale in his, mine and many other minds. It’s codebase had been written originally for PHP4 and as they never took a leap and broke with the old base it was basicly still a PHP4 framework at the time (and even though they got the community involved to expand it, the architecture remains unchanged).

With the CodeIgniter experience and knowledge he started Fuel and was joined by Phil, myself, Harro and Frank. All of us came with backgrounds in an array of frameworks such as Ruby on Rails and Kohana, but mainly CodeIgniter. We had the desire to create a more modern framework, for PHP 5.3 taking on board some of the lessons learned by other frameworks.

I feel that with 1.0 and especially 1.1 this was a goal we reached. For me the framework allowed my applications to grow beyond what would have been possible in CI.

But as we improved we also took some baggage with us that stayed in one way or another. We got rid of the Singleton-like core class concept and implemented everything as static Multitons. Which is an improvement over CI, but still has the downside of a global scope. And this became at the same time our biggest boon (easy static syntax and instances available when required) and our biggest limitation (global scope).

The global scope gave as various problems when we started to think about where we wanted to take the framework next. But most of all it was very hard to unit test some of the most essential core classes. And the lack of unit tests has given us problems with each release that should have been easily preventable.

The next step

Some of the plans for 2.0 already entailed:

  • wrapper objects for applications (allowing multiple active applications in runtime)
  • wrapper object for the environment setup
  • input overwrites for each HMVC request
  • replacing the multitons with a Dependency Injection Container (DiC) behind the scenes

As you may conclude this means some new layers that give more context to your application than currently available. Right now each application is at the same time its environment and really doesn’t differ that much from the controller context. To get that to a level that allowed for nesting multiple application objects that live within an environment object, I had to eliminate pretty much all the global scope available. Which in the end came down to eliminating all static methods as all those broke context and could take an application context from global while working inside another.

When the essential core classes became ignorant of global so had everything else. Where 1.x had had essentially no inversion of control, 2.0 is suddenly using a DiC and setters all over the place. Where the global state had been binding things together in 1.x, the 2.0 code is held together by a beautiful object graph.

What does this mean?

The most important improvement is that it will be possible to test every class in full isolation, thus making unit testing much easier. Having the core fully unit tested will also be a requirement for the first 2.0 release.

Most of the core classes you use regularly won’t really change. Views will still be Views, Controllers are still the same thing and most of the current libraries will be ported over with little functional changes (except for those mentioned on the roadmap). But as you may have understood by now the big change is that the Core packages of 2.0 will no longer contain static classes. That doesn’t mean that the syntax is gone for everyone though, those of you who don’t mind a global state but do want the new and unit tested codebase will still be able to make the old calls on the new codebase using static calls. And of course nothing has to change either in your own classes, if they were static or if they aren’t fit for usage with a DiC: autoloading will still work as before and no code needs to be changed on that account.

But what will the new non-static syntax look like? Some of that is not yet clear, and we are still thinking about improving it. But one thing is for sure: any core class object always needs to come from somewhere, either as an Environment, Application or Request property or from the Application DiC. Classes like the Controller and ViewModels (renamed to Presenter in 2.0) will have references to the Application object that created them.

Here’s an example:

// 1.x / 2.0-legacy-enabled
$var = Input::post('var');
// 2.0
$input = $this->request->input;
$var = $input->post('var');

And for other things the difference is smaller:

// 1.x / 2.0-legacy-enabled
$val = Validation::forge();
$view = View::forge();
// 2.0
$val = $this->app->forge('Validation');
$view = $this->app->forge('View');

I know this looks like a step backwards to some of you, which is why we will keep the static interface alive. This might look somewhat like the CodeIgniter loader but is completely different. It acts just like the existing forge() methods in each class, pumping out instances to be used however you like.

We realize many of you fell in love with the simplicity of the mainly static auto-loaded class names. Where you can start working with a class by just talking directly to it without a loader, but there is also a significant downside to that. When it comes to unit testing there are two strategies called called “Stubbing” and “Mocking”, which involve faking a class to see what one class is passing to another. This is near-impossible to do if class A is talking to a static class B, as there is no way for us to “inject” a fake class B.

It also helps massively with HMVC, as Input::get() is global, but we want to have different input available so that HMVC requests emulate HTTP requests perfectly. Doing this allows developers to build up API-driven systems, then use HMVC to call that API, cutting out a HTTP request. But with the static usage the global query string of a controller could interfere with the HMVC request, causing all sorts of problems.

The static interface will continue to exist via a Static package and the Legacy add-on, but the purely OO usage is now the bread-and-butter of Fuel.

The bottom line

We are moving forward to become a better designed, unit tested and in general more flexible framework. For that it is necessary to break with some of the baggage that limits us in what is possible. At the same time we do not want to leave our 1.x users in the cold, which is why development of the Legacy package is a big and important part of the 2.0 development. But we did separate these to make both a clean break and at the same time be able to provide backwards compatibility.

A short note about the speed and memory usage resulting: at this point baseline 2.0 compared to 1.1-dev showed to be about the same speed (~7% slower on a Linux server, ~25% faster on Windows laptop) as wel as memory usage (<2% more on Linux, ~7% less on Windows). These are too early for any final conclusion on it, but are indicative of what is possible.

[late update march 13th: 2.0 is now about 7% faster and uses 8% less memory on Linux after some more optimizing]

Posted in PHP

Ik ben een Wetenschapsfundamentalist… en daar ben ik trots op

(origineel geplaatst op d66blog.nl/jelmer-schreuder)

Daar kwam hij weer eens langs. Altijd als de rechten van religieuzen en ongelovigen recht getrokken worden komen dit soort termen weer naar boven. “Secularisme” heet dat eigenlijk, maar dat wil een partij als de Christenunie ook graag als een vies woord af doen. Vannacht was het echter een koning onder scrabble-woorden: Wetenschapsfundamentalisme. In eerste instantie irriteerde dit “verwijt” van mevrouw Wiegman-van Meppelen Scheppink me, tot ik me realiseerde: Ik ben er een.

Ik laat de inleiding van de definitie van de wetenschap graag aan iemand met wat meer credits op dat vlak dan ikzelf:

Scientific method, although in its more refined forms it may seem complicated, is in essence remarkably simple. It consists in observing such facts as will enable the observer to discover general laws governing facts of the kind in question. The two stages, first of observation, and second of inference to a law, are both essential, and each is susceptible of almost indefinite refinement.
Bertrand Russell (zie pagina 1 van look inside op Amazon)

De wetenschappelijke methode betekent dat je hypothesen vaststelt op basis van onafhankelijk verifiëerbare feiten. Deze moeten de competitie aan met andere hypothesen en zijn ten aller tijden onderhevig aan controle en nieuwe inzichten. De wetenschappelijke methode is dus eigenlijk fundamenteel onfundamentalistisch.
Deze houdt namelijk dat niets houdbaar is wanneer een beter of meer objectief bewijs voor een andere hypothese vindbaar is.

Wetenschapsfundamentalisme lijkt dus niet alleen contradictio in terminis, dat is het ook.
Als geuzennaam voor fundamenteel onfundamentalisme vind ik het echter fantastisch. Laat ons dit “verwijt” oppakken.

Ik ben een wetenschapsfundamentalist, en daar ben ik trots op.

Netneutraliteit: de frontlinie tegen libertair evangelisme

(origineel geplaatst op d66blog.nl/jelmer-schreuder)

Komende week zal het er op aankomen, de kamer zal beslissen wat het woord netneutraliteit betekent in Nederland. Verrassend genoeg gaat het hierbij niet om controle vs vrijheid, kinder-porno bestrijding of zelfs copyright bescherming: de bottom line is vrije-markt vs vrije-markt, of zoals ik het in de titel verwoorde: liberalisme vs liberteins evangelisme. Het ideaal is de vrije markt, evolutie in de markt is het middel en vrijheid van keuze is het doel. De vraag is niet of of we concurrentie en vrije keuze voor de consument willen, maar of die echt bestaat in het voorstel van de andere partij. Netneutraliteit is hiermee voor even de frontlinie tussen de liberale stromingen. Onze vrijheid staat op het spel en het zal de PVV zijn die kiest tussen vrijheid voor de consument en vrijheid voor de telecomaanbieder.

Ik zal hier niet de gehele discussie over de basis van netneutraliteit doornemen, deze is eerder door Nu.nl, Bits of Freedom, Wikipedia en Webwereld (ook deze) reeds in volle glorie uitgewerkt.

Waar ik hier op in wil gaan zijn de reacties vanuit VVD hoek op kritiek op hun voorstel. Ik quote Afke Schaart (@afke1 op twitter):

  • Als het aan de pseudoliberalen van D66 ligt gaan de kosten voor data voor iedereen omhoog. En dan weer klagen dat ze omlaag moeten..” (twitter)
  • Als PVV oppositie steunt leidt dat tot flink meer kosten data abo’s. Als dat 25 Euro extra wordt is het “Geeltje van Geert” geboren!” (twitter)
  • Alleen Chili heeft prijsdifferentiatie verboden. Willen we dat voorbeeld volgen? Dat is funest voor ons investeringsklimaat.” (vvd.nl)
  • Nieuwe businessmodellen nl. helemaal nog niet bekend! Ik ken ze niet. Europese Commissie doet onderzoek, waarom nu al ingrijpen in de markt?” (twitter)
  • Het alternatief is dat de rekening van een relatief kleine groep ‘grootverbruikers’ terecht komt bij de grote massa. Ik vind dat niet eerlijk. Internet moet wel betaalbaar blijven.” (vvd.nl)

Laten we proberen te destilleren wat de hoofdargumenten zijn van de VVD in reactie op kritiek. Ik moet hierbij een beetje interpreteren aangezien mevrouw nergens direct uitlegt waarom de prijzen meer zouden stijgen bij de voorstellen van de andere partijen. Als ik hierbij iets weglaat of verkeerd interpreteer, sta ik open voor kritiek.

  1. Voorstel D66 laat geen differentiatie meer toe en daardoor gaat de prijs omhoog
  2. Iedereen betaalt mee aan “grootverbruikers”, het voorstel van de VVD maakt dit “eerlijker”
  3. De Europeese Commissie heeft nog niets besloten

Het derde punt is natuurlijk het meest vermakelijke. De euro-sceptische VVD die vaak de mond vol had over Brusselse invloed, zien hier nu een goed argument in voor uitstel (…en afstel?). Ik zou hier verder inhoudelijk zelf op in kunnen gaan, maar ik laat hierbij graag het woord aan Eurocommissaris en Vice-President van de Europeese Commissie Neelie Kroes (VVD):

  • Die verantwoordelijkheid ligt bij de landen zelf” (WebWereld)
  • Internetproviders zouden de toegang tot hun diensten of inhoud niet mogen beperken vanuit commerciële overwegingen. Het mag enkel voor de beveiliging of ter bestrijding van spam” (ZDnet.be)

Inmiddels is mevrouw Kroes zoals bekend een onderzoek gestart om te kijken wat vanuit Brussel mogelijk is. Wie de stukken hierover leest leert dat naming and shaming de voorlopige stategie lijkt te worden. Wat echter niet vergeten mag worden is dat Europa door de omvang altijd trager zal bewegen dan de nationale politiek, en waar men hier voor wil waken is dat de Europeese Commissie straks niet hoeft te reageren op de onwenselijke praktijk van een gefragmenteerd internet.

Daarnaast doet mevrouw Schaart alsof onze mobiele operatoren moeten concurreren met het buitenland. Echter iedere aanbieder die hier opereert concurreert slechts met andere aanbieders die hier opereren. De regels zouden onze aanbieders niet benadelen ten opzichte van het buitenland omdat iedere (buitenlandse of binnenlandse) aanbieder die hier haar diensten aanbiedt zich aan de zelfde regels moet houden. Als onze aanbieders het internet wel willen fragmenteren, in het buitenland staat niets hen in de weg om daar op die wijze te concurreren.

Maar laten wij ons nu richten op de hoofd argumenten 1 en 2.

1. Voorstel D66 laat geen differentiatie meer toe en daardoor gaat de prijs omhoog

Dit argument bestaat uit 2 onderdelen: het verbieden van differentiatie en de bewering dat de prijs dan omhoog gaat. In de simpele voorstelling van zaken die de VVD op dit punt bezigt, lijkt dit zelfs nog wel logisch: differentiatie bevordert concurrentie, minder differentiatie verlaagt dat en bij minder concurrentie gaan de prijzen omhoog. Dit argument loopt echter spaak op twee essentiële punten:

1. differentiatie blijft mogelijk op bandbreedte en dataverkeer,

2. dit is alleen waar als bij het tegenvoorstel geen andere problemen zijn.

Dit laatste komt neer op het volgende: mevrouw Schaart gaat er zonder bewijs of zelfs argumentatie vanuit dat de fragmentatie van het internet op basis van apps & websites niet tot hogere prijzen leidt.

Als ik straks moet bijbetalen voor WhatsApp en Facebook pakketten, zou ik snel meer kwijt kunnen zijn. Zeker als ik ook nog een YouTube pakket nodig heb om dat ook af en toe te mogen bezichtigen. En wie betaalt er dan voor mijn dataverkeer? Of moet ik eerst dataverkeer & snelheid inkopen en moet ik dan nog bijbetalen voor wat ik er mee doe? Of moet ik een YouTube pakket inkopen en betaal ik (als iemand die af en toe een filmpje kijkt) mee aan mensen die de hele dag niets anders doen? Of een combinatie van het voorgaande: koop bandbreedte in die ik niet mag gebruiken voor YouTube want daarvoor moet ik weer apart bandbreedte inkopen?

Het is nu duidelijk dat ik vermoed dat het meer gaat kosten in het voorstel van de VVD dan met het amendement Verhoeven cs.

2. Iedereen betaalt mee aan “grootverbruikers”, het voorstel van de VVD maakt dit “eerlijker”

Deze bewering van mevrouw Schaart is zo volledig onjuist, dat ik haast niet weet waar ik moet beginnen. Wat zij zegt is juist waar het voorstel van Kees Verhoeven ons beschermt en haar voorstel helemaal niets aan doet. In het voorstel van D66 neem je internet af als geheel, hoe je daar gebruik van maakt is aan jou en niet aan je provider. Als jij een beetje mail ophaalt en af en toe Nu.nl bezoekt neem je een kleine databundel en betaal je dus niet mee aan de “grootverbruikers” die de hele dag Youtuben. En als je een “grootverbruiker” bent dan koop je natuurlijk een grotere databundel.

In het voorstel van de VVD is juist geen aanmoediging voor dit soort “eerlijke” prijsdifferentiatie, het laten betalen voor specifieke websites zegt niets over het “grootverbruik”. Hier valt nog veel meer over te zeggen, bijvoorbeeld dat WhatsApp vrijwel geen dataverkeer genereert en ook Skype eigenlijk peanuts is. Echter het bovenstaande is de kern waar het om gaat, al die andere punten zijn slechts bijzaak.

Liberalisme of liberteins evangelisme

De droom van vrijheid in het liberalisme is simpel: concurrentie en keuze op een vrije markt. Liberteinen geloven dat er maar één oplossing is voor ieder probleem: dereguleren. Regels stellen is slecht en maakt de vrije markt kapot. Dergelijke ideeën zijn reeds vele malen achterhaald en ik zou er niet eens een economische crisis voor nodig hebben om daar tegenin te gaan.

Liberalisme draait om die vrije markt van ideeën, van geld, van goederen en gedachten. Liberalisme is een complex evenwicht tussen jouw vrijheid en de mijne, waar die van mij begint en waar die van jou eindigt bepaalt ons beide vrijheid. Wetgeving tegen monopolies, wetgeving tegen discriminatie en wetgeving als idee op zich laat zien dat om die vrijheid tussen jou en mij (of mij en KPN) ook regels nodig heeft. Deze regels beperken ons niet maar zorgen ervoor dat Ingrid van Engelshoven voorzitter kan zijn van D66 tegen de voorkeuren van de SGP en dat Microsoft het bestaan van Apple niet onmogelijk kan maken.

Natuurlijk schieten sommige regels te ver door en gaat het soms mis. Maar het is niet “pseudoliberaal” om de vrijheid van ideeën op het internet te handhaven ten koste van de vrijheid van Vodafone om mij geld te vragen voor WhatsApp. We worden ook niet zomaar Chili als we de kansen van de kleine ondernemers op internet veilig stellen door te voorkomen dat ik straks aan KPN moet betalen om de websites van mijn klanten mobiel bereikbaar te krijgen. In tegendeel zelfs: als slechts de grote jongens het kunnen betalen om op internet te zijn, komen we dichter bij de onvrije samenleving.

Het liberalisme is geen evangelie, het is een continue discussie tussen ons allen hoe wij onze vrijheid kunnen garanderen. Vereng die niet tot een “geeltje van Geert”, Chili of pseudo-wat-dan-ook. Voer deze op de inhoud, leg uit waarom je dingen vindt en roep niet zomaar “bij hullie wordt het duurder”.

Denk alsjeblieft nog even heel goed na voor je beslist of committeert.

Dat is mijn oproep, niet alleen aan mevrouw Schaart maar aan de gehele Tweede Kamer, als zij binnenkort bepalen of wij tot de eerste landen met echte internetvrijheid behoren of op dit gebied onze kans op een voorbeeldfunctie in de wereld laten schieten. Ooit hadden wij lef en legaliseerden wij het homo-huwelijk, gedoogden wij soft-drugs en maakten wij een einde aan uitzichtloos lijden.

Laat ons dat lef hervinden.

Voor de volledigheid: het amendement Verhoeven cs is mede ingediend door Martijn van Dam (PvdA), Sharon Gesthuizen (SP) en Bruno Braakhuis (GroenLinks). Jhim van Bemmel (PVV) heeft in eerste instantie steun toegezegd. Bits of Freedom heeft een aanmoediging/complimenteer pagina aangemaakt met hun contactgegevens.

Aan de andere kant kunt u de contact gegevens van Afke Schaart hier vinden als u haar deelgenoot wilt maken van uw (beschaafde!) afkeuring.

Classnames, Autoloading & Namespaces

(originally posted on fuelphp.com)

Recently we’ve had lots of feedback about  some of the ways in which we handle things likes namespaces, underscores in classes and the occasional bit of PascalCase in our class names. This article intends to clear up any confusion and explain to you why each decision made is a direct improvement to Fuel.

Let’s first go over how autoloading works in Fuel:

  • Namespaces are linked to an “area” of Fuel: Fuel\\Core is linked to fuel/core, the global namespace is left for your app, then packages and modules each have their own.
  • Underscores are translated to directory separators, which means Controller_Example is in app/classes/controller/example.php
  • Filenames and directories are all lowercase

We know this isn’t fully compatible with proposed standards like PSR-0, but a framework is entitled to its own standards and conventions and we chose ours carefully. I’ll explain below why the choices were made, but it’s also important to know that our autoloader is very efficient. You can add any other autoloader on top of ours and once ours is done after 1 or even no filesystem checks the other one will kick in. Thus compatibility with PSR-0 is easily added without meaningful overhead.

Now on to the choices we made for Fuel.

Namespaces

We’ve tried multiple implementations, among which were having the App in its own namespace and converting sub-namespaces to directory separators. But in the end we kept running into one thing we felt was a problem: PHP doesn’t allow you to import all classes from another namespace into your current one. Which means for example that if you’re in “Fuel\\App\\Controller” you’ll have to import (“use” in PHP terminology) all classes from “Fuel\\App” or call them with full namespace attached. And this goes for all sub-namespaces.

In the end a choice was made we felt wasn’t perfect but it was the best of multiple evils caused by the way PHP has implemented namespaces. Your App resides in the global namespace, something we feel is acceptable because everything else should be namespaced while your App is the main part and has a right to be in global.

The Core was given its own namespace in “Fuel\\Core”, and its classes are automatically aliased to global when called from global and unknown there. For example calling the class “View” will fail if you have no such class in your App, but then it looks into the “core_namespaces” in the autoloader and finds a class “Fuel\\Core\\View” which is loaded and aliased to “View”. (you can also add more core namespaces which will function the same way, the Auth package works like that as well for example)

Because of all this the utility classes are always available in the global namespace, and when you call them from a Module or Package you can be sure that they’re available like “View” and not “Fuel\\App\\View”.

Then came packages and modules. These were some more complex decisions but it came down to this: we feel that classes from either a package or a module should be usable everywhere else as well (when you’ve loaded the package/module that is). If we put those in “Fuel\\Packages\\Pkg_name\\Classname” they would be awful to reach, which is why we decided to put them in just a single namespace. “Pkg_name\\Classname” is easy to use and to remember.

Cascading FileSystem (CFS) and how namespaces changed that

One of the things that was inspired by Kohana is the way we’ve setup our filesystem. The basic idea was that you can copy your core/packages/app all into each other and things would still work. The way this was done was by prefixing all core classes with “Kohana_” and have empty extensions of those classes without the prefixes. Now if you were to extend such a class you would just create the class without the prefix in your App and extend the original class with the prefix (which would be taken from core). Namespaces changed all that.

When we decided to start using namespaces we also decided to bind them to specific areas within Fuel. This means that there’s no longer a problem when you have an extension in your app and one or more packages. The App will always take precedence over anything else, but the others can still be used when you include the full namespace. This made the use of another prefix like “Fuel_” unnecessary as the namespace bound to a specific location already did that job.

The Fuel CFS is no longer the same as Kohana’s CFS, but its remnants are still visible. The same ease of understanding to where a class can be found still applies, because you know exactly where to find any class. It will be a direct representation of its class name, in a subdir of classes of its namespace “area”.

Note: views are still loaded in the same way as Kohana’s CFS. Config and lang files are loaded from core, packages and app and merged with the later ones taking precedence over the earlier locations (current module comes last when the current controller is part of a module).

Underscores

We’ve explained why namespaces don’t simply map to directories and why we don’t make extensive use of sub-namespaces. But we still need to have a clear directory structure. By keeping this pre-namespaces convention of translating underscores to directory separators we allow the advantages of having things in the same namespace (no importing classes, no fully namespaced class calls).

Fully lowercase paths

This decision was taken because basically we feel it leaves less room for mistakes. A common error in other frameworks is that files that should be uppercased on the first letter end up lowercase and vice versa. In many development envronments such as OS X the file system is often cases insensitive so this does not error, but as soon as the project is deployed to a case-sensitive live server things all fall apart.

Instead of having to check if you got every uppercase/lowercase character right in a full path, you only have to check if they’re all lowercase.

Posted in PHP

Dependency Injection and Fuel

(Originally posted on fuelphp.com)

Yes, we use static classes. So that must mean the principle advantages of dependency injection are impossible right? Wrong.

Dependency injection is about making it possible to completely replace a part of the composition of objects that work together. To reach this goal you should never use “new Object” but always expect the new object to be given or set on your class. The reason you don’t use “new” is that you don’t want to be tied to that specific class, you want to be able to “inject” another implementation without trouble. It is however still possible to use the object because you know what interface it extends and you know what to input and what to expect as output.

In Fuel we don’t use or implement Dependency Injection in the sense that we use setters or in the sense that we give a specific object to the constructor. Thus this blog is meant for those open to alternative solutions, those interested only in the specific aforementioned implementation are probably best served elsewhere.

We have implemented the framework in a way that allows for complete replacement or extension of a class without rewriting a single line outside of that class. This has been done in 2 ways:

Extensibility

In Fuel any class from the core can be extended or replaced in the global namespace. This new class will then be used by the core classes as well as by your application. The way this has been done is that all core classes live in the “Fuel\\Core” namespace and when a class like “View” is requested and not loaded into the global namespace we check the Core for the class, load it and alias it to global. If you want to use another implementation you can just extend or replace the core class in the application (or a package) and register it with the autoloader. After that your implementation will be used everywhere instead of the original Core class.

This isn’t really injecting of course in the classic way, it uses an expected classname to access an unspecified class. Thus the injection is in a way to the expected classname.

The question is if this is really that different from expecting a specific interface. It may not look like classical dependency injection, that doesn’t mean it can’t reap the same benifits.

Factories/Drivers

Another way we have used to implement the principle of dependency injection is by using drivers for some classes. The Session class for example is always accessed through either static usage or creates a new object with a factory:

// use your default driver to retrieve a value "some_var" from the session $some_var = Session::get('some_var'); // use a specific named config to retrieve a value from that session, you can change // the config if you want $session = Session::factory('admin'); $some_var = $session->get('some_var');

To some this may look like a fixed class, but in truth you’re workin with Session_Cookie, Session_Db, Session_Redis or any other driver you might configure it to use. Again in this case: nothing is set on my object or given as a construction arguement but I can replace/configure it to use any replacement or extension I want without changing the existing code that uses the implementation.

Bottom line

While we haven’t implemented Dependency Injection in the classical sense, we do allow you to “inject” anything you want. The limitations for both the classic and our solution is that the interface must stay the same, but instead of expecting a variable on your object you can use static class calls. I know that we’ll never agree if you’re a purist/evangelist, but if you’re a pragmatic coder our options with drivers & extensions will probably serve your needs just as well.

Posted in PHP

“Never question another man’s motive. Question his judgment but never his motive”

(origineel geplaatst op d66blog.nl/jelmer-schreuder)

Deze quote kwam afgelopen nacht bij mij bovendrijven in de context van de politietrainingen in Afghanistan. Het lijdend voorwerp in deze was Jolande Sap die volgens Twitter-analist Kaj Leers een “wit voetje” wilde halen bij het kabinet. Toen ik hier aanstoot aan nam haalde ik in de discussie deze quote aan en noemde deze wijsheid. Na het besluit van die discussie volgde even later een vrij zinloos vervolg met een 3e persoon die zowel de ondergetekende als de inhoud van de boodschap als dom en naïef bestempelde.

De vraag die ik me hier wil stellen is: was mijn kwalificatie juist en was dit niet ook het probleem van het debat in de kamer?

De quote

Ten eerste een stukje achtergrond. De quote van van een zekere Senator Mansfield en kwam mij ter oren in de speech waarmee toenmalig aanstaand Vice-President Joe Biden afscheid nam van de Senaat. De context van het verhaal was dat het een wijsheid was die de oude wijze Mansfield aan de toenmalige jonge nieuwkomer Biden gaf bij zijn aantreden in de Senaat.

Iedereen die door het volk gekozen wordt heeft iets basaal goeds in zich dat zij in hem of haar zagen. En als je daarvan uitgaat kan je met iedereen samenwerken. Aldus de wijsheid.

Zoals met iedere quote is het de context die betekenis geeft, en zoals met iedere wijsheid is hij ook niet van onbeperkt bereik. Het ideaal is dat je in een volksvertegenwoordiging zit om het leven van anderen te verbeteren en dat ieder ander er zit met diezelfde opdracht. Het principe is dat je met al die anderen kan samenwerken om je eigen, en soms ook hun, doelen te bewerkstelligen.

Waarschijnlijk niet op ieder onderwerp en eigenlijk hoef je elkaar niet eens te mogen.

Maar waarom dan niet iemands motieven in twijfel trekken, doen die er dan niet toe? Was na het weglaten van woorden als “naïef” en “dom” de uitdaging die ik vervolgens voor mijn kiezen kreeg.

Uiteraard doen motieven ertoe, de vraag is echter wat je wilt bereiken en vooral of je iets kan bereiken door de motieven in twijfel te trekken.

Iedereen die ooit een serieuze discussie heeft gevoerd welke hevig werd, kent de tekenen waar het mis gaat. Soms zijn het krachttermen en soms zijn het precies die onbewijsbare en ongrijpbare beweringen over je “echte” reden voor een mening. Wanneer het niet meer de inhoud is die telt maar de boodschapper wordt aangevallen verzandt de discussie en verliezen beide partijen. Dit laatste niet omdat sowieso beide naar huis zullen gaan met een slecht gevoel, in tegendeel waarschijnlijk in veel gevallen. Echter de winst werd niet geboekt op het inhoudelijk gelijk maar op de vernietiging van de boodschapper.

Mag je dan nooit de motieven van een ander in twijfel trekken en moet je bijvoorbeeld omkoping of populisme maar gewoon laten lopen? Ook hier is het antwoord weer dat het uiteraard belangrijk is, maar het is een paardenmiddel dat pas uit de kast getrokken zou mogen worden wanneer alle andere argumenten uitgeput zijn. En dit laatste geeft ook al aan hoe zwak je meestal staat wanneer je dit punt bereikt: Wanneer alles wat je nog rest een wanhopig “jamaar jij!” is.

Eerst moet de vraag gesteld worden of je nog wel kan bereiken waar je op uit bent, want als je dit niet bewezen krijgt zal iedereen zich je wanhoop en niet het verwijt herinneren. Laat je ook vooral ook niet meeslepen door de ander, maar bevecht een heftig vuur ook niet met een glaasje water. De gulden middenweg is moeilijk gevonden en het gelijk duurt het langst, echter winst op ongelijk heeft een spoedige houdbaarheidsdatum.

Never question another man’s motive. Question his judgment but never his motive.” Het is een wijsheid in iedere discussie en een ideaal om zo lang mogelijk na te streven.

Daar sta ik achter.

De actualiteit van een politietraining in Afghanistan

Helaas toont de werkelijkheid weer dat het zelden zo simpel is. Dit was een discussie waarbij de emoties hoog opliepen, en wat uitgesproken een voorbeeld was van wat ik eerder aanhaalde. Verwijten op het persoonlijk vlak begonnen al vroeg en gingen over en weer. Ook “krachttermen” in de context van een kamerdebat met woorden als “naïef” werden veelvuldig gebezigd.

Van mijn kant zou ik graag roepen dat PvdA/SP/PVV hun eigen politiek gewin belangrijker vonden dan verantwoordelijkheid nemen en het leven van de Afghanen leefbaar te willen maken. Van hun kant kwam het verwijt van naïviteit en werd er in woorden als “achterkamertjespolitiek” gesuggereerd dat er meer motieven speelden. Populisme riep Brinkman nog plots richting Pechtold en naïef was Sap volgens Thieme.

Gezien mijn eigen emoties bij het aanzien zijn vooral die laatste mij bijgebleven, maar er zijn eveneens harde woorden de andere kant op gegaan. Dit alles bereikte een dieptepunt in de kamer waar Stef Blok het nodig vond om zout in de wonden van Cohen’s premier aspiraties te smeren. Hierbij dreef hij zijn punt, van origine terecht lijkende, zo ver door dat een moreel gelijk op die wijze irrelevant werd.

Ik heb meer verwijten gehoord richting elkaar dan argumenten op de inhoud, maar misschien dat dit was omdat ik pas aan het einde van het A.O. instapte. Hierbij gaat niemand geheel vrijuit, en het zou ook de boodschap hier ontwaarden om wel één kwade aan te wijzen.

Afgelopen week en ook de nasleep hadden maar over twee dingen moeten gaan: wat willen we bereiken en kunnen we dat bereiken. Mijn gevoel is uiteindelijk dat de NRC de spijker op z’n kom sloeg met het hoofdredactioneel commentaar van gisteren. Vreemd genoeg blijkt na al deze verwijten niemand zich door de waan van de dag te hebben laten beïnvloeden, allen waren consequent. Zij sloten af met een stuk tekst dat ik graag onderschrijf:

“Dat was consequent – zie weer de motie [...] Sap en de haren handelde zonder last. En zo hoort het.”

De schuldvraag

(origineel geplaatst op wereldvanvandaag.nl)

We zagen het allemaal al tijden aankomen, zij zelf eigenlijk ook wel waarschijnlijk. Na 16 uur overleg en vele lijmpogingen, interne overleggen met ook fractieleden en zelf PvdA partijleider Ploumen erbij, was het dan afgelopen.

Publiekelijk lijkt het eenvoudig: Wouter Bos heeft bewust de overleggen opgeblazen. Ook de pers lijkt deze lezing te volgen, echter de vraag is of het zo simpel te stellen is. Juist de PvdA heeft weinig te winnen met snelle verkiezingen, ook al is hun breekpunt nog zo principieel.

De barsten werden afgelopen donderdag al zichtbaar, de vraag is waar de waarheid zat in deze barsten. Loog Bos over zijn kennis van de brief? Loog Verhagen over hoezeer hij de NAVO duidelijk had gemaakt dat bepaalde opties moeizaam lagen? Heeft Balkenende in deze geen leiding gegeven? Of juist de verkeerde leiding gegeven aan zijn partijgenoot Verhagen?

Alvorens de vragen te beantwoorden is er een ander probleem te tackelen: wie is te vertrouwen? Idealiter kunnen wij al onze bewindslieden vertrouwen, echter de ervaring leert dat halve waarheden, politieke werkelijkheden, kennis van toen en meningsveranderingen de waarheid nog wel eens moeilijk vindbaar willen maken.

Om te beginnen is daar onze premier. Zijn betrouwbaarheid is na het rapport Davids erg in twijfel gekomen, over liegen wil ik niet direct spreken maar het willens en wetens onvolledig inlichten van de tweede kamer ligt daar niet ver vanaf. Daarnaast heeft JP ook nog zijn rechterhand en politiek spinmaster Jack de Vries altijd bij de hand die als geen ander halve waarheden tot publieke kennis weet te verheffen. En met die capaciteit komen we bij het meest bekende verwijt aan onze, nog net zijnde, minister van Financiën. Draaikont Bos was hij geworden na de briljante verkiezingsstrategie van het CDA onder leiding van de voorgenoemde personen. Het probleem van Bos is in mijn gevoel altijd geweest dat hij eigenlijk een sociaal-liberaal is die de standpunten van een gematigd socialistische partij moet vertegenwoordigen. Ik vermoed dat deze interne tegenstrijdigheid zich heeft geuit in vele onduidelijke uitspraken. Hierna konden zijn politieke vijanden zijn voorzichtigheid en onduidelijkheid “spinnen” (verdraaien) tot positieveranderingen. En hiermee pakten zij een halve waarheid (“wat u nu zo zeker wist, zei u vorige week nog niet”) en maakten zij hier een draaiend aangezicht van.

Maar de halve waarheid gecreëerd uit onduidelijkheid is dan ook weer Bos zijn grootste zwakte: hierdoor moet de pers hem uitleggen en laat hij ook ruimtelijk toe dat de verkeerde lezingen van hem ontstaan. Deze moet hij vervolgens weer recht zetten wat het imago van draaikont versterkt en het moeilijk maakt altijd te weten wat hij nou eigenlijk wil zeggen. Tot slot combineert hij dit alles ook nog met een politieke handigheid in praten, maar enorme onhandigheid in presentatie. Zelfs vannacht tijdens zijn persconferentie Amerikaanse stijl kwam de irriterende glimlach weer op zijn gezicht terwijl het over onderwerpen van landsbelang gaat, dit komt zeer kinderachtig en onbetrouwbaar over.

Tot slot is er nog onze minister van Buitenlandse Zaken. Persoonlijk ben ik altijd wel fan geweest van onze twitter-minister waarvan we altijd weten waar hij is en wat hij doet. Hij is ook onaangetast door de problemen van Irak aangezien hij toen kamerlid was en hoogstens verweten kan worden dat hij meeging met de lezing van zijn Premier.

Echter goed luisteren naar zijn woorden in de kamer bleek ook een must. Uitspraken waren vaak in de vorm van “denkt u nou werkelijk dat ik dat zou doen met deze kennis”, maar naast deze retorische stelling konden we niet op een zwart-wit ontkenning rekenen. Ook zijn waarheden, die leken te conflicteren met die van Bos, creëerden ruimte voor interpretatie. Daarnaast kan ik de goede man niet geheel los zien van zijn partij, een partij die ons politiek mede verantwoordelijk heeft gerommeld voor een onwettige oorlog. Hoe deden zij dit? Door het vrijwel onmogelijk te maken er nog tegenin te gaan, aangezien de toenmalige minister van Buitenlandse Zaken zijn besluit al vast had staan.

En daarmee komen we bij de crux van wat er aan de hand is. Ik heb uiteraard geen kennis die de pers niet heeft, maar aanschouwend wat er is gebeurd vraag ik mij af of het publieke begin van deze affaire ook het werkelijke begin van deze affaire was. De consensus lijkt te zijn dat Balkenende er op stond dat alle opties werden bekeken en dat over deze opties zoveel onenigheid over bestond dat er reeds 15 gesprekken nodig waren geweest. Daarnaast is er consensus over dat Bos in grote lijnen op de hoogte was van de insteek waarmee Verhagen naar de NAVO ging.

Echter hierna lopen de lezingen uit elkaar: Bos was ontstelt en verbaasd over de uitkomst hiervan, maar volgens Verhagen kon hij dit niet zijn.

Vervolgens was Bos niet aanwezig geweest bij het laatste overleg van het kabinet maar wel was later wel door Bert Koenders bijgepraat. Bos heeft vlak voor ontvangst van de brief gebeld met Balkenende over zijn insteek in deze kwestie (geen doorzetting in Üruzgan).

Toen kwam de brief: Bos verbaasd en ontdaan. Balkenende en Verhagen wilden er graag over praten. Christenunie ongemakkelijk, want in principe eens met Bos maar bereid er nog over te praten.

Er zijn een paar dingen aan dit verhaal die me niet lekker zitten. Na de debatten over het rapport Davids kreeg ik de indruk dat het CDA in de kwestie Irak een publieke koers heeft gevaren van “overal over praten” maar tegelijk achter de schermen de steun eigenlijk al een forgone conclusion was.

In het licht daarvan kijk ik dan ook naar wat er nu is gebeurd. Het lijkt erop dat de PvdA er eigenlijk niet over wilde praten maar er voor koos om alle deuren open te laten toen Balkenende hierom vroeg. Vervolgens mocht Verhagen naar de NAVO met enerzijds de kennis dat de PvdA niet door wilden maar dat ze wel waren overgehaald om overal naar te kijken. Wat Verhagen met Rasmussen besproken heeft is natuurlijk onbekend, maar het vervolg is dat er een brief kwam die vroeg om doorzetting van een deel van onze troepen in Üruzgan.

Volgens de door het CDA gepropagandeerde visie is dit het punt waarop Bos nooit verbaasd had mogen zijn. Echter zoals ik het hiervoor schetste is mijn gevoel hierbij dat dit het punt is waarop Bos zich verraden voelde. Mijn speculatie op dit punt is dat hij voor de goede vrede in het kabinet was meegegaan in “alles is bespreekbaar” en vervolgens precies voor de kiezen kreeg wat hij niet wilde. De inhoud van de NAVO brief ging ook nog gepaard met een mantra van het CDA dat alle NAVO vragen positief beantwoord moeten worden omdat we anders internationaal een flater slaan. Dit nog aangesterkt door hele snelle reacties van onder andere oud-legerleider Dick Berlijn en defensie deskundige Rob de Wijk met deze zelfde mening.

Ik begon net over dat dingen me niet lekker zaten hieraan, en dit is het precies. Alle opties moesten open blijven, maar er volgde een internationale vraag om de optie die de voorkeur van het CDA had. Vervolgens kwam er een mantra uit vele hoeken dat deze internationale vraag wel positief beantwoord moet worden. Zie ik samenzweringen waar ze niet zijn of hebben Balkenende en Verhagen een politiek hoogstaand spel gespeeld ervan uit gaande dat de PvdA wel er in mee zou gaan?

Maar zelfs los van mijn conspiracy theory maakte de eerder genoemde feiten de verbazing van Bos een stuk minder bijzonder dan de publieke kennis lijkt te zijn. Zelfs als Verhagen niet zijn boekje te buiten is gegaan heeft hij óf niet duidelijk gemaakt aan Rasmussen hoe moeizaam het in Nederland ligt óf heeft Rasmussen hoog spel proberen te spelen in de hoop dat wij wel weer mee zouden gaan in het verzoek. Er ligt een Kabinetsbesluit, een politieke belofte van de PvdA en een meerderheid van de tweede kamer die allen zeggen dat dit ons laatste termijn was in de Afghaanse provincie. Wij hebben als land na Groot Brittannië het meeste gedaan van alle NAVO landen om de VS te helpen. Internationaal was ons de eerste keer al toegezegd dat we vervangen zouden worden, maar de tweede keer zou ook echt de laatste verlenging zijn. Heeft de NAVO zich niet net zo goed niet aan de afspraken gehouden?

Maar dan komt de lezing van het vervolg. Was het een politiek spel van de PvdA op een zeer riskant niveau dat zich zeer snel tegen hen zou kunnen keren? Of voelde Bos zijn afgedwongen open stelling hierop zo hard misbruikt dat hij besloot zijn voet geheel dwars te zetten?

Los van of hij er zelf in geloofde had hij politiek geen keuze: de PvdA had beloofd hier niet in mee te gaan en kon dat dus ook niet doen. Maar ik vermoed dat hij en Koenders hier ook principieel achter staan en hun stelling op dit punt niet bij wilden stellen. Nadat het mantra van “we moeten ja zeggen” was begonnen zagen zij, denk ik, geen andere keuze dan hetzelfde spel te spelen. Helaas voor hen lijkt het op dit moment dan ook direct op een verkiezingsstunt, maar het niet doen zou hen waarschijnlijk even hard schaden als het wel doen.

De PvdA stelde: twee jaar geleden beloofd is nu nog steeds beloofd. Het CDA stelde daar tegenover: de kennis van nu is een nieuwe werkelijkheid die opnieuw bekeken moet worden.

Ik verwoord het CDA standpunt hier opzettelijk enigszins sarcastisch. Ik zou hen de vraag willen stellen die Balkenende niet kon beantwoorden over de kwestie Irak: Welke kennis is er nu die er twee jaar geleden niet was?

Ik moet eerlijk toegeven dat ik het een moeilijke discussie vind waarbij ik in een vacuüm niet direct een antwoord zou kunnen geven. Echter in deze moet ik mij wel achter het PvdA stellen: er is al een tweede keer verlengt en er is ons daarvoor en bij de tweede verlenging beloofd dat wij weg zouden mogen. Naast de internationale belofte aan ons heeft de regering het volk ook beloofd bij de verlenging dat wij zouden vertrekken. Als wij nu toch weer zouden verlengen maken wij internationaal duidelijk dat beloftes in onze richting niet gehouden hoeven worden: wij waaien toch wel mee met alle winden. Daarnaast maakt de regering het volk ook duidelijk dat beloftes in de richting van het volk ook betekenisloos zijn, gewoon roepen “met de kennis van nu” en dan telt alles wat ervoor gebeurt is niet meer.

Balkende was weer eens uit vorm…

(origineel geplaatst op wereldvanvandaag.nl)

Het jaar begon goed met het uitkomen van het rapport van de commissie Davids. Deze voormalig voorzitter van de Hoge Raad stelde niet teleur en kwam met een rapport dat zich minutieus binnen de gestelde grenzen hield. Helaas voor Balkenende konden zelfs beperkte middelen deze commissie er niet van weerhouden om met sterke kritieken te komen, met name op zijn persoon.

Echter wil ik daar niet eens op in gaan op dit moment, dat komt wel als het rapport inhoudelijk besproken wordt. Nu wil ik me even concentreren op de wanstaltige eerste reactie van onze eerste minister en de gevolgen daarvan.

Kritieken op de heer Davids waren er van Jan Mulder vanwege een anekdote over zijn kleindochter (DWDD, 25/01), van Argos radio journalist Huub Jaspers over het ontkrachten van theorieën over Nederlandse militaire steun aan de inval en van Zembla journalist Kees Schaap dat het kabinet wel degelijk kon weten dat er geen massavernietigingswapens waren. (DWDD, 12/01)

Zelf heb ik vooral het gevoel gekregen dat Davids een zeer juridisch correct rapport heeft geschreven waar niemand kritiek op kan hebben aangezien hij zich heeft beperkt tot zaken die juridisch bewezen konden worden. Dit leidde ertoe dat de theorieën van Jaspers & Schaap niet bewezen zouden kunnen worden in deze context, daarvoor is een diepgravender onderzoek nodig vermoed ik. Echter schijnt de commissie Davids deze beide theorieën naar het land der fabelen te hebben verwezen en ben ik geneigd daarin hun beoordeling te volgen.

Maar daar ging het niet om, want het centrum van de aandacht verschoof al zeer snel naar Jan-Peter. In zijn eerste reactie ging het direct mis en dachten we allemaal weer aan de woorden die zijn “elk nadeel heb z’n voordeel” lijken te gaan worden: hij was niet in vorm.

Ja, maar… ik had het te druk

Het rapport oordeelde dat Balkenende weinig leiding had gegeven aan de beoordeling van het kabinet over de kwestie Irak en het geheel aan De Hoop Scheffer te hebben overgelaten. Als Balkenende hierop alleen had geantwoord dat hij met De Hoop Scheffer op één lijn zat en het geheel volgde maar niet in hoefde te grijpen, was er niet zoveel aan de hand geweest. Sterk was het niet geweest voor zo’n belangrijk dossier, maar een gebrek aan leiderschap van JP verbaast niemand meer.

Echter Balkenende reageerde met het argument dat hij het te druk had: “… dat is begonnen in Augustus. Op dat moment was ik bezig met begrotingsvoorbereiding van het jaar d’r op, van het jaar 2003. We waren bezig met de voorbereiding van de algemene beschouwing. Ik was in die tijd een week in Zuid Afrika voor een wereldtop over duurzame ontwikkeling.” Met andere woorden: hij was te druk met andere dingen.

Ik denk dat ik hier niet geheel onder woorden kan brengen hoe ongelofelijk boos, dan wel geïrriteerd, ik hiervan werd. In mijn ogen gaf hij op dit moment toe niet capabel te zijn als minister president. Een MP moet alles tegelijkertijd kunnen overzien, hij moet met alles tegelijk bezig kunnen zijn en, indien nodig, op alle fronten leiding kunnen geven. Een onderwerp als een potentiële oorlog is dusdanig van belang dat een minister president hierbij volledig betrokken zou moeten zijn, alsmede de minister van Defensie (die dit in eerste instantie niet lijkt te zijn geweest). Maar Balkenende was te druk met andere dingen, daar kon hij dit blijkbaar niet naast doen.

Dit is niet slechts een gebrek aan leiderschap maar een argument dat hem volledig zou moeten diskwalificeren voor zijn functie! Ik herhaal nogmaals: de minister president moet alles tegelijk kunnen overzien en Balkenende geeft hier zelf toe dit niet te kunnen op een van de belangrijkste dossiers die er langs is gekomen.

Ja, maar… er zijn meerdere meningen

Hij ging vervolgens verder met een verdraaiing van woorden en feiten die de gemiddelde Amerikaanse Republikein niet zou misstaan, ik citeer: “Over de juridische basis voor militair ingrijpen is veel discussie geweest. Daar werd, en wordt, verschillend over gedacht. Door de politiek en onder juristen. De meningen waren, en zijn, zowel nationaal als internationaal verdeeld. Nederland stond indertijd, net als veel andere landen, op het standpunt dat de bestaande resoluties van de veiligheidsraad over Irak, van 678 tot en met 1441, de basis voor militair ingrijpen waren. Een nieuwe resolutie was weliswaar wenselijk maar juridisch niet noodzakelijk. Dat er anders over geoordeeld kan worden blijkt tevens uit het rapport van de commissie Davids. Overigens bestaan ook binnen de commissie verschillende meningen, zie de opvattingen van commissielid de heer Van Walsum op pagina 270 van het rapport.”

Ten eerste gaat het hier om het ontbreken van een volkenrechtelijk mandaat. Er was geen resolutie van de veiligheidsraad die toestemming gaf tot het gebruik van “all necessary measures”. De discussie, “nationaal en internationaal”, gaat niet over het al dan niet ontbreken hiervan (het mandaat was er immers gewoonweg niet).

De discussie gaat over of dit gezien kan worden als zelfverdediging (enige volkenrechtelijk alternatief voor een mandaat) of dat de Bush uitleg dat toestemming werd gegeven door een eerdere resolutie.

Het laatste argument is voor zover ik weet pertinent onjuist en wordt ook door niemand met kennis van zaken geaccepteerd. De conclusie van de gehele commissie Davids, inclusief de heer Van Walsum zoals Davids in zijn presentatie nog duidelijk benadrukte, was dan ook: Er was geen volkenrechtelijk mandaat.

Dat Balkenende de voetnoot van de heer Van Walsum probeerde uit te leggen als onenigheid over de conclusie voor een juridische basis kan alleen worden uitgelegd als een gebrek aan kennis of moedwillige misleiding. Ik weet niet welke ik erger vind.

De voetnoot van de heer Van Walsum gaat erover of het volkenrecht niet getreden mag worden in bijzondere gevallen. Dat is dan ook waar er nog wel echte discussie over wordt gevoerd, de andere discussie wordt alleen gevoerd door politici met belang en mensen die er geen verstand van hebben.

Ja, maar… ik spreek nu eventjes namens het vorige kabinet

Ik ben zeker geen groot kenner als het gaat om staatsrechtelijke zaken, maar een ding weet ik vrij zeker: het kabinet spreekt altijd met een mond en altijd namens het kabinet. Het is misschien moeilijk, en soms zelfs zuur, maar als lid van het kabinet heb je de verantwoordelijkheid om altijd namens het gehele kabinet te spreken. Dus niet namens jezelf, namens je partij of namens wie dan ook. Er bestaat geen staatsrechtelijk onderscheid tussen “ik ben nu even premier van toen” en “ik ben nu weer premier van nu”, je kan geen time-out aanvragen.

Ik begrijp dat het moeilijk is voor iemand die moeite heeft met kritiek en zich zo krampachtig verdedigd, maar hij had zijn mond moeten houden en zeker geen kwalificaties moeten geven. Als hij namens het vorige kabinet had willen reageren had hij dat kunnen doen, maar niet — sorry: nooit — vanaf het platform als Minister President der Nederlanden in een officiële persconferentie over de reactie van het kabinet. Het huidige kabinet.

Al deze zaken tellen weer op bij de gevoelens die ik hierbij al had. Ik had reeds het gevoel dat deze minister president een gebrek aan leiderschapskwaliteiten had, en heeft. Ik had reeds het gevoel dat politieke steun voor de Irak oorlog meer te maken had met een wit voetje halen bij Bush dan met een eigen mening. Ik had reeds het gevoel dat deze minister president niet met kritiek kan omgaan, iets wat hem nog wel eens kan opbreken als een fout van hem aan het licht komt, zoals nu. En ik had reeds het gevoel dat deze minister president geen man voor de job was.

De nasleep liet zich voorspellen. Het PvdA moest zich afzetten tegen de blunders van de leider van het kabinet. De oppositie zag zijn kans schoon om alvast te gaan prijsschieten op de geslagen hond, en de PvdA en CU daarin direct mee te pakken. Het CDA verdedigde zijn eigen man en de CU wilde dat de discussie maar zo snel mogelijk ophield.

De volgende nacht hoorde ik vele van mijn gevoelens verwoord door sterke optreden van Pechtold en Halsema. Pechtold wist zich wederom op meesterlijke wijze als voorman van de oppositie te manoeuvreren en kreeg zelfs steun van de heer Wilders (die zich verder op de achtergrond hield).

Pijnlijke optredens waren er van Mariëtte Hamer en Agnes Kant. Hamer liet weer eens zien dat een prima kennis van zaken geen vervanging is voor een talent voor publieke presentatie, dat blijft toch een zwakte die ze niet echt kan overkomen. Kant liet zich teveel gaan in de discussie waardoor er om 1:30 s’nachts alleen maar een stampvoetend meisje achter de interruptiemicrofoon leek te staan in plaats van een kritische politica.

Een leuk humor-momentje kregen we nog nog van de Partij voor de Dieren toen Marianne Thieme aan haar opmerkingen nog even toevoegde dat ze “tegen de bio-industrie” was.

Daarna kwam de regering zelf aan het woord. Balkenende was al even strijdbaar als in de eerdere persconferentie, en toonde zich wederom niet bereid om kritiek te incasseren. Femke Halsema kreeg uiteindelijk nog wel los dat Balkenende “met de kennis van nu tot een andere conclusie was gekomen” met de zeer duidelijke toevoeging dat hij met de kennis van toen tot dezelfde conclusie zou komen. De vraag, van onder andere Pechtold, wat er dan voor nieuwe informatie was die zijn beoordeling zou veranderen bleef echter onbeantwoord.

Bos kreeg nog een optreden waarin hij weer toonde zowel politiek talent als enorme onhandigheid te hebben. Hij wist zich in perfecte politieke bewoordingen uit te spreken over wat er gebeurd was. Hij nam afstand van de woorden van Balkenende zonder dit officieel te doen en zei niets dat het CDA tegen de borst kon stoten (in tegenstelling tot Balkenende die weer het randje opliep in zijn verhouding met de PvdA).

Vervolgens ging het echter mis. Ik weet niet of het onhandigheid was, ongemakkelijkheid met de situatie of gewoonweg lompheid. Hij stond daar maar te lachen tijdens de interrupties. Het kwam minachtend over, het kwam over als iemand die en kabinetscrisis niet serieus nam. Halsema gaf hem terecht een standje, maar hij beantwoorde dat met een opmerking die misschien grappig was maar niet op z’n plek. En de irriterende grijns bleef maar op zijn gezicht.

De balans na 3 dagen politieke onrust over de reactie van een onhandige premier op een rapport: geen echte discussie over de inhoud maar een discussie over de premier. De kritieken naar aanleiding van de conclusies van het rapport moeten nog komen, maar de inleiding ervan bracht dit kabinet al bijna ten val.

Persoonlijk heb ik grote moeite heeft met de opkomst van de PVV en zie ik enorme problemen in de huidige peilingen als er nu nieuwe verkiezingen zouden komen. Dus dat zie ik liever niet gebeuren. Ik heb echter wel het gevoel dat het hoog tijd wordt dat deze premier vervangen wordt. Het zou beter zijn voor zijn partij om met een ongeschonden nieuwe leider de verkiezingen in te gaan en het zou beter zijn voor het land om een premier met leiderschapskwaliteiten te hebben.

Jan Peter Balkenende blijft echter koppig, trots, krampachtig en sterk op de verkeerde momenten. Vrijwillig aftreden zal er niet inzitten. Met alle problemen die er aan komen (conclusies Davids, Afghanistan, zwakke economie) zouden een sterke leider en een stabiele regering wenselijk zijn. Echter het lijkt waarschijnlijker dat Balkenende nog iets zegt zonder instemming van de PvdA en die zich genoodzaakt gaan zien de stekker eruit te trekken.

Het gevolg wordt een zwak CDA (ongeveer 25-35 zetels), een nog zwakker PvdA (17-25 zetels), een sterke PVV (25-30 zetels), een sterk D66 (17-25 zetels) en een iets verzwakte VVD (15-20 zetels) (Peil.nl, Politieke Barometer). Het zal bijna onmogelijk zijn om met 3 partijen een regering te vormen, en mogelijk zelfs noodzakelijk zijn de PVV erin te betrekken. In deze tijd van economische zwakte lijkt het mij niet wenselijk om een anti-immigranten partij bestaande uit mondstukken van hun leider in de regering te hebben, zeker niet na het experiment met de LPF.

Mijn smeekbede aan Balkenende: probeer in plaats van krampachtige zelfverdediging eens kracht door kritiek te accepteren en klasse door politieke verantwoordelijkheid te nemen voor een kolossale vergissing. Neem het voorbeeld aan je collega Donner die de klasse had om de verantwoordelijkheid te nemen toen Verdonk dit weigerde te doen. Je hoeft niet eens je ongelijk toe te geven, alleen je politieke verantwoordelijkheid te accepteren en te doen wat voor de natie en je eigen partij het meeste stabiliteit geeft.

Bron 1: De Wereld Draait Door van 12 januari & 25 januari 2010.

Bron 2: “Waren er ook oorlogen mét volkenrechtelijk mandaat” (Mark Beunderman), NRC.next 28/1.

Bron 3: NOS.nl, o.a. Davids vs Balkenende over rapport.

Bron 4: Politieke barometer

Bron 5: Peil.nl

Amerikaanse Senaat gaat aan de slag met gezondheidszorg hervorming

(origineel geplaatst op wereldvanvandaag.nl)

Met grote interesse heb ik de afgelopen tijd de initiatieven van Obama en senatoren van zijn partij gevolgd. Obama koos ervoor om in tegenstelling tot Bill Clinton geen rol op de voorgrond te spelen maar slechts op de achtergrond het debat aan te wakkeren en te helpen waar nodig. Hij kreeg hiervoor veel kritiek over zich heen maar het lijkt erop dat het Huis van Afgevaardigden het maximaal haalbare eruit gesleept heeft en de Senaat in ieder geval verder dan ooit tevoren op weg is.

Echter voor wie het absurde systeem van de Senaat kent is het eigenlijk al duidelijk dat Barack Obama en Harry Reid (leider van de Democratische senatoren) voor een onmogelijke opgave staan. De vraag is of ze er toch wat uit gaan krijgen…

Ten eerste een stukje achtergrond over Amerikaanse democratie: de Senaat is slechts met moeite als een echt democratische instantie aan te merken. Ten eerste krijgt iedere staat in Amerika 2 senatoren, waarbij het aantal inwoners niet uit maakt. Dit betekent dat de 2 senatoren uit Wyoming gezamelijk een half miljoen mensen voorstaan terwijl de 2 senatrices uit Californië per stuk een dikke 18 miljoen kiezers vertegenwoordigen. De 4 hiervoor beschreven senatoren wegen ook allen qua stem even zwaar. Dit wil dus zeggen dat in de Senaat een inwoner van Wyoming ruwweg 72 keer zo belangrijk is als een inwoner van Californië.

Maar daar eindigen de problemen met dit systeem niet. Vervolgens komen de stemmingen die nodig zijn om een wetsvoorstel te bespreken, te amenderen, voor te leggen voor stemming en te stemmen. Voordat een wetsvoorstel besproken gaan worden moeten eerst 60 van de 100 senatoren hiervoor stemmen. Om het voorstel vervolgens te amenderen moeten weer 60 senatoren voor een amendement stemmen. Om het wetsvoorstel uiteindelijk van het bespreken en amenderen ter stemming te krijgen moeten er weer 60 stemmen zijn om de stemming te starten. Pas op dit moment zijn 51 stemmen genoeg om het wetsvoorstel daadwerkelijk goed te keuren.

Maar dan is het nog niet klaar. Een wetsvoorstel wordt namelijk besproken in het huis van afgevaardigden en in de senaat. Een voorstel dat uit het Huis komt is niet hetzelfde als een voorstel van de Senaat en dat moet de leiding van beide instantie die voorstellen samenvoegen. Daarna moeten beide volksvertegenwoordigingen weer stemmen over de samengevoegde wet, en ook hier zijn weer 60 senatoren nodig.

Met 60 democraten waaronder vele gematigde en conservatieve senatoren mag er dus geen breken met de partij om het wetsvoorstel er door te krijgen. Het effect is dat een groepje van 4 senatoren op dit moment dwars ligt en leuke cadeautjes voor hun eigen staten krijgen in ruil voor hun stem, bijvoorbeeld 100 miljoen dollar voor heropbouw hulp voor New Orleans voor de senator uit Louisiana.

Het idiote is hierbij dat er nog niet eens daadwerkelijk gestemd wordt over het wetsvoorstel maar deze cadeautjes worden gegeven voor procedurele stemmen. De vraag is of deze zelfde senatoren niet in een later stadium weer dwars gaan liggen en nog meer gaan vragen.

De democraten hebben de eerste stemming (60 om het voorstel ter bespreking te krijgen) er doorheen en beginnen vandaag met de besprekingen en mogelijkheid tot amenderen. Dit is het punt waarop Bill & Hillary Clinton hun voorstel zagen stranden in 1993. De Republikeinen sloegen er toen in het wetsvoorstel te amenderen met behulp van zwakke en conservatieve democratische senatoren en maakte het daarbij tot een dusdanig gedrocht dat niemand er meer voor wilde stemmen. Het resultaat was dat het voorstel verdween en nooit meer terug keerde.

Ik wacht af maar zie eigenlijk niet hoe Harry Reid al zijn senatoren in het gelid zou kunnen houden. Met name Joe Lieberman en Ben Nelson lijken uiteindelijk op een procedurele stemming niet mee te gaan werken en de republikeinen te helpen met een zogenaamde “filibuster”: niet stemmen voor stoppen met bespreken van een voorstel en vooral blijven praten over zin en onzin om te voorkomen dat 50 stemmen genoeg zijn.