Geïntegreerde Proef 6IB Wim Tibackx



Vergelijkbare documenten
De ondersteuningsaspecten zijn weggelaten en het verklarend woordenboek is vrij kort

Voorwoord. Beste Lezer,

Geïntegreerde Proef 6IB Wim Tibackx

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

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

Xampp Web Development omgeving opzetten onder Windows.

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

Firewall van de Speedtouch 789wl volledig uitschakelen?

Settings for the C100BRS4 MAC Address Spoofing with cable Internet.

XAMPP Web Development omgeving opzetten onder Windows.

EM6250 Firmware update V030507

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

Linux Quickstart Cygwin via HTTP

Standard Parts Installatie Solid Edge ST3

MyDHL+ Van Non-Corporate naar Corporate

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

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous

Linux Quickstart Cygwin

beginnen met bloggen (kleine workshop Wordpress)

Analyse Programmeertalen

Shipment Centre EU Quick Print Client handleiding [NL]

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

Veel gestelde vragen nieuwe webloginpagina

VERENIGINGSWIJZER.NL FINAL DOCUMENT

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

Object Oriented Programming

EM7680 Firmware Update by OTA

MyDHL+ ProView activeren in MyDHL+

Installeer Apache2: Landstede februari 2009 versie 3 1 Bertil Hoentjen

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

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

2019 SUNEXCHANGE USER GUIDE LAST UPDATED

Geert Dekkers Web Studio +31(0)

ALL-CRM Universele Installer

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

Kleine cursus PHP5. Auteur: Raymond Moesker

Test Joomla op je PC 1

ATOS Viewer for Dental Frameworks User Manual

Webapplicatie-generatie NIOC 2013

Inhoudsopgave. versie 0.8

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

Mobile Watch Snelle Handleiding. Bezoek voor meer informatie

Werken met SNAP pakketten in Ubuntu 16.04

General info on using shopping carts with Ingenico epayments

Inhoudsopgave: Whisper380-computerhulp

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

Installatie SQL: Server 2008R2

Raspberry Pi Plex server installeren

Les 4 Installeren Apache2 Php MySQL

Organisatie. Gestart in 2009 Open Source Webdevelopment Grafische achtergrond Servicegericht

Netwerkprinter Dell 1320C installeren op Ubuntu LTS - Lucid Lynx

Handleiding PHP en MySQL onder Windows Server 2003 met IIS 6.0

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

Capita Selecta Design Patterns voor administratieve applicaties

Preschool Kindergarten

Installatie en configuratie documentatie

B1 Woordkennis: Spelling

Zonnepanelen Hoe krijg je de data op je website?

Een website maken met Joomla!

Acht stappen voor JSF

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

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

LES 3: XAMPP OF MAMP. Lesoverzicht:

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

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

Configureren van een VPN L2TP/IPSEC verbinding

Het opzetten van deze applicatie

Linux Quickstart Cygwin via HTTP

EM7680 Firmware Update by Micro SD card

De Kleine WordPress Handleiding

Drupal 7 website op PC installeren

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

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

Lichtgewicht CSS design voor Drupal 6

Thinking of development

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.

Programmeren: Visual Basic

APEX en JasperReports

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

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

EM7680 Firmware Auto-Update for Kodi 17.2

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

DR3_fons_les_ _11_13 1

WordPress Handleiding

Handleiding: CitrixReceiver installeren voor thuisgebruik.

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

Installatie instructies

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

Sophie van Solinge CMS32

My Benefits My Choice applicatie. Registratie & inlogprocedure

Chapter 4. eenvoudige webserver opzetten

WordPress in het Kort

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

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

Installatie stappen Microsoft SQL Server 2008 R2 Express With Tools:

Transcriptie:

Katholiek Scholencentrum JOMA Schooljaar 2010-2011 Maantjessteenweg 130 2170 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 130 2170 Merksem (ANTWERPEN) Tel. 03.290.79.11 Stagementor: Samuel Meurs Wim Tibackx Te Boelaarlei 44 2140 Borgerhout (ANTWERPEN) Tel. 0498.38.30.66 Wim Tibackx 12 6IB

Katholiek Scholencentrum JOMA Schooljaar 2010-2011 Maantjessteenweg 130 2170 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 130 2170 Merksem (ANTWERPEN) Tel. 03.290.79.11 Stagementor: Samuel Meurs Wim Tibackx Te Boelaarlei 44 2140 Borgerhout (ANTWERPEN) Tel. 0498.38.30.66 Wim Tibackx 12 6IB

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.

Inhoudsopgave INHOUDSOPGAVE... 1 INLEIDING... 4 OVERZICHT GEBRUIKTE SOFTWARE... 6 1. ENGELS... 6 2. VRIJE OPDRACHT... 6 3. WEBSITE... 7 4. BEDRIJFSECONOMIE... 7 5. ALGEMEEN... 7 DEEL 1. ENGELS... 8 1.1 FILM... 9 1. TEXT... 10 1.2 SCREENCAST... 11 1. TEXT... 12 DEEL 2. VRIJE OPDRACHT PHP, ASP.NET EN RUBY ON RAILS EEN VERGELIJKING TUSSEN WEBDEVELOPMENT ECOSYSTEMEN... 13 1. ALGEMENE SITUERING VAN DE TALEN... 14 1.1. ASP.NET... 14 1.2. PHP... 15 1.3. JSP... 17 1.4. RUBY ON RAILS... 17 2. ONTWIKKELING VOORBEELDTOEPASSING: CONTACTR... 19 2.1. ALGEMENE INFO OVER CONTACTR... 19 2.2. DATA EN DATABASE... 19 2.3. ONTWIKKELING... 20 2.3.1. Ruby On Rails... 20 3. WAT ANDEREN DENKEN: INTERVIEWS MET DOORWINTERDE WEBDEVELOPERS... 22 3.1. PETER TIBACKX DEVELOPT 9 JAAR WAARVAN 3 JAAR PROFESSIONEEL... 22 3.2. DE JONGE THOMAS TOYE DEVELOPT NU 1,5 JAAR IN PHP... 22 3.3. JONAS DRIEGHE, BLOGGER OP HTTP://WWW.GEEKTALK.BE/ DEVELOPT 10 JAAR, WAARVAN 4 À 5 JAAR PROFESSIONEEL.... 23 3.4. BERT CIELEN IS WERKNEMER BIJ HTTP://ATYOURSITE.BE... 24 3.5. TOM KLAASEN IS ZAAKVOERDER VAN 10TO1... 25 4. INSTALLEREN VAN SERVERS (SIMPELE SETUP)... 27 4.1. INLEIDING... 27 4.3. OPZETTEN VAN DE SERVERS... 28 4.3.1. Opzetten van Ubuntu 11.04 Desktop met LAMP+Rails+Pma+mod_rewite+mod_rails... 28 4.3.2. Opzetten van server 3: XAMPP op Windows 7... 39 DEEL 3. WEBSITE VOOR KSA-VKSJ XAVERIUS MET THE LAMPIRO CONTENT FRAMEWORK... 46 1. KSA-VKSJ XAVERIUS... 47 2. LAMPIRO CONTENT FRAMEWORK... 47 2.1. KEUZE... 47 Geschiedenis... 47 Verder zoeken... 48 Inner workings... 49 Pagina 1 van 99

De oplossing... 50 2.2. ONTWIKKELING... 50 2.3. INSTALLATIE (APACHE)... 51 3. WEBSITE PLANNING... 51 3.1. FEATURES (FRONT- EN BACK-END)... 51 3.3. ROLES, USERS EN PERMISSIONS... 52 4. USERCOMPONENTS... 53 4.1. THEMES... 53 Themes in Lampiro... 53 Hoe het werkt in Hotaru... 53 Hoe het werkt in Lampiro... 53 De ontwikkeling van de KSA-VKSJ Xaverius theme... 54 Hoe het er uitziet... 54 Content... 55 Sidebar... 55 Footer... 55 4.2. PLUGINS... 55 Hoe het werkt in Hotaru... 56 Hoe het werkt in Lampiro... 56 5. DATABASE... 57 Variatabellen... 58 Posts... 60 Themes... 61 Plugins... 62 Pages-Blocks-Menus... 63 Users... 63 Comments... 64 Widgets... 64 Volledig schema... 65 DEEL 4. BEDRIJFSECONOMIE... 66 4.1 VOORSTELLING STAGEBEDRIJF FOREACH... 67 1. ALGEMENE INFORMATIE... 68 1.1. BEDRIJFSACTIVITEITEN... 68 1.2. STRUCTUUR... 68 1.3. INLEIDEND GESPREK... 69 1.4. UITGEVOERDE TAKEN... 69 2. EVOLUTIE... 69 2.1. BALANSTOTAAL... 69 2.2. OVERGEDRAGEN WINST... 70 2.3. PERSONEEL... 70 2.4. PERSONEEL: VOLTIJDS EN DEELTIJDS... 70 2.5. PERSONEEL: GESLACHT... 71 2.6. PERSONEEL: IN- EN UITTREDINGEN... 71 3. FOTO S EN SFEERBEELDEN... 72 4.2 AANVRAAG LENING... 74 1. HET VINDEN VAN EEN BANK... 75 2. KBC-INVESTERINGSKREDIET... 75 3. ALTERNATIEVE OPTIE: LEASING... 76 Pagina 2 van 99

WOORDENBOEK... 78 1. HET SINGLETON DESIGN PATTERN... 79 2. CSRF-ATTACKS EN PROTECTION... 79 3. COMPILED VS. INTERPRETED... 80 4. ROUTING... 80 5. CONVENTION OVER CONFIGURATION... 81 6. SLUG... 81 BIBLIOGRAFIE... 82 1. VRIJE OPDRACHT... 83 2. WEBSITE... 84 BESLUIT... 85 BIJLAGEN... 86 BIJLAGE 1. AFLOSSINGSTABEL LENING... 87 BIJLAGE 2. POWERPOINTVOORSTELLING STAGEBEDRIJF... 89 Pagina 3 van 99

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 http://code.google.com/p/contactr/. 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 http://code.google.com/p/lampiro-cf/. 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

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: http://wimtibackx.be/gip-6ib-2010-2011/). 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

Overzicht gebruikte software 1. Engels Sony Vegas Pro 8 Sony Vegas Pro 10 Adobe Audition CS5 Microsoft Office Word 2008 2. 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 1.9.2 Ruby On Rails 3.0.7 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 11.04 Ubuntu Desktop 10.10 Ubuntu Server 10.10 Gedit Xampp Phusion Passenger Notepad++ Google Code Project Hosting Pagina 6 van 99

Libreoffice Writer 3.3 Ecoder 0.4.10 3. Website Netbeans 1.9 Adobe Dreamweaver CS5 Microsoft Notepad Notepad++ Aptana Studio 3 Apache 2 PHP 5.2 en 5.3 MySQL 5 PhpMyAdmin 3.4.0 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 1.4.2 Lampiro-cf (repo-dev) Ecoder 0.4.10 4. Bedrijfseconomie Microsoft Office Word 2010 Microsoft Office Powerpoint 2010 Libreoffice Writer 3.3 5. Algemeen Microsoft Office Word 2010 Microsoft Office Powerpoint 2010 Libreoffice Writer 3.3 Pagina 7 van 99

Deel 1. ENGELS Engels Pagina 8 van 99

ENGELS 1.1 Film Engels: film Pagina 9 van 99

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

ENGELS 1.2 Screencast Engels: screencast Pagina 11 van 99

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

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

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

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. 1.2. 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 1994. In 1995 kon hij versie 1.0.0 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 3. 1997 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

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 http://tommorris.org/wiki/php%20sucks wel fijne lectuur als voorbeeld van wat er nog allemaal fout is met PHP. Vrije Opdracht Pagina 16 van 99

Het moet gezegd worden dat PHP sinds versie 5.0.0 (juli 2004) langzaamaan evolueert naar een hardtyped language. Zo is het sinds versie 5.0.0 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. 1.3. 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. 1.4. 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

toegewijd te onderhouden in 2005, met als resultaat versie 1.0 in december 2005. 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

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. 2.2. 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) E-mail: 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

2.3. Ontwikkeling Nota: De ontwikkeling van Contactr is nog gaande. Voorlopig is enkel Ruby On Rails opgenomen in deze bundel. 2.3.1. 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 http://localhost:3000/ 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 index @contacts=contact.all end def show @contact=contact.find(params[:id]) Vrije Opdracht Pagina 20 van 99

end def new @contact=contact.new end def edit @contact=contact.find(params[:id]) end def create @contact=contact.new(params[:contact]) if @contact.save redirect_to(@contact,:notice=>'contact was successfully created.') else render :action=>"new" end end def update @contact = Contact.find(params[:id]) if @contact.update_attributes(params[:contact]) redirect_to(@contact,:notice => 'Contact was successfully updated.') else render :action => "edit" end end def destroy @contact=contact.find(params[:id]) @contact.destroy 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"> <% @contacts.each do contact %> <li><% render "inlineshow", :locals => {:contact => contact} %></li> <% end %> <% if @contacts.empty? %> <em>no contacts yet!</em> <% end %> </ul> Men kan dus met weinig code snel een basisapplicatie opzetten. Vrije Opdracht Pagina 21 van 99

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. 3.2. 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 http://www.coding-kid.tk. Vrije Opdracht Pagina 22 van 99

3.3. Jonas Drieghe, blogger op http://www.geektalk.be/ 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 www.vdab.be, www.belgium.be, www.provant.be en een aantal interne applicaties voor de Sociale Zekerheid. Het laatste anderhalf jaar werk ik als Java web developer aan www.tijd.be en www.lecho.be (en een heleboel subsites hiervan zoals www.netto.be 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

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 ). 3.4. Bert Cielen is werknemer bij http://atyoursite.be 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

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 http://shop.sonyeurope.com/ 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). 3.5. 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

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

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

4.3. Opzetten van de servers 4.3.1. Opzetten van Ubuntu 11.04 Desktop met LAMP+Rails+Pma+mod_rewite+mod_rails In dit deel gaan we een Ubuntu 11.04 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 11.04 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

Screenshot 3: Wanneer we na het installeren naar http://localhost/ 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

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

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 http://localhost/phpinfo.php 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

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

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

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 http://localhost/, http://alh/ en http://www.alh/ kunnen bereiken. Verder zorgen we er ook voor dat we PhpMyAdmin met http://pma.alh/ kunnen bereiken. Vrije Opdracht Pagina 34 van 99

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 http://localhost/, http://alh/ en http://www.alh/ kunnen bereiken. Vrije Opdracht Pagina 35 van 99

Screenshot 24: We zien dat ook PhpMyAdmin bereikbaar is met http://pma.alh/. 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

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

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

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

Screenshot 33: Ga naar de XAMPP-website (http://www.apachefriends.org/en/xampp.html) Screenshot 34: Zoek de XAMPP-download op Vrije Opdracht Pagina 40 van 99

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

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

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

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

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

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

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. 2.1. 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

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

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

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. 2.2. 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

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. 2.3. 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 https://lampiro-cf.googlecode.com/hg/ [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

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. 3.3. 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

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. 4.1. 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: 0.1 6 * author: Wim Tibackx 7 * authorurl: http://www.wimtibackx.be 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

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

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 http://www.ksj.org/index.php?wk=1&page=nieuw&naam=528&open=8. Website Pagina 55 van 99

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: 0.1 6 * folder: wtbepages 7 * class: WTbePages 8 * requires: wtbepluginutil 0.1, ckeditor 0.2 9 * 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: http://www.wimtibackx.be 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

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

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

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

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

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 89a0721166a1 (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

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 ). 14 http://be2.php.net/manual/en/language.pseudo-types.php#language.types.callback 15 http://be2.php.net/manual/en/function.version-compare.php Website Pagina 62 van 99

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

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, e-mailadres 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