<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Inventis</title>
	<atom:link href="http://www.inventisstage.be/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.inventisstage.be</link>
	<description>Stage Projects</description>
	<lastBuildDate>Fri, 31 May 2013 13:15:29 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Week 13</title>
		<link>http://www.inventisstage.be/2013/05/week-13/</link>
		<comments>http://www.inventisstage.be/2013/05/week-13/#comments</comments>
		<pubDate>Fri, 31 May 2013 13:15:29 +0000</pubDate>
		<dc:creator>Tom Gerrits</dc:creator>
				<category><![CDATA[Take-a-trip reisvergelijker]]></category>

		<guid isPermaLink="false">http://www.inventisstage.be/?p=2836</guid>
		<description><![CDATA[Deze week was een week vol testen en refactoring; bijna alle top-level bibliotheken van het framework werden aangepakt. Ik schreef hiervoor nieuwe documentatie, wendde nieuwe features uit PHP 5.4 aan en heb getracht de algemene leesbaarheid te verbeteren. Verder is het merendeel van de testbare bibliotheken (want er zijn ook een aantal die vrij moeilijk [...]]]></description>
				<content:encoded><![CDATA[<p>Deze week was een week vol testen en refactoring; bijna alle top-level bibliotheken van het framework werden aangepakt. Ik schreef hiervoor nieuwe documentatie, wendde nieuwe features uit PHP 5.4 aan en heb getracht de algemene leesbaarheid te verbeteren. Verder is het merendeel van de testbare bibliotheken (want er zijn ook een aantal die vrij moeilijk te testen zijn) op één of andere manier aan bod gekomen in de geschreven testen.</p>
<p>Met deze korte laatste tekst sluit ik deze stageblog af, aangezien dit mijn laatste week is. Ik heb verschillende dingen bijgeleerd, ook mede dankzij de variatie in de verschillende projecten. Het project Take-A-Trip (mijh oorspronkelijke stageproject) is volledig afgeraakt (alleszins het deel dat van mij verwacht werd) en ik ben trots op het resultaat.</p>
<p>Hoewel ik dit per mail al gedaan had, wil ik graag nogmaals iedereen <strong>bedanken</strong> voor deze kans en de leuke sfeer de voorbije drie maanden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.inventisstage.be/2013/05/week-13/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Week 12</title>
		<link>http://www.inventisstage.be/2013/05/week-12/</link>
		<comments>http://www.inventisstage.be/2013/05/week-12/#comments</comments>
		<pubDate>Fri, 24 May 2013 13:54:55 +0000</pubDate>
		<dc:creator>Tom Gerrits</dc:creator>
				<category><![CDATA[Take-a-trip reisvergelijker]]></category>

		<guid isPermaLink="false">http://www.inventisstage.be/?p=2827</guid>
		<description><![CDATA[Deze korte voorlaatste week was een week vol afwisseling: ik schreef testen voor allerlei libraries en componenten, voerde bugfixes uit, deed aan refactoring alsook HTML5. Deze week leerde ik opnieuw verschillende dingen bij maar, zoals vorige week, zijn deze dingen vaak zo klein (bv. een PHP-functie die ik nog niet kende) dat ze geen blogpost [...]]]></description>
				<content:encoded><![CDATA[<p>Deze korte voorlaatste week was een week vol afwisseling: ik schreef testen voor allerlei libraries en componenten, voerde bugfixes uit, deed aan refactoring alsook HTML5. Deze week leerde ik opnieuw verschillende dingen bij maar, zoals vorige week, zijn deze dingen vaak zo klein (bv. een PHP-functie die ik nog niet kende) dat ze geen blogpost op kunnen vullen. Daarom zou ik graag het HTML5-gedeelte aanhalen dat ik deze week vooral behandelde: <em>drag-&#8217;n-drop</em>.</p>
<h3>HTML5 Drag-&#8217;n-Drop</h3>
<p>Een component dat ik gedurende de vorige weken schreef was <strong>Window</strong>, een dialoogvenster met titelbalk met sluitknop en een <em>&#8220;body&#8221;</em> waarin andere elementen geplaatst kunnen worden. Het component zelf is vrij eenvoudig van aard, maar het venstertje moet ook rond te bewegen zijn met behulp van de titelbalk. Traditioneel gebeurt zoiets in JavaScript via events als <strong>mousedown</strong> en <strong>mousemove</strong>. Aangezien de browser bij het inhouden van de muis op een element ook een sleepactie (<em>drag</em>) start, vroeg ik me af of het ook mogelijk was om dit te manipuleren tot een verplaatsing zonder echte drop. Het antwoord is ja, maar er zijn wel enkele moeilijkheden die tevoorschijn komen (en ook opgelost kunnen worden).</p>
<h2>Dubbel slepen</h2>
<p>Een initiële implementatie maakte de titelbalk <em>draggable</em> en verplaatste de rest van het venster via de <strong>drag</strong> event die automatisch gedurende de drag elke zoveel milliseconden afgevuurd wordt. Dit zag er niet goed uit: een &#8220;kloon&#8221; van het sleepbare element (hier de titelbalk) wordt onder de muis getekend door de browser gedurende het slepen. Samen met het originele venster, dat zich mee verplaatste in de drag event, zorgde dit voor twee titelbalken die deels overlappen (het venster met titelbalk wordt iets later verplaatst dan de kloon onder de muis door een <em>delay</em>). Dit kan opgelost worden door ofwel het hele venster draggable te maken (maar dan kan je het venster ook slepen vanuit de body) ofwel door <strong>event.dataTransfer.setDragImage</strong> te gebruiken. Bij deze laatste kan je zelf bepalen welke afbeelding (of welk element) zichtbaar moet zijn onder de cursor gedurende de drag. Door dit op het venster zelf in te stellen is dit probleem opgelost.</p>
<p>De code om het venster zelf te verplaatsen is nu overbodig omdat de browser al een kloon van het venster tekent onder de muis die automatisch van plaats verandert. Dit zorgt echter voor een nieuw probleem: het oorspronkelijke venster blijft op zijn plaats staan terwijl de kloon meebeweegt. De makkelijkste oplossing is het oospronkelijke venster te verbergen bij de aanvang van de sleepactie (bv. via <strong>style.opacity = 0</strong>). Dit werkt niet: het venster verdwijnt maar onder de muis is ook niets meer zichtbaar, zelfs al stel je eerst de <em>dragImage</em> in en verberg je nadien het element. De dragImage maakt een afbeelding en krijgt aanpassingen nadien niet meer door, maar toch werkt dit niet. Waarom? Blijkbaar schrijft de standaard niet voor dat op het moment van aanroepen van setDragImage de afbeelding meteen aangemaakt moet worden. De browser is hier m.a.w. vrij in (en Chromium, waarin ik op dit moment werk, doet dit ook niet). De eenvoudigste oplossing die ik vond is om het gewoon in de <strong>dragenter</strong> en/of <strong>dragover</strong> events te doen (deze worden blijkbaar pas uitgevoerd na het creëren van de afbeelding).</p>
<p>Ten slotte wordt bij het <em>droppen</em> het venster terug zichtbaar gemaakt en verplaatst naar de muiscoördinaten.</p>
<h2>No Drop Allowed</h2>
<p>&#8220;Drop allowed&#8221; op een element kan je aangeven door in dragenter en dragover events <strong>preventDefault</strong> uit te voeren (want de default is dat droppen op een element niet is toegestaan). Het standaardgedrag zorgt ervoor dat als je stopt met het venster te slepen, het wel op de juiste plaats komt maar je nog een soort van &#8220;ghost image&#8221; van het venster ziet dat zich terug naar de oorsponkelijke plaats beweegt. Dit geeft visueel aan de gebruiker aan dat hij hier niet mag droppen. In deze omstandigheden willen we dit echter niet omdat het venster overal mag &#8220;gedropt&#8221; worden. Door op document-niveau de eerder genoemde functies preventDefault uit te laten voeren kan je dit voorkomen. Laat dit best enkel gebeuren als de gebruiker een venster aan het slepen is, zodat andere elementen op de pagina niet plots ook overal een geslaagde drop kunnen uitvoeren en geen feedback meer geven.</p>
<p>Na deze stappen is het venster via de titel sleepbaar, volledig gebruikmakend van de browser zonder elke zoveel milliseconden een JavaScript functie uit te voeren om het venster te verplaatsen, want het verslepen doet de browser. Problem solved!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.inventisstage.be/2013/05/week-12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Week 11</title>
		<link>http://www.inventisstage.be/2013/05/week-11/</link>
		<comments>http://www.inventisstage.be/2013/05/week-11/#comments</comments>
		<pubDate>Fri, 17 May 2013 13:34:26 +0000</pubDate>
		<dc:creator>Tom Gerrits</dc:creator>
				<category><![CDATA[Take-a-trip reisvergelijker]]></category>

		<guid isPermaLink="false">http://www.inventisstage.be/?p=2822</guid>
		<description><![CDATA[De elfde week is voorbij en het einde van mijn stage komt steeds dichterbij. Deze week hield ik me minder met testen bezig en mocht ik voor het eerst in het nieuwe framework (Webadmin 5.0) zelf duiken. Ik hield me voornamelijk bezig met het schrijven van nieuwe componenten zoals Window (dialog), Tags, SEO en Select. [...]]]></description>
				<content:encoded><![CDATA[<p>De elfde week is voorbij en het einde van mijn stage komt steeds dichterbij. Deze week hield ik me minder met testen bezig en mocht ik voor het eerst in het nieuwe framework (Webadmin 5.0) zelf duiken. Ik hield me voornamelijk bezig met het schrijven van nieuwe componenten zoals <strong>Window</strong> (dialog), <strong>Tags</strong>, <strong>SEO</strong> en <strong>Select</strong>. Deze componenten zijn eigenlijk verschillende elementen die op een webpagina terechtkomen.</p>
<h2>Composite</h2>
<p>Het framework maakt uitgebreid gebruik van het Composite-patroon, een ontwerppatroon dat tracht ervoor te zorgen dat composities (of eenvoudigweg samenstellingen) van objecten uniform behandeld kunnen worden met gewone objecten. Een concreet voorbeeld is een GUI: er is bv. een hoofdklasse <strong>Widget</strong> aanwezig die gemeenschappelijke informatie bevat die alle widgets moeten bevatten. Alle specifiekere widgets (<strong>Table</strong>, <strong>Button</strong>, <strong>Label</strong>, <strong>Tree</strong>, &#8230;) erven over van de hoofdklasse widget. Sommige widgets, zoals <strong>Panel</strong> en <strong>GroupWidget</strong>, kunnen andere widgets bevatten. Door deze klassen een attribuut <strong>widgets </strong>te geven,<strong> </strong>die de <em>subwidgets</em> in lijstvorm bijhoudt, kan de panel alle soorten andere widgets bevatten, zelfs andere panels of groupwidgets. Zo creëer je de mogelijkheid een in theorie oneindige hiërarchie op te bouwen (in de praktijk zijn er uiteraard beperkingen die dit verhinderen). Dit systeem is zeer flexibel en makkelijk uit te breiden, aangezien elk nieuw type widget automatisch als subelement kan dienen.</p>
<p>Volgende week zal ik me waarschijnlijk opnieuw richten op het toevoegen van nieuwe componenten alsook het schrijven van tests om deze componenten te ondersteunen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.inventisstage.be/2013/05/week-11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>week 9</title>
		<link>http://www.inventisstage.be/2013/05/week-9-3/</link>
		<comments>http://www.inventisstage.be/2013/05/week-9-3/#comments</comments>
		<pubDate>Tue, 14 May 2013 20:11:27 +0000</pubDate>
		<dc:creator>Jo Devos</dc:creator>
				<category><![CDATA[Informatie Architectuur]]></category>
		<category><![CDATA[IA]]></category>

		<guid isPermaLink="false">http://www.inventisstage.be/?p=2819</guid>
		<description><![CDATA[Deze week was (jammer genoeg) zeer kort. Toeristische website Ik ben deze week bezig geweest met een toeristische website. Vermits het uitlezen van de data gebeurt via een andere website, was het belangrijk dat ik goed nakeek wat er kon ingelezen worden via de API. Hierdoor moest ik ook nauwgezet bekijken wat ik in een [...]]]></description>
				<content:encoded><![CDATA[<p>Deze week was (jammer genoeg) zeer kort.</p>
<p><strong>Toeristische website</strong></p>
<p>Ik ben deze week bezig geweest met een toeristische website. Vermits het uitlezen van de data gebeurt via een andere website, was het belangrijk dat ik goed nakeek wat er kon ingelezen worden via de API. Hierdoor moest ik ook nauwgezet bekijken wat ik in een filter kon plaatsen en wat niet. Ik ben hier wel enige tijd mee bezig geweest, maar het was wel zeer leerrijk.</p>
<p><strong>Responsive.</strong></p>
<p>Verder heb ik ook nog uitgezocht hoe ik deze website responsive kan maken. Ik heb goede voorbeelden, maar alles vraagt een nieuwe kijk. Niet alles kan je zomaar overnemen.</p>
<p>Er zijn altijd stramienen waar je je kan op baseren, wat wel belangrijk is. Mensen hebben nu eenmaal gewoontes waar je niet zomaar om heen kan. Het is wel zeer leerrijk om te zien hoe alles zo eenvoudig kan zijn en hoe moeilijk ik het mezelf soms maak. Keep it simple is echt een noodzaak, maar ik merk hoe langer hoe meer hoe moeilijk het is.</p>
<p><strong>Interne app</strong></p>
<p>Ik heb de interne app, die ik in het begin van mijn stage gekregen heb, nog eens opnieuw bekeken. Er zijn immers altijd andere mogelijkheden en ik heb dan ook nog een andere optie uitgewerkt, maar deze bleek minder effectief.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.inventisstage.be/2013/05/week-9-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Week 10</title>
		<link>http://www.inventisstage.be/2013/05/week-10/</link>
		<comments>http://www.inventisstage.be/2013/05/week-10/#comments</comments>
		<pubDate>Wed, 08 May 2013 13:41:20 +0000</pubDate>
		<dc:creator>Tom Gerrits</dc:creator>
				<category><![CDATA[Take-a-trip reisvergelijker]]></category>

		<guid isPermaLink="false">http://www.inventisstage.be/?p=2814</guid>
		<description><![CDATA[Er zijn reeds tien weken voorbij en het is opnieuw tijd voor een blogpost. Morgen (donderdag) is het Onze-Lieve-Heer Hemelvaart en vrijdag wordt er een brugdag genomen bij Inventis, wat de reden is dat deze blogpost iets vroeger online staat. Deze week was niet bijzonder opvallend op het gebied van programmeren; zoals vorige week reeds [...]]]></description>
				<content:encoded><![CDATA[<p>Er zijn reeds tien weken voorbij en het is opnieuw tijd voor een blogpost. Morgen (donderdag) is het Onze-Lieve-Heer Hemelvaart en vrijdag wordt er een brugdag genomen bij Inventis, wat de reden is dat deze blogpost iets vroeger online staat. Deze week was niet bijzonder opvallend op het gebied van programmeren; zoals vorige week reeds aangekondigd hield ik me de hele (halve <img src='http://www.inventisstage.be/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) week bezig met het schrijven van testen voor Webadmin 5.0 met PHPUnit.</p>
<h2>Code Coverage Analysis</h2>
<p>Dit is een onderdeel van PHPUnit en is iets wat ik bij het eerste gebruik van PHPUnit indrukwekkend vond. Door PHPUnit aan code coverage analysis te laten doen, kan je in HTML-formaat een overzicht krijgen van alle gebruikte klassen en methoden en in welke mate ze getest werden. De tool toont hiervoor alle afgelopen <strong>code paths</strong> en toont d.m.v. groene, gele en rode voortgangsbalken welke percentage regels, methoden en klassen bereikt werden. Op deze manier heb je meteen een overzicht van welke <strong>corner cases</strong> of randgevallen nog niet getest werden. Je kan overigens ook vanuit de index.html door de mappen en PHP-bestanden navigeren.</p>
<h2>Mockups en stubs</h2>
<p>Mockups en stubs zijn objecten die in de plaats van reguliere objecten kunnen worden doorgegeven. Dit is zeer handig als je klassen wil testen die afhankelijk zijn van andere klassen zonder deze afhankelijkheden ook uitgebreid op te moeten zetten. Een concreet voorbeeld: een modelklasse is afhankelijk van een databaseklasse. Bij het testen maak je een object van de modelklasse aan en maak je een mockup van de databaseklasse en geeft deze door aan het modelobject. Via de mockup kan je voorkomen dat bepaalde methoden echt uitgevoerd worden en aangeven welke waarde ze tijdens het testen moeten teruggeven. Dit alles kan in de tests zelf zonder de eigenlijke database- of modelklasse aan te passen.</p>
<p>De lezer vraagt zich mogelijk af waarom de databaseklasse niet eenvoudigweg onmiddelijk meegetest wordt. De reden hiervoor is dat de databaseklasse zijn eigen reeks testen heeft en bij het testen van de modelklasse irrelevant is (je bent nu enkel en alleen de modelklasse aan het testen). Testen waarbij de samenwerking tussen de objecten en het geheel getest wordt horen op een ander niveau thuis (bv. op het niveau van integration testing).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.inventisstage.be/2013/05/week-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Week 8</title>
		<link>http://www.inventisstage.be/2013/05/week-8-2/</link>
		<comments>http://www.inventisstage.be/2013/05/week-8-2/#comments</comments>
		<pubDate>Sun, 05 May 2013 20:00:31 +0000</pubDate>
		<dc:creator>Jo Devos</dc:creator>
				<category><![CDATA[Informatie Architectuur]]></category>
		<category><![CDATA[IA]]></category>

		<guid isPermaLink="false">http://www.inventisstage.be/?p=2812</guid>
		<description><![CDATA[Mobile app Vorige week heb ik een mobile app mogen maken en daar zijn deze week nog een paar aanpassingen aan gebeurd. Er waren een paar linken die een andere naam moesten krijgen. Er moesten ook nog een paar knoppen worden toegevoegd. Op zich was er niet zo veel werk meer aan, maar het is [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Mobile app</strong></p>
<p>Vorige week heb ik een mobile app mogen maken en daar zijn deze week nog een paar aanpassingen aan gebeurd. Er waren een paar linken die een andere naam moesten krijgen. Er moesten ook nog een paar knoppen worden toegevoegd. Op zich was er niet zo veel werk meer aan, maar het is wel leerrijk om te doen.</p>
<p>&nbsp;</p>
<p><strong>De webshop.</strong></p>
<p>Ik heb de rest van de webshop mogen presenteren. Ook hier waren een hoop aanpassingen aan. Maar zoveel werk was het niet om alles aan te passen, want ik heb heel veel in masters kunnen stoppen de vorige keer. Axure heeft dus weer maar eens zijn nut bewezen. Presenteren is geen evidentie en dat voel ik keer op keer. Een goede voorbereiding en een sterk project zijn echt nodig. Ook de gave om jezelf te verkopen helpt natuurlijk. Bij mij is hier nog werk aan.</p>
<p>&nbsp;</p>
<p><strong>Portfolio website</strong></p>
<p>Ik heb de opportuniteit gehad om een portfolio website te mogen maken. Dit lijkt allemaal evident, maar als je kijkt naar wat er bestaat aan standaard templates dan zijn er niet zo heel veel goede bij. De bezoeker wil werk zien. SEO is ook belangrijk en je moet er allemaal rekening bij houden. Bart is dit alles aan het nakijken en ik krijg er komende week feedback op. Fingers crossend.</p>
<p>&nbsp;</p>
<p><strong>Toeristisch website.</strong></p>
<p>Ik mag ook eens proberen om een toeristische website te maken. Het is voor mij allemaal nieuw en ik ben permanent op zoek naar hoe anderen het doen. Google is mijn &#8220;leeromgeving&#8221; geworden. Maar langzaam maar zeker komt er schot in de zaak. Ik denk komende week hiermee klaar te zijn en we zien wel. Ik vind het super hoe Bart VDB en Bart A. me bijstaan in dit project. Ik zou anders wel wat vaker met mijn handen in het haar gezeten hebben.</p>
<p>&nbsp;</p>
<p>See you next week.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.inventisstage.be/2013/05/week-8-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Week 9</title>
		<link>http://www.inventisstage.be/2013/05/week-9-2/</link>
		<comments>http://www.inventisstage.be/2013/05/week-9-2/#comments</comments>
		<pubDate>Fri, 03 May 2013 13:35:28 +0000</pubDate>
		<dc:creator>Tom Gerrits</dc:creator>
				<category><![CDATA[Take-a-trip reisvergelijker]]></category>

		<guid isPermaLink="false">http://www.inventisstage.be/?p=2809</guid>
		<description><![CDATA[Deze week stonden verschillende taken op de planning, mede omdat de aanloop van de PM-tool vorige week afgewerkt werd. Het eerste deel van de week wijdde ik aan onderzoek en een kleine opdracht omtrent Vagrant en de belgische identiteitskaart terwijl het tweede deel van de week in het teken stond van het schrijven van testen in [...]]]></description>
				<content:encoded><![CDATA[<p>Deze week stonden verschillende taken op de planning, mede omdat de aanloop van de PM-tool vorige week afgewerkt werd. Het eerste deel van de week wijdde ik aan onderzoek en een kleine opdracht omtrent <strong>Vagrant</strong> en de belgische identiteitskaart terwijl het tweede deel van de week in het teken stond van het schrijven van testen in <strong>PHPUnit</strong> voor het framework.</p>
<h2>eID</h2>
<p>Deze week begon met een onderzoek naar de Belgische identiteitskaart; is het mogelijk om gegevens uit te lezen van de identiteitskaart via een kaartlezer om deze weer te geven op een PHP-website? Mijn eerste gedachte was <em>neen</em>; dit mede omdat PHP geen low-level language is en niet ontwikkeld werd met het oog op het aanspreken van hardware. Gelukkig biedt <strong>Fedict</strong> (de &#8220;ontwikkelaars&#8221; van de Belgische elektronische identiteitskaart) tal van tools om dit eenvoudig mogelijk te maken op de computer van de bezoeker, waarvan de meerderheid jammer genoeg in <strong>Java</strong> geschreven is. Zij bieden op hun site echter ook een <strong>Java-applet</strong> die het uitlezen van de identiteitskaart mogelijk maakt op de computer van de bezoeker zonder al te veel extra software. Dit houdt concreet in dat je aan de website van Fedict doorgeeft welke informatie je wilt opvragen (samen met een redirect URL), de gebruiker doorstuurt naar de website en de informatie ten slotte terugkrijgt na een redirect. Dit alles kan op deze manier zonder dat het nodig is een Java-applet (en SSL, wat een vereiste is voor de applet) toe te voegen aan je eigen website. Het principe van autorisatie geven en het laten afhandelen door een externe website lijkt ergens wel op <strong>OAuth </strong>(zie ook mijn post van vorige week).</p>
<h2>Vagrant</h2>
<p>Vagrant is een tool waarbij op basis van een configbestand op een eenvoudige manier virtuele machines (bv. voor <strong>VirtualBox</strong>) via de commandline gegenereerd kunnen worden. In deze config kunnen allerlei opties opgegeven worden zoals instellingen die aan de VM meegegeven moeten worden bij de creatie alsook pakketten die geïnstalleerd moeten worden (bv. Apache, PHP, MySQL, enzovoorts). De voordelen van het gebruik van Vagrant komen vooral tevoorschijn in een teamomgeving; mocht er iets foutlopen bij iemand met een zeer specifieke configuratie, dan kan iemand anders een identieke configuratie opbouwen door van hetzelfde configbestand gebruik te maken.</p>
<p>Mijn eerste taak taak was het bekend geraken met het gebruik van Vagrant, waarna ik onderzocht of een configbestand van derden bruikbaar was binnen Inventis om het opzetten van een virtuele machine met een LAMP-server te vereenvoudigen. Het opstellen van een LAMP-VM met Vagrant is vrijwel out-of-the-box mogelijk, maar de extra mogelijkheden die geboden worden door de software bestaan uit het eenvoudig opgeven van bepaalde websites. Dit betekent dat bij het creëren van de VM enkele websitemappen automatisch gekopiëerd worden naar de VM, volledig ingesteld worden voor apache en bruikbaar zijn nadien op de host.</p>
<p>De software op zich maakt het leven wat eenvoudiger, maar het probleem hierbij is dat enkele eenvoudige dingen ontbreken: het <strong>hosts</strong>-bestand van de host wordt niet automatisch aangepast om de websites op de host bereikbaar te maken op naam (dit moet je m.a.w. zelf doen). Ook betekent het toevoegen van een nieuwe website in de software het kopiëren van veel redundante informatie. Omwille van deze kleine problemen schreef ik enkele <strong>bash</strong>-scripts waarbij de gebruiker enkel een map moet verbinden aan een domeinnaam om sites toe te voegen in de VM (bv. <em><strong>&#8220;/var/www/mijnsite -&gt; www.mijnsite.test&#8221;</strong></em>). Ook werkt deze tool automatisch het <strong>hosts</strong>-bestand van de host bij om de domeinen via DNS bereikbaar te maken op de host (dit alles na een back-up, uiteraard).</p>
<h2>Testen</h2>
<p>Het tweede deel van de week wijdde ik aan het schrijven van testen voor het nieuwe (nog onafgewerkte) framework van Inventis: <strong>Webadmin 5.0</strong>. Het schrijven van deze testen gebeurde in PHPUnit en is volledig nieuw voor mij, wat dit een leerrijke ervaring maakt. Dit is ook waar ik de volgende weken waarschijnlijk het grootste deel van mijn tijd aan zal besteden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.inventisstage.be/2013/05/week-9-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Week 7</title>
		<link>http://www.inventisstage.be/2013/04/week-7-2/</link>
		<comments>http://www.inventisstage.be/2013/04/week-7-2/#comments</comments>
		<pubDate>Sun, 28 Apr 2013 18:28:15 +0000</pubDate>
		<dc:creator>Jo Devos</dc:creator>
				<category><![CDATA[Algemeen]]></category>
		<category><![CDATA[Informatie Architectuur]]></category>

		<guid isPermaLink="false">http://www.inventisstage.be/?p=2806</guid>
		<description><![CDATA[Webshop. Deze week heb ik voor het eerst aan zowel Jan als Jente het project van de webshop voorgesteld. Met het verkopen van dit soort producten heb ik niet veel ervaring en dat was dan ook moeilijk. Maar Jan gaf me een aantal tips die ik zeker zal meenemen. Verder waren er een aantal aanpassingen [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Webshop.</strong></p>
<p>Deze week heb ik voor het eerst aan zowel Jan als Jente het project van de webshop voorgesteld.</p>
<p>Met het verkopen van dit soort producten heb ik niet veel ervaring en dat was dan ook moeilijk. Maar Jan gaf me een aantal tips die ik zeker zal meenemen. Verder waren er een aantal aanpassingen om het geheel wat logischer en beter te maken. Na de aanpassingen gehoord te hebben ben ik aan de slag gegaan. Door de vorige aanpassingen (het aanmaken van een hoop masters) in het wireframe, waren deze correcties tamelijk snel gedaan.</p>
<p>&nbsp;</p>
<p><strong>Mobiele website.</strong></p>
<p>Bart gaf me &#8216;s morgens een briefing over een vernieuwing van een mobiele website. Ik had een basis en de menu structuur was reeds uitgeschreven. Dit was de eerste keer dat ik ook effectief moest rekening houden met de tijd en dat lukte aardig. In de voormiddag waren de schetsen voor het wireframe klaar, tegen de avond was de eerste versie van het prototype klaar. De volgende voormiddag heb ik dan de mobiele website voorgesteld. Er waren nog een aantal wijzigingen nodig, zo was de naam van een knop slecht omdat die gewoonweg niets vertelde over wat er ging gebeuren. Dat heb ik aangepast. Daarnaast moesten er ook nog een aantal andere aanpassingen gebeuren. Tegen de avond was alles hiervoor klaar. Later op de week kreeg ik wel nog te horen dat er nog een paar kleinere zaken moesten veranderen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.inventisstage.be/2013/04/week-7-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Week 8</title>
		<link>http://www.inventisstage.be/2013/04/week-8/</link>
		<comments>http://www.inventisstage.be/2013/04/week-8/#comments</comments>
		<pubDate>Fri, 26 Apr 2013 13:46:55 +0000</pubDate>
		<dc:creator>Tom Gerrits</dc:creator>
				<category><![CDATA[Take-a-trip reisvergelijker]]></category>

		<guid isPermaLink="false">http://www.inventisstage.be/?p=2804</guid>
		<description><![CDATA[Vorige week werkte ik voorlopig voor de laatste keer aan Take-A-Trip. Het project lijkt nu in een zekere zin gestabiliseerd te zijn. Ik begon daardoor deze week met een nieuw project: de aanloop voor een project management-tool. Project Management Dit project betreft geen volledige PM-tool, maar wel het schrijven van bibliotheken voor het aanroepen van [...]]]></description>
				<content:encoded><![CDATA[<p>Vorige week werkte ik voorlopig voor de laatste keer aan Take-A-Trip. Het project lijkt nu in een zekere zin <em>gestabiliseerd</em> te zijn. Ik begon daardoor deze week met een nieuw project: de aanloop voor een project management-tool.</p>
<h2>Project Management</h2>
<p>Dit project betreft geen volledige PM-tool, maar wel het schrijven van bibliotheken voor het aanroepen van de API&#8217;s van <strong>Google Drive</strong>, <strong>GitHub</strong> en <strong>Tick</strong>. Stuk voor stuk zijn dit <em>tools</em> die intern in de uiteindelijke PM-tool gebruikt zullen worden. Het merendeel van deze tools zal de lezer allicht bekend voorkomen:</p>
<ol>
<li><span style="line-height: 13px;"><strong>Google Drive</strong> is een soort tegenhanger van <strong>DropBox</strong> en is ook een verderzetting van de oorspronkelijke <em>Google Documents</em>: op deze website kunnen bestanden in mappen online opgeslagen worden in de cloud.</span></li>
<li><strong>GitHub</strong> is een dienst waarop Git repositories geplaatst en beheerd kunnen worden.</li>
<li><strong>Tick</strong> is een tool om taken met tijdsverdelingen te maken, bv. &#8220;Afwerken front-end: 10 uren&#8221; (hierbij is 10 uren het aantal uren dat voorzien wordt voor het afwerken van deze taak). Deelnemers aan het project kunnen dan aangeven hoeveel uren ze gewerkt hebben aan de taak en zo kan er uiteindelijk ook gewerkt worden aan de inschattingscapaciteiten van de werknemers (bv. als er 15 uren nodig waren i.p.v. 10 uren werd er een verkeerde schatting gemaakt).</li>
</ol>
<p>Elk van deze tools stelt een eigen (<em>RESTful</em>) API bloot waarmee gecommuniceerd kan worden met de site vanuit een eigen applicatie (in dit geval de PM-tool zelf).</p>
<h2>Google Drive</h2>
<p>Google Drive gebruikt een zeer uitgebreide API en voorziet ook eigen software voor allerlei programmeertalen om deze API aan te spreken. Het moeilijkste hierbij is het gebruik van <strong>OAuth </strong>(een standaard voor autorisatie). In het verleden stuurde men eenvoudigweg gebruikersnamen en wachtwoorden zomaar door naar de server om data te manipuleren of van een zogenaamde <em>API key</em>. OAuth verzadigt de nood om een gebruikersnaam en wachtwoord door te sturen; de applicatie kan namelijk communiceren met de aanbieder van de API zodat de gebruiker toestemming kan geven dat de applicatie gebruikmaakt van zijn gegevens. De applicatie kan dan (tijdelijk) zich gedragen als de gebruiker (dit heet ook wel <em>impersonation</em>). Een concreet voorbeeld van de werkwijze hiervan bij traditionele Google API-gebruikende webapplicaties:</p>
<ol>
<li><span style="line-height: 13px;">De applicatie die met de Google API&#8217;s kan werken wordt geopend of gestart.</span></li>
<li>De applicatie haalt van de Google API een link naar de Google website op die hij toont aan de gebruiker.</li>
<li>De gebruiker klikt op de link en wordt doorgestuurd naar de (beveiligde) website van Google. Hierop wordt gevraagd of de applicatie toestemming mag krijgen om de account van de gebruiker te gebruiken. De gebruiker geeft hier toestemming (hij <strong>autoriseert</strong> de toepassing om gebruik te maken van zijn data).</li>
<li>De gebruiker wordt (automatisch) teruggestuurd naar de applicatie. De applicatie krijgt hierbij een bepaalde <strong>code</strong> die hij kan gebruiken om te communiceren met de Google API&#8217;s. Deze code geeft tijdelijk toestemming om de data van de gebruiker te manipuleren. Na een bepaalde tijd vervallen deze rechten uiteraard.</li>
</ol>
<p>Het voordeel van deze werkwijze is dat de gebruiker zijn gebruikersnaam en wachtwoord niet hoeft door te geven aan de applicatie. Ook kunnen de rechten die de gebruiker gaf aan de applicatie op elk moment zonder meer terug ingetrokken worden. Als de applicatie het wachtwoord van de gebruiker heeft, kan hij zich echter altijd (al dan niet ongewenst) toegang verschaffen, tenzij de gebruiker zijn wachtwoord verandert.</p>
<h2>GitHub</h2>
<p>De API van GitHub is op het gebied van autorisatie zeer gelijkaardig aan Google (de API werkt ook via OAuth). GitHub heeft echter geen officiële software beschikbaar om te communiceren met zijn API&#8217;s. Hierdoor werd ik verplicht gebruik te maken van een onofficiële bibliotheek, die jammer genoeg nog een aantal grote bugs bevatte. De broncode van deze software was echter toegankelijk en met een aantal omwegen (en een <em>pull request</em> voor het oorspronkelijke project op GitHub om anderen met hetzelfde probleem verder te helpen) was dit echter terug in orde te krijgen. Een andere optie zou geweest zijn om zelf dergelijke software te bouwen, maar dit zou een project op zich geweest zijn aangezien de API van GitHub zeer uitgebreid is.</p>
<h2>Tick</h2>
<p>De API van Tick was veruit het meest rudimentair van de drie. Bij Tick is er geen sprake van OAuth; bij elke aanvraag om gegevens stuur je het e-mailadres en het paswoord van de gebruiker gewoonweg mee als <em>GET</em>-argumenten in de <em>request URL</em>. Dit is echter niet bijzonder veilig (o.a. <em>packet sniffers</em> zouden de requests uit kunnen lezen). De auteurs van Tick leveren, net zoals GitHub, geen eigen software mee voor het aanspreken van de API. De API van Tick is echter zeer klein, wat het haalbaar maakte alles van nul af op te bouwen.</p>
<h2>Voortgang</h2>
<p>Vandaag rondde ik dit project volledig af. Dit betekent dat volgende week opnieuw een nieuwe opdracht op de planning staat <img src='http://www.inventisstage.be/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.inventisstage.be/2013/04/week-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Week 6</title>
		<link>http://www.inventisstage.be/2013/04/week-6-2/</link>
		<comments>http://www.inventisstage.be/2013/04/week-6-2/#comments</comments>
		<pubDate>Sun, 21 Apr 2013 21:10:18 +0000</pubDate>
		<dc:creator>Jo Devos</dc:creator>
				<category><![CDATA[Informatie Architectuur]]></category>
		<category><![CDATA[IA]]></category>

		<guid isPermaLink="false">http://www.inventisstage.be/?p=2802</guid>
		<description><![CDATA[Deze week was een week van aanpassingen, aanpassingen en nog eens aanpassingen. Maar dit is een deel van het proces natuurlijk. IA is nu eenmaal geen exacte wetenschap. In het begin van de week heb ik de responsive toepassingen van de store gemaakt. &#160; Problemen Bij het responsive maken van een website ga je de [...]]]></description>
				<content:encoded><![CDATA[<p>Deze week was een week van aanpassingen, aanpassingen en nog eens aanpassingen. Maar dit is een deel van het proces natuurlijk. IA is nu eenmaal geen exacte wetenschap. In het begin van de week heb ik de responsive toepassingen van de store gemaakt.</p>
<p>&nbsp;</p>
<p><strong>Problemen</strong></p>
<p>Bij het responsive maken van een website ga je de desktop site vertalen naar een site gericht op een kleiner scherm met een andere manier van navigeren, maar de content moet zoveel mogelijk behouden blijven. Het is de kunst om vanaf het moment dat je de desktop site ontwikkelt rekening te houden met wat er op de responsive toepassingen zal gaan gebeuren; hoe gaan de verschillende elementen onder of boven elkaar schuiven, wat kan/moet er off canvas gaan,… Je moet het van in het begin goed overdenken. Bij gevolg moest ik dus vaak aanpassingen maken op de desktop versie omdat er anders te veel uitzonderingen moeten gemaakt worden. Time is money.</p>
<p>&nbsp;</p>
<p><strong>Presenteren</strong></p>
<p>Deze week heb ik ook de shop gepresenteerd aan Jente en Bart. Hier merkte ik op dat een presentatie veel langer duurt dan ik aanvankelijk dacht. Dit kwam omdat ik alles trachtte uit te leggen en er bij alles een verhaal hoorde dat ik ook nog wou brengen. Dat is niet nodig. Het kan sneller gaan zonder al die extra uitleg. Verder maakte ik de dag nadien de fout door alles opnieuw te overlopen, wat echter niet nodig was. Ik was beter begonnen waar ik de dag ervoor gestopt was.</p>
<p>Maar langs de andere kant heb ik wel weer wat extra feedback gekregen.</p>
<p>&nbsp;</p>
<p><strong>Wat er nu komen gaat.</strong></p>
<p>Ik heb vrijdag redelijk wat in masters zitten stoppen waardoor ik normaal sneller zou moeten kunnen werken. Verder moet ik nog een aantal zaken doen op de mobiele toepassingen en dan zou ik volgende week aan een nieuw project moeten kunnen beginnen. Ik heb veel bijgeleerd uit dit project maar ik heb geregeld met mijn handen in mijn haar gezeten. Maar het is een proces, het zal er komen en het project zal goed zijn.</p>
<p>&nbsp;</p>
<p>See you next week.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.inventisstage.be/2013/04/week-6-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
