Geïntegreerde Proef 6IB Wim Tibackx

Maat: px
Weergave met pagina beginnen:

Download "Geïntegreerde Proef 6IB Wim Tibackx"

Transcriptie

1 Katholiek Scholencentrum JOMA Schooljaar Maantjessteenweg Merksem <?php $gip=new Gip(); $gip->author=new Author(); $gip->author->name="wim Tibackx"; $gip->author->studentclass="6ib"; var_dump($gip); //enjoy! Geïntegreerde Proef 6IB Wim Tibackx Stage: Foreach BVBA St. Bartholomeusstraat Merksem (ANTWERPEN) Tel Stagementor: Samuel Meurs Wim Tibackx Te Boelaarlei Borgerhout (ANTWERPEN) Tel Wim Tibackx 12 6IB

2

3 Katholiek Scholencentrum JOMA Schooljaar Maantjessteenweg Merksem <?php $gip=new Gip(); $gip->author=new Author(); $gip->author->name="wim Tibackx"; $gip->author->studentclass="6ib"; var_dump($gip); //enjoy! Geïntegreerde Proef 6IB Wim Tibackx Stage: Foreach BVBA St. Bartholomeusstraat Merksem (ANTWERPEN) Tel Stagementor: Samuel Meurs Wim Tibackx Te Boelaarlei Borgerhout (ANTWERPEN) Tel Wim Tibackx 12 6IB

4 Woord vooraf Beste lezer, Ik ben Wim Tibackx. Student 6 Informaticabeheer op ksjoma, hobby-webdeveloper en open-source enthousiast. Op het einde van het secundair onderwijs is het belangrijk dat de leerling voldoende kent en kan om verdere studies aan te vatten of zich op de arbeidsmarkt te begeven. De school heeft verschillende manieren om hiervan een beeld te krijgen. ksjoma koos in de richting Informaticabeheer voor een geïntegreerde proef met stage. Deze geïntegreerde proef, waarvan u mijn exemplaar nu in handen of op het scherm heeft, handelt over verschillende onderwerpen. Zo maak ik een vergelijking tussen webdevelopment talen, bespreek ik mijn stagebedrijf evenals video-editing software. Een eindwerk is het resultaat van een lang proces dat door verschillende mensen wordt ondersteund. Ik wens dan ook enkele mensen te bedanken. Allereerst zijn er de mensen die ik mocht interviewen voor mijn vrije opdracht: Peter Tibackx, Thomas Toye, Jonas Drieghe, Bert Cielen en Tom Klaassen. Verder wil ik dhr. Ceulemans en dhr. Aps, mijn leerkrachten Informatica, bedanken voor hun raad omtrent mijn vrije opdracht en website. Ook zijn er de werknemers van Foreach, waar ik stage mocht lopen, voor de interessante inkijk in webdevelopment in de bedrijfswereld. Hier heb ik zaken geleerd die ik ook in deze gip nuttig kon toepassen. En last but not least zijn er al die mensen die mij door de jaren heen hebben gestimuleerd te developen en designen zonder wie ik niet had kunnen staan waar ik nu sta: mijn familie, Jochem Te Wierik, Thomas Toye, Boris Meer, Saro Verhees, Murray Greenheart, Andrew Burleson en vele anderen.

5 Inhoudsopgave INHOUDSOPGAVE... 1 INLEIDING... 4 OVERZICHT GEBRUIKTE SOFTWARE ENGELS VRIJE OPDRACHT WEBSITE BEDRIJFSECONOMIE ALGEMEEN... 7 DEEL 1. ENGELS FILM TEXT SCREENCAST TEXT DEEL 2. VRIJE OPDRACHT PHP, ASP.NET EN RUBY ON RAILS EEN VERGELIJKING TUSSEN WEBDEVELOPMENT ECOSYSTEMEN ALGEMENE SITUERING VAN DE TALEN ASP.NET PHP JSP RUBY ON RAILS ONTWIKKELING VOORBEELDTOEPASSING: CONTACTR ALGEMENE INFO OVER CONTACTR DATA EN DATABASE ONTWIKKELING Ruby On Rails WAT ANDEREN DENKEN: INTERVIEWS MET DOORWINTERDE WEBDEVELOPERS PETER TIBACKX DEVELOPT 9 JAAR WAARVAN 3 JAAR PROFESSIONEEL DE JONGE THOMAS TOYE DEVELOPT NU 1,5 JAAR IN PHP JONAS DRIEGHE, BLOGGER OP DEVELOPT 10 JAAR, WAARVAN 4 À 5 JAAR PROFESSIONEEL BERT CIELEN IS WERKNEMER BIJ TOM KLAASEN IS ZAAKVOERDER VAN 10TO INSTALLEREN VAN SERVERS (SIMPELE SETUP) INLEIDING OPZETTEN VAN DE SERVERS Opzetten van Ubuntu Desktop met LAMP+Rails+Pma+mod_rewite+mod_rails Opzetten van server 3: XAMPP op Windows DEEL 3. WEBSITE VOOR KSA-VKSJ XAVERIUS MET THE LAMPIRO CONTENT FRAMEWORK KSA-VKSJ XAVERIUS LAMPIRO CONTENT FRAMEWORK KEUZE Geschiedenis Verder zoeken Inner workings Pagina 1 van 99

6 De oplossing ONTWIKKELING INSTALLATIE (APACHE) WEBSITE PLANNING FEATURES (FRONT- EN BACK-END) ROLES, USERS EN PERMISSIONS USERCOMPONENTS THEMES Themes in Lampiro Hoe het werkt in Hotaru Hoe het werkt in Lampiro De ontwikkeling van de KSA-VKSJ Xaverius theme Hoe het er uitziet Content Sidebar Footer PLUGINS Hoe het werkt in Hotaru Hoe het werkt in Lampiro DATABASE Variatabellen Posts Themes Plugins Pages-Blocks-Menus Users Comments Widgets Volledig schema DEEL 4. BEDRIJFSECONOMIE VOORSTELLING STAGEBEDRIJF FOREACH ALGEMENE INFORMATIE BEDRIJFSACTIVITEITEN STRUCTUUR INLEIDEND GESPREK UITGEVOERDE TAKEN EVOLUTIE BALANSTOTAAL OVERGEDRAGEN WINST PERSONEEL PERSONEEL: VOLTIJDS EN DEELTIJDS PERSONEEL: GESLACHT PERSONEEL: IN- EN UITTREDINGEN FOTO S EN SFEERBEELDEN AANVRAAG LENING HET VINDEN VAN EEN BANK KBC-INVESTERINGSKREDIET ALTERNATIEVE OPTIE: LEASING Pagina 2 van 99

7 WOORDENBOEK HET SINGLETON DESIGN PATTERN CSRF-ATTACKS EN PROTECTION COMPILED VS. INTERPRETED ROUTING CONVENTION OVER CONFIGURATION SLUG BIBLIOGRAFIE VRIJE OPDRACHT WEBSITE BESLUIT BIJLAGEN BIJLAGE 1. AFLOSSINGSTABEL LENING BIJLAGE 2. POWERPOINTVOORSTELLING STAGEBEDRIJF Pagina 3 van 99

8 Inleiding In dit werk bespreek ik verschillende zaken. De belangrijkste zijn waarschijnlijk mijn vrije opdracht, genaamd PHP, ASP.NET en Ruby On Rails: Een vergelijking tussen webdevelopment ecosystemen en mijn website-opdracht, Website-ontwikkeling voor KSA-VKSJ Xaverius met The Lampiro Content Framework. In mijn vrije opdracht bespreek ik eerst de drie talen kort waarna ik in de drie talen een webbased content management application, genaamd Contactr, maak. Dit project is te vinden op Vervolgens zet ik ook enkele developmentservers op. Ook is er plaats voor de stem van developers met ervaring. Via interviews vraag ik hen naar hun mening en voorkeur. Voor mijn website-opdracht ontwikkelde ik zeer veel zelf. Het begon met plugins voor een minimalistisch Content Management System, maar zoals u verder in dit werk zal lezen, heb ik later beslist om dat cms te forken in een nieuw eigen product, The Lampiro Content Framework (verder Lampiro, Lampiro-cf, lampiro-cf of lampiro genaamd). Dit product is te vinden op Daarbij wil ik vermelden dat Lampiro voorlopig ontwikkeld is in functie van de KSA-VKSJ Xaverius website en natuurlijk, gezien de grootte, nog niet af is. Een stabiele versie is er nog niet en dit zal ook nog wel enkele maanden duren. Daarom gebruikt dit werk en bijgevolg de KSA-VKSJ Xaverius website een developmentversie. Naast het feit dat de features niet volledig zijn en ik voorlopig met een gebrek aan tijd kamp zorgt ook een licensingprobleem voor het voorlopig uitblijven van een stabiele release. Hotaru CMS was namelijk gelicensed onder de GPL v2-license, welke een erg restrictieve open-source license is die helaas door veel developers met een afkeer voor licenses wordt gekozen. Ik license lampiro echter onder de New BSD license, welke een zeer vrije license is, ongeveer gelijkstaand met de MIT-license. Dit impliceert dat zolang Lampiro code van Hotaru bevat, wat het geval is op dit moment, Lampiro ingaat tegen de GPL v2-license van Hotaru. Deze stelt immers dat afgeleide werken van een GPL-licensed werk ook onder GPL moeten gelicensed worden. Vanaf dat Lampiro volledig op eigen code draait, is dit probleem echter van de baan. Desalniettemin staat dit momenteel wel een eventuele release in de weg. Verder stel ik ook Foreach voor en krijgt u enkele beelden van mijn stage aldaar. Op die stage kreeg ik de taak mee te draaien bij de developers. In de eerste week was het de bedoeling dat ik voor 0,5 FTE 1 meedraaide en in mijn tweede week voor 0,75 FTE. Ik moest onder andere bijkomende functionaliteit schrijven voor een interne applicatie, die werkte met een custom in-house framework. Verder heb ik ook geholpen bij de bugtracking voor een bestaande applicatie en bij de ontwikkeling van de back-end voor 1 Full Time Equivalent Pagina 4 van 99

9 een nieuwe mobiele demo-applicatie. Hierdoor kon ik kennis maken met verschillende developmentwijzen en libraries. De stage zie ik, algemeen gezien, als een zéér nuttige ervaring. Nota: Het werk van een software developer met publiek gereleasde software stopt nooit. Lampiro wordt ook na het publiceren van deze GIP verder ontwikkeld. Daarom kan het zijn dat bepaalde code op het moment dat u dit leest al verouderd is of wanneer ik dit schreef nog maar een proof of concept was, maar ondertussen mogelijk al geïmplementeerd is. Om hieraan tegemoet te komen zal ik trachten om tussen het publiceren van dit werk en de mondelinge verdediging hiervan af en toe een update te publiceren. Deze versie, alsook de updates, zal u kunnen vinden op mijn website (meer bepaald hier: Ook zijn er bepaalde stukken gedevelopte software, zo bijvoorbeeld Contactr, die niet volledig af zijn geraakt. Ook updates daarvan zal u kunnen terugvinden op bovenvermelde pagina. Op de mondelinge verdediging zal ik demo s uitvoeren met de nieuwste versies van de producten. Een changelog van Lampiro zal ter uwer beschikking worden gesteld. Pagina 5 van 99

10 Overzicht gebruikte software 1. Engels Sony Vegas Pro 8 Sony Vegas Pro 10 Adobe Audition CS5 Microsoft Office Word Vrije Opdracht Netbeans 1.9 Adobe Dreamweaver CS5 Aptana Studio 3 Apache 2 PHP 5.2 en 5.3 MySQL 5 PhpMyAdmin 3.4 Ruby Ruby On Rails Rubygems Visual Studio 2010 MySQL Workbench 5.2 Community Edition VMWare Workstation 7.0 Virtualbox Google Chrome (dev channel) Microsoft Office Word 2010 Microsoft Command Prompt Microsoft Windows 7 Microsoft Server 2008 Ubuntu Desktop Ubuntu Desktop Ubuntu Server Gedit Xampp Phusion Passenger Notepad++ Google Code Project Hosting Pagina 6 van 99

11 Libreoffice Writer 3.3 Ecoder Website Netbeans 1.9 Adobe Dreamweaver CS5 Microsoft Notepad Notepad++ Aptana Studio 3 Apache 2 PHP 5.2 en 5.3 MySQL 5 PhpMyAdmin Google Code Project Hosting Microsoft Office Word 2010 Libreoffice Writer 3.3 Google Chrome (dev channel) Mozilla Firefox 3.6 en 4 Internet Explorer 6, 7, 8, 9 en 10 (beta) Opera Safari Browsershots.org Internet Wayback Machine (web.archive.org) Hotaru CMS Lampiro-cf (repo-dev) Ecoder Bedrijfseconomie Microsoft Office Word 2010 Microsoft Office Powerpoint 2010 Libreoffice Writer Algemeen Microsoft Office Word 2010 Microsoft Office Powerpoint 2010 Libreoffice Writer 3.3 Pagina 7 van 99

12 Deel 1. ENGELS Engels Pagina 8 van 99

13 ENGELS 1.1 Film Engels: film Pagina 9 van 99

14 1. Text For the English assignment we made a movie about the Saint-James Church in Antwerp. The text spoken in the video can be found below. The video can be found on the DVD. They started to build the St. James' Church in Antwerp in 1491, with special permission of the pope. The architects chose to build the tower first, which was uncommon. Originally one tower of 150m (which is higher than the Antwerp Cathedral) was planned, however, due to financial problems the height was limited to 55m. In fact, the whole church was meant to be larger. The plans were made at the time when Antwerp was well on its way to becoming one of the most important economic cities in Europe, and thus were very ambitious. Due to the decline of the city starting mid-16th century, financial problems appeared and caused construction to halt and plans to be rethought. In 1656 the building ended. Meanwhile, the interior had been destroyed during the iconoclastic storms. The Baroque 17th century interior was however well preserved in the French Revolution, thanks to a priest who pledged allegiance to the French revolutionaries. Many of the original stained-glass windows were destroyed during World War II. The church has 23 altars and features the tomb of famous painter Pieter Paul Rubens. The church was and is an important stop on the pilgrimage route to Santiago de Compostela. In 1727 Mozart played on the church's organ, which is still fully intact up until now. Engels: film Pagina 10 van 99

15 ENGELS 1.2 Screencast Engels: screencast Pagina 11 van 99

16 1. Text Hello and welcome to this Sony Vegas tutorial. We'll be using Sony Vegas 8. Okay, let's start. Choose the movies you wish to use. Click the explorer-tab and locate your movie. Then drag it to the right place on the timetable. You can repeat this as often as you want. After that, select the part of the movie you wish to use by clicking right above the time indication and drag as far as you need. You can copy or cut this part by right clicking on it. Now you can delete the parts you don't need. Your movie is now ready for editing. For starters, zooming. Click on the tiny square on the right. This brings up the event pan/crop screen. The circle around the giant dotted F is the zoom size. Default, it is the whole movie. Underneath the zoom size, you can see another timetable. You can use that to go to the part where you want to zoom. Click on the corners around the F and drag until you get the size you want. By clicking in the F and dragging the mouse, you can choose a part of the screen to zoom on. However, don t forget to create a starting point. Otherwise you'll zoom in from the beginning of the movie. You can do so by clicking the plus sign. Now, we'll need to create an end point. Search for the right spot on the time-table, right click the F and click restore and click the plus again. Now, let's say you've got two scenes and you want to fade between them. Choose the movie in which you want to fade and drag it partially on top of the first scene and it will fade automatically. Time for adding some titles. First, select the tab Media Generators. Choose Text. Here you can decide whether you want text on top of the movie or on a plain background. You can set the style with colors, fonts and more. Drag it onto the timetable. Now, type the text you need into the popup. After this you can choose where it needs to be aligned on the video. Click the placement tab and drag the text around to do so. We'll change the appearance a bit more... Don't you think split screen looks nice? Let's try it. Click on the tiny square again. Choose the part you want to be split. Make the F smaller, the way you want the first screen to be. Then, create starting and ending points like before. Now, we'll add the other part. Choose a second clip, we'll use the title we just made. Drag it to just above the first video and go to the previous steps again, except you place the F where you want the other side to be. Test it, you should have a split screen now. Now that video technology has come to combining video and audio, let's use that. Insert the music file like you did with the movie file before. I guess you can position and edit it by yourself now? Good luck! Okay, I hope everything went alright. Keep on making movies! Engels: screencast Pagina 12 van 99

17 Deel 2. VRIJE OPDRACHT PHP, ASP.NET en Ruby On Rails Een vergelijking tussen webdevelopment ecosystemen Vrije Opdracht Pagina 13 van 99

18 1. Algemene situering van de talen 1.1. ASP.NET ASP.NET is de opvolger van ASP (Active Server Pages), beiden ontwikkeld door Microsoft. Verder wordt ASP.NET gecompileerd 2. ASP.NET is meer een framework voor websites en -applicaties dan een taal. Vanuit het standpunt van de webdeveloper die ASP.NET gebruikt is het niet meer dan een set XML tags die hij/zij in een.aspx pagina (die verder gewone html bevat) kan gebruiken. Deze tags worden controls genoemd en zijn te herkennen aan de asp: prefix. Hieronder een voorbeeld van een mogelijke control. <asp:inputfield ID= InputField_Test runat= server /> In bovenstaand voorbeeld is er al iets belangrijk te zien: het runat attribuut. Meestal zal de waarde server moeten zijn. Dit zorgt ervoor dat de parser deze tag oppikt en gebruikt. Verder kan de gebruiker ook zogenaamde User Controls definiëren. De user kan dan eigen stukken code oproepbaar maken met een tag zoals bovenstaande. Natuurlijk is er meer dan de controls. Om dit te begrijpen moet men echter eerst de structuur van een ASP.NET website of -applicatie begrijpen. In dit werk wordt uitgegaan van een semi-optimale structuur, d.w.z. een duidelijke opsplitsing in files en de DRY 3 en KISS 4 principes. Volgens die voorwaarden ziet de structuur er als volgt uit: een masterpage (.master) die een algemene lay-out bevat met controls die een per-pagina invulbare plaats aangeven. Dit gebeurt met de control ContentPlaceHolder. In de front-end pagina s (.aspx), diegenen die de user in de URL kan zien staan, komen de controls. Bij elke front-end pagina zit een backend pagina, de zogenaamde Code Behind. In die Code Behind kan men gewoon Visual C#.NET of Visual Basic.NET schrijven. Daar zit meteen ook de kracht van ASP.NET. ASP.NET zelf is (vanuit developers standpunt) maar een set tags in HTML, maar door zaken als de ContentPlaceHolder en de herbruikbaarheid van C# of VB code is de drempel lager om het te gaan gebruiken. Hiermee zijn de 3 belangrijkste components geschetst. Er zijn er natuurlijk nog vele andere, zoals de Class file (.cs). Nadat Microsoft IIS 4.0 releasde (1997) wou het iets doen aan de vele klachten die er waren rond ASP. Deze gingen er vooral over dat de code niet proper was en er geen scheiding tussen logica en design was. Mark Anders en Scott Guthrie kregen de opdracht om te onderzoeken wat hieraan kon gedaan worden. Na een tijd kwamen ze met het concept XSP op de proppen (de X in de naam had geen betekenis, maar werd er geplaatst omdat het destijds de modeletter was in webtalen (XML, XSLT)). Er werd een eerste prototype van XSP gemaakt met Java. Later besloot men van Java af te stappen en met de Common Language Runtime (CLR) van Microsoft zelf te werken. Met het verschuiven naar CLR besloot men het 2 Zie woordenboek 3. Compiled vs. Interpreted (3. Compiled vs. Interpreted) 3 Don t Repeat Yourself 4 Keep It Simple, Stupid! Vrije Opdracht Pagina 14 van 99

19 eigen C# te gebruiken in plaats van Java. Het project was intern gekend onder de naam Project Cool. In de eerste helft van 2000 werd het project voorgesteld onder de naam ASP+. Enkele maanden later werd het echte al gerebrand naar ASP.NET. Op 5 januari 2002 werd ASP.NET 1.0 gereleaset, als onderdeel van.net framework 1.0. Eigenlijk is ASP.NET meer een framework dan een taal. ASP.NET is de tags, de routing 5 en dergelijke. De échte kracht zit in de backend taal: Visual C#.NET of Visual Basic.NET. ASP.NET is dus een framework voor Visual C#.NET en Visual Basic.NET PHP PHP (origineel Personal Home Page, later Personal Home Page/Forms Interpreter, nu PHP Hypertext Processor) werd origineel ontwikkeld door Rasmus Ledorf, toen hij senior software engineer was bij de Amerikaanse technologiereus IBM. Hij begon aan PHP in In 1995 kon hij versie releasen voor het grote publiek. In 1997 begonnen Zeef Suraski & Andi Gutmans (beiden Israëliërs) met het herschrijven van de PHP parser. Zo legden zij de basis voor PHP was een druk jaar voor PHP. PHP 3 kwam uit, PHP/FI 2 kwam uit (dit was de laatste release van PHP/FI), PHP veranderde van naam naar PHP: Hypertext Processor. Verder werd de parser na de release van PHP 3 opnieuw herschreven. In 1999 werd dit gereleaset onder de naam Zend Engine 1 door Suraski & Gutmans via hun daarvoor opgerichte bedrijf Zend Technologies. Sindsdien krijgt elke major release een nieuwe versie van de Zend Engine mee. Zend Technologies legde de naam PHP ook vast. PHP is een zeer populaire open source webdevelopment taal. Het verschilt echter sterk van de andere talen besproken in dit werk. In het begin van de ontwikkeling was het duidelijk geïnspireerd op Perl, tegenwoordig is dit minder te merken. De syntax van PHP lijkt het meeste op C (in tegenstelling tot C is het wel mogelijk om Object-Oriented te werken). De programmeerwijze lijkt vooral op C++. PHP is een loosely-typed language. Dit houdt in dat men niet moet opgeven van welk type een variabele is, welk type de parameters zijn en dergelijke. Het zorgt ook voor de nodige inconsistenties bij het vergelijken van variabelen met de Loose Comparison methode, hier wordt enkel vergeleken op waarde, en niet op type. Deze methode gebruikt 2 gelijkheidstekens, terwijl de Strict Comparison methode er 3 gebruikt. 5 Zie woordenboek: 4. Routing Vrije Opdracht Pagina 15 van 99

20 Uit bovenstaande tabel zien we bijvoorbeeld dat true== php evalueert naar true, 0== php ook evalueert naar true maar true==0 false is. Dit is dus nogal inconsistent. Of om het met de woorden van een ander te zeggen: Verder is ook wel fijne lectuur als voorbeeld van wat er nog allemaal fout is met PHP. Vrije Opdracht Pagina 16 van 99

21 Het moet gezegd worden dat PHP sinds versie (juli 2004) langzaamaan evolueert naar een hardtyped language. Zo is het sinds versie mogelijk om (behalve voor de ingebouwde types als int, string 6 ) het verwachtte type parameter te definiëren. PHP heeft een kleine leercurve, maar dit is niet enkel een sterkte van de taal. De kleine leercurve zorgt ervoor dat veel nieuwe programmeurs met PHP beginnen. Echter vertrouwen velen van hen hiervoor op tutorials en cursussen op het internet, welke vaak outdated zijn en slecht in elkaar steken. Zo krijgen zij slechte technieken aangeleerd, die moeilijk af te leren zijn. Een andere zwakte van PHP is dat PHP over het algemeen een zéér trage adoption van nieuwe versies kent. Vaak gebeurt het dat programmeurs wel willen overschakelen maar hun webhosts nog enkele jaren bij de oude versie blijven. Bij de laatste grote versie (5.0.0) vergrootte dit effect nog doordat de eerste releases van 5.x vrij onstabiel waren. Dit zorgde ervoor dat PHP 5 pas 3 jaar na haar release echt doorbrak JSP JSP was het antwoord van Sun op ASP.NET en PHP. Het wou het denkbeeld dat Java niet voldoende ondersteuning had voor het web de wereld uit helpen. JSP is, net zoals ASP.NET, meer een framework dan een taal. Aan een gewone (x)html pagina worden speciale xml tags toegevoegd (JSP actions). De JSP pagina wordt door de user opgeroepen. De pagina wordt dan gecompileerd (als dit niet al gebeurd is) naar een Java Servlet. Een servlet is zowat het omgekeerde van een JSP pagina (veel vs. weinig Java). JSP actions kunnen worden gebundeld in een JSP Tag Library. Dit is een verzameling van acties die gebruikt kunnen worden om een webserver van extra functionaliteit te voorzien Ruby On Rails Even wat duidelijkheid scheppen. Ruby is een taal. Rails is een framework voor Ruby. Ruby met het Rails framework wordt Ruby On Rails genoemd. Rails heeft zoals elk framework wel zijn eigen mini-taaltje met eigen naming conventions en dergelijke. Ruby On Rails wordt in dezelfde mate samen genoemd als ASP.NET met Visual C#.NET. Ruby on Rails is a breakthrough in lowering the barriers of entry to programming. Powerful web applications that formerly might have taken weeks or months to develop can be produced in a matter of days. Tim O Reilly Ruby On Rails (ook vaak Rails of RoR genoemd) is oorspronkelijk geschreven door David Heinemeier Hansson. Hansson releasede Rails onder de open source MIT license in juli 2004 maar begon pas met het 6 Men kan voor de ingebouwde types wel de alternatieven uit de SPL extensie gebruiken, bv. SplInt, SplString. Vrije Opdracht Pagina 17 van 99

22 toegewijd te onderhouden in 2005, met als resultaat versie 1.0 in december In versie 3.0, gereleaset in augustus 2010, is Rails gemerged met Merb, een ander framework. Rails kan uitpakken met heel wat bekende namen van moderne apps die hiermee werken. Zo bijvoorbeeld Twitter, Groupon, Github, Geni, Scribd en Kongregate. Rails werkt volgens het MVC-principe. Vrije Opdracht Pagina 18 van 99

23 2. Ontwikkeling voorbeeldtoepassing: Contactr 2.1. Algemene info over Contactr Naast de theorie is natuurlijk ook de praktijk belangrijk. Om de talen te vergelijken zal ik een voorbeeldtoepassing ontwikkelen. Deze toepassing moet functioneren als een webbased contactbook en kreeg de naam Contactr. De applicatie bestaat in 3 versies: de PHP-versie, met als basis het Lampiro Content Framework, werkend op een MySQL database; de ASP.NET versie met Microsoft SQL Server en de Ruby On Rails versie die een wijde variëteit aan database engines support Data en Database In eerdere versies van dit werk had ik Contactr gepland als een zeer flexibele en modulaire toepassing. Ik heb door mijn ervaring bij Foreach echter ingezien dat het beter kan zijn eerst een beperkte set functionaliteit aan te bieden en later meer te ondersteunen. In versie 1.0 zal Contactr dan ook de volgende functionaliteit bijhouden: Contacts o o o o o o ID: int(11); Primary Key; Auto Increment Naam: varchar(100) Voornaam: varchar(100) Adres: text Phone: varchar(50) varchar(100) Contactgroups o o ID: int(11); Primary Key; Auto Increment Naam: varchar(100) Contactgroups_Contacts o o ContactId: int(11); Foreign Key => Contacts.ID ContactGroupId: int(11); Foreign Key => Contactgroups.ID Vrije Opdracht Pagina 19 van 99

24 2.3. Ontwikkeling Nota: De ontwikkeling van Contactr is nog gaande. Voorlopig is enkel Ruby On Rails opgenomen in deze bundel Ruby On Rails Het moet gezegd: Ruby On Rails is krachtig en snel. Een ervaren RoR developer zou Contactr kunnen gemaakt hebben in minder dan 2 uur, waar het in andere talen toch wel wat langer had geduurd. Men begint een rails applicatie te ontwikkelen door op een command prompt/terminal het commando rails new *naam+ in te geven. Dit genereert meteen de gehele backbone van je applicatie. Standaard zal Rails gebruikmaken van een SQLite database. Gecombineerd met de wijde range aan command line utilities kan je krachtig en snel developen. Zo kan je met rails generate controller *naam+ een controller genereren en met rails generate model *naam+ *database-table-voorstelling+ het model. Er zijn bepaalde naming conventions te volgen, maar dat valt nogal buiten de scope van dit werk. Met een snelle rake db:migrate run je de nieuwste migrations (die worden gemaakt wanneer je een model genereert of die je zelf kan maken met rails generate migration *naam+ ). Verder start je met rails server de Webrick server op, waarna je met op je applicatie terecht komt. Een model is zeer simpel, als je de naming conventions volgt. Zo runt volgende code mijn hele Contacttabel. Met relaties en validatie bij. class Contact < ActiveRecord::Base validates :voornaam,:presence=>true validates :naam,:presence=>true has_and_belongs_to_many :groups accepts_nested_attributes_for :groups, :allow_destroy => :true, :reject_if => proc { attrs attrs.all? { k, v v.blank? } } end Zoals u kunt zien leest de code zeer vlot en is de bedoelding meteen duidelijk. (Behalve misschien de voorlaatste lijn, die zorgt dat je vanuit een Contact-form meteen groups kan verwijderen en aanmaken). Met de models stopt het echter niet. De volgende 40 lijnen binden mijn Contact-views aan mijn Contactmodels en vangen alle nodige acties op. Het dient gezegd dat de code nog geoptimaliseerd zou kunnen worden. class ContactsController < ApplicationController def end def Vrije Opdracht Pagina 20 van 99

25 end def end def end def was successfully created.') else render :action=>"new" end end def = Contact.find(params[:id]) redirect_to(@contact,:notice => 'Contact was successfully updated.') else render :action => "edit" end end redirect_to(contacts_url) end end Om het compleet te maken zal ik nog even de view-code laten zien. Volgende 10 lijntjes zorgen voor een lijst van contacts. <h1>contacts</h1> <%= link_to "Make a new contact",new_contact_path %> <ul class="contacts"> do contact %> <li><% render "inlineshow", :locals => {:contact => contact} %></li> <% end %> <% %> <em>no contacts yet!</em> <% end %> </ul> Men kan dus met weinig code snel een basisapplicatie opzetten. Vrije Opdracht Pagina 21 van 99

26 3. Wat anderen denken: Interviews met doorwinterde webdevelopers 3.1. Peter Tibackx developt 9 jaar waarvan 3 jaar professioneel 1. Met welke talen werk je? PHP & JSP/Java 2. Welke van deze talen geniet je voorkeur en waarom? Ik heb geen echte voorkeur, beide talen hebben hun eigen handigheden. PHP is flexibel en loosely typed. Onder andere deze zaken zorgen ervoor dat men snel iets kleins kan testen. Java is strongly typed en dwingt om robuustere systemen te bouwen. Verder zijn er zeer veel libraries en is het beter geoptimaliseerd. Dit zorgt ervoor dat het nuttiger is voor grotere projecten. Voor kleinere projecten en om snel iets te testen is het dan weer minder handig 3. Wat vind je handig/minder handig aan bepaalde talen? M.a.w. hoe zou de ideale taal werken? Strong typed is echt wel handig voor serieuze projecten aangezien het de leesbaarheid van code vergroot. Een groot aanbod aan libraries, documentatie en support is ook zeer belangrijk. Voor mij is Java ongeveer de ideale taal. JSP heeft echter het nadeel dat men zonder scriptlets geen functies met argumenten kan oproepen of men moet zelf function library wrappers schrijven, wat niet altijd even handig is de jonge Thomas Toye developt nu 1,5 jaar in PHP 1. Waarom heb je voor PHP gekozen? Het leek me de gemakkelijkste taal om te leren. Verder is het ook veel makkelijker (gratis) webhosting met PHP te vinden in plaats van met bijvoorbeeld JSP. 2. Ben je, achteraf gezien, tevreden met je keuze? Zeker. Tegenover ASP.NET en JSP vind ik de structuur van PHP veel logischer en duidelijker. 3. Loosely typing of strongly typing? Ik vind loosely typing handiger, omdat ik flexibiliteit wil. Verder maakt dit de taal ook simpeler. 4. Als laatste, waar kunnen de lezers je terugvinden? Voornamelijk op mijn website Vrije Opdracht Pagina 22 van 99

27 3.3. Jonas Drieghe, blogger op developt 10 jaar, waarvan 4 à 5 jaar professioneel. 1. Je ontwikkelt in php en jsp, welke taal geniet jouw voorkeur en waarom? Ik denk dat de vergelijking hier verder mag getrokken worden. JSP situeert zich namelijk enkel in de frontend van Java webontwikkeling. Mijn persoonlijke voorkeur zit een beetje dubbel. Als het over view-layers en front-end ontwikkeling gaat verkies ik PHP (en de smarty template engine) omwille van de hoeveelheid code die nodig is in JSP (en JSTL). Als het gaat over back-end ontwikkeling verkies ik Java voor zijn robuustheid en strong typing. Uiteraard hangt het ook allemaal af van de omvang van het project. Kleine projecten doe ik liever in php, terwijl Java zich veel beter thuis voelt in een enterprise omgeving. 2. Als ik het goed begrijp ben je begonnen met php, waarom heb je daar origineel voor gekozen? Heel eenvoudig. Het is open source, eenvoudig op te starten en bijna elke ISP ondersteunt de combinatie apache / php / mysql. Een degelijke Java web host vinden is niet zo eenvoudig. De drempel om met php te beginnen voor webontwikkeling is gewoonweg veel lager dan die van Java. 3. Wat zijn enkele grote projecten waar je (mee) aan gedevelopt hebt? Professioneel ben ik de voorbije jaren vooral met front-end code bezig geweest. Hiervoor heb ik meegewerkt aan verschillende grote projecten als en een aantal interne applicaties voor de Sociale Zekerheid. Het laatste anderhalf jaar werk ik als Java web developer aan en (en een heleboel subsites hiervan zoals en dergelijke). Hiervoor werk ik in alle lagen van de applicatie (van database tot css / js). 4. Gebruikt je, buiten je werk, ook jsp? En zo ja, heb je een bepaald proces om te beslissen welke taal je gaat gebruiken? Wanneer ik buiten de werkuren iets doe werk ik meestal in PHP. Dit hoofdzakelijk om dezelfde reden waarom ik er aanvankelijk mee begonnen ben. Eenvoudige configuratie en hosting zijn hier vooral doorslaggevend. 5. Zijn er bepaalde dingen die je handiger vindt in php of in jsp (bijvoorbeeld: geen enums (behalve met SPL) in php,...) Ik mis vooral vaak de type checking in PHP. Het feit dat PHP loosely typed is maakt het zeer krachtig, maar ook zeer gevoelig voor fouten in de code. Vrije Opdracht Pagina 23 van 99

28 In Java mis ik dan weer regelmatig de mogelijkheid om functies aan te roepen op basis van strings ( zoals je in php bvb. $class->$methodname() kan doen ) Bert Cielen is werknemer bij 1. Je developt in C#/ASP.NET, heb je altijd in deze taal gewerkt? Ik ben begonnen met CGI/Perl, vervolgens overgeschakeld op ASP met PerlScript (en ook JavaScript), en daarna naar.net/c#. Ik heb ook al eens gespeeld met PHP, en lang geleden ook een beetje met Java gewerkt. 2. Waarom heb je voor deze taal gekozen? Ik heb er niet echt voor gekozen: indertijd is het bedrijf waar ik toen bij werkte overgeschakeld van CGIaangedreven websites (op Unix) naar ASP omdat we de nood hadden databases te gebruiken, en Windows toen het eenvoudigste platform aanbood. Ik ben dan blijven hangen in de Microsoft-omgeving, en toen.net opkwam, ben ik daar in meegegaan. Ik ben nooit een fan geweest van VBScript of VB, en dan is C# de logische keuze. Ook al omdat het de taal was die Microsoft zelf promootte. 3. Zijn er zaken die je, in vergelijking met andere talen, beter/slechter vindt aan C#/ASP.NET? Mijn kennis van andere talen is redelijk beperkt, eigenlijk kan ik dus niet zo goed de vergelijking maken. Op zich vind ik C# een aangename taal om in te programmeren; als ik voorbeeld-code in VB.NET zie, dan vind ik die vaak onhandig en omslachtig. Let wel:.net/c# 1.0/1.1 was IMHO 7 niet rijp, pas bij de 2.0 versie is.net/c# een behoorlijke taal geworden. En de latere toevoeging van Linq was helemaal een schot in de roos. 4. Wat zijn enkele grote projecten waaraan je gedevelopt hebt? Enkele jaren geleden heb ik de website voor Joker ontwikkeld, wat in essentie een custom-versie was van de bestaande CMS 8 die ontwikkeld was door mijn baas bij At Your Site. Voor Joker zijn er een heleboel op maat gemaakte modules bijgeschreven, en ook voor de website zijn er specifieke stukken ontwikkeld. (De website van Joker is een jaar geleden overgenomen door een ander bedrijf.) Ondertussen werk ik al meer dan vier jaar als consultant bij Sony Europe, waar ik developer ben van multitier SCM-applicaties voor de VAIO-afdeling en voor de TV-afdeling. Het team waar ik in zit, ontwikkelt applicaties die "de business" helpt bij het verwerken en interpreteren van diverse gegevens (verkoopscijfers, stock,...) voor rapportage en voor planning. Zelf heb ik de afgelopen tijd vooral gewerkt aan een applicatie die de TV-afdeling helpt bij het voorspellen van trends in de verkoop van LCD- en 7 In My Humble Opinion 8 Content Management System Vrije Opdracht Pagina 24 van 99

29 Plasma-TV's (de opmars van 3D en LED, het marktaandeel van grote schermen tegenover kleine schermen, de prijszetting,...). Op zich is er niet zoveel web-werk: de meeste dingen die we doen, hebben te maken met processen die data ontvangen, verwerken en/of uitsturen. Toch zijn er enkele projecten waar een web front-end een belangrijke rol spelen, zoals een applicatie waarin VAIO-planners de regels vastleggen voor CTOtoestellen: bvb. een gele laptop mag geen blauw toetsenbord krijgen; een laptop die in de UK gaat verkocht worden, is enkel beschikbaar met een Engelstalige Windows; een low-end laptop kan geen Bluray-drive bevatten. CTO staat voor "configure to order": het gaat om laptops waarbij de gebruikers via zelf hun toestellen kunnen samenstellen, bvb. een upgrade van de HD, meer geheugen, een specifieke kleur,... Natuurlijk zijn er beperkingen in de mogelijkheden, het zijn die "regels" die worden opgesteld via de website die wij ontwikkeld hebben. In het verleden maakten we die websites (die enkel via het intranet beschikbaar zijn) meestal in ASP.NET met AJAX etc, maar tegenwoordig gebeurt dat in Silverlight omdat er veel meer mogelijkheden zijn en veel minder problemen. Bij ASP.NET en AJAX treden er altijd wel problemen op bij de interactie tussen JavaScript en HTML en verlies je vaak veel tijd met het ontrafelen van wat er nu precies misgaat. 5. Develop je ook buiten je werk, zoja, doe je dit in dezelfde talen? Eigenlijk te weinig. Ik heb altijd wel plannen en ideeën, maar vaak ontbreekt de tijd en/of zin. Kleine dingen voor eigen gebruik doe ik meestal in PHP, maar als het ingewikkelder wordt, haal ik toch weer Visual Studio van stal. 6. Heb je ooit de ambitie gehad om andere talen te leren? Ik heb recent wel eens zin om me te verdiepen in bvb. Ruby on Rails, omdat die technologie steeds populairder lijkt te worden, en omdat je blijkbaar op korte tijd gesofisticeerde (web-)applicaties kan maken. Aan de andere kant blijft Microsoft verder innoveren: zo moet ik me dringend gaan verdiepen in C# 4.0, en wil ik ook meer gaan doen in Silverlight (dus XAML) Tom Klaasen is zaakvoerder van 10to1 1. Jullie developen hoofdzakelijk in Ruby On Rails, van waar die keuze? Ten eerste is Rails fijn om mee te werken. Vroeger werkten wij (de zaakvoerders) in een groot Javadevelopment team. We wilden echter kleinere projecten doen. Met kleinere projecten is er echter ook een kleiner budget, dus kan je minder hostingkosten maken. Rails leent zich hier goed toe. Verder is het ook veel dynamischer en flexibeler. We werken volgens het agile model, en dit is veel makkelijker toe te Vrije Opdracht Pagina 25 van 99

30 passen met Rails dan met Java. In Java zijn er ook wel methoden die dit mogelijk maken, maar in Rails is het natuurlijker. 2. Wat zijn de projecten waar je met de meeste trots naar terugkijkt? Wij vinden alle projecten belangrijk. Op dit moment werken we aan ons eerste iphone-project, wat belangrijk is voor de toekomst, aangezien hier meer en meer vraag naar komt. Wat ons daar onderscheid van anderen is dat wij al een achtergrond hebben in de back-end van web apps. 3. Developt je ook buiten je werk bij 10to1 en zo ja, in welke talen? Zelf programmeer ik voorlopig niet meer. Onze werknemers werken ook wel in objective C (voor iphone/ipad applicaties). Binnenkort zullen we ook in Java werken, voor Android-apps. 4. Wat zijn je programmeerambities en de ambities van 10to1 voor de komende jaren? Wel, we komen van consultancy en hebben dan de stap naar services gezet. Nu zijn we bezig met de stap te zetten naar volledige producten met een mobiele front-end en een backend in Rails. 5. Rails is ook bekend voor discussies tussen Rails developers en developers in andere talen, vooral PHP. Wat is jouw visie hierop? Kan Rails een vervanger zijn voor PHP of andere talen? 4 à 5 jaar geleden dacht ik dat het kon. Nu ben ik niet meer zo zeker. Veel bedrijven staan weigerachtig tegenover Rails omdat de inhouse kennis vooral bij Java,.NET of PHP ligt. Verder zijn bestaande dingen moeilijk te vervangen en ook moeilijk te integreren met nieuwe software in Rails. Verder is PHP al een gevestigde waarde. Er is veel bestaande software voor. Waar men van nul begint is Rails een kanshebber, maar waar men moet integreren met bestaande zaken minder. Of het echt een doorbraak gaat worden op de Belgische markt zal vooral afhangen van marketing en of er grote bedrijven/namen op de kar springen. In de internationale markt zijn er al bekende namen. Twitter bijvoorbeeld kon snel tot iets goed werkend komen. Hierdoor hebben ze snel succes (en scalingproblemen) gekend. 6. Is Rails een goede eerste programmeertaal? (Om te leren programmeren dus)? Ja, vooral omdat je er zeer snel resultaat mee hebt. Bij bijvoorbeeld Java moet je heel veel side-dingen doen voor je iets hebt. Je moet je daar ook met vele andere dingen bezighouden dan met wat je eigenlijk echt wilt doen. Rails is meer gefocust en to the point. Tegenover PHP is het dan weer meer objectgeoriënteerd. Vrije Opdracht Pagina 26 van 99

31 4. Installeren van servers (simpele setup) 4.1. Inleiding Tijdens de ontwikkeling van applicaties is het handig de geschreven code regelmatig te testen. Het is echter niet wenselijk deze code steeds te moeten uploaden naar een server, als er zelfs al een aparte dedicated testserver voor handen is, wat wel wenselijk is. Het is dus zeer handig de mogelijkheid te hebben code te testen zonder deze te moeten uploaden naar een server. In dit hoofdstuk leert u een server op de lokale werkcomputer op te zetten (waar mogelijk). Belangrijk is echter te onthouden dat het niet wenselijk is deze server als enige testserver te gebruiken. Best is om naast de lokale server op de eigen computer ook één of meerdere testservers te hebben, eventueel met meerdere configuraties (bv. een testserver met php 5.0 en één met php 5.3). Dit scenario wordt nog nuttiger wanneer er in team aan een project wordt gewerkt. Hier kan de dedicated testserver ook als main repository van de developmentbranch dienen. Dan kunnen changes, na lokaal testen, simpelweg naar deze repo gepusht worden en ineens getest. Verder is het ook belangrijk te onthouden dat de testserver niet de productieserver mag zijn. Men moet steeds een scheiding van de stable- en developmentcode aanhouden. Vrije Opdracht Pagina 27 van 99

32 4.3. Opzetten van de servers Opzetten van Ubuntu Desktop met LAMP+Rails+Pma+mod_rewite+mod_rails In dit deel gaan we een Ubuntu Desktop development server met Apache, MySQL, PHP, Ruby, Rails, phpmyadmin, mod_rewrite en mod_rails/phusion Passenger opzetten. Screenshot 1: We vertrekken van een nieuwe Ubuntu installatie Screenshot 2: We installeren Apache2 met 'sudo apt-get install apache2'. Wanneer er gevraagd wordt of we de additional packages willen installeren, doen we dat. Vrije Opdracht Pagina 28 van 99

33 Screenshot 3: Wanneer we na het installeren naar gaan zien we dat apache werkt. Screenshot 4: We installeren PHP met 'sudo apt-get install php5 libapache2-mod-php5' Vrije Opdracht Pagina 29 van 99

34 Screenshot 5: We herstarten Apache met 'sudo /etc/init.d/apache2 restart'. Screenshot 6: Wanneer we naar '/var/www/' gaan zien we de index.html file staan. Screenshot 7: We openen even een text-editor met root-permissies. Vrije Opdracht Pagina 30 van 99

35 Screenshot 8: We maken een phpinfo() file om onze php-installatie te testen. Screenshot 9: We slaan de phpinfo() file op in '/var/www/phpinfo.php'. Screenshot 10: Wanneer we dan naar gaan, zien we de output van phpinfo(). Screenshot 11: We installeren mysql met 'sudo apt-get install mysql-server' Vrije Opdracht Pagina 31 van 99

36 Screenshot 12: We moeten het wachtwoord voor de root user ingeven Screenshot 13: We moeten het wachtwoord voor de MySQL root herhalen Screenshot 14: We installeren de koppeling tussen MySQL en Apache en verder ook PhpMyAdmin met 'sudo apt-get install libapache2-mod-auth-mysql php5-mysql phpmyadmin'. Screenshot 15: Bij de vraag of we pma op een apache2 of een lighttpd server willen installeren kiezen we voor apache2 en drukken op enter. Vrije Opdracht Pagina 32 van 99

37 Screenshot 16: We krijgen de vraag of we pma al willen configureren, en kiezen Yes. Screenshot 17: We geven het password in van de rootserver, zodat pma haar tabellen kan aanmaken. Screenshot 18: We geven het wachtwoord in van het phpmyadmin account. Vrije Opdracht Pagina 33 van 99

38 Screenshot 19: We herhalen het wachtwoord. Screenshot 20: We willen de php-configuratie aanpassen, om mysql te laden. Dit doen we door onderaan 'extension=mysql.so' toe te voegen. Vervolgens herstarten we Apache weer. Screenshot 21: Op de zelfde manier als bij php.ini openen we nu '/etc/apache2/httpd.conf' om enkele virtual hosts toe te voegen. Momenteel zorgen we dat we onze standaard localhost site met en kunnen bereiken. Verder zorgen we er ook voor dat we PhpMyAdmin met kunnen bereiken. Vrije Opdracht Pagina 34 van 99

39 Screenshot 22: Vervolgens openen we /etc/hosts en passen we de localhost-lijn aan met de adressen die we zojuist hebben aangemaakt. Daarna herstarten we apache weer. Screenshot 23: We testen of we onze gewone localhost-site met en kunnen bereiken. Vrije Opdracht Pagina 35 van 99

40 Screenshot 24: We zien dat ook PhpMyAdmin bereikbaar is met Screenshot 25: Wanneer we inloggen, kunnen we zien dat phpmyadmin succesvol connectie heeft kunnen leggen met MySQL. Screenshot 26: We activeren mod_rewrite en herstarten daarna Apache. Screenshot 27: We installeren ruby. Vrije Opdracht Pagina 36 van 99

41 Screenshot 28: We installeren rubygems, de package manager van Ruby. Screenshot 29: We installeren passenger met Apache binding. Screenshot 30: We installeren rails met 'sudo apt-get install rails'. Hierna gaan we naar /var/www/ en doen daar 'rails new testapp'. Vrije Opdracht Pagina 37 van 99

42 Screenshot 31: Vervolgens kunnen we een nieuwe virtual host aanmaken om naar de public map te verwijzen. Vrije Opdracht Pagina 38 van 99

43 Opzetten van server 3: XAMPP op Windows 7 Screenshot 32: We starten met een nieuwe Windows 7 installatie Vrije Opdracht Pagina 39 van 99

44 Screenshot 33: Ga naar de XAMPP-website ( Screenshot 34: Zoek de XAMPP-download op Vrije Opdracht Pagina 40 van 99

45 Screenshot 35: Kies de Windows installer. Screenshot 36: Start de XAMPP-installer en kies install. Vrije Opdracht Pagina 41 van 99

46 Screenshot 37: Er start een commandline-window waar je enkele opties moet kiezen. Moeten er shortcuts op het bureaublad staan? Screenshot 38: Natuurlijk willen we voortgaan met de installatie. Screenshot 39: We willen een gewone installatie, dus kies "no". Screenshot 40: Zo, XAMPP is klaar. We drukken nog even op enter... Screenshot 41: XAMPP vraagt of de tijdszone correct is. Helaas kan dit nu niet gewijzigd worden. Vrije Opdracht Pagina 42 van 99

47 Screenshot 42: Dit is het standaardmenu na installatie. Hier kunnen we voor optie 1 kiezen om de GUI te starten. Screenshot 43: Het XAMPP control panel is gestart. Screenshot 44: Klik op het checkboxje naast Svc Apache om Apache als een service te installeren. Vrije Opdracht Pagina 43 van 99

48 Screenshot 45: Installeer ook nog MySQL als service en start deze. Screenshot 46: Ga naar je lokale XAMPP-site ( Vrije Opdracht Pagina 44 van 99

49 Screenshot 47: Ga naar het securitygedeelte en stel voor de veiligheid een wachtwoord in. Vrije Opdracht Pagina 45 van 99

50 Deel 3. WEBSITE voor KSA-VKSJ Xaverius met The Lampiro Content Framework Website Pagina 46 van 99

51 1. KSA-VKSJ Xaverius KSA-VKSJ Xaverius is een jeugdbeweging van de KSA- VKSJ-KSJ groep. KSA is voor jongens van 6 tot 18 jaar, terwijl VKSJ voor meisjes van 6 tot 16 jaar is. Na de jaren als lid kan men in de leidingsploeg stappen. KSA- VKSJ Xaverius is gevestigd aan de Collegelaan te Borgerhout naast het Xaveriuscollege, waarvan zij ook de faciliteiten gebruiken. Zij delen de eigen faciliteiten met Scouts Xaverius-St. Rita. Voluit staat de afkorting KSA-VKSJ voor Katholieke StudentenActie Vrouwelijke Katholieke Studerende Jeugd. De jeugdbewegingen organiseren tijdens het schooljaar één vergadering per week, uitzonderingen mogelijk. Bij regelmaat gaan deze vergaderingen door op zaterdag van 14u tot 17u. In de zomervakantie wordt er een kamp georganiseerd en doorheen het jaar zijn er enkele weekends. 2. Lampiro Content Framework Lampiro is een eigen project dat Hotaru CMS forkt. Momenteel zit het nog in een developmentfase maar in de toekomst kan het een user- en content-centric cms worden Keuze Geschiedenis KSA-VKSJ Xaverius heeft tot op heden 3 verschillende websites gehad. Van deze drie hadden de laatste twee een dynamisch karakter. De tweede van de drie werkte met custom code, en de laatste, momenteel nog steeds online maar bijna ongebruikt, werkt op Drupal. Over de custom code is mij niet veel bekend, maar naar mijn ervaring is Drupal ingewikkeld in gebruik, zeker voor zij die iets minder vlot met computers om kunnen. Website Pagina 47 van 99

52 Figuur 1: De tweede website van KSA-VKSJ Xaverius, voor zover hij nog te bekijken valt met The Internet Wayback Machine Figuur 2: De KSA-VKSJ Xaverius site hoe hij er momenteel uitziet. Verder zoeken Ik dacht voor deze site eerst aan Wordpress, maar het werd mij al snel duidelijk dat de inner workings van Wordpress en haar manier van omgaan met content mij niet lagen. Ik besloot op zoek te gaan naar een cms zonder standaard content types. Na enige tijd zoeken kwam ik Hotaru CMS tegen. Hierin begon ik Website Pagina 48 van 99

53 ook te developen. Na enkele weken bleek echter dat de ontwikkeling van Hotaru niet voortgezet ging worden, wegens een gebrek aan tijd, motivatie en financiële steun van gebruikers. Inner workings De hoofdklasse Verder was ik niet echt tevreden over de inner workings van de software. Zo is men bijna verplicht om aan elke functie de shared instance van de hoofdklasse, Hotaru, mee te geven. Deze klasse bevat instanties van de database-wrapper, de security helper en veel meer. Verder bevat deze klasse ook een heel aantal doorverwijsfuncties naar de specifieke eigen libraries. Tenslotte bevat ze ook fallback-functies voor bepaalde hooks. Static functies? Niet bekend. Verder maakt de core code nergens gebruik van static functies. Dit dus ook niet bij functies waarvoor een object instance niet noodzakelijk is of bij functies waar dit, gezien de context, zelfs niet wenselijk is. Dit gebeurd zowel in de specifieke libraries als in de Hotaru-class. Zo moet men bijvoorbeeld een nieuwe instance van PluginFunctions maken om numactiveplugins() op te roepen, dat het aantal active plugins telt. Die functie moet op haar beurt weer een Hotaru-instance meekrijgen omdat ze database-access nodig heeft. Dan is het natuurlijk makkelijker om de functie numactiveplugins() uit de Hotaru-class op te roepen, waarvan je toch sowieso een instantie krijgt bij iedere functie die door Hotaru zelf wordt aangeroepen. Zoals te raden valt, verwijst de laatste simpelweg naar de eerste. Overvloed aan opsplitsing van functionaliteit Ook de dubieuze overvloed aan opsplitsing van de functionaliteit is lastig om mee te werken. Voor plugins zijn er bijvoorbeeld volgende classes: Plugin: dat enkel wat member variabelen bevat die informatie over plugins voorstellen PluginFunctions: een klasse met enkel wat member functions voor functionaliteit die soms wel en soms niet met een specifieke plugin te maken heeft (bijvoorbeeld de functie getpluginproperty() is wel pluginspecifiek, maar de functie numactiveplugins() niet). PluginManagement: een klasse met wederom enkel wat member functions in verband met plugin management (alle plugins uit de database lezen, de bizarre meta-data block bovenaan de main file van een plugin (zie later in dit werk) lezen, ) PluginSetting: een klasse met (hoe raadt u het?) enkel wat member functions in verband met plugin settings (de settings van plugin X lezen, een setting updaten, ). En natuurlijk zijn er voor bijna al deze functies doorverwijsfuncties in Hotaru. Website Pagina 49 van 99

54 Ik kan begrijpen dat teveel in één klasse onoverzichtelijk wordt, maar deze vier classes hadden met gemak in één klasse gepast zonder verlies aan duidelijkheid of context. Singleton 9? Verder is er het gebrek aan singletonmechanisme. Zo is het perfect mogelijk tientallen instanties van de Hotaru-klasse of van de database-wrapper te maken (hoewel het systeem maar één database tegelijkertijd support). Extra external libraries, nooit genoeg? Ten laatste maakt Hotaru veel te veel gebruik van externe libraries en code. Zo gebruikt het als Databasewrapper ezsql (dat ook in WordPress wordt gebruikt), hoewel men met een eigen wrapper voor SQLgeneration + PDO (dat standaard in PHP zit), zoals Lampiro het doet, veel verder kan komen. Ik ben niet per se tegen het gebruik van external libraries, maar ik geloof wel dat men het aantal best minimaal kan houden. Het gebeurt meer dan eens dat een project een library gebruikt die dan plots niet meer ontwikkeld wordt. Verder kan men met eigen code de nodige functionaliteit meer fine-tunen en integreren. Conclusie Dit alles zorgt ervoor dat Hotaru zeer lastig is om mee te werken en heel wat overheadcode produceert. De oplossing Uit mijn frustraties met Hotaru besloot ik om het cms, dat tenslotte wel een interessant concept bevat, te forken in een eigen project: het Lampiro Content Framework. Een Content Framework is een kruising tussen een klassiek framework en een content management system. Om dit te verduidelijken een kleine vergelijking: als een framework een toolbox is voor wie een huis gaat bouwen, dan kan men zeggen dat een cms een bijna afgewerkt huis is dat enkel nog wat schilderwerken en bemeubeling nodig heeft. Daarvan vertrekkende kan men zeggen dat een content framework een combinatie is tussen een blauwdruk van het huis en een toolbox. De Lampiro Development Group, bestaande uit enkel mezelf, zal echter ook officiële plugins en themes uitgeven, die in deze vergelijking de bouwstenen kunnen zijn Ontwikkeling Nota: de site is nog onder ontwikkeling. Zoals eerder vermeld is Lampiro op dit moment vooral ontwikkeld met het oog op de nodige functionaliteit voor KSA-VKSJ Xaverius. In sommige delen van de code is getracht tijdelijke backwards 9 Zie woordenboek: 1. Het Singleton design pattern Website Pagina 50 van 99

55 compatibility met Hotaru te behouden, tot Lampiro-cf versie 1.1, maar in andere delen die een massive overhaul hebben gekregen, zoals de page-block functionaliteit, was dat niet mogelijk of niet wenselijk. Wie de oude code gebruikt zal moeten updaten, dus ook de Hotaru-plugins die ik reeds ontwikkelde voor KSA-VKSJ Xaverius Installatie (Apache) Zoals eerder vermeld is de huidige versie van het cms een developmentversie. Dit houdt ook in dat er geen werkende installatiewizard is. Er is wel een tijdelijke installatieprocedure. Eerst dient men de source te clonen van het main repository op de google code pagina van lampiro. Hiervoor moet men mercurial (hg) geïnstalleerd hebben. Op command-line kan u volgende regel gebruiken om te clonen: hg clone [bestemmingsmap] Vervolgens dient men de /hotaru_settings.php file aan te passen aan de eigen omgeving. Daarbij dient men vooral te letten op BASEURL (met trailing slash), DB_USER, DB_PASSWORD, DB_HOST en DB_NAME. Vervolgens kan men, indien gewenst, in /devinstaller_user.php extra installatie-instructies plaatsen, zoals het installeren van extra themes of plugins. Deze file wordt aan het einde van het installatieproces geïncluded. Deze file zal later niet via hg gepusht worden, en biedt dus de mogelijkheid om de eigen extra instructies over verschillende pulls te behouden. Vervolgens kan men in /devinstaller.php eventueel, indien gewenst, de username, het password en het e- mailadres van de installerende admin-gebruiker wijzigen. Deze file wordt echter wel gepulled en men zal dus de wijzigingen eventueel opnieuw moeten doorvoeren. Vervolgens navigeert men in de browser naar /devinstaller.php. Indien alles goed loopt, wat indien de ingevoerde gegevens correct zijn het geval zou moeten zijn, kan u uw nieuw-gebruikte Lampiro installatie gebruiken. Het is belangrijk op te merken dat wanneer u een nieuwe installatie uitvoert na het bestaan van een vorige met hetzelfde cookiepath het mogelijk is dat u php-fouten te zien krijgt bij het gebruiken van uw Lampiro instantie. Als dit het geval is en de foutmeldingen een fout rapporteren in /libs/userauth.php (een oude, maar nog gebruikte Hotaru-file), dan dient u uw cookies voor uw instantiedomein te verwijderen. Dit betekent dat er nog een sessie van uw vorige installatie openstaat. Deze fout wordt niet veroorzaakt door Lampiro. 3. Website planning 3.1. Features (front- en back-end) KSA-VKSJ Xaverius heeft ervoor geopteerd de functionaliteit uit de vorige websites over te nemen. Dit resulteert in de volgende pagina s Website Pagina 51 van 99

56 Homepagina met nieuwsoverzicht Geschiedenis Wist-je-datjes (soort van shoutbox) Contact (contactform om leiding in het algemeen of specifiek per ban te contacteren) Gebruikerspagina s (login, register, profiel bekijken/wijzigen) KSA-VKSJ? met uitleg over de jeugdbeweging Flapper/Inimini, waar PDF s van de ledenboekjes kunnen worden bekeken met Google PDF Viewer (geëmbed in de pagina). Leiding, waar men kan zien welke personen welke ban leiden. Uniform, waar men kan zien wat het verplichte uniform inhoudt. Liederen, waar men de teksten van vaak gezongen liederen kan vinden Roles, users en permissions Nota: Onderstaande Lampiro-functionaliteit is voorlopig slechts een proof of concept, in de, op het moment van schrijven, meest recente revision, 843c8fe601e1, wordt nog steeds de Hotaru user/rolesfunctionaliteit gebruikt. Users kunnen verschillende roles krijgen. Aan deze roles hangen waardes voor verschillende permissions die, indien gewenst, per user kunnen overschreven worden. Lampiro definieert enkele standaardroles: Admin: Een user met deze role heeft een absolute macht over het systeem. Om het systeem supportable te maken wordt gevraagd om deze role enkel aan mensen te geven die hun weg kunnen vinden in PHP, databases en servers. Contentmaster: Een user met deze role beheert de content van de site maar heeft geen hogere machten (settings veranderen, plugins installeren, ). Deze role kan gebruikt worden voor de contentbeheerder(s) van klanten. Moderator: Een user met deze role beheert de user-generated content en kan deze aanpassen/verwijderen. Normal user: Dit is een gewone gebruiker Website Pagina 52 van 99

57 New user: Via een instelling kan men aangeven dat nieuwe gebruikers eerst een bepaalde tijd in deze buffergroep moeten verblijven, waar men de permissions kan beperken (bijvoorbeeld verplichten een captcha in te vullen bij het submitten van user-generated content) Guest: Een niet-aangemelde gebruiker Elk lid van de vereniging kan een account aanmaken. De leiding zal daarbij de role contentmaster krijgen. 4. Usercomponents Usercomponents zijn components die geïnstalleerd kunnen worden door de (admin-)user. Er zijn twee soorten, de themes, die voor de layout zorgen, en de plugins, die extra features bieden Themes Themes in Lampiro Themes zijn een set van views, html/php templates, css en js. Views zijn layouts. Zo kan een theme bijvoorbeeld, indien het dat wenst, ook vormgeven aan de admin interface, maar met een iets andere layout. Ook is er de mogelijkheid bepaalde pagina s een ander uitzicht te geven dan andere. Een voorbeeld daarvan is het default theme van Wordpress (voor Wordpress 3.0) waar sommige pagina s een sidebar kregen en andere niet. Templates geven een layout aan een set data. Hoe het werkt in Hotaru In Hotaru werkt een theme als volgt. Men heeft een map in content/themes met een bepaalde naam. Hierin staat een file index.php. Bovenaan deze index.php moet volgende comment, correct ingevuld, staan: 1 <?php 2 /** 3 * name: Ksa-Vksj-Xaverius 4 * description: Theme for KSA-VKSJ-Xaverius 5 * version: * author: Wim Tibackx 7 * authorurl: 8 */ Verder is het aan de auteur te bepalen hoe zijn theme werkt. Hoewel de Hotaru default theme niet bepaald een mooi voorbeeld geeft. Daar wordt de openingscomment gevolgd door lijnen code, zonder functions of classes, php, html en css door elkaar. Hoe het werkt in Lampiro Programmatorisch werkt een theme als volgt. Men heeft een map in content/themes met een bepaalde naam die voldoet aan de slug-regels. Hierin heeft men een file index.php. Daarin staat (a) de hoofdklasse Website Pagina 53 van 99

58 van de theme die de interface LCF_ITheme implement en (b) een variabele met de naam $theme_[slug van de theme]_classname (bijvoorbeeld $theme_kvx_classname) en met als waarde de naam van de klasse. Zo kan (a) een themedeveloper de naam voor zijn klasse gewoon kiezen en (b) het systeem toch nog weten hoe de klasse noemt. Verder moet de hoofdklasse alle methoden van de interface implementen. De interface bevat (a) methoden voor plugin management, zoals de install() methode, om de theme de installeren, en (b) methoden voor plugin usage, zoals de methode render(), om de huidige pagina te renderen. In de install() methode kan een theme verscheidene zaken aanmaken, maar een verplicht onderdeel is het eigenlijke opslaan van de themedata. Dit gebeurt met een function call naar LCF_Theme::addTheme(). Hieraan worden bepaalde usageparameters meegegeven, zoals de naam, slug en klasse van de theme. Ook enkele infoparameters zoals de themeauthor mogen niet ontbreken. De themecontroller (LCF_Theme) doet dan een call naar de thememodel (LCF_Model_Theme) om de theme op te slaan in de database. Daar wordt de theme geregistreerd in de PREFIX_themes table. De ontwikkeling van de KSA-VKSJ Xaverius theme Ik begon met het ontwikkelen van een vage look en feel in Adobe Photoshop. Vanaf de implementatie ben ik hier echter op sommige punten van afgeweken. Origineel plande ik met HTML5 en CSS3 te werken, maar uiteindelijk heb ik dit, omwille van Internet Explorer compatibiliteit, niet gedaan 10. Hoe het er uitziet Het uitzicht is op te delen in 4 gebieden: 10 Ik maak wel gebruik van het html 5 doctype en gebruik ook forward-compatible classnames. Website Pagina 54 van 99

59 De header Bovenaan ziet u de header, met links het logo, bijna volgens de huisstijl bepaald door KSJ Nationaal 11, de nationaal overkoepelende organisatie van alle KSJ, KSA of VKSJ bewegingen. Ik besloot om hier deels van af te wijken, omdat de bepalingen inzake logo naar mijn mening vanuit een designoogpunt geen steek houden. Indien ik de bepalingen van de huisstijlgids had gerespecteerd, zou het logo er als volgt uitgezien hebben: Naast het logo ziet u de tweedelige navigatie. Allereerst is er het algemene menu, bedoeld voor items die voor de volledige groep gelden, zoals het forum, de geschiedenis enzovoorts. Daaronder ziet u het groepsspecifieke menu, met items die specifiek over één van de twee groepen gaan. Zo bijvoorbeeld de ledenboekjes (Flapper voor KSA / Inimini voor VKSJ) en de leidings-pagina s. Content In het verticale midden links staat de hoofdcontent. Deze kan algemeen zijn (zonder subpagina s) of specifiek (met subpagina s). Het verschil ziet men in de headerbar van de contentblok. Sidebar Rechts in het verticale midden ziet u de sidebar. De sidebar bestaat uit widgets. Momenteel staan er slechts twee testwidgets. Footer Onderaan staat de footer. Momenteel staat hier een link naar de website van het cms, later zal dit aangevuld worden met basisinformatie zoals copyright, contact, 4.2. Plugins Vóór ik de details van de plugin-feature bespreek, is het belangrijk te weten dat de Hotaru-plugins en de Lampiro-plugins momenteel nog naast elkaar werken. Nog niet alle functionaliteit van de Hotaru-plugins 11 Zie Website Pagina 55 van 99

60 zit in de Lampiro-plugins, en de volledige conversie zal ook dan pas plaats vinden, waarschijnlijk over een 2 of 3-tal commits. Hoe het werkt in Hotaru Hotaru-plugins werken met een map in content/plugins. Deze map heeft een bepaalde naam, de slug. Daarin zit een file met dezelfde naam. Hierin staat bovenaan een comment met plugin-info. Dit ziet er zo uit: 1 <?php 2 /** 3 * name: WTbe Pages 4 * description: Provides dynamic pages functionality, by WimTibackx.be 5 * version: * folder: wtbepages 7 * class: WTbePages 8 * requires: wtbepluginutil 0.1, ckeditor * hooks: install_plugin, admin_plugin_settings, admin_sidebar_plugin_settings, theme_index_main, theme_index_top, navigation, header_include, admin_header_include_raw, pre_close_body, admin_sidebar_content_item, admin_theme_index_main 10 * author: Wim Tibackx 11 * authorurl: 12 */ Deze info wordt ingelezen door fileparsing. Hieronder staat een class met een naam overeenkomend met die op lijn 7 van bovenstaande code. Dit wordt dan in de database opgeslagen. Zoals u op lijn 9 kan zien bevat de info een comma-seperated list van hooks. Dit zijn hooks waarop de plugin een catch registreert. Dit is echter vrij gelimiteerd. Zo is men verplicht om de bijhorende code in een functie met dezelfde naam als de hook in de mainclass van de plugin te zetten. Dit is een voorbeeld van een principe in Hotaru waarmee ik verre van akkoord ben. Na een eerdere beoordeling door de vakleerkrachten van dit werk stond bij bovenstaande code de vraag waarom geen metadata in XML? geschreven. Hoewel het bovenstaande systeem zeker niet optimaal is, zou XML ook geen oplossing betekenen. XML-parsing in PHP (toch met native XML-parsing library sinds PHP 5) is namelijk heel log en lastig. Eventueel had json wel een oplossing kunnen bieden. Hoe het werkt in Lampiro In Lampiro werken plugins iets anders. Ook daar is er een map met de slug als naam en file erin met dezelfde file. Daarin staat een class, waarvan de pluginauthor de naam vrij mag kiezen, en een variabele (buiten de klasse) met de naam $plugin_[slug]_classname en als waarde de naam van de class. Deze class moet de LCF_IPlugin interface implementen. Deze interface definieert 4 functies: init(), om de plugin te initializen, install(), om de plugin te installen, uninstall(), om de plugin de uninstallen en Website Pagina 56 van 99

61 upgrade(), om de plugin te upgraden. In install() moet de plugin LCF_Plugin::add() oproepen, met de nodige parameters (komt ongeveer overeen met de info in Hotaru) om de plugin toe te voegen aan de database. Ook kan de plugin met LCF_Hook::addCatch() catches voor hooks toevoegen, of met LCF_Block::addBlock() blocks toevoegen. Hotaru-plugins kan men in de oude backend via Plugin Management installeren. Lampiro-plugins zijn nog niet via een UI te installeren. Dit komt waarschijnlijk in de volgende commit. Momenteel worden alle oude KSA-VKSJ Xaverius plugins geconverteerd naar het nieuwe Lampirosysteem. 5. Database Het is belangrijk te weten dat Hotaru zelf geen relaties legde tussen zijn tables. Voorlopig wordt dit in lampiro eigenlijk ook nog niet gedaan, omdat de custom database wrapper create-table function dit nog niet ondersteunt. Ik heb even overwogen om, for future reference, de relaties reeds te tonen, maar ben hiervan afgestapt toen ik zag dat er belangrijke fouten in de oude hotaru-tabellen zaten. Zo is bijvoorbeeld de PREFIX_users.user_id een int(20) (primary key), terwijl de PREFIX_postvotes.vote_user_id een int(11) is (foreign key). Hier zou men dus al de oorspronkelijke tables moeten gaan aanpassen om relaties te kunnen leggen. Website Pagina 57 van 99

62 Hotaru heeft de database niet gedocumenteerd, we kunnen dus enkel de gebruiken van de tabel afleiden uit de code en de inhoud. Ik heb ervoor gekozen om voor de uitleg maar stukken uit het diagram te laten zien en als algemeen item het volledige diagram ook mee te geven. Variatabellen Er zijn drie variatabellen. Dit zijn alle drie Hotaru-tabellen. Ten eerste is er PREFIX_tempdata, deze tabel is leeg en uit de code van Hotaru valt het gebruik niet af te leiden. Ten tweede is er PREFIX_settings. Zoals de naam zegt worden hier settings opgeslagen. Dit is zo gedaan dat er van de namen makkelijk php global constants gemaakt worden, zo wordt de settings_name in hoofdletters opgeslagen. Verder is de settings_note een veld met uitleg dat op die manier direct in het settings editing screen worden geecho d, indien settings_show op Y staat. De update-velden lijken mij verder ook niet direct nuttig, maar Hotaru heeft de gewoonte dit overal bij te zetten. Persoonlijk zou ik de settings table anders hebben gemaakt: id:int(11) PK 12 AI 13 ; name:varchar(250); value:text. Ten derde is er de PREFIX_miscdata table, wellicht de meest bizarre van de hele database. De structuur is ongeveer gelijk aan settings, buiten het ontbreken van een note. Ze wordt gebruikt voor de versie, alle mogelijke userpermissions in 1 (één!) veld, en twee rijen met respectievelijk de keys user_settings en site_announcement, welke standaard leeg zijn. 12 Primary Key 13 Auto Increment Website Pagina 58 van 99

63 Ziet u dat goed, beste lezer? Alle mogelijke permissies van de verschillende roles worden geserialized en in één veldje gezet. Laat me even de volledige string geven van een nieuwe installatie: a:2:{s:7:"options";a:1:{s:16:"can_access_admin";a:2:{i:0;s:3:"yes";i:1;s:2:"n o";}}s:16:"can_access_admin";a:3:{s:5:"admin";s:3:"yes";s:8:"supermod";s:3:"y es";s:7:"default";s:2:"no";}} Samengevat: in een relationeel databasesysteem zetten we alle mogelijke roles met options én defaultwaardes in één geserialized veldje. Sta me toe te spreken van een serieuze design flaw. Laten we even kijken naar een instantie van hotaru die ik al wat langer heb lopen met custom plugins en themes: En de volledige permissionsstring? a:11:{s:7:"options";a:10:{s:16:"can_access_admin";a:2:{i:0;s:3:"yes";i:1;s:2: "no";}s:9:"can_login";a:2:{i:0;s:3:"yes";i:1;s:2:"no";}s:12:"wjd_can_post";a: 2:{i:0;s:3:"yes";i:1;s:2:"no";}s:14:"wjd_can_delete";a:3:{i:0;s:3:"yes";i:1;s :3:"own";i:2;s:2:"no";}s:15:"wtbesb_can_post";a:2:{i:0;s:3:"yes";i:1;s:2:"no" ;}s:17:"wtbesb_can_delete";a:3:{i:0;s:3:"yes";i:1;s:3:"own";i:2;s:2:"no";}s:1 0:"can_submit";a:3:{i:0;s:3:"yes";i:1;s:2:"no";i:2;s:3:"mod";}s:14:"can_edit_ posts";a:3:{i:0;s:3:"yes";i:1;s:2:"no";i:2;s:3:"own";}s:16:"can_delete_posts" ;a:2:{i:0;s:3:"yes";i:1;s:2:"no";}s:21:"can_post_without_link";a:2:{i:0;s:3:" yes";i:1;s:2:"no";}}s:16:"can_access_admin";a:3:{s:5:"admin";s:3:"yes";s:8:"s upermod";s:3:"yes";s:7:"default";s:2:"no";}s:9:"can_login";a:6:{s:5:"admin";s :3:"yes";s:8:"supermod";s:3:"yes";s:9:"moderator";s:3:"yes";s:6:"member";s:3: "yes";s:8:"undermod";s:3:"yes";s:7:"default";s:2:"no";}s:12:"wjd_can_post";a: 3:{s:5:"admin";s:3:"yes";s:6:"member";s:3:"yes";s:7:"default";s:2:"no";}s:14: "wjd_can_delete";a:3:{s:5:"admin";s:3:"yes";s:6:"member";s:3:"own";s:7:"defau lt";s:2:"no";}s:15:"wtbesb_can_post";a:3:{s:5:"admin";s:3:"yes";s:6:"member"; s:3:"yes";s:7:"default";s:2:"no";}s:17:"wtbesb_can_delete";a:3:{s:5:"admin";s :3:"yes";s:6:"member";s:3:"own";s:7:"default";s:2:"no";}s:10:"can_submit";a:6 :{s:5:"admin";s:3:"yes";s:8:"supermod";s:3:"yes";s:9:"moderator";s:3:"yes";s: 6:"member";s:3:"yes";s:8:"undermod";s:3:"mod";s:7:"default";s:2:"no";}s:14:"c an_edit_posts";a:6:{s:5:"admin";s:3:"yes";s:8:"supermod";s:3:"yes";s:9:"moder ator";s:3:"yes";s:6:"member";s:3:"own";s:8:"undermod";s:3:"own";s:7:"default" ;s:2:"no";}s:16:"can_delete_posts";a:3:{s:5:"admin";s:3:"yes";s:8:"supermod"; s:3:"yes";s:7:"default";s:2:"no";}s:21:"can_post_without_link";a:3:{s:5:"admi n";s:3:"yes";s:8:"supermod";s:3:"yes";s:7:"default";s:2:"no";}} Men zal mij nooit horen zeggen dat mijn databasedesigns goed zijn, verre van zelfs. Maar alle permissies in roles in één veldje zetten wanneer je een serialized database hebt? Waarom dan niet gewoon al je custom classes serializen en op je file system opslaan? Komt op hetzelfde neer, toch? Website Pagina 59 van 99

64 Posts Aha, posts. Een feature die standaard in Hotaru zit maar zonder UI. Gewoon kwestie van wat te standaardiseren in plugin content. Mooi, zou je denken. Tot je ermee begint te programmeren. Dan wordt al snel duidelijk dat de posts-feature geprogrammeerd is met een overduidelijk oog op het originele doel waarvoor de developer van Hotaru de software initieël schreef: een link-sharingsite à la Digg. Dat betekent niet dat de tabel compleet nutteloos is voor meer algemene content, maar het maakt ze wel lastiger in gebruik. PREFIX_postmeta kan beschouwd worden als een aanvulling op PREFIX_posts, die kan gebruikt worden om extra zaken op te slaan waarvoor de mogelijkheid in PREFIX_posts bestaat. De tags feature zit een beetje vreemd in elkaar. De PREFIX_tags table heeft geen eigen ID-field. Het heeft wel een post id, wat betekent dat, als ik twee posts heb met de tag gip, de volledige rij tweemaal in de databank wordt opgeslagen in plaats van éénmaal in een tags tabel met een id en de naam van de tag in, en per gebruik een rij in een koppeltabel met post_id en tags_id. Daarbovenop worden de tags van een Website Pagina 60 van 99

65 post ook nog eens opgeslagen in de post tabel. Daar worden de tagnamen (!) in een comma-seperated list opgeslagen. Did I use the words design flaw yet? Postvotes dan. PREFIX_postvotes zit vrij normaal in elkaar behalve dan het feit dat de updatedby en updatedts fields, zoals in veel Hotaru-tables, overbodig zijn. Category zit ook goed in elkaar, behalve misschien het feit dat men maar één category per post kan gebruiken omdat de binding in de post-table zit. Ik wil even benadrukken dat van zowel tags, postvotes als category standaard de tabellen worden gemaakt, hoewel de echte functionaliteit alleen maar beschikbaar is via plugins. Themes Dit is nieuwe functionaliteit voor Lampiro. In PREFIX_themes worden de themes geregistreerd met name, slug, class, version, author, de website van de author en de website van de theme. Momenteel wordt er ook nog een boolean (voorgesteld als tinyint(1)) opgeslagen die bijhoudt of de theme actief is. Dit veld is echter overbodig geworden sinds de themeviews en userviews additions van revision 89a a1 (themes zelf zit er in f2c7da9003c7 in). Themeviews zijn views (totaal-layouts) zoals ze in de themes staan en hebben een naam, slug en themeid. Userviews zijn views die de user kan definiëren in functie van de eigen site en kan koppelen aan een bepaalde themeview. Dit maakt het mogelijk verschillende themes tegelijk te gebruiken voor andere pagina s. Website Pagina 61 van 99

66 Plugins De 3 tabellen links zijn nieuwe lampiro-functionaliteit, de 3 tabellen midden en rechts zijn oude Hotarufunctionaliteit. De pluginsettings functionaliteit is nog niet geïmplementeerd in Lampiro, maar dit zal binnenkort het geval zijn. Wat me vooral stoorde aan het oude pluginsysteem was dat de hooks zo ongereguleerd geregistreerd werden. Men kon basicly voor elke hook een catch maken, ongeacht of er effectief zo n hook was of niet. Ook kon mende naam van de catchende function niet kiezen. Verder is in het lampiro-pluginsysteem de require en extendfunctionaliteit voor plugins nog niet geïmplementeerd. Het is mogelijk dat zij via alternatieve wijzen zullen worden geïmplementeerd. De callback in PREFIX_hookcatches is een serialized callback 14. De version in PREFIX_newplugins is een varchar omdat een version niet enkel 1 of 1.1 kan zijn, maar bijvoorbeeld ook 1.1 beta 6 (voorbeelden 15 ) Website Pagina 62 van 99

67 Pages-Blocks-Menus Pages-Blocks-Menus is een nieuwe feature in Lampiro. Ten eerste zijn er Pages. Speciaal zijn hier de ismanagement boolean (die bepaalt of alleen de admin (on true) of ook de contentmaster (on false) deze pagina mag aanpassen) en de userviewid. In pages staan blocks (ook weer met een ismanagement boolean en een callback). Deze blocks hebben options (blockoptions) welke op hun beurt waardes hebben afhankelijk van de blockinstance (respectievelijk blockinstanceoptions en blockinstances). Verder zijn er de menu s. Deze hebben items die ofwel een pageid kunnen bevatten, ofwel een url. Users Website Pagina 63 van 99

68 De userfunctionaliteit is volledig van Hotaru. Bij PREFIX_users zien we dat de role in text wordt opgeslagen, wat beter in een aparte tabel zou gedaan worden. PREFIX_usermeta is, zoals we al eerder zagen, een aanvullende tabel. In PREFIX_tokens worden session id s bijgehouden. Samen met een key wordt dit gebruikt voor CSRF 16 protection. PREFIX_friends kan men gebruiken om een user te followen. Dit is wat mij betreft functionaliteit die buiten de core moet vallen. Hetzelfde geldt voor PREFIX_messaging (om berichten te sturen) en PREFIX_useractivity (om bepaalde activiteit van users bij te houden). Tenslotte is er nog de mogelijkheid om vanalles te blocken met de PREFIX_blocked tabel. Dit kan gaan om een url, ip, adres of userid. Comments Comments is ook Hotaru-functionaliteit. Deze tabellen zijn ook vrij basic and self explanatory. Widgets Widgets is eveneens Hotaru-functionaliteit en wordt gebruikt om een sidebar te maken. Op termijn zal dit echter vervangen worden door de nieuwe Hotaru block-functionaliteit. Hier kan men gelukkig wel een function opgeven, maar de class is verplicht de hoofdclass van de plugin. 16 Zie woordenboek: 2. CSRF-attacks en protection Website Pagina 64 van 99

De ondersteuningsaspecten zijn weggelaten en het verklarend woordenboek is vrij kort

De ondersteuningsaspecten zijn weggelaten en het verklarend woordenboek is vrij kort Voorwoord Beste Lezer, Momenteel hebt u de eerste voorlopige versie van een belangrijk deel van mijn GIP, of Geïntegreerde Proef, in handen. Dit deel behandeld 3 zeer bekende en veelgebruikte webdevelopment

Nadere informatie

Voorwoord. Beste Lezer,

Voorwoord. Beste Lezer, Voorwoord Beste Lezer, Momenteel hebt u de tweede voorlopige versie van een belangrijk deel van mijn GIP, of Geïntegreerde Proef, in handen. Dit deel behandelt 3 zeer bekende en veelgebruikte webdevelopment

Nadere informatie

Geïntegreerde Proef 6IB Wim Tibackx

Geïntegreerde Proef 6IB Wim Tibackx Katholiek Scholencentrum JOMA Schooljaar 2010-2011 Maantjessteenweg 130 2170 Merksem

Nadere informatie

LES 11: VAN LOKAAL NAAR ONLINE. Lesoverzicht: Aan de slag Domeinnaam Web hosting FTP gegevens FTP programma s Database exporteren Samenvatting

LES 11: VAN LOKAAL NAAR ONLINE. Lesoverzicht: Aan de slag Domeinnaam Web hosting FTP gegevens FTP programma s Database exporteren Samenvatting LES 11: VAN LOKAAL NAAR ONLINE Lesoverzicht: Aan de slag Domeinnaam Web hosting FTP gegevens FTP programma s Database exporteren Samenvatting Tijd: 10 minuten Doel: Aan het einde van de les kun je de lokale

Nadere informatie

Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op

Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op 1 Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP.... 8 Joomla installeren op XAMPP... 15 Handige links... 16 2 Disclaimer Bij de samenstelling

Nadere informatie

Xampp Web Development omgeving opzetten onder Windows.

Xampp Web Development omgeving opzetten onder Windows. Xampp Web Development omgeving opzetten onder Windows. Inhoudsopgave 1. Lees dit eerst... 2 2. Inleiding... 2 3. Installatie Xampp... 3 1.1 Installatie Xampp Launcher... 7 1.2 Controle geïnstalleerde bestanden...

Nadere informatie

ICARUS Illumina E653BK on Windows 8 (upgraded) how to install USB drivers

ICARUS Illumina E653BK on Windows 8 (upgraded) how to install USB drivers ICARUS Illumina E653BK on Windows 8 (upgraded) how to install USB drivers English Instructions Windows 8 out-of-the-box supports the ICARUS Illumina (E653) e-reader. However, when users upgrade their Windows

Nadere informatie

Firewall van de Speedtouch 789wl volledig uitschakelen?

Firewall van de Speedtouch 789wl volledig uitschakelen? Firewall van de Speedtouch 789wl volledig uitschakelen? De firewall van de Speedtouch 789 (wl) kan niet volledig uitgeschakeld worden via de Web interface: De firewall blijft namelijk op stateful staan

Nadere informatie

Settings for the C100BRS4 MAC Address Spoofing with cable Internet.

Settings for the C100BRS4 MAC Address Spoofing with cable Internet. Settings for the C100BRS4 MAC Address Spoofing with cable Internet. General: Please use the latest firmware for the router. The firmware is available on http://www.conceptronic.net! Use Firmware version

Nadere informatie

XAMPP Web Development omgeving opzetten onder Windows.

XAMPP Web Development omgeving opzetten onder Windows. XAMPP Web Development omgeving opzetten onder Windows. Inhoudsopgave 1. Lees dit eerst... 2 2. Inleiding... 2 1 Xampp downloaden... 2 2 Installatie Xampp 1.7.4 op externe harddisk... 3 3 XAMPP herconfiguren...

Nadere informatie

EM6250 Firmware update V030507

EM6250 Firmware update V030507 EM6250 Firmware update V030507 EM6250 Firmware update 2 NEDERLANDS/ENGLISH Table of contents 1.0 (NL) Introductie... 3 2.0 (NL) Firmware installeren... 3 3.0 (NL) Release notes:... 5 1.0 (UK) Introduction...

Nadere informatie

Inhoudsopgave... 1 Disclaimer... 3 Voorwoord... 3 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op

Inhoudsopgave... 1 Disclaimer... 3 Voorwoord... 3 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op 1 Inhoudsopgave... 1 Disclaimer... 3 Voorwoord... 3 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op XAMPP... 14 Handige links... 15 2 Disclaimer Bij de

Nadere informatie

Linux Quickstart Cygwin via HTTP

Linux Quickstart Cygwin via HTTP Linux Quickstart Cygwin via HTTP Deze Quickstart-installatie is bedoeld voor mensen welke overnieuw moeten beginnen omdat hun laptop is gecrashed, of op een andere manier hun gegevens zijn kwijtgeraakt.

Nadere informatie

Standard Parts Installatie Solid Edge ST3

Standard Parts Installatie Solid Edge ST3 Hamersveldseweg 65-1b 3833 GL LEUSDEN 033-457 33 22 033-457 33 25 info@caap.nl www.caap.nl Bank (Rabo): 10.54.52.173 KvK Utrecht: 32075127 BTW: 8081.46.543.B.01 Standard Parts Installatie Solid Edge ST3

Nadere informatie

MyDHL+ Van Non-Corporate naar Corporate

MyDHL+ Van Non-Corporate naar Corporate MyDHL+ Van Non-Corporate naar Corporate Van Non-Corporate naar Corporate In MyDHL+ is het mogelijk om meerdere gebruikers aan uw set-up toe te voegen. Wanneer er bijvoorbeeld meerdere collega s van dezelfde

Nadere informatie

Op de Virtual Appliance is MySQL voorgeïnstalleerd. MySQL is momenteel de meest gebruikte database op het internet.

Op de Virtual Appliance is MySQL voorgeïnstalleerd. MySQL is momenteel de meest gebruikte database op het internet. Het installeren van WordPress Nu je een volledig werkende virtuele server hebt is het tijd om er een applicatie op te installeren. We beginnen met de blogtool WordPress. De database De eerste stap is het

Nadere informatie

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous 2006-2007 Inhoudsopgave 1 2 1.1 Programmeertaal PHP5..................... 2 1.2 MySQL database......................... 3 1.3 Adobe Flash...........................

Nadere informatie

Linux Quickstart Cygwin

Linux Quickstart Cygwin Linux Quickstart Cygwin Deze Quickstart-installatie is bedoeld voor mensen welke overnieuw moeten beginnen omdat hun laptop is gecrashed, of op een andere manier hun gegevens zijn kwijtgeraakt. Let op:

Nadere informatie

beginnen met bloggen (kleine workshop Wordpress)

beginnen met bloggen (kleine workshop Wordpress) beginnen met bloggen (kleine workshop Wordpress) Een weblog is van oorsprongeen lijstje linktips met een stukje tekst. Oorspongvan het weblog Jorn Barger is an American blogger, best known as editor of

Nadere informatie

Analyse Programmeertalen

Analyse Programmeertalen Analyse Programmeertalen De keuze van een programmeertaal mag niet onderschat worden. Het is dankzij deze taal dat de gebruiker interactie heeft met het complete systeem. Het is dus vanzelfsprekend dat

Nadere informatie

Shipment Centre EU Quick Print Client handleiding [NL]

Shipment Centre EU Quick Print Client handleiding [NL] Shipment Centre EU Quick Print Client handleiding [NL] Please scroll down for English. Met de Quick Print Client kunt u printers in Shipment Centre EU configureren. De Quick Print Client kan alleen op

Nadere informatie

Het beheren van mijn Tungsten Network Portal account NL 1 Manage my Tungsten Network Portal account EN 14

Het beheren van mijn Tungsten Network Portal account NL 1 Manage my Tungsten Network Portal account EN 14 QUICK GUIDE C Het beheren van mijn Tungsten Network Portal account NL 1 Manage my Tungsten Network Portal account EN 14 Version 0.9 (June 2014) Per May 2014 OB10 has changed its name to Tungsten Network

Nadere informatie

Veel gestelde vragen nieuwe webloginpagina

Veel gestelde vragen nieuwe webloginpagina Veel gestelde vragen nieuwe webloginpagina Op deze pagina treft u een aantal veel gestelde vragen aan over het opstarten van de nieuwe webloginpagina http://weblogin.tudelft.nl: 1. Ik krijg de melding

Nadere informatie

VERENIGINGSWIJZER.NL FINAL DOCUMENT

VERENIGINGSWIJZER.NL FINAL DOCUMENT Vrije Universiteit Amsterdam Faculteit der Exacte Wetenschappen Project Multimedia Peter van Ulden Studentnr. 1494759 VERENIGINGSWIJZER.NL FINAL DOCUMENT INHOUDSOPGAVE 1 Inleiding...3 2 Aanpak & Techniek...4

Nadere informatie

Hoe met Windows 8 te verbinden met NDI Remote Office (NDIRO) How to connect With Windows 8 to NDI Remote Office (NDIRO

Hoe met Windows 8 te verbinden met NDI Remote Office (NDIRO) How to connect With Windows 8 to NDI Remote Office (NDIRO Handleiding/Manual Hoe met Windows 8 te verbinden met NDI Remote Office (NDIRO) How to connect With Windows 8 to NDI Remote Office (NDIRO Inhoudsopgave / Table of Contents 1 Verbinden met het gebruik van

Nadere informatie

Object Oriented Programming

Object Oriented Programming Object Oriented Programming voor webapplicaties Door Edwin Vlieg Waarom OOP? Basis uitleg over OOP Design Patterns ActiveRecord Model View Controller Extra informatie Vragen OOP Object Oriented Programming

Nadere informatie

EM7680 Firmware Update by OTA

EM7680 Firmware Update by OTA EM7680 Firmware Update by OTA 2 NEDERLANDS/ENGLISH EM7680 Firmware update by OTA Table of contents 1.0 (NL) Introductie... 3 2.0 (NL) Firmware installeren... 3 3.0 (NL) Release notes:... 3 4.0 (NL) Overige

Nadere informatie

MyDHL+ ProView activeren in MyDHL+

MyDHL+ ProView activeren in MyDHL+ MyDHL+ ProView activeren in MyDHL+ ProView activeren in MyDHL+ In MyDHL+ is het mogelijk om van uw zendingen, die op uw accountnummer zijn aangemaakt, de status te zien. Daarnaast is het ook mogelijk om

Nadere informatie

Installeer Apache2: Landstede februari 2009 versie 3 1 Bertil Hoentjen

Installeer Apache2: Landstede februari 2009 versie 3 1 Bertil Hoentjen Installeer Apache2: Deze howto gaat over name based virtual hosting onder Apache 2.x., en is getest onder OpenSUSE 11 maar is in feite ook van toepassing op de andere distributies. Alleen Debian en afgeleide

Nadere informatie

Gegevens. Cliënt met browser Server met Apache/IIS Databaseserver En PHP

Gegevens. Cliënt met browser Server met Apache/IIS Databaseserver En PHP Webservers inrichten Inleiding De webapplicatie die je hebt geschreven, is volgens het three-tier systeem ontwikkeld: 1. Gegevensopslag in een database 2. PHP voor de logica 3. XHTML (en CSS) voor de presentatie

Nadere informatie

1. Voor het installeren wordt geadviseerd een backup te maken van uw database en bestanden.

1. Voor het installeren wordt geadviseerd een backup te maken van uw database en bestanden. NL: KiyOh.nl gebruikers kunnen met deze plug in automatisch klantbeoordelingen verzamelen, publiceren en delen in social media. Wanneer een klant een bestelling heeft gemaakt in uw Magento Shop, wordt

Nadere informatie

2019 SUNEXCHANGE USER GUIDE LAST UPDATED

2019 SUNEXCHANGE USER GUIDE LAST UPDATED 2019 SUNEXCHANGE USER GUIDE LAST UPDATED 0 - -19 1 WELCOME TO SUNEX DISTRIBUTOR PORTAL This user manual will cover all the screens and functions of our site. MAIN SCREEN: Welcome message. 2 LOGIN SCREEN:

Nadere informatie

Geert Dekkers Web Studio info@nznl.net +31(0)6 27 224 301

Geert Dekkers Web Studio info@nznl.net +31(0)6 27 224 301 Geert Dekkers Web Studio info@nznl.net +31(0)6 27 224 301 Persoonlijk Geert Dekkers, geb 1955, opleidingen in educatie en de kunsten. Programmeert websites sinds 1998. Als programmeur grotendeels autodidact,

Nadere informatie

ALL-CRM Universele Installer

ALL-CRM Universele Installer ALL-CRM Universele Installer Auteur: DH Datum: 09-11-2015 Versie: v1.0 Reference: 2015, All-CRM 1 Inhoudsopgave 1 Inhoudsopgave 2 2 Document geschiedenis 3 3 Disclaimer & Legal 4 4 Inleiding 5 5 Installatie

Nadere informatie

Hoe te verbinden met NDI Remote Office (NDIRO): Apple OS X How to connect to NDI Remote Office (NDIRO): Apple OS X

Hoe te verbinden met NDI Remote Office (NDIRO): Apple OS X How to connect to NDI Remote Office (NDIRO): Apple OS X Handleiding/Manual Hoe te verbinden met (NDIRO): Apple OS X How to connect to (NDIRO): Apple OS X Inhoudsopgave / Table of Contents 1 Verbinden met het gebruik van Apple OS X (Nederlands)... 3 2 Connect

Nadere informatie

Kleine cursus PHP5. Auteur: Raymond Moesker

Kleine cursus PHP5. Auteur: Raymond Moesker Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven

Nadere informatie

Test Joomla op je PC 1

Test Joomla op je PC 1 1 Disclaimer Bij de samenstelling van dit ebook is de grootst mogelijke zorg besteed aan de juistheid en correctheid van de informatie die in dit ebook wordt verstrekt. De auteur van dit ebook kan op geen

Nadere informatie

ATOS Viewer for Dental Frameworks User Manual

ATOS Viewer for Dental Frameworks User Manual ATOS Viewer for Dental Frameworks User Manual www.dentwise.eu Inhoud Content NEDERLANDS... 2 1. Installatie... 2 2. Algemene Functies... 2 3. Afstanden Meten... 3 4. Doorsneden Maken... 4 5. Weergave Aanpassen...

Nadere informatie

Webapplicatie-generatie NIOC 2013

Webapplicatie-generatie NIOC 2013 Webapplicatie-generatie NIOC 2013 Eddy Luursema, Misja Nabben, Arnoud van Bers Research Group Model Based Information Systems Presentation Introduction M-BIS Data intensive systems Requirements Generation

Nadere informatie

Inhoudsopgave. versie 0.8

Inhoudsopgave. versie 0.8 JOOMLA! INSTALLATIE HANDLEIDING versie 0.8 Inhoudsopgave Stappenplan...3 Inrichten database...4 Configuratiecentrum cpanel...4 Aanmaken van een database gebruiker...5 Aanmaken van een database...6 Gebruiker

Nadere informatie

Multi user Setup. Firebird database op een windows (server)

Multi user Setup. Firebird database op een windows (server) Multi user Setup Firebird database op een windows (server) Inhoudsopgave osfinancials multi user setup...3 Installeeren van de firebird database...3 Testing van de connectie met FlameRobin...5 Instellen

Nadere informatie

Mobile Watch Snelle Handleiding. Bezoek voor meer informatie

Mobile Watch Snelle Handleiding. Bezoek  voor meer informatie Mobile Watch Snelle Handleiding Ⅰ. Software installatie - Software download: Zoek voor "360Eye"in de Iphone App Store en installeer de applicatie. Of scan de QR Code aan de rechterzeide. Voor meer details

Nadere informatie

Werken met SNAP pakketten in Ubuntu 16.04

Werken met SNAP pakketten in Ubuntu 16.04 Werken met SNAP pakketten in Ubuntu 16.04 Eén van de nieuwe zaken die Canonical in zijn Ubuntu-reeks heeft geïntodruceerd zijn SNAP packages. Met convergency in het achterhoofd (zelfde look & feel zowel

Nadere informatie

General info on using shopping carts with Ingenico epayments

General info on using shopping carts with Ingenico epayments Inhoudsopgave 1. Disclaimer 2. What is a PSPID? 3. What is an API user? How is it different from other users? 4. What is an operation code? And should I choose "Authorisation" or "Sale"? 5. What is an

Nadere informatie

Inhoudsopgave: Whisper380-computerhulp

Inhoudsopgave: Whisper380-computerhulp Versie: 1.0 Gemaakt door: Whisper380 Eigenaar: Datum: 17-10-2010 Inhoudsopgave: Inhoudsopgave:... 2 Het programma downloaden.... 3 Het programma downloaden... 4 De installatie van het programma... 6 Het

Nadere informatie

Orbis Software. Portal4U. Installatie Handleiding. Dit document bevat de Installatie Handleiding voor Portal4U

Orbis Software. Portal4U. Installatie Handleiding. Dit document bevat de Installatie Handleiding voor Portal4U Orbis Software Installatie Handleiding Dit document bevat de Installatie Handleiding voor Voordat u begint Wij raden u aan om voor het uitvoeren van een update van middels dit installatie-pakket een back-up

Nadere informatie

Installatie SQL: Server 2008R2

Installatie SQL: Server 2008R2 Installatie SQL: Server 2008R2 Download de SQL Server 2008.exe van onze site: www.2work.nl Ga naar het tabblad: Downloads en meld aan met: klant2work en als wachtwoord: xs4customer Let op! Indien u een

Nadere informatie

Raspberry Pi Plex server installeren

Raspberry Pi Plex server installeren Raspberry Pi Plex server installeren Tot voor kort kon alleen de Plex client (app) op de Raspberry Pi geïnstalleerd worden, sinds kort is het ook mogelijk de Pi in te zetten als Plex server Wat heb je

Nadere informatie

Les 4 Installeren Apache2 Php MySQL

Les 4 Installeren Apache2 Php MySQL Les 4 Installeren Apache2 Php MySQL LAMP staat voor Linux, Apache, MySQL, PHP. In deze Les laat ik zien hoe je een een Apache2 webserver op een Ubuntu 12.04 LTS server met PHP5 support (mod_php) en MySQL

Nadere informatie

Organisatie. Gestart in 2009 Open Source Webdevelopment Grafische achtergrond Servicegericht

Organisatie. Gestart in 2009 Open Source Webdevelopment Grafische achtergrond Servicegericht Even voorstellen Organisatie Gestart in 2009 Open Source Webdevelopment Grafische achtergrond Servicegericht Ons team Philip Vergunst Oprichter en webdeveloper Nathan Vergunst Back-end developer Cor van

Nadere informatie

Netwerkprinter Dell 1320C installeren op Ubuntu 10.04 LTS - Lucid Lynx

Netwerkprinter Dell 1320C installeren op Ubuntu 10.04 LTS - Lucid Lynx Netwerkprinter Dell 1320C installeren op Ubuntu 10.04 LTS - Lucid Lynx Er is geen Linux driver voor deze printer, maar het werkt ook met de driver van de Fuji Xerox DocuPrint C525A Direct link to Linux

Nadere informatie

Handleiding PHP en MySQL onder Windows Server 2003 met IIS 6.0

Handleiding PHP en MySQL onder Windows Server 2003 met IIS 6.0 Handleiding PHP en MySQL onder Windows Server 2003 met IIS 6.0 Uitgegeven door Propane Internetdiensten Lange Meet 41 3261 EJ OUD-BEIJERLAND 2005 Propane Internetdiensten Inhoud 1. Inleiding... 3 2. IIS

Nadere informatie

Flexibele oplossing om de eid kaart aan te spreken vanuit.net (en Delphi, Visual Basic, C++ etc)

Flexibele oplossing om de eid kaart aan te spreken vanuit.net (en Delphi, Visual Basic, C++ etc) Productfiche RoadByte eid Framework Flexibele oplossing om de eid kaart aan te spreken vanuit.net (en Delphi, Visual Basic, C++ etc) RoadByte BVBA stelt het RoadByte eid Framework product voor. Dit framework

Nadere informatie

Capita Selecta Design Patterns voor administratieve applicaties

Capita Selecta Design Patterns voor administratieve applicaties Capita Selecta voor administratieve applicaties Bij afstudeerproject: Generiek framework voor administratieve toepassingen in een webgeörienteerde omgeving Henk van de Ridder 26 augustus 2006 Inhoud 26

Nadere informatie

Preschool Kindergarten

Preschool Kindergarten Preschool Kindergarten Objectives Students will recognize the values of numerals 1 to 10. Students will use objects to solve addition problems with sums from 1 to 10. Materials Needed Large number cards

Nadere informatie

Installatie en configuratie documentatie

Installatie en configuratie documentatie Installatie en configuratie documentatie Assistance Web Portal v. 2.58, 2.60 Voor Windows 2003 / 2008 / XP / Vista / Windows 7 Assistance PSO handleiding, uitgegeven door Assistance Software. Alle rechten

Nadere informatie

B1 Woordkennis: Spelling

B1 Woordkennis: Spelling B1 Woordkennis: Spelling Bestuderen Inleiding Op B1 niveau gaan we wat meer aandacht schenken aan spelling. Je mag niet meer zoveel fouten maken als op A1 en A2 niveau. We bespreken een aantal belangrijke

Nadere informatie

Zonnepanelen Hoe krijg je de data op je website?

Zonnepanelen Hoe krijg je de data op je website? Zonnepanelen Hoe krijg je de data op je website? Beste website-bezoeker, Omdat ik al heel wat vragen kreeg over het gedeelte zonne-energie op mijn website, heb ik besloten om de werkwijze die ik gevolgd

Nadere informatie

Een website maken met Joomla!

Een website maken met Joomla! Een website maken met Joomla! In deze workshop gaan we laten zien hoe werken met Joomla! Maar eerst, wat is Joomla!? Joomla is een Content Management Systeem (CMS). Het is een software die je op een webserver

Nadere informatie

Acht stappen voor JSF

Acht stappen voor JSF Acht stappen voor JSF Inleiding In deze tutorial zullen we JSF (Java server faces) installeren. Wat we niet beschrijven is hoe te werken met JSF, over dit onderwerp zijn er genoeg boeken en internetsites

Nadere informatie

SAMPLE 11 = + 11 = + + Exploring Combinations of Ten + + = = + + = + = = + = = 11. Step Up. Step Ahead

SAMPLE 11 = + 11 = + + Exploring Combinations of Ten + + = = + + = + = = + = = 11. Step Up. Step Ahead 7.1 Exploring Combinations of Ten Look at these cubes. 2. Color some of the cubes to make three parts. Then write a matching sentence. 10 What addition sentence matches the picture? How else could you

Nadere informatie

Hoe stel ik mijn favorieten en wachtwoorden veilig met LastPass en Xmarks?

Hoe stel ik mijn favorieten en wachtwoorden veilig met LastPass en Xmarks? Hoe stel ik mijn favorieten en wachtwoorden veilig met LastPass en Xmarks? Handleiding van Auteur: Jan Stedehouder Februari 2012 Hoeveel favorieten heb je in de webbrowser opgeslagen? En wachtwoorden?

Nadere informatie

LES 3: XAMPP OF MAMP. Lesoverzicht:

LES 3: XAMPP OF MAMP. Lesoverzicht: LES 3: XAMPP OF MAMP Lesoverzicht: Aan de slag Wat is XAMPP (Windows & Linux) Installatie XAMPP Gebruik van XAMPP Wat is MAMP (Mac) Installatie MAMP Gebruik van MAMP Samenvatting Tijd: 15 minuten Doel:

Nadere informatie

LDAP Server on Yeastar MyPBX & tiptel 31xx/32xx series

LDAP Server on Yeastar MyPBX & tiptel 31xx/32xx series LDAP Server on Yeastar MyPBX & tiptel 31xx/32xx series Tiptel b.v. Camerastraat 2 1322 BC Almere tel.: +31-36-5366650 fax.: +31-36-5367881 info@tiptel.nl Versie 1.2.0 (09022016) Nederlands: De LDAP server

Nadere informatie

What is the advantage of using expression language instead of JSP scriptlets and JSP expressions?

What is the advantage of using expression language instead of JSP scriptlets and JSP expressions? Web 3: Theorievragen No Scriptlets What is the advantage of using expression language instead of JSP scriptlets and JSP expressions? Geen javacode tussen de html. What is the difference between the. operator

Nadere informatie

Configureren van een VPN L2TP/IPSEC verbinding

Configureren van een VPN L2TP/IPSEC verbinding Configureren van een VPN L2TP/IPSEC verbinding Inhoudsopgave 1. Voorbereiding.... 3 2. Domain Controller Installeren... 4 3. VPN Configuren... 7 4. Port forwarding.... 10 5. Externe Clients verbinding

Nadere informatie

Het opzetten van deze applicatie

Het opzetten van deze applicatie Installatie Codeigniter 2.1.3 Om met Codeigniter te kunnen werken, heb je een werkende Codeigniter 2.1.3. omgeving nodig. Die gaan we hier maken. We zullen eerst deze omgeving gaan opzetten en inrichten.

Nadere informatie

Linux Quickstart Cygwin via HTTP

Linux Quickstart Cygwin via HTTP Linux Quickstart Cygwin via HTTP Deze Quickstart-installatie is bedoeld voor mensen welke overnieuw moeten beginnen omdat hun laptop is gecrashed, of op een andere manier hun gegevens zijn kwijtgeraakt.

Nadere informatie

EM7680 Firmware Update by Micro SD card

EM7680 Firmware Update by Micro SD card EM7680 Firmware Update by Micro SD card 2 NEDERLANDS/ENGLISH EM7680 Firmware update by Micro SD card Table of contents 1.0 (NL) Introductie... 2 2.0 (NL) Firmware installeren... 2 3.0 (NL) Opmerking...

Nadere informatie

De Kleine WordPress Handleiding

De Kleine WordPress Handleiding Introductie Dit is geen uitgebreide handleiding om een WordPress website of blog mee te bouwen. Het is ook geen overzicht van alle aspecten die een WordPress website zo bijzonder maken en geen verhandeling

Nadere informatie

Drupal 7 website op PC installeren

Drupal 7 website op PC installeren Installeren van een Drupal7 website op een PC bestaat uit volgende stappen Installatie van xampp installatie van een server op PC. Een databank installeren. Downloaden van: Drupal7 installatie van Drupal

Nadere informatie

Model Driven Software Development: Geen toekomst maar realiteit. 4 juni 2009, WTC, Amsterdam.

Model Driven Software Development: Geen toekomst maar realiteit. 4 juni 2009, WTC, Amsterdam. Model Driven Software Development: Geen toekomst maar realiteit. 4 juni 2009, WTC, Amsterdam. Welke hoort in dit rijtje niet thuis? Weg- en waterbouw Huizen- en kantoorbouw Stedenbouw Auto- en vliegtuigbouw

Nadere informatie

Handleiding beheer lijst.hva.nl. See page 11 for Instruction in English

Handleiding beheer lijst.hva.nl. See page 11 for Instruction in English Handleiding beheer lijst.hva.nl See page 11 for Instruction in English Maillijsten voor medewerkers van de Hogeschool van Amsterdam Iedereen met een HvA-ID kan maillijsten aanmaken bij lijst.hva.nl. Het

Nadere informatie

Lichtgewicht CSS design voor Drupal 6

Lichtgewicht CSS design voor Drupal 6 Lichtgewicht CSS design voor Drupal 6 Roy Scholten Drupaljam Enschede, 20 maart 2009 1 Question: How to convert an OSWD design into a Drupal theme. In 45 minutes? 2 Wie heeft deze vraag gesteld? Answer:

Nadere informatie

Thinking of development

Thinking of development Thinking of development Databases Arjan Scherpenisse HKU / Miraclethings Agenda voor vandaag Opdracht tussenstand State diagram / Observer pattern Bret Victor Databases 2/42 Opdracht tussenstand Slides

Nadere informatie

De plug-in is heel eenvoudig te installeren met een setup-programma. Waarna je een aantal menu opties in het tools menu er bij krijgt.

De plug-in is heel eenvoudig te installeren met een setup-programma. Waarna je een aantal menu opties in het tools menu er bij krijgt. Plsqldoc Genereer je documentatie Beeklaan 444 2562 BK Den Haag www.darwin-it.nl info@darwin-it.nl KvK 27283780 ING 65.35.40.663 Technical Architect Net als (vrijwel) elke ontwikkelaar vind ik het documenteren

Nadere informatie

Programmeren: Visual Basic

Programmeren: Visual Basic PETERSTUYVESANT COLLEGE INFORMATICA 2009-2010 Programmeren: Visual Basic Algemene Kennis: 01. Programmeren Programmeren is het schrijven van een computerprogramma, een concrete verzameling instructies

Nadere informatie

APEX en JasperReports

APEX en JasperReports APEX en JasperReports een Dream Team! Spreker(s) : Datum : E-mail : Vincent Deelen 28 mei 2013 vincent.deelen@transfer-solutions.com WWW.TRANSFER-SOLUTIONS.COM Outline APEX en rapporten Oracle BI publisher

Nadere informatie

De SAP Cloud Connector 2.0 maakt SAPUI5 ontwikkeling via de WEB-IDE mogelijk met data uit je eigen backend systeem.

De SAP Cloud Connector 2.0 maakt SAPUI5 ontwikkeling via de WEB-IDE mogelijk met data uit je eigen backend systeem. De SAP Cloud Connector 2.0 maakt SAPUI5 ontwikkeling via de WEB-IDE mogelijk met data uit je eigen backend systeem. Vele van ons willen wel eens spelen met de WEB-IDE in de could via het SAP Trial Hana

Nadere informatie

Stap 1: Registreer via de link op de G-schijf beschikbaar na inloggen met de teken-account, verzend via Submit. Nadien krijg je een bevestiging op

Stap 1: Registreer via de link op de G-schijf beschikbaar na inloggen met de teken-account, verzend via Submit. Nadien krijg je een bevestiging op Stap 1: Registreer via de link op de G-schijf beschikbaar na inloggen met de teken-account, verzend via Submit. Nadien krijg je een bevestiging op het scherm met de melding dat de registratie compleet

Nadere informatie

EM7680 Firmware Auto-Update for Kodi 17.2

EM7680 Firmware Auto-Update for Kodi 17.2 EM7680 Firmware Auto-Update for Kodi 17.2 2 NEDERLANDS/ENGLISH EM7680 Firmware Auto-update for Kodi 17.2 Table of contents 1.0 (NL) Introductie... 3 2.0 (NL) Firmware installeren... 3 3.0 (NL) Opmerking...

Nadere informatie

9. MYSQL. Daarin zien we het administratie paneel van mysql.

9. MYSQL. Daarin zien we het administratie paneel van mysql. 9. MYSQL We kunnen ook in dit systeem gebruik maken van de gekende ACCESS databanken. Zolang het maar relationale databanjken zijn kunnen we er gebruik van maken. In PHP echter maakt men meestal gebruik

Nadere informatie

DR3_fons_les_09 2014_11_13 1

DR3_fons_les_09 2014_11_13 1 DR3_fons_les_09 2014_11_13 1 pad van private map sites / default / files / private als je in private map iets gaat instellen, gebeurt er iets in drupal, drupal gaat automatisch een htaccess bestand aanmaken

Nadere informatie

WordPress Handleiding

WordPress Handleiding Algemene Informatie Disclaimer: Bij het samenstellen van dit boek is de grootst mogelijke zorg besteed aan de juistheid van de opgenomen informatie. Wij kunnen echter niet verantwoordelijk gesteld worden

Nadere informatie

Handleiding: CitrixReceiver installeren voor thuisgebruik.

Handleiding: CitrixReceiver installeren voor thuisgebruik. Handleiding: CitrixReceiver installeren voor thuisgebruik. Deze handleiding is gemaakt om een privé pc geschikt te maken om op het netwerk van MEE te kunnen werken. Zodra het met de onderstaande stappen

Nadere informatie

Datum 15 juni 2006 Versie 1.0.6. Exchange Online. Handleiding voor gebruiker Release 1.0

Datum 15 juni 2006 Versie 1.0.6. Exchange Online. Handleiding voor gebruiker Release 1.0 Datum 1.0.6 Exchange Online Handleiding voor gebruiker Release 1.0 1.0.6 Inhoudsopgave 1 Instellingen e-mail clients 2 1.1 Gebruik via Outlook 2003 2 1.2 Gebruik via ActiveSync 15 1.3 Gebruik via andere

Nadere informatie

Installatie instructies

Installatie instructies OpenIMS CE Versie 4.2 Installatie instructies OpenSesame ICT BV Inhoudsopgave 1 INLEIDING... 3 2 INSTALLATIE INSTRUCTIES... 4 3 OPENIMS SITECOLLECTIE CONFIGURATIE... 6 OpenIMS CE Installatie instructies

Nadere informatie

RECEPTEERKUNDE: PRODUCTZORG EN BEREIDING VAN GENEESMIDDELEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM

RECEPTEERKUNDE: PRODUCTZORG EN BEREIDING VAN GENEESMIDDELEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM Read Online and Download Ebook RECEPTEERKUNDE: PRODUCTZORG EN BEREIDING VAN GENEESMIDDELEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM DOWNLOAD EBOOK : RECEPTEERKUNDE: PRODUCTZORG EN BEREIDING VAN STAFLEU

Nadere informatie

Sophie van Solinge 77524 CMS32

Sophie van Solinge 77524 CMS32 Sophie van Solinge 77524 CMS32 1 Opdracht 1 Drupal Wordpress Joomla Case 1 De groenteboer op de hoek, heeft grootse plannen voor zijn zaak. Omdat er in de omgeving veel verzorgingstehuizen zijn en de inwoners

Nadere informatie

My Benefits My Choice applicatie. Registratie & inlogprocedure

My Benefits My Choice applicatie. Registratie & inlogprocedure My Benefits My Choice applicatie Registratie & inlogprocedure Welkom bij de My Benefits My Choice applicatie Gezien de applicatie gebruik maakt van uw persoonlijke gegevens en salarisinformatie wordt de

Nadere informatie

Chapter 4. eenvoudige webserver opzetten

Chapter 4. eenvoudige webserver opzetten Chapter 4. eenvoudige webserver opzetten Table of Contents 4.1. overzicht... 44 4.2. software beheren op Linux... 44 4.3. vi... 45 4.4. html... 45 4.5. apache2... 45 4.6. twee extra websites op de apache

Nadere informatie

WordPress in het Kort

WordPress in het Kort WordPress in het Kort Een website maken met Wordpress. In minder dan één uur online! Inclusief installatie van een thema en plugins Alle rechten 2013, Rudy Brinkman, BrinkhostDotCom, http://www.brinkhost.nl

Nadere informatie

Technisch Ontwerp W e b s i t e W O S I

Technisch Ontwerp W e b s i t e W O S I Technisch Ontwerp W e b s i t e W O S I WOSI Ruud Jungbacker en Michael de Vries - Technisch ontwerp Website Document historie Versie(s) Versie Datum Status Omschrijving / wijzigingen 0.1 20 nov 2008 Concept

Nadere informatie

Connect Social Business. Plan van Aanpak voor mijn stage bij ConnectSB

Connect Social Business. Plan van Aanpak voor mijn stage bij ConnectSB Connect Social Business Plan van Aanpak voor mijn stage bij ConnectSB Joey Kaan September 21, 2014 Inhoudsopgave 1 Achtergronden 4 2 Probleemstelling & Doelstelling 5 2.1 Leren Professioneel Functioneren..................

Nadere informatie

Installatie stappen Microsoft SQL Server 2008 R2 Express With Tools:

Installatie stappen Microsoft SQL Server 2008 R2 Express With Tools: Installatie stappen Microsoft SQL Server 2008 R2 Express With Tools: Versie: 201212031 Pagina 1 van 7 Dit stappenplan is gebasseerd op een computer zonder eerdere Microsoft SQL Server installaties. Is

Nadere informatie