Target switching

Als ik start met het werken aan een website ga ik natuurlijk niet meteen aan de slag op de productie-server. Ik zet eerst een lokale omgeving op, met o.a. een nieuwe database en een nieuwe virtual host in het geval van een Apache server. Op het moment dat de site stabiel genoeg is om het daglicht te zien, zit ik dan altijd te knoeien met het aanpassen van de configuratie, zoals de locatie en login-gegevens van de database.

Om lokaal verder te kunnen ontwikkelen moet ik alles weer opnieuw aanpassen. Een mogelijke optie is om in een centrale file een variabele bij te houden, ENVIRONMENT, die dan kan gebruikt worden om, afhankelijk van de omgeving, de juiste code uit te voeren. Veel geprul en een hoopje if blocks die de code niet overzichtelijker maken.

Pants illustratie

Om m’n Python-skills wat te oefenen heb ik besloten om dit probleem op te lossen met een eenvoudig script: Pants.

Hoe Pants werkt

De websites waaraan ik werk, plaats ik steevast in de C:\web directory. Deze website vind ik dan terug onder C:\web\el73.be. Om mijn Wordpress-installatie ook op mijn computer te kunnen gebruiken heb ik een aparte database aangemaakt. Die database komt echter totaal niet overeen met de database op de echte el73.be server. De configuratie van Wordpress, in C:\web\el73.be\weblog\wp-config.php, moet dus worden aangepast naargelang de omgeving. De inhoud van wp-config.php ziet er standaard als volgt uit:


define('DB_NAME', 'wordpress');    // The name of the database
define('DB_USER', 'username');     // Your MySQL username
define('DB_PASSWORD', 'password'); // ...and password
define('DB_HOST', 'localhost');    // 99% chance you won't need to change this value

// Meer...

Stap 1: templates

Ik kopieer de configuratie naar C:\web\el73.be_template\weblog\wp-config.php en vervang de database gegevens:


define('DB_NAME', '@db.name@');    // The name of the database
define('DB_USER', '@db.user@');     // Your MySQL username
define('DB_PASSWORD', '@db.password@'); // ...and password
define('DB_HOST', '@db.host@');    // 99% chance you won't need to change this value

// Meer...

Stap 2: de waarden van de parameters

In C:\web\el73.be_params maak ik vervolgens 2 files, local.properties en prod.properties, eentje voor elke omgeving.

De lokale zou er als volgt kunnen uitzien:


db.name=el73
db.user=root
db.password=rootpassword
db.host=localhost

De andere zou er als volgt kunnen uitzien:


db.name=prod_el73
db.user=prod_el73_user
db.password=prod_el73_password
db.host=mysql.el73.be

Stap 3: target switching

Als ik lokaal wil werken run ik dan het script met als parameters C:\web\el73.be en local. Pants zal de files uit de template directory gaan kopiëren naar de gegeven directory en de waarden uit de C:\web\el73.be_params\local.properties file gaan gebruiken om de parameters in de template te vervangen.

De template en parameters directories moeten op hetzelfde niveau staan als de target directory en eindigen in _template, respectievelijk _params. De properties file mag eender welke naam krijgen, zolang die maar eindigt in .properties. ammehoela.properties is dus perfect mogelijk, je moet het script dan enkel aanroepen met als parameters je target directory en ammehoela.

Om te switchen naar de productie-omgeving van el73.be, moet ik gewoon het volgende doen:

C:\>pants.py C:\web\el73.be prod

En zo worden de database-gegevens voor de productie-omgeving ingevuld in C:\web\el73.be\weblog\wp-config.php.

Voor de geïnteresseerden: Pants is beschikbaar voor download (4 KB). No warranty, doe ermee wat je wilt, etc.

Dit artikel werd opgenomen in ontwikkeling, software.


Issue tracking

Een lichte interface die je niet verplettert met opties

Als er één familie van applicaties is die dringend een “less is more” make-over nodig heeft, dan is het wel issue-tracking software.

Scripts zoals Mantis moeten makkelijk te installeren zijn. Bij Mantis zit ik tien minuten te wachten tot alles via FTP op de server is geplaatst. Onder andere omdat alle mogelijke databases moeten worden ondersteund met hun eigen scripts en omdat er 101 verschillende talen worden meegeleverd. Bij het doorlopen van een proces waarbij ik mijn eerste administrator moet opzetten en de andere (default) eerste admin moet verwijderen, moet ik na het klikken door alle mogelijke configuratie-schermen vaststellen dat ik de gegenereerde config file met de hand moet aanpassen om het registreren van buitenstaanders onmogelijk te maken.

Huh? Echt: huh?

Oplossing: gebruik als het echt moet PDO en laat die talen vallen. Een developer die het Engels niet machtig is, is geen developer. Ja, personen die problemen melden begrijpen misschien geen Engels, maar het melden van problemen is volgens mij eerder een dialoog dan een monoloog. Vooral wanneer de gebruiker niet zo technisch aangelegd is.

— Als ik op een regel klik, doet het niets
— Wat zijn de exacte stappen die je onderneemt?
— Ik start op, ga naar het invoerscherm en wil een lijn toevoegen, maar als ik er op klik gebeurt er niks.
— Welke regel?

Bovenstaand voorbeeld kan je proberen te vermijden door duidelijke instructies te geven. En als je daar mee bezig bent, kan je net zo goed duidelijk maken dat er bij “Description” een beschrijving van het probleem verwacht wordt. Maar die aanpak werkt natuurlijk niet als er tientallen velden worden weergegeven.

De interface moet dus ook eenvoudig zijn. Wat moet je als problem solver weten?

  • Een korte beschrijving of titel is handig.
  • Een uitgebreide beschrijving waarin de verschillende stappen worden gedetailleerd die tot het probleem leiden.
  • Eventuele output of screenshots.
  • Ernst van het probleem, bijvoorbeeld uitgedrukt op een schaal van 1 - 5.
  • Het type van het probleem: hebben we te maken met een bug in de huidige release van de software? Is het een feature dat de gebruikers willen zien in een volgende release? Of is het een change, een verandering van bestaande functionaliteit?
  • De persoon die aangeduid is om het op te lossen.

Koppel hieraan een eenvoudig user management en een overzicht waarmee ik alle problemen kan sorteren en filteren op bovenstaande input, en je hebt eindelijk een issue tracker die ik met plezier zou gebruiken.

Wat gebruik jij? Een hoopje e-mails? Iets dat je zelf hebt gemaakt? Ben je vindingrijk en gebruik je iets als Ta-da Lists? Of heb jij een issue tracker gevonden die aan bovenstaande vereisten voldoet?

Dit artikel werd opgenomen in ontwikkeling, usability.


Het boek Openbaring

Ik wil nu al mijn excuses aanbieden aan de godsvruchtige personen die hier wat anders hadden verwacht dan geleuter over webdevelopment. Anyway…

Python

Door omstandigheden ben ik eens wat uitvoeriger bezig geweest met het doornemen van Dive Into Python, het boek van Mark Pilgrim dat een inleiding geeft tot de wondere wereld van de scriptingtaal Python. Ik zal niet te vroeg juichen en er eerst nog wat mee spelen, maar wat ik tot nu toe van de taal heb gezien spreekt me, in het algemeen, enorm aan.

Waarom ik nu Python bestudeer en niet Ruby? Ik wil absoluut wat dingen uittesten met Django. En in tegenstelling tot Ruby On Rails:

  • is de setup van Python en Django snel en gemakkelijk. (Ok, het is al enkele maanden geleden dat ik een setup van Apache met RoR op Windows heb geprobeerd. Ja, Windows.)
  • is hosting met Python zeer gemakkelijk te vinden (Yep, Ruby hosting is zeker aan het toenemen.)
  • zitten er in Python enkele zeer leuke dingen voor desktop development, die ik niet kan terugvinden in Ruby. Bijvoorbeeld de webbrowser module.

Soit: I like Python.

Javascript

Soms is het veel efficiënter om zelf snel wat te schrijven dan gebruik te maken van een bestaande component. “Don’t reinvent the wheel”. Dat klopt als een bus, maar als dat wiel enorme schade toebrengt aan plattelandswegen (een Internet Explorer 6 crash), alle kanten uitgaat op gewestwegen (Internet Explorer 7 vond het niet zo leuk en dat leidde tot random resultaten) en niet wil draaien op snelwegen (Opera wilde er niet van weten), tja, dan zoek je toch beter wat anders.

Toen ik druk bezig was met het uitvinden van mijn wiel, overviel me plots het gevoel dat ik het leuk vond. Ik vond het leuk om Javascript te schrijven! Dank u Prototype!

Dank u, aan alle Javascript frameworks die ervoor zorgen dat ik me minder moet bezig houden met uit te zoeken welke browser een bepaalde methode ondersteunt.

Komodo Edit

Nog altijd op zoek naar een betere editor? Komodo Edit. Het is wat traag in het opstarten, maar die tijd win je in de volgende 30 seconden terug.

Teleurstellingen

Natuurlijk is niet alles peis en vree. JBuilder is hetzelfde product als 2 jaar geleden en ik vind het nog altijd even crappy als 2 jaar geleden.

En wat moet een webdeveloper die Windows verkiest boven Mac en Linux (work with me here 1) doen om Vista te kunnen uittesten, andere software en gadgets gratis in zijn bus te krijgen en een bende groupies te vergaren?

  1. Ik ben opgegroeid met Windows, haat de Linux fonts (het installeren van de MS fonts moet ik dringend nog eens proberen) en ben aan het wachten op de release van Leopard.

Dit artikel werd opgenomen in ontwikkeling.


Ping!

Het is hier weer een hele tijd stil geweest. Niet omdat ik niets te vertellen heb, maar omdat ik met allerlei dingen bezig ben (geweest) waar ik, vanuit een ethisch perspectief, meer tijd aan moest besteden dan aan deze site.

Welke dingen?

Het eerste doel was het behalen van het certificaat gekoppeld aan het examen Object-Oriented Analysis and Design with UML Test van IBM. De voorbereiding bestond uit het doornemen van 2 boeken van in totaal een 900 pagina’s. Dat was voor 90% een herhaling van wat ik tijdens mijn studies al had geleerd en voor 100% frustratie aangezien ik enkel over de PDF-versies van de boeken beschikte. Waar blijven die geweldige ebook-readers?

Dat eerste doel heb ik ondertussen gehaald en mag ik met een gerust gemoed schrappen.

Het tweede doel is het online brengen van een nuttige webapplicatie waar je zeer binnenkort meer over zal horen.

Mandro, again

Het derde ding waar ik wat tijd aan heb besteed is een kleine e-mail-campagne om Mandro bekend te maken bij vastgoedmakelaars. Vooralsnog geen compleet succes, maar ik heb nog niet al mijn troeven uitgespeeld. Bij deze dank aan de makelaars die wel al de moeite hebben genomen om Mandro uit te testen. Enkele quotes van makelaars in verband met Mandro:

Mandro is veel gebruiksvriendelijker dan andere gelijkaardige sites.

Gelukkig, want dat was 1 van de vooropgestelde doelen.

Voor een aandeel in Mandro zal ik je verderhelpen, je zal het je niet beklagen.

Mandro is 100% gratis. De weinige inkomsten die de site genereert door advertenties, gaan naar de kosten van de hosting. Wie aandelen wil, zit dus verkeerd. En voor wie denkt de site te kunnen kopen: jij zit ook verkeerd, want het bedrag waarvoor ik een verkoop zou gaan overwegen ligt meer dan waarschijnlijk minstens 100% hoger. It’s my baby.

In de minder nabije toekomst

Er staan me nog 2 andere projecten te wachten: een kleintje en een redelijk groot. Daarnaast wil ik één van mijn andere sites nieuw leven blijven inblazen en Roam een beter design geven met meer inhoud. Gelukkig maak ik bij nieuwjaar geen voornemens; het lijstje zou veel te lang zijn geworden.

Drest

Bovendien krijg ik vandaag nog een e-mail van iemand die een bug heeft ontdekt in Drest en die bug opgelost wil zien. Ik had Drest al een tijdje laten liggen, maar het mooie hieraan is:

  1. Iemand gebruikt Drest?!
  2. Iemand gebruikt Drest en ziet liever de bug opgelost dan dat hij zelf de code schrijft.
  3. Iemand biedt aan om zelf de bug op te lossen en komt daarna met een hoop suggesties zoals downloads (momenteel kan je enkel via Subversion de source downloaden en moet je die zelf compileren), gebruikmaken van de wiki en een mailing list.

Oh ja

  • Amazon heeft me zeer aangenaam verrast door me binnen de week enkele boeken te bezorgen.
  • Don’t Make Me Think was erbij.
  • Kan iemand de gadgetfreak een gps cadeau doen?
  • Tijs kan volgens mij eender welke Belgische web agency de top 10 in katapulteren. Vul dat aan met Bram – check die PHP- en Firefox-tips! – en je bent zeker van de top 5.
  • Alle andere blogs die ik volg hebben mij in de tussentijd goed vermaakt en een hoop stof tot nadenken gegeven.
  • Bart Claeys moet dringend zelf wat bloggen. Net zoals de Robarov-crew.

En nu terug aan het werk.

Dit artikel werd opgenomen in ontwikkeling, varia, webdesign.


Freddy 4

Freddy? Freddy 4! Te koop. Vanaf morgen, 21 februari. De grappigste comic van Vlaanderen (ik lees geen Waalse, dus misschien wel van België).

Nog altijd geen idee wie Freddy is? Moge schaamte u overvallen en moge u een tijdje zoet zijn met de reeds gepubliceerde comics. Kan je niet wachten tot morgen? Bestel the green mean joke-machine dan nu al via het Internet.

Bij deze beschik ik dan ook over de eeuwige dankbaarheid van meneer de stand-up comedian. Altijd handig.

Dit artikel werd opgenomen in elders.


Drempels wegnemen

Mijn frank is net gevallen. Ineens zie ik duidelijk hoe het beter kan. Hoe je mensen gemakkelijker kan overtuigen om deel te nemen aan een website. Die user-generated content? Ha, tis eigenlijk eenvoudig, meneer / mevrouw. Je moet enkel de grootste drempel wegnemen en gebruikers toelaten om zich meteen in het diepe te gooien. Niemand verplichten om zwembandjes te dragen omdat de badmeester dat zo wil.

Al die zever van features die ik wil toevoegen aan Mandro? Vergeet ze even allemaal. Er is 1 verandering die ik absoluut wil doorvoeren: de registratie “verwijderen”.

Stel je voor dat je als gebruiker meteen informatie over jouw woning kan invullen. Niet eerst registreren en wachten op een e-mail om op een link te klikken. Nee, alle informatie kunnen invullen en daarna kunnen kiezen of je een nieuw account wilt aanmaken of een bestaand account wilt gebruiken. Authenticatie zal altijd nodig zijn, want je kan niet toestaan dat makelaar A de huizen van makelaar B duurder maakt. Authenticatie uitstellen tot wanneer het echt nodig wordt, dat kan volgens mij echter het verschil maken voor een site die het van de input van anderen moet hebben.

Is dit iets nieuws? Totaal niet. Het perfecte voorbeeld is Amazon. Maar misschien kan het even vermelden van mijn Aha-maar-natuurlijk-erlebnis de aankomende projecten van anderen nog wat verbeteren.

Dit artikel werd opgenomen in ontwikkeling, usability.


Webtoolkit: database

Databases. De wondere wereld van SQL. Normalisatie en optimalisatie. De bottleneck in vele web-applicaties. Zonder databases was er geen sprake van e-commerce, blogs of al dat andere gehuppeldepup. Databases beheren is dus voor velen een noodzakelijk kwaad, voor anderen hun grote bron van inkomsten.

phpMyAdmin

Voor het gemakkelijk online beheren van een MySQL database is er één echte uitschieter: phpMyAdmin. Als je hier als PHP-developer nog nooit van hebt gehoord ben je geen PHP-developer. Punt. phpMyAdmin is na het installeren van Apache, PHP en MySQL het eerste pakket waarmee je je omgeving test. Sterker: het maakt een integraal deel uit van je omgeving.

Allemaal goed en wel, maar voor het lokaal beheren van een database heb ik liever iets dat meer solide aanvoelt en waarmee ik sneller kan werken dan phpMyAdmin. MySQL biedt enkele tools aan die dit zouden moeten doen, maar ik heb me er al te vaak aan geërgerd. Scripts werden bijvoorbeeld maar half uitgevoerd. Het alternatief komt echter uit een onverwachte hoek: Oracle. Ja, die mannen met hun eigen databases. Ja, die databases die menige onderneming gebruikt.

Oracle SQL Developer

Oracle SQL Developer screenshot
Oracle SQL Developer screenshot.

Het alternatief is Oracle SQL Developer. Je kan er natuurlijk Oracle databases mee beheren, maar ook MySQL, SQL Server en Access (uhu!) databases.

Als je vertrouwd bent met Toad zal je ook snel vertrouwd worden met SQL Developer. Als je vertrouwd bent met MySQL Query Browser… idem.

Het programma heeft de Java Development Kit 1.5 (JDK 1.5) nodig, dus als je gruwelt van Java mag je nu stoppen met lezen. Aan de moedigere mensen zal ik toevertrouwen dat het zeker de moeite waard is om uit te testen en dat JDK 1.5 nog niet moet geïnstalleerd zijn.

Installatie

Om Oracle SQL Developer te kunnen gebruiken met MySQL zijn er enkele eenvoudige stappen die je moet doorlopen:

Third party JDBC drivers toevoegen aan SQL Developer

  1. Download Oracle SQL Developer (selecteer de tweede optie als je JDK 1.5 al hebt geïnstalleerd)
  2. Unzip en start SQL Developer (sqldeveloper.exe op Windows)
  3. Download de MySQL Connector
  4. Unzip en plaats de JDBC driver (de naam van de file lijkt op mysql-connector-java-*.jar) in een directory. Ik heb ervoor gekozen om de MySQL JDBC driver in de SQL Developer installatie-folder te plaatsen, bij rdmbs/lib. Een andere directory, bijvoorbeeld C:\Program Files\MySQL, is perfect mogelijk.
  5. In Oracle SQL Developer kies je vervolgens voor de optie Tools → Preferences. Bij de instellingen kan je dan onder de optie Databases een “Third Party JDBC Driver” toevoegen. Klik daarvoor op Add Entry, navigeer naar de directory waarin je de MySQL JDBC Driver hebt geplaatst en selecteer de driver.

Dat zijn de stappen die nodig zijn om met Oracle SQL Developer je MySQL databases te kunnen beheren. Om die kunnen te laten vallen, selecteer je File → New. In het dialoogvenster selecteer je Database connection, gevolgd door een klik op OK. Vul de gegevens van je MySQL database in en klaar!

Random opinion: mensen die SQL uitspreken als “Sequel” moeten consistent zijn. PNG moet dan worden uitgesproken als “Ping” en GIF als “Jif”. U doet uw goesting, maar mijn urge-to-kill-level stijgt navenant.

Dit artikel werd opgenomen in ontwikkeling, software.


Dell, Dell, Dell toch

Maarten heeft het zitten. Hoewel Microsoft het mogelijk maakt om upgrades van Windows XP naar Vista gratis te houden, zorgt Dell voor problemen. Blijkbaar hebben Nederlandstalige gebruikers van een Dell-systeem dikke pech: Dell gunt Vlamingen en Nederlanders geen Vista upgrade! Nope. Als je Engelstalig of Franstalig bent is het perfect mogelijk. Nederlands is een brug te ver.

Maarten roept op om er ruchtbaarheid aan te geven. Pietel gebruikt de volgende woorden in zijn bijdrage:

Een leuke sport, zo wat bommetjes leggen.

Maar maandag kwam Tweakers met het nieuws dat Google zo een bommen onschadelijk heeft gemaakt. Rest dus de vraag of dit wat gaat teweeg brengen in de Google zoekresultaten.

Hoe dan ook blijft het een slecht idee om klanten af te straffen omdat ze een minder populaire taal spreken. De impact van dat slechte idee wordt bovendien alleen maar groter als één van de bekendste Vlaamse bloggers erdoor getroffen wordt en die dan op de barricades gaat staan. In plaats van een gratis upgrade voor gebruikers, krijgt Dell gratis het slechtste soort marketing dat er bestaat.

Dit artikel werd opgenomen in elders, zoekmachines.


Tux Factory

Businesstux
Businesstux

Je kan zeggen over Microsoft en Apple wat je wil — zie het recente artikel Research bij meneer Vuijlsteke — maar de open source besturingssystemen Linux en BSD zijn de enige met mascottes. Geen goed verkoopsargument, maar wel leuk. Of in ieder geval leuker dan de pseudo-Windows-mascotte Clippy.

Als je de originele Linux-pinguïn, Tux is de naam, onder ogen krijgt, lijkt die steevast te stammen uit de jaren negentig en daar gebleven te zijn. Gelukkig was er Everaldo die met zijn Crystal icon set voor een kleine revolutie zorgde. In die icon set kan je ook een moderne Tux terugvinden.

Bij CrystalXP.net bouwen ze nog steeds voort op de Crystal icons. Daarnaast is er echter ook een ongelooflijk uitgebreide verzameling van Tux-varianten beschikbaar, met de toepasselijke naam “Tux Factory”.

Dit artikel werd opgenomen in linkdump, varia.


Moppentapper feed

Dit is speciaal voor de mensen die af en toe van een misschien wat belegen mop genieten. In de hoop comment spam die ik op Drunkey Love ontvang, wordt soms een mop misbruikt. Nee, ik gebruik er geen Akismet om de spam te elimineren. Ik verkies gebruik te maken van het materiaal dat zo vriendelijk werd aangeboden door de spammer in kwestie. Na een kleine schoonmaak laat ik deze reacties gewoon passeren. Neem dus de Drunkey Love comments feed, stop die in je feedreader en wees geamuseerd door spam.

Wil je ook wat nuttigs maken van de spam? Als je Wordpress gebruikt kan je de Spamgarden plugin activeren. Zo kan je je eigen oase van rust creëren. Met boom.

In feite is dat zo 2006: user content generation.

Dit artikel werd opgenomen in varia.