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 talen/frameworks: PHP, JSP en ASP.NET . In dit werk zullen de talen algemeen gesitueerd worden, zullen servers geïnstalleerd worden, kan u interviews met webdevelopers lezen en wordt er een voorbeeldtoepassing ontwikkeld. U zal merken dat deze versie nog niet volledig is. Onder het motto “If there’s an elephant in the room, introduce it” lijst ik even op wat er volgens mij mist/beter kan.
Er missen nog twee serverinstallaties
De voorbeeldtoepassing is nog in ontwikkeling
Er moet nog een stuk theorie worden besproken
Een GIP maak je uiteraard alleen, maar niet zonder hulp. Allereerst wens ik Peter Tibackx, Thomas Toye, Jonas Drieghe en Bert Cielen, de personen die ik mocht interviewen te bedanken. Verder toonde ook Tom Klaassen interesse voor een interview, maar als Ruby on Rails developer valt hij buiten de scope van dit werk. Ook is er Hilde Huberland, mijn moeder, voor haar raadgevingen. Ook wil ik nogmaals Peter Tibackx vermelden, dit maal voor zijn bereidheid om mijn vragen over JSP en algemene coding principles te beantwoorden. En last but not least zijn er al die mensen die mij doorheen de jaren hebben gestimuleerd om te developen en designen: mijn broers, Bas, Jochem Te Wierik, Thomas Toye, Boris Meer, Saro Verhees en vele anderen. Zonder deze mensen had ik niet gestaan waar ik nu sta. Beste lezer, ik hoop dat ik u kan bekoren met dit werk. Tot nu toe is het mij een plezier dit werk te maken. Niet te min is de weg naar de definitieve versie nog lang. Eigenlijk heeft de weg zelfs geen einde, want handelend over code moet het, net zoals code, permanent gedevelopt en geüpdatet worden. Wim Tibackx ksJOMA, 6IB
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
1
Inhoudstafel Voorwoord ...................................................................................................................................................... 1 Inhoudstafel .................................................................................................................................................... 2 1. Algemene situering PHP, JSP & ASP.NET ..................................................................................................... 4 1.1. ASP.NET ................................................................................................................................................ 4 1.2. PHP ....................................................................................................................................................... 5 1.3. JSP ........................................................................................................................................................ 6 2. Ontwikkeling voorbeeldtoepassing ............................................................................................................. 7 2.1. Algemene info over de toepassing ....................................................................................................... 7 2.2. Data ...................................................................................................................................................... 7 2.2.1. Inleiding......................................................................................................................................... 7 2.2.2. Werking van datatypes ................................................................................................................. 7 2.2.3. Concrete tabellen ......................................................................................................................... 9 2.2.4. Vorige versies .............................................................................................................................. 11 3. Wat anderen denken: Interviews met doorwinterde webdevelopers...................................................... 13 3.1. Peter Tibackx developt 9 jaar waarvan 3 jaar professioneel ............................................................. 13 3.2. de jonge Thomas Toye developt nu 1,5 jaar in PHP........................................................................... 13 3.3. Jonas Drieghe, blogger op http://www.geektalk.be/ developt 10 jaar, waarvan 4 à 5 jaar professioneel............................................................................................................................................. 14 3.4. Bert Cielen is werknemer bij http://atYourSite.be ............................................................................ 15 4. Installeren van servers (simpele setup)..................................................................................................... 18 4.1. Inleiding .............................................................................................................................................. 18 4.2. Overzicht van de servers .................................................................................................................... 18 4.3. Opzetten van de servers .................................................................................................................... 19 4.3.1. Opzetten van Server 2: Ubuntu Desktop 10.10 (gedeeltelijk) .................................................... 19 4.3.2. Opzetten van server 3: XAMPP op Windows 7 ........................................................................... 67 5. Verklarend Woordenboek ......................................................................................................................... 83 5.1. Compiled vs. Interpreted ................................................................................................................... 83 5.2. Routing ............................................................................................................................................... 83
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
2
5.3. Convention over Configuration .......................................................................................................... 83 5.4. Slug ..................................................................................................................................................... 83 Bibliografie .................................................................................................................................................... 85
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
3
1. Algemene situering PHP, JSP & ASP.NET 1.1. ASP.NET ASP.NET is de opvolger van ASP (Active Server Pages), beiden ontwikkeld door Microsoft. Verder wordt ASP.NET gecompileerd1. 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.
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 DRY2 en KISS3 principes. Volgens die voorwaarden ziet de structuur er als volgt uit: een masterpage (.master) die een algemene layout 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. 1
zie woordenboek Don’t Repeat Yourself 3 Keep It Simple, Stupid! 2
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
4
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 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.
Dit werk heet wel “ASP.NET, JSP & PHP: Een vergelijking tussen webdevelopment talen” maar eigenlijk is ASP.NET meer een framework dan een taal. ASP.NET is de tags, de routing4 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++.
4
Zie woordenboek
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
5
PHP is een loosely-typed language. Dit houdt in dat men niet opgeven van welk type een variabele is, welk type de parameters zijn en dergelijke. Het moet gezegd worden dat PHP sinds versie 5.0.0 (juli 2004) evolueert naar een hard-typed language. Zo is het sinds versie 5.0.0 mogelijk om (behalve voor de ingebouwde types als int, string5) 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 aangeroepen. 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.
5 Men kan voor de ingebouwde types wel de alternatieven uit de SPL extensie gebruiken, bv. SplInt, SplString. Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
6
2. Ontwikkeling voorbeeldtoepassing 2.1. Algemene info over de toepassing Voorlopig heb ik vooral theorie besproken, maar wat er natuurlijk écht toe doet is hoe het in de praktijk werkt. Om dit te vergelijken zal ik een voorbeeldtoepassing ontwikkelen in de 3 talen, met verschillende database engines. Het doel van deze toepassing is het bijhouden van contactgegevens. Deze toepassing zal met een database werken. Om de vergelijking compleet te maken zal ik, voor zover mogelijk, in de 3 talen met de 3 meest voorkomende relationele database systemen werken: Microsoft SQL Server, MySQL en Firebird. In totaal zullen er dus drie versies van de applicatie zijn, met elks drie subversies.
2.2. Data 2.2.1. Inleiding De applicatie zal heel wat data moeten bijhouden. Ze is immers gericht op de moderne internet- en mediagebruiker. In de snel veranderende technologiewereld moet deze applicatie dus flexibel aan te passen zijn aan nieuwe ontwikkelingen. Zo kan iemand de mogelijkheid wensen een twitter of linkedIn profiel bij te houden, wat enkele jaren geleden nog ondenkbaar was. Een kort, onvolledig overzicht van de mogelijke data:
Persoonsnaam, voornaam
Bedrijf waarvoor persoon werkt
Fysiek adres
Telefoon- GSM- en faxnummers
E-mailadressen
Websites & online profielen (twitter, facebook, ..)
Beschrijvingen/notities
2.2.2. Werking van datatypes Om zoveel mogelijk flexibiliteit te bewaren zullen de datatypes als een soort van plugins werken. Dit houdt in dat zij naar wens geïnstalleerd en gedeïnstalleerd kunnen worden.
2.2.2.1. Mappenstructuur Met de term plugin wordt in deze applicatie een map bedoeld, met daarin bepaalde opgelegde files. De mapstructuur moet er als volgt uitzien:
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
7
[datatype] o
install.sql
o
uninstall.sql
o
class.php
o
[optionele verdere files nodig voor de werking van de plugin]
Zoals wel te vermoeden valt is install.sql een sql file met enkele queries in om de plugin te installeren. Dit houdt in dat de plugin een eigen tabel moet aanmaken en een record moet toevoegen in de datatypes tabel. Uninstall.sql is dan weer een file die de table en de desbetreffende record in de datatypes tabel verwijderd. De queries worden door de administrator van de applicatie manueel uitgevoerd in de databaseomgeving. Class.php is de main class file van de plugin. Hierin staat de class die de plugin vertegenwoordigd in de applicatie. Dit is de enige file die voor de rest van de applicatie bekend is.
2.2.2.2. Conventions Volgens het convention over configuration6 principe legt de applicatie enkele zaken op aan de pluginontwikkelaars. Deze zijn onder te brengen in verschillende zaken, gaande van namen tot werking. De naam van een voorwerp is zeer belangrijk. Het is het eerste herkenningspunt voor anderen. Zo ook met plugins. Hier is er echter wel een verschil, een naam die voor mensen herkenbaar is, is dat soms niet voor computers. Voor computers zou het handiger zijn dat alles een nummertje kreeg waaruit de computer kan afleiden waarover het gaat. Spijtiggenoeg kunnen we de plugins geen unieke nummer geven. We hebben wel een unieke nummer binnen één instantie van de applicatie (de id in de datatype tabel), maar deze hangt af van de volgorde van installatie. Het is verder onmogelijk deze over alle instanties dezelfde te maken, aangezien dit zou vereisten dat men enkel plugins uit een gecentraliseerde plugindatabase zou installeren. Hoewel dit het gedroomde scenario zou zijn voor een supportmedewerker van eender welke self-hosted web application die plugins support is dit onmogelijk. Denk bijvoorbeeld aan de plugin clutter bij WordPress. Daarom maakt de computer gebruik van een zogenaamde slug7 en wordt de menselijke gebruiker een human readable name voorgeschoteld. De slug moet voldoen aan de gewone regels voor een slug (zie woordenboek) en moet beginnen met dt_. Verder wordt er aangeraden dat de naam van de auteur erin verwerkt wordt, om dubbele namen, wat verboden is, te voorkomen. Indien ik een plugin voor fysieke adressen zou maken zou ik dus “dt_wimtibackx_fyaddress” als slug kunnen gebruiken terwijl mijn gebruikers gewoon “Address” zouden te zien krijgen. De hoofdclass moet als naam de slug hebben, net als
6 7
Zie woordenboek Zie woordenboek
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
8
de folder. De naam van databasetables is vrij te kiezen, maar er wordt aangeraden om ze te prefixen met de slug, om voor unieke waarden te zorgen. Naast de namen zijn er ook enkele conventions in verband met de werking. De applicatie moet namelijk weten hoe de plugin aan te spreken. Hiertoe moet de basisclass AppDatatype worden geïmplementeerd. Via deze class worden een aantal methods opgelegd die door de rest van de applicatie gebruikt worden om de plugin te selecteren. De methods waar het om gaat zijn methods om een nieuw record te inserten in de databank (gegeven de forminput), een record te updaten (gegeven de forminput), een form te genereren, een normale view van een record te genereren (kortom: de data voor te stellen) en een record te verwijderen.
2.2.3. Concrete tabellen 2.2.3.1. Inleiding De database structuur is veranderd tegenover de eerste voorlopige versie (deze vindt u bij 2.2.3.1. Voorlopig 1). De vorige opzetting gaf niet voldoende flexibiliteit bij de datatypes en maakte het beheren van contacten te ingewikkeld, door de opsplitsing in personen en bedrijven. Indien deze opsplitsing voor de eindgebruiker wenselijk blijkt te zijn, kan deze de desbetreffende mogelijkheid toevoegen via een datatype.
2.2.3.2. Huidige versie De huidige versie bevat 3 standaardtabellen en elk datatype kan nieuwe tabellen toevoegen. 2.2.3.2.1. Standaardtabellen Contacts o
Id (Primary Key)
Datatypes o
Id (Primary Key)
o
Slug (Unique)
o
Name (Unique)
Contact_Datatype_Link o
cID (Foreign key => contact)
o
dtID (Foreign key => datatype)
o
dID (verwijst naar data ID per tabel)
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
9
2.2.3.2.2. Model voor hoofd-plugintabellen In de plugintabellen moet er minstens een ID zitten, voor de andere zaken zijn de plugins vrij in hun database-ontwerp. Verder kunnen plugins meerdere tabellen maken.
2.2.3.3. Table en relations overzicht met voorbeelden van plugins
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
10
2.2.4. Vorige versies 2.2.4.1. Database-ontwerp in de eerste voorlopige versie Contact (grouperingstabel voor personen en bedrijven) o
cID (Primary Key, Auto Increment, Integer)
o
Naam (Unique, Varchar(75). Bedoeld als bijnaam. Als de gebruiker bijvoorbeeld twee personen met de naam Jan Janssens kent, de ene een collega en de andere iemand die hij ontmoette in de bibliotheek kunnen deze heren de namen “Jan Janssens Werk” en “Jan Janssens Bib” toegewezen krijgen)
o
Beschrijving (Tekst, Default NULL, om meer informatie te geven over het contact)
Persoon o
pID (Primary Key, Auto Increment, Integer)
o
First Name (Varchar(50))
o
Middle Name(Varchar(50), Default NULL)
o
Last Name(Varchar(100))
o
cID (Foreign key => Contact.cID)
Organisatie o
oID (Primary Key, Auto Increment, Integer)
o
Name (Varchar(200))
o
cID (Foreign key => Contact.cID)
Datatype (Types van dataobjecten) o
tID (Primary Key, Auto Increment, Integer)
o
Naam (Unique. Voorbeeld: “telefoonnummer”, “adres”)
Data (table waarin contactdata wordt opgeslagen) o
dID (Primary Key, Auto Increment, Integer)
o
Type (Foreign Key => Datatype.tID)
o
Data (Text)
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
11
o
cID (Foreign key => Contact.cID)
o
Description (Varchar(140). Voorbeeld “persoonlijk e-mailadres”,”tel. Werk”)
PersoonOrganisatieLink (Link tussen Persoon en Organisatietabel) o
pID (Foreign key => Persoon.pID, Unique)
o
oID (Foreign key => Organisatie.oID)
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
12
3. Wat anderen denken: Interviews met doorwinterde webdevelopers 3.1. Peter Tibackx developt 9 jaar waarvan 3 jaar professioneel 1. Met welke talen werkt u? PHP & JSP/Java 2. Welke van deze talen geniet uw 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. JSP 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 hebt u 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 vindt 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 Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
13
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 je 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 orgineel 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 hele boel subsites hiervan zoals www.netto.be en dergelijke). Hiervoor werk ik in alle lagen van de applicatie (van database tot css / js).
4. Doe 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.
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
14
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. 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. U developt in C#/ASP.NET, hebt u 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 hebt u 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 aanboodt. 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 u, 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 IMHO8 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.
8
In My Honest Opinion
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
15
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 CMS9 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 ene 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 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 bijvoorbeeld een applicatie waarin VAIO-planners de regels vastleggen voor CTO-toestellen: 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.sony-
europe.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. 9
Content Management System
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
16
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 steed spopulairder 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).
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
17
4. Installeren van servers (simpele setup) 4.1. Inleiding In dit deel van het werk is het de bedoeling servers te draaien als lokale testomgeving voor de gemiddelde huis-, tuin- en keukendeveloper. Het gaat dus om simpele servers die, indien mogelijk, draaien op de eigen lokale machine. Deze servers moeten makkelijk te configureren en te beheren zijn.
4.2. Overzicht van de servers In dit werk zal ik 3 servers opzetten: een Windows Server 2008, die op een aparte machine (of eventueel virtueel) zal draaien, een apache server op een Ubuntu Desktop 10.10 machine en tenslotte een apache server (via XAMPP) op een Windows Desktop systeem. Eventueel kan voor de Ubuntu machine ook een Ubuntu Server 10.10 of een andere linux server distributie worden gebruikt. Concreet zullen deze machines het volgende bevatten: Server 1 (Microsoft Windows Server 2008)
IIS 7.0
Microsoft SQL Server 2008
Extra PHP support voor IIS
Server 2 (Ubuntu Desktop 10.10)
Apache 2
PHP 5.3
MySQL
Apache Tomcat
Firebird
phpMyAdmin
Webmin
Mod-rewrite
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
18
Server 3 (XAMPP op Windows 7)
XAMPP o
Apache 2
o
PHP
o
MySQL
4.3. Opzetten van de servers Zoals eerder in dit werk vermeld (zie inleiding) wordt voorlopig enkel het opzetten van een gedeelte van Server 3 besproken. Verder wordt steeds gebruik gemaakt van de meest eenvoudige methode.
4.3.1. Opzetten van Server 2: Ubuntu Desktop 10.10 (gedeeltelijk) Hier vertrekken we van een nieuwe Ubuntu Desktop 10.10 installatie.
Figuur 1: Een nieuwe Ubuntu Desktop 10.10 installatie
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
19
Figuur 2: Open een terminalvenster
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
20
Figuur 3: Installeer tasksel met "sudo apt-get install tasksel"
Tasksel is een debian utility die default geïnstalleerd staat op en gebruikt wordt in Ubuntu Server. Het biedt de mogelijkheid taken te maken (en komt ook met enkele voorgeïnstalleerde taken) om gebruik te vergemakkelijken.
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
21
Figuur 4: apt-get geeft weer welke paketten worden geïnstalleerd en vraagt om confirmatie
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
22
Figuur 5: apt-get installeert tasksel
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
23
Figuur 6: Installeer een lamp-server met het commando "sudo tasksel install lamp-server"
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
24
Figuur 7: Na enige tijd komt dit scherm tevoorschijn. Tasksel is bezig met installeren
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
25
Figuur 8: Voer een wachtwoord in voor de root gebruiker van mysql. Onthoudt dit
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
26
Figuur 9: Herhaal het wachtwoord
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
27
Figuur 10: Tasksel configureert
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
28
Figuur 11: Ga na het installeren naar een browser en typ "http://localhost/" in
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
29
Figuur 12: Nu staan de web files in /var/www/. Hier heeft de gewone gebruiker geen schrijfrechten. Om development te vergemakkelijken willen we de webroot verplaatsen naar ~/server. (In deze installatie /home/wim/server). Open een texteditor als root (sudo gedit)
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
30
Figuur 13: De editor is geopend
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
31
Figuur 14: Open /etc/apache2/sites-enabled/000-default
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
32
Figuur 15: Pas de documentRoot (waar de files staan) aan naar de nieuwe map
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
33
Figuur 16: Doe dit ook bij de directory config. Sla op en sluit gedit
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
34
Figuur 17: Open nu een texteditor met gewone permissies. (commandline: gedit of via het menu)
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
35
Figuur 18: Typ hier een simpele HTML pagina
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
36
Figuur 19: Sla dit op onder /home/wim/server/index.html
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
37
Figuur 20: Herstart Apache met "sudo apachectl restart"
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
38
Figuur 21: Open de browser opnieuw en test of het werkt
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
39
Figuur 22: Open gedit weer en typ een php pagina. Hier wordt de functie phpinfo() opgeroepen. Deze geeft info over de installatie weer.
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
40
Figuur 23: Sla de pagina op in /home/wim/server/phpinfo.php
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
41
Figuur 24: Ga in de browser naar http://localhost/phpinfo.php
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
42
Figuur 25: Nu gaan we phpMyAdmin installeren. Typ "sudo apt-get install phpmyadmin"
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
43
Figuur 26: Na enige tijd vraagt men voor welke server men configureert. Druk op spatie bij apache2
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
44
Figuur 27: Typ enter om verder te gaan
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
45
Figuur 28: phpMyAdmin wordt geïnstalleerd
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
46
Figuur 29: Er komen nog enkele vragen. Hier vraagt men om de databases te configureren. Druk enter bij Yes
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
47
Figuur 30: Typ het rootpassword van mysql in
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
48
Figuur 31: Typ een wachtwoord in voor phpMyAdmin (mag hetzelfde zijn als mysql)
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
49
Figuur 32: Herhaal dat laatste wachtwoord
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
50
Figuur 33: phpMyAdmin installeert verder
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
51
Figuur 34: Herstart Apache
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
52
Figuur 35: Ga naar http://localhost/phpmyadmin/
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
53
Figuur 36: Voor makkelijke configuratie willen we webmin gebruiken. Ga naar de website van webmin http://www.webmin.com en druk links op Debian Package
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
54
Figuur 37: Je wordt omgeleid naar Sourceforge
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
55
Figuur 38: Klik om te openen met Ubuntu Software Center (of sla op en open later met Ubuntu Software Center)
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
56
Figuur 39: Ubuntu Software Center komt tevoorschijn
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
57
Figuur 40: We vertrouwen webmin. Klik op install
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
58
Figuur 41: Webmin is geïnstalleerd
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
59
Figuur 42: Herstart Apache
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
60
Figuur 43: Ga naar https://localhost:10000/ (in Firefox en Google Chrome kan dit problemen geven met het https certificaat)
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
61
Figuur 44: Log in met je username en wachtwoord
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
62
Figuur 45: Dit is de webmin startpagina
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
63
Figuur 46: Ga naar servers -> Apache webserver en klik op Global Configuration
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
64
Figuur 47: Klik op configure Apache modules en scroll tot je rewrite ziet
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
65
Figuur 48: Selecteer rewrite en scroll verder tot je de knop ziet om verder te gaan.
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
66
4.3.2. Opzetten van server 3: XAMPP op Windows 7
Figuur 49: We starten met een nieuwe Windows 7 installatie
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
67
Figuur 50: Ga naar de XAMPP website (http://www.apachefriends.org/en/xampp.html)
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
68
Figuur 51: Zoek de XAMPP download op
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
69
Figuur 52: Kies de Windows installer
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
70
Figuur 53: Start de XAMPP installer, en kies Install
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
71
Figuur 54: Er start een commandline window waar je enkele opties moet kiezen. Moeten er shortcuts op het bureaublad staan?
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
72
Figuur 55: Natuurlijk wil je voortgaan met de installatie :)
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
73
Figuur 56: We willen een gewone installatie, dus kiezen "no"
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
74
Figuur 57: Zo, XAMPP is klaar. Druk nog even enter...
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
75
Figuur 58: XAMPP vraagt of de tijdzone correct is. Spijtiggenoeg kunnen we dit nu niet wijzigen
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
76
Figuur 59: Dit is het standaardmenu na installatie. Hier kunnen we voor optie 1 kiezen om de gui te starten
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
77
Figuur 60: Het XAMPP control panel is gestart
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
78
Figuur 61: Klik op het checkboxje naast Svc Apache om Apache als service te installeren
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
79
Figuur 62: Installeer ook nog MySql als service en start deze ook gewoon.
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
80
Figuur 63: Ga naar je lokale XAMPP site (http://localhost/xampp)
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
81
Figuur 64: Ga naar het securitygedeelte. Voor de veiligheid gaan we een wachtwoord instellen
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
82
5. Verklarend Woordenboek 5.1. Compiled vs. Interpreted Sommige
talen
worden
gecompiled, sommigen worden geïnterpret.
Bij
compileren
wordt de code één keer (bij elke aanpassing van de code) omgezet in machinecode en wordt later de machinecode gebruikt om het programma uit te
voeren.
Bij
interpreten
wordt bij elke aanvraging elk nodig lijntje geïnterpreteerd en wordt het juiste lower-level commando uitgevoerd. Bij een gecompilede
taal
zal
het
runnen van het programma Figuur 65: Webcomic XKCD over Compilen sneller gaan, maar het initiële compilen kan, zeker bij grote projecten, lang duren, aangezien alle code wordt gebruikt.
5.2. Routing Het herleiden van een URL naar de juiste pagina (en evt. functie). Soms wordt een pagina gewoon direct aangesproken (bv. http://localhost/phpinfo.php) maar soms wordt gebruik gemaakt van zogenaamde clean URLs (bv. http://some-ecommerce-website.com/products/applepie/) waarna men gebruik moet maken van routing.
5.3. Convention over Configuration Convention
over
Configuration,
ook
wel
eens
Coding
By
Convention
genoemd,
is
een
developmentprincipe waarbij men eerder ervoor zal opteren om regels op te leggen dan om extra configuratie toe te voegen.
5.4. Slug Een slug is een computer-friendly/URL-friendly naam van iets, vaak een artikel. De term is zeer bekend geworden door de blogging software WordPress, die de term heeft geïntroduceerd bij het grote publiek. Een slug bevat kleine letters, koppeltekens (-) en underscores (_). Spaties worden soms door een Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
83
underscore, soms door “%20” of soms door “+” vervangen. Het is ook common practice om common words zoals “the” en “and” weg te laten.
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
84
Bibliografie 65.190.170.230 e.a., - , Compiler, internet, 16/10/2010,( http://en.wikipedia.org/w/index.php?title=Compiler&oldid=391108295). O0Rollo0o e.a., - , ASP.NET, internet, 18/10/2010, (http://nl.wikipedia.org/w/index.php?title=ASP.NET&oldid=21221451) 77.46.215.124 e.a., - , ASP.NET, internet, 27/10/2010, (http://en.wikipedia.org/w/index.php?title=ASP.NET&oldid=393205714)
Johnc e.a., - , ASP.NET why runat=”server”, internet, 20/11/2008, (http://stackoverflow.com/questions/304290/asp-net-why-runatserver) MrBlueSky e.a., - ,PHP, internet, 26/09/2010, (http://nl.wikipedia.org/w/index.php?title=PHP&oldid=22759364) 146.231.129.51 e.a., - ,PHP, internet, 27/10/2010, (http://en.wikipedia.org/w/index.php?title=PHP&oldid=393196568) MaBoehm e.a., - , JavaServer Pages, internet, 02/10/2010, (http://en.wikipedia.org/w/index.php?title=JavaServer_Pages&oldid=388299805) Wimpus e.a., - , JavaServer Pages, internet, 11/06/2010, (http://nl.wikipedia.org/w/index.php?title=JavaServer_Pages&oldid=17160895) Onbekend, - , JSP Tutorial, internet, 27/10/2010, (http://www.jsptut.com/)
Onbekend, - , General Information, internet, 22/10/2010, (http://be.php.net/manual/en/faq.general.php) Scott Hanselman, S. H., What is ASP.NET, internet, 09/03/2010, (http://www.asp.net/general/videos/what-is-asp-net) 128.156.10.80 e.a.,-,Convention over configuration, internet, 24/11/2010, (http://en.wikipedia.org/w/index.php?title=Convention_over_configuration&oldid=395964066) Subversive.sound e.a.,-,Slug (web publishing),internet,24/11/2010, (http://en.wikipedia.org/w/index.php?title=Slug_(web_publishing)&oldid=392166667)
Vrije Keuze: “PHP, JSP & ASP.NET: Een vergelijking tussen webdevelopment talen”
85