Onderhoud

Eindelijk is de WordPress-installatie bij el73.be terug bijgewerkt. Door de hacks in de WordPress-code en de drukke tijden heb ik dit werkje te lang uitgesteld - totdat ik gisteren vaststelde dat de nog oudere Drunkey Love installatie gehackt was.

Vandaar dat er hier momenteel een theme op plakt dat totaal niet af is, maar met het dagje vrijaf van morgen zal dat wel in orde komen.

Bughole City Limits

Door de regelmatige lekken in WordPress ben ik weer geneigd om de andere bekende blogplatformen nogmaals onder de loep te nemen. Mijn huidige selectie bestaat uit Textpattern (in combinatie met het Textpattern admin theme van Jon Hicks), Drupal (ach ja) en ExpressionEngine.

Ik heb nochtans een tijdje gewerkt aan een custom blog- en cms-oplossing, maar ik heb ontdekt dat ik niet over de nodige tijd beschik om zo een platform te ontwikkelen, te testen en te blijven uitbreiden. Hoewel dat constant uitbreiden vaak voor meer problemen dan oplossingen zorgt. Het lijkt wel alsof niemand - behalve de mannen van 37 Signals - denkt aan afgelijnde feature sets. Ik merk het dagelijks: nieuwe features worden verzonnen; voor de bugs wordt echter geen tijd vrijgemaakt. Dan worden er inspanningen gedaan om dit gaandeweg te verbeteren maar stoot men weer op een situatie waarvoor een work-around nodig is. De software-cyclus: ontwikkelen, uitbreiden, fixen, uitbreiden, fixen, fixen, afbreken en opnieuw beginnen.

Een afgelijnde feature set: wat een luxe!

Dit artikel werd opgenomen in ontwikkeling, software.


Acquisitie, het woord van 2008

Fusies, schmusies! Acquisities, mensen! Vandaag gebeurt, echt waar: Oracle neemt BEA over en Sun neemt MySQL over.

Nu is het wachten tot Proximedia begint met het opslurpen van webbouwers met verstand van zaken.

Ja, serieuze economische analyses zijn niet mijn specialiteit. Maar dit wil ik nog even in alle ernst melden aan Proximedia: Google is a bitch. Gelukkig zijn er voldoende mensen die niet op zoek gaan naar achtergrondsinformatie, want de cijfers zouden er waarschijnlijk een stuk minder mooi hebben uitgezien.

Dit artikel werd opgenomen in elders.


Een verbeterde WordPress admin

Screenshot van het Afd WordPress 2 Admin Theme

De default WordPress admin ben ik wat beu gezien. Dat blauw, die grote serif titels: het gaat na een tijdje vervelen. Vaak is 1 van de eerste plugins die ik installeer dan ook de WP Tiger Administration plugin. Die plugin lijkt echter wat problemen te hebben met sommige plugins - althans qua layout - en dus moest ik op zoek naar een waardige vervanger.

Aangezien ik wel van wat Zwitsers houd, is het afd admin theme voor WordPress dan ook een welgekomen afwisseling. Dit theme houdt vast aan de default admin layout, waardoor je weinig onaangename verrassingen moet verwachten bij het configureren van een plugin, en op de een of andere manier ziet het er gewoon properder uit.

Nu maar eens op zoek gaan naar een manier om de WordPress nieuws links uit mijn dashboard te verwijderen en te vermijden dat die er bij een volgende update weer bij staan.

Update: en dat is ondertussen blijkbaar ook mogelijk. Voor de geïnteresseerden heb ik de plugin al maar meteen online gezwierd: download clean_dashboard.txt (opslaan als .php), plaats het in je plugins folder en activeer het. Bezoek je dashboard om te verifiëren dat het werkt want het is enkel getest op PHP 5 en blijkbaar zijn er nogal wat mensen die nog steeds PHP 4 draaien (zou moeten werken op PHP 5 en PHP 4, bedankt Max!).

Momenteel voorkomt het enkel dat de WordPress News links niet worden opgehaald. WordPress development links lijken me te nuttig om ze standaard te verwijderen aangezien deze als een soort update-functie werken (”Hey, we hebben weer gaten gevonden en gedicht! Upgrade!”). Misschien maak ik er wat nuttigers van. Update: ondertussen is er de WordPress Cleaner plugin.

Dit artikel werd opgenomen in ontwikkeling, weblogs.


WordPress migreren naar localhost

Hoeveel zorg je ook draagt dat een WordPress theme er in alle omstandigheden identiek uitziet, vaak komt er wel een randgeval op de proppen dat de layout naar de knoppen helpt. Een afbeelding die groter is dan voorzien bijvoorbeeld. In dat geval is de ingebouwde theme editor handig aangezien je geen FTP-toegang nodig hebt om alles terug in orde te maken.

WordPress button

Uiteindelijk wordt de online versie totaal anders de lokale versie. Door aanpassingen aan het theme, extra plugins en natuurlijk door de hoeveelheid posts. Dan kan het nuttig zijn om de online versie te migreren naar je lokale omgeving om updates te kunnen uitvoeren en testen.

Maak een database backup

Als je nog niet op regelmatige tijdstippen een backup maakt, dan is nu een uitstekend moment om ermee te beginnen. De WordPress Database Backup plugin is daar perfect voor. Je kan instellen op welke momenten een backup moet worden gemaakt en wat er mee moet gebeuren. Zo kan je bijvoorbeeld vragen om dagelijks een backup te ontvangen via e-mail.

Recente versies van WordPress bevatten echter ook een export- en import-functionaliteit. Via Manage → Export kan je een XML-bestand met je data downloaden dat je later dan weer kan importeren. Ik kies voor de database backup aangezien ik daar zonder moeite de meest recente versie van heb.

Maak een lokale database

Dit soort dingen gaat het snelst met de command line. Open een prompt, log in op je MySQL-server en maak een lokale versie van je database aan.


mysql -uusername -ppassword
create database dbname;

Maak een database met dezelfde naam als de online database en een gebruiker met een zelfde naam en paswoord. Zo voorkom je dat je de configuratie-file moet gaan aanpassen.

Tijd om de backup van je database te importeren.


mysql -uusername -ppassword dbname < backup_van_db.sql

Verander de URL van je site

Als je de URL van je site niet aanpast naar de lokale versie, zal je steevast naar de online versie worden doorverwezen. De URL wordt bijgehouden in de wp_options tabel. Om die te veranderen voer je volgende query uit:


UPDATE wp_options SET option_value = 'http://localhost/jouwsite‘ WHERE option_name = ’siteurl’;

Kopieer de files van je FTP

Zonder de WordPress files zal je natuurlijk weinig kunnen doen, dus meld je aan op je FTP-server en download alle nodige files.

That’s it. Als je nog geen lokale WordPress-installatie hebt kan je terecht bij BitNami. Zij bieden onder andere een pakket aan met Apache, PHP, MySQL en WordPress dat je eenvoudig kan installeren. Meer info over BitNami vind je bij Laughy.

Dit artikel werd opgenomen in ontwikkeling, weblogs.


Volhardend

Het minste dat je van sommige mensen kan zeggen is dat ze volhardend zijn. Op de afbeelding zie je hoe een bezoeker er in slaagt om zeven (7!) maal via dezelfde zoekopdracht op dezelfde pagina te komen en dat alles binnen de tien (10!) minuten.

Statistiek

Er zit waarschijnlijk ergens een moraal in verstopt. Of een tip. Misschien dat de pagina in kwestie niet de aandacht grijpt van de bezoeker. Misschien dat statistieken leuk zijn, maar dat het nog leuker is om een één-op-één-gesprek te hebben met een (mogelijke) bezoeker. Om dan een Jambersiaanse analyse te maken van de persoon in kwestie en die analyse nooit meer te vergeten.

Ik ben bijna iedere dag verbaasd wanneer ik zie hoe anderen het internet gebruiken. Om dan soms binnensmonds te vloeken als er een omweg wordt gemaakt terwijl ik een, voor mij althans, snellere weg ken.

Tijd om nog eens op zoek te gaan naar de rapporten van de Jakob Nielsens van deze wereld. Er valt genoeg te leren.

Dit artikel werd opgenomen in usability, webdesign.


Web 2.bla

Web 2.0. Ah. Data News doet mee:

Met de Javapolis blog wil Data News een web 2.0-stempel drukken op de Javapolis-beurs.

Javapolis is een jaarlijks evenement in Antwerpen waar een zwerm Java-ontwikkelaars opduikt om het te hebben over allerlei technieken en tools. Een uit de kluiten gewassen BarCamp over Java.

Data News goes Web2.0

Mijn probleem ligt niet bij Javapolis, maar wel bij Web 2.0. Ik ben die term kotsbeu. Ik begin buzzword-marketing ook beu te worden. Het is alsof ik met mijn Web 2.0 blog klanten zou proberen aan te trekken door het te hebben over een Ajax-interface die via een JSON RESTful webservice interageert met de server, met natuurlijk een database failover cluster, om zo toe te laten dat eender wie, via OpenID, inhoud kan toevoegen, zodat die user-generated content kan worden gebruikt om met minimale inspanningen op het vlak van SEO en SEM, hoog te scoren in zoekmachines.

Het bovenstaande houdt weinig steek, maar ik hoop hiermee een genadeloze indruk te hebben achtergelaten, of je er in ieder geval op te hebben gewezen dat ik het liever heb over “een probleem” en “een oplossing” in gewone mensentaal.

Dit artikel werd opgenomen in elders, ontwikkeling.


CodeIgniter: meh

Om een of andere reden dacht ik dat CodeIgniter wat beter was dan CakePHP. Cake gaf me altijd de indruk dat ik te maken had met een logge gorilla. Krachtig en indrukwekkend, maar moeilijk in een kooi te stoppen. CodeIgniter daarentegen is een lichtgewicht, snel op zijn voeten en flexibel. Dat is me tot nu toe wat tegengevallen.

CodeIgniter biedt je exact wat je nodig hebt, plus wat extra’s: een heleboel helpers. Maar daar begint het al mank te lopen.

Forms en validatie

Om invoer te valideren bind je velden en de overeenkomstige vereisten aan $this->validation. Zo kan je bijvoorbeeld $_POST['key'] binden aan $this->validation->key. Dat is dan ook doorgaans de waarde die je zou willen zien in je invoerveld met de naam key, maar de form-helper werkt zo niet. Je moet zelf een waarde meegeven.

Soit, met wat extra code los je dat snel op.

Active Record

Active Records: dat ding dat programmeren zoveel gemakkelijker maakt omdat je bijna geen SQL meer moet schrijven. Ruby On Rails dankt er zijn faam aan. Plak er “ORM-mapping” op en je ziet dat dit in Java-land het domein is van Hibernate.

En je vindt het ook terug in CodeIgniter. Alleen worden JOINs niet fatsoenlijk ondersteund. Bummer.

Soit, met wat extra code los je dat snel op door gewoon SQL te gebruiken en wat functies naar een base class te halen die de code die je moet schrijven minimaliseren.

Je kan alle klassen overriden

Behalve de base class voor models. Soit, met een include los je dat snel op.

MVC

Een pure implementatie van het model-view-controller-pattern is bwekes. Ik haat vette klassen. Ik wil geen PHP-file met meer dan 2000 lijnen omdat het daar hoort volgens het gekozen pattern. Ik wil een lichtgewicht model, ik wil enkele functies daaraan koppelen en ik wil een controller die enkel beslist wat er moet gebeuren. Ik heb dus nog iets nodig tussen controller en model. Een business layer. Euh, ja, die zetten we dan maar bij de libraries, hoewel me dat meer iets lijkt voor thirdparty dinges.

Alles onder $this

Dus in de controller laad ik de juiste library, laat die de juiste operaties uitvoeren en bekijk wat ik op basis van het resultaat van die operaties moet doen (”Alles ging goed” of “Euhm… probleempje”).

Dat laden dus, van een library, dat doe je met $this->load->library('NaamVanDeLibrary'). Daarna vind je die library terug onder $this->naamvandelibrary. Model laden? $this->load->model('MijnModel', 'naamvanmodel') en je vindt het terug onder $this->naamvanmodel.

Blergh. Lelijk. Waarom moet dat onder $this zitten? Omdat $this de context is. In een library heb je geen context (het zou idealiter eenrichtingsverkeer zijn), dus moet je eerst een referentie naar de singleton-context halen, het model laden onder die context en je bent er. Not a fan.

Modules

CodeIgniter biedt niet de mogelijkheid om je applicatie te organiseren in modules. Gelukkig is het wel zo flexibel dat gebruikers dit er zelf kunnen inbouwen. Dat gezegd zijnde is het ook flexibel genoeg om er Drupal mee na te maken. Maar wie wil dat nu doen? Right.

Geen $_GET

CodeIgniter vereist dat alle handelingen via $_POST worden verricht. De $_GET-array wordt immers leeggemaakt om veiligheidsredenen. Voor veel voorkomende acties als zoeken zit er dus niets anders op dan de search string te encoderen en te redirecten.

Er zijn workarounds voor natuurlijk. Het is echter niet de bedoeling dat ik een framework altijd moet patchen om het te laten werken zoals ik het wil.

PHP 4

Stop. Het.

Alternatieven

CodeIgniter is niet mijn favoriete framework, maar het is niet barslecht. Het doet de meeste dingen goed tot zeer goed. Maar het kan beter. Misschien wordt Kohana, gebaseerd op CodeIgniter, wel beter - het is in ieder geval al bestemd voor PHP 5 - als de documentatie op punt staat.

CakePHP zit ondertussen nog altijd niet aan versie 1.2 en die zat er een jaar geleden al aan te komen. Symfony blijft steunen op PEAR. Blijft er vooral nog over: Zend Framework. De filosofie staat me alvast enorm aan: take what you need.

Oooooh! Klinkt geweldig.

Dit artikel werd opgenomen in ontwikkeling.


Code, poëzie en lettertypes

Consolas

Soms leest code — of het nu Java, PHP, Python of C++ is — zo gemakkelijk dat het lijkt alsof je de documentatie van de applicatie doorneemt. Dat is één van de uitgangspunten bij een refactoring: hoe kan ik de code wijzigen zodat ze niet alleen beter in elkaar steekt op het design-niveau, maar ook beter leesbaar is?

Koppel aan die leesbare code een prachtig monospaced lettertype en ik heb mijn favoriete poëzie ontdekt. Dat prachtige lettertype is Consolas. Het is beter dan het oubollige Courier New, net wat kleiner dan Lucida Console en beter leesbaar dan de Proggy Fonts.

Ben jij ook zo gehecht aan het "juiste" lettertype in een editor? Welk lettertype verkies jij? Moet het monospaced zijn of niet?

Dit artikel werd opgenomen in ontwikkeling.


Keuzes maken

Ik ben op zoek naar een degelijk CMS. De eisen:

  • Gebaseerd op PHP en MySQL.
  • Degelijke admin. Neem een kijkje bij OpenSourceCMS om een hele hoop voorbeelden te zien van wat ik niet wil. Als ik vaak naar het merendeel van deze admins moet kijken word ik liever blind (excuses aan blinden en slechtzienden, maar die admin designs doen pijn aan de ogen). Lelijk? Geschrapt.
  • Custom content. Niet alles is een pagina, niet alles is een blog post. Dag WordPress, dag MODx.
  • Propere code en een stevige support. Bij Joomla krijg ik bij de FAQ enkel verwijzingen naar de FAQ.

Blijven over: Drupal en ExpressionEngine. ExpressionEngine is zonder twijfel makkelijker onder de knie te krijgen en hoewel er een prijs tegenover staat ben ik ook zeker van een bepaald niveau van ondersteuning. Drupal verliest punten door geen onderscheid te maken tussen de gedeeltes die bestemd zijn voor bezoekers en administrators. Zo verander ik het theme van de site en behoud het default theme voor de admin om vast te stellen dat ik bij het toevoegen van inhoud op het site-theme stoot. Me no likey.

Pro Drupal zijn dan weer de enorme community - het voelt aan als de hype van 2007 - en dat het open source is. Oh, en dat omwille van de hype ongeveer iedereen op zoek is naar iemand die er wel wat van kent.

Toch blijft in mijn hoofd het idee spoken dat “ik het beter zelf schrijf”. Zoiets dat vanaf het begin het beheer van gebruikers, pagina’s en een blog mogelijk maakt, wat ik afhankelijk van mijn noden kan uitbreiden om bijvoorbeeld producten te beheren.

Pro: in tegenstelling tot de filosofie “If you’ve got a hammer, everything looks like a nail” kan ik voor een duidelijk database schema zorgen. Niet alles is een node. Nee, er zijn pagina’s, blog posts en producten.

Contra: tijd. Pro: tijd kruipt ook in het leren van Drupal.

Keuzes maken. Het is niet iedereen gegeven. Any advice?

Dit artikel werd opgenomen in ontwikkeling, webdesign, weblogs.


Desktops

Volgens allerlei bronnen is de weerkundige herfst officieel aangebroken. Tijd om van alles en nog wat op te ruimen. Aangezien ik vaak achter mijn desktop-pc ben terug te vinden moet ook die eraan geloven: grondige scans op virussen en malware, opruimen van tijdelijke bestanden en verwijderen van geteste maar niet zo goed bevonden software. Als afwerking plakte ik er nog een nieuw wallpaper en een nieuwe visual style op.

Windows XP desktop - 04/09/2007

Dat is Windows XP, met Launchy op de voorgrond. De wallpaper is Dark Wood en de visual style luistert naar de naam Visty v2.

In pure “de mijne is langer mooier dan die van u”-stijl: show me yours.

Dit artikel werd opgenomen in varia.