Weer een leerrijke week. Bij een webbedrijf houdt niet alleen in dat je webtalen moet beheersen, maar soms komt er de oddjob servermanagement bij.
Nu, ik beheerde al even de server hier, maar blijkbaar leer je dus elke dag wat nieuws bij. Een van de dingen die ik geleerd heb is shell scripten, en veel trucs en tips ivm de linux shell die ik nog niet kende. Toen ik een e-book las over de shell ( die ook een introductie gaf van de meest gebruikte commando’s en gebruiken ), leerde ik onder andere de simpele commando’s zoals pwd ( print working directory ), en grep ( tekst filteren ).
Nu, deze commando’s zijn niet de meest nodige commando’s bij dagelijks serverbeheer, maar vb piping wel. Piping is het meest handige commando dat ik bijgeleerd heb. Piping gebeurt mbhv het | symbool, en laat ons toe commandos te chainen en zo output onderling te redirecten.
Een voorbeeld hiervan kan zijn als we een directory openen en alleen de bestanden willen zien met een .gz extensie. Dan kunnen we gewoon het commando ls -l | grep *.gz uitvoeren en dan krijgen we mooi een lijst voorgeschoteld met alle bestanden met een .gz extensie.
Nu komen we dan ook aan bij het andere dat ik geleerd heb, nl. shell scripten. We weten allemaal dat we php kunnen uitvoeren vanaf de commandline, en als we echt weten wat we doen, dan kunnen we ook php shell scripts creeƫren. Dit is an sich wel leuk, maar een deftig bash script werkt in mijn ogen nog altijd sneller met minder code, en dat de code een rare syntax heeft ( voor mij toch sinds ik van php af kom ), nemen we er maar bij.
Ik wil geen holy wars starten, maar het is gekend dat in de linux wereld er nogal een hevige discussie is van nano vs vi[m] vs emacs. ik ben lange tijd nano gebruiker geweest, maar ik heb gemerkt dat nano tekort schiet als men met grote scripts bezig is. Daarom dat ik eindelijk de tijd heb genomen om vi te leren. Vi is een leuk programma moet ik toegeven, eens dat je er mee leert werken toch.
Het shell script dat ik geschreven heb heeft als nut om een volledige dump te maken van een gekozen database, alle acties te loggen, en dan de dump met het log door te mailen naar een opgegeven emailadres. Er is ook een cleanup functie voorzien.
Ik heb hieruit geleerd dat shell scripts eigenlijk nog een krachtige taal zijn an sich omdat ze controlestructuren voorzien. Dat dit van niet zo een hoog niveau is dan andere talen, is te begrijpen, maar het maakt het leven toch weer dat beetje leuker. Het enige waar ik nog op vloek soms is de switch syntax die er als volgt uitziet:
while [ “$1″ != “” ]; do
case $1 in
-du | –dbuser ) shift
dbuser=$1
;;
-dp | –dbpass ) shift
dbpass=$1
;;
-ma | –mailtoaddress ) shift
mailto=$1
;;
-db | –database ) shift
database=$1
;;
-bd | –backupdir ) shift
backupdir=$1
;;
-ca | –cleanupafter ) shift
cleanupafter=true
;;
esac
shift
done
De bovenstaande code gaat een voor een alle parameters af die meegegeven werden aan het commando en bindt die aan de interne variabelen. De while samen met de switch zorgt ervoor dat de commandos niet op een vaste vollegorde moeten worden gezet.
Buiten leren shell scripten, heb ik ook aan enkele projecten meegewerkt, en weer les gegeven aan iemand die een basis site moest kunnen bouwen.
Stille weken, zo zijn er ook. Vorige week was dus een stille week in de meest gewone zin van het woord. Ik kon ook gewoon zeggen dat vorige week maar gewoontjes was maar dat kan gewoonweg niet voldoen.
Woordspelingen terzijde, vorige week was gevuld met wat meer mundaan coding werk, zoals in een bestaand systeem een secure password recovery sollution inbouwen. Ook heb ik in verscheidene projecten wat addons moeten coden of maintenance work moeten verrichten.
Vanaf woensdag werd het echter spannender. We kregen de opdracht om van begin tot eind een volledige site te bouwen en het moest op het einde van de week af zijn. Sinds Yoeri zelf donderdag en vrijdag op cursus was, was dit een project dat ik samen met Luigi moest uitwerken. Flying solo, maar wel nog met Jan om op terug te vallen in gevallen van nood.
Daar ik dit blog altijd de week na de gebeurtenissen update, laat mij toe te zeggen dat het project successvol afgerond is. Het heeft me enorm veel bijgeleerd over de symbiosis designer/coder. Alhoewel de cases bij c-md ons vooral leren samen te werken, duren de cases meestal te lang zodat men in een beurtrollen patroon vervalt. Wat ik hiermee bedoel is dat eerst een deel gedesigned wordt, dan een deel gecode, en dan weer design. Het project dat ik hier bij Yappa heb afgewerkt verschilt hiermee door het feit dat er tegelijkertijd gedesignet werd en gecode.
Je kan het vergelijken met de Viaduc de Millau brug in Zuid Frankrijk, waar men aan beide kanten begon te bouwen en mekaar tegenkwam in het midden. Dat er niet teveel afwijking mag zijn in het midden, zorgde voor extra spanning, alhoewel de voldoening erna wel veel hoger is.
Dus zelfs als een week traag begint, is er altijd genoeg om bij te leren week na week.
Encodingproblemen teisterden al wat langer de scripts op Yappa. Niet dat het schering en inslag was of een echte zware impact had, maar ze zorgden soms wel voor wat irritatie.
Nu echter niet meer. Weg zijn de dagen van de speciale characters met het & teken, want alles draait nu centraal op utf8, zoals:
Dit vermindert het aantal problemen voor als een editor al utf8 is maar de andere nog niet en er dan sommige tekens verkeerd geformat worden.
Voor de databases om te schakelen naar utf8 heb ik een script geschreven dat alle databases, hun tabellen en hun velden nakijkt en deze omschakelt naar utf8 ( idem voor de collatie ).
Hierbuiten heb ik ook enkele projecten helpen afwerken, en hetzelfde utf8 systeem toegepast op een externe ( live ) server.
Ook heb ik geholpen met een debuggingsessie van een script dat gewoon voor een zoekactie elke keer een timeout kreeg. Dit was uiteraard een zeer uitgebreide zoekactie, maar als we een zoekactie deden, dan kregen we als we op de server inloggen met putty en top uitvoerden toch al 200% processorusage voor mysql ( nee dit is geen typo het is een dualcore systeem ).
Dat debuggen was moeilijker daar het gedeelte dat we moesten debuggen extern geschreven was en dus niet onze eigen code was. Yoeri heeft echter het probleem opgelost door indexes te implementeren in de verschillende tabellen.
Als laatste heb ik nu voorgesteld om een van de kleine problemen bij yappa op te lossen, nl. documentatie. Ik heb voorgesteld om dit op te lossen met phpdoc, zodat we mooie chm’s kunnen genereren als we willen, wat integratie in de bestaande editors toelaat. Experimenten hiermee zijn voor volgende week gepland en integratie indien het vruchtbare resultaten voortbrengt.
Het was maar een kort weekje en eerlijk gezegd vloog het wel voorbij. Ik heb de basis gelegd van de upload applicatie die ik eerder heb uitgedacht ( ik ben van 0 begonnen ). ik vind het vooral handig dat ik nu mijn schema heb dat ik mooi kan opvolgen wat de development tijd versnelt.
De rest van de week heb ik verdergeholpen met het afwerken van enkele projecten, en het testen van deze projecten. Ook heb ik weer enkele maintenance classes geschreven en een paar admin panel components.
Ik heb onder andere een component geschreven die toelaat om de zoekresultaten van een project bij te houden en dan zo statistieken te genereren wat een duidelijke meerwaarde is voor de klant. Voor de rest heb ik ook enkele hotfixes geschreven voor het adminpaneel dat door middel van regex ( regular expressions ) lege tags opzoekt en deze cleant zodat de inputvelden geen raar gedrag vertonen ( weer een meerwaarde voor de eindgebruiker ).
Ik heb ook enkele eindgebruikers een mini opleiding gegeven van hoe ze het cms ( niet het yappa cms maar een drupal cms ) moeten gebruiken. Dit was vooral een aangename ervaring daar ik hier weer heel veel uit heb geleerd qua usability. Vooral de denkmethode van een pc leek viel me meteen op. Je kan gewoon zien hoe een gebruiker denkt die niet gewoon is om met web applicaties te werken. Zeer leerrijk dus.