UTVIKLING

– Kjører bedriten kode ekstremt bra

Digi.no har møtt Rasmus Lerdorf, skaperen av programmeringspråket PHP.

13. sep. 2013 - 14:08

TRONDHEIM (digi.no): PHP er ett av verdens mest brukte programmeringsspråk, ikke minst i forbindelse med webløsninger. Som vi kommer tilbake til, er det både elsket og hatet. Språket ble skapt av Rasmus Lerdorf, som er født på Grønland i 1968 av danske foreldre. Familien flyttet til Canada tolv år senere.

Digi.no møtte Lerdorf denne uken i forbindelse en lukket teknologikonferanse i Trondheim som ble arrangert av Zedge. Digi.no ble fløyet opp på arrangørens regning.

Historien om PHP startet i 1993, da Lerdorf oppdaget weben og nettleseren Mosaic.

– Jeg tenkte at dette var noe selv moren min kunne bruke til å lese aviser og slikt, i motsetning til Gopher og andre sære systemer på den tiden. Moren min nektet selvfølgelig for dette, men i dag bruker hun weben, fortalte Lerdorf, men understreker at det ikke var noe unikt ved disse tankene.

Kort tid etter jobbet Lerdorf som konsulent for aktører som ønsket seg websider. Det dynamiske innholdet ble skapt ved hjelp av C- og PERL-programmer via CGI (Common Gateway Interface).

Hack

Problemet var at så mye hele tiden måtte gjøres på nytt. For å kunne jobbe raskere, lagde Lerdorf i 1994 et malsystemet som et hack til webserveren NCSA HTTPd.

– Dette var den første versjonen av det som senere ble PHP, fortalte Lerdorf. Han laget det for å løse sine egne problemer, men forteller at andre fikk se resultatene og ville også ha dette. Ett eksempel han nevner var en enkel besøksteller på websidene.

– De ville ha det som var laget i PHP, ikke selve PHP, fortalte Lerdorf.

– Det sentrale er å løse problemet raskt, på en direkte og pragmatisk måte.

I 1995 ble PHP offentlig tilgjengelig og gjort til åpen kildekode.

– Åpen kildekode gjorde PHP mye bedre enn jeg noen sinne ville kunne ha gjort selv. Andre skrev koden for meg, og det skadet ikke meg på noen måte at også andre brukte PHP, fortalte Lerdorf.

Han er fortsatt involvert i diskusjonen omkring utviklingen av PHP, men omtaler seg selv som bare én av mange utviklere. Likevel er han på listen over åpen kildekode-personligheter med tittelen «Benevolent Dictator for Life».

– Jeg er ikke spesiell, jeg var bare den første som kom til festen, noe som ikke er så morsomt. Festen blir mye bedre etter hvert som det kommer flere, sa han. Til daglig jobber han for e-markedsplassen Etsy.

Språklig renhet

På spørsmål om hvem som bruker PHP, svarer Lerdorf først at undersøkelser viser at omtrent 70 prosent av de 1 million største nettstedene bruker PHP.

– De som ikke bruker PHP, er de som er opptatt av språklig renhet, sa Lerdorf og innrømmet at PHP blant annet tar snarveier og kan være stygt på mange måter.

– Mange selskaper er opptatt av å løse problemer, og det er dét PHP er til for.

Artikkelen fortsetter etter annonsen
annonse
Innovasjon Norge
På trappene til internasjonal suksess
På trappene til internasjonal suksess

Lerdorf mener at det at mye kan løses raskt med PHP gjør språket populært blant oppstartsbedrifter.

– Det er viktig å kunne feile raskt. Du kan ikke i Silicon Valley bruke år på å finne ut om noe virker eller ikke, sa Lerdorf.

– PHP har gjort det mulig for mange å virkeliggjøre ideen sin. Selv ikke-programmerere kan ta i bruk PHP og få det til å virke, mener han.

– PHP kjører bedriten kode ekstremt godt. Men det kjører god kode enda bedre, hevdet han.

Men PHP brukes ikke bare av små og enkle nettsteder som driftes og utvikles i helgene, men også av blant annet Facebook og Wikipedia.

På spørsmål om hvorfor disse nettstedene bruker PHP, svarte Lerdorf at også disse har vært små en gang. Men det er også en annen årsak:

– PHP skalerer «uendelig» siden hver kommando er diskret. Det er ingen diskusjon om dette. Det er alltid mulig å legge til flere servere, sa Lerdorf, selv om han innrømmer at blant annet Facebook har gjort mange triks underveis for å få det til.

Lerdorf sa at han er overrasket over at PHP fortsatt er så mye brukt. Opprinnelig trodde han at språket ville bli forbigått etter noe få år.

– Vi har nok treffet en «sweet spot». Det er vanskelig å appellere til alle. Det skal ikke være for komplisert for nybegynnerne, men heller ikke virke for overforenklet for de mer avanserte brukerne. Ruby in Rails er et forsøk, men det er ikke pragmatisk nok, sa Lerdorf.

Samtidig sier Lerdorf at man med PHP ikke har forsøkt å skjule weben så mye.

– Du må vite hva en HTTP-spørring er og hvordan denne håndteres. PHP overlater heller ikke problemene til andre komponenter, sa han.

Inkonsekvent

PHP har fått mye kritikk for at språket er lite konsekvent på mange måter, blant annet når det gjelder navn på metoder og rekkefølgen på argumentene disse tar.

– PHP er egentlig bare et veldig tynt lag som ligger oppå biblioteker hentet fra Unix-systemer. Derfor heter for eksempel kommandoen for å slette filer «unlink» i både Unix og PHP, fortalte han. I andre tilfeller er argumentene hentet fra underliggende programmeringsgrensesnitt, for eksempel til databasesystemer, .

– Det er ikke et abstraksjonslag, bare en «wrapper».

Rammeverk

Det finnes en rekke rammeverk til PHP, men Lerdorf ville ikke direkte anbefale noen av dem.

– Alle trenger et rammeverk, men alle rammeverkene suger. De er litt trege og lite effektive, ofte veldig generelle, men ingen har generelle problemer, sa Lerdorf.

Han anbefaler at man fjerner komponenter man ikke trenger fra rammeverket man tar i bruk for å bedre effektiviteten, samt velger det rammeverket som man må gjøre færrest endringer i.

– Du må finne noen som er rettet mot problemet. Wordpress og Drupal er egentlig modne rammeverk, sa Lerdorf.

Foredraget

Foredraget Lerdorf holdt under Zedge Tech Talks lovet i utgangspunktet litt innsikt i hva som er nytt i PHP 5.4 og 5.5. Lerdorf snakket også en del om noen av de punktene som er nevnt over. Men målet med foredraget var å få flere til å oppgradere til i alle fall PHP 5.4, som kom allerede i mars i fjor. Fortsatt benytter de fleste PHP 5.3, uvisst av hvilken grunn.

– Bare det å oppgradere fra PHP 5.3 til 5.4 vil øke ytelse med 10 til 15 prosent. Det burde være grunn nok for de fleste, og det er lite som slutter å fungere på grunn av denne oppgraderingen, fortalte han. Blant disse er likevel det faktum at UTF-8 har blitt standard kodesett.

Andre nyheter i PHP 5.4 er en innebygd webserver, som ifølge Lerdorf kun er ment for testing. Dessuten nevnte han korte arrayer og «traits». Det sistnevnte gir utvikleren mulighet til å gjenbruke samlinger med metoder helt fritt i flere uavhengige klasser som kan eksistere i ulike klassehierarkier. Dette kalles også for horisontal gjenbruk. Lerdorf kalte det også for kompilator-assistert kopier-og-lim.

I PHP 5.5, som ble lansert i juni i år, er en innebygd opcode-cache den viktigste nyheten. Det finnes mange implementeringer av slike cacher til PHP, men Lerdorf fortalte til digi.no at de fleste, også hans egen Alternative PHP Cache (APC), har blitt hengende etter PHP når det gjelder funksjonalitet.

Opcachen som er integrert i PHP er det tidligere frittstående produktet Zend Opcache.

Ifølge Lerdorf er Opcacher raskere enn APC, men samtidig bruker den mer minne.

Til forsamlingen på rundt 60 inviterte deltakere, sa Lerdorf at det er på tide å teste PHP 5.5 nå og å ta den i bruk før jula setter inn.

På spørsmål fra digi.no om hva PHP fortsatt mangler, sa Lerdorf at det stort sett dreier seg om småting, blant annet i SOAP-implementeringen.

Kommer ikke

Blant funksjonalitet som ofte blir etterspurt, er flertrådkjøring.

– Men det kommer ikke til å skje på grunn av fokuset på web. Det er ønskelig at webserveren blir raskt ferdig med en oppgave. PHP er feil verktøy for slike oppgaver, som heller ikke bør kjøres på webservere, sa Lerdorf. Hvis man likevel må, anbefaler han at man i stedet bruker Ajax eller Gearman.

Etter foredraget – presentasjon er tilgjengelig her (bla med piltastene) – ble Lerdorf spurt om man bør bruke PHP som språk for maler (templates).

– Det kommer an på om man stoler på dem som lager malene eller ikke, svarte Lerdorf. Han begrunnet dette med at selv gode malrammeverk som Smarty fører til svært redusert ytelse.

PHP og debugging

Lerdorf var ikke den eneste PHP-kjendisen som holdt foredrag. Det gjorde også Sebastian Bergmann, skaperen av PHPUnit, et regresjonstest-rammeverk for enhetstesting.

Bergmann gikk først gjennom historien til PHPUnit. Den startet med at Bergmann, mens han var student, jobbet med Java og JUnit – noe han mislikte. Han bestemte seg for å portere JUnit til PHP, noe han omtaler som «pain driven development». Den første utgaven ble offentliggjort som en PEAR-pakke i november 2001. Etter dette stod utviklingen av verktøyet lenge stille fordi Bergmann var fornøyd med det til egen bruk.

Sebastian Bergmann fortalte om historien til PHPUnit og andre testverktøy for PHP. Han kom også med en del råd om hvordan man relativt enkelt kan komme i gang med slik testing. <i>Bilde: Harald Brombach</i>
Sebastian Bergmann fortalte om historien til PHPUnit og andre testverktøy for PHP. Han kom også med en del råd om hvordan man relativt enkelt kan komme i gang med slik testing. Bilde: Harald Brombach

Mellom 2003 kom en rekke andre verktøy for testing og analyse av PHP-kode. En oversikt finnes på side ni i presentasjonen til Bergmann, som er tilgjengelig her.

Etter denne gjennomgangen, oppsummerte Bergmann hva man har lært etter å ha brukt alle disse verktøyene.

– Det finnes problemer som et verktøy ikke kan løse. Og det er mange som ikke har penger til virkelig enhetstesting, sa han.

På spørsmål fra salen om det finnes tilfeller hvor enhetstesting ikke er noen god idé, svarer Bergmann dette kan være tilfeller hvor du er veldig sikker på at koden du jobber med bare vil bli brukt i en kort periode, opptil noen måneder, og at det er lite sannsynlig at den vil bli endret før den tas ut av bruk.

Bergmann beskrev også tre hovedproblemer for nybegynnere når det gjelder bruken av PHPUnit.

Det første problemet var rett og slett installasjonen. Dette har vært vanskelig å få til, men dette skal ha blitt løst med verktøy som Composer og Phar. Hvordan dette kan gjøres, vises i illustrasjonen nedenfor.

Installasjon av PHPUnit ved hjelp av Phar på en Linux- eller Unix-lignende maskin. <i>Bilde: Sebastian Bergmann</i>
Installasjon av PHPUnit ved hjelp av Phar på en Linux- eller Unix-lignende maskin. Bilde: Sebastian Bergmann

Det andre problemet Bergmann nevnte var at mange blir overveldet at all funksjonaliteten PHPUnit tilbyr.

– Det er mye som de fleste av oss ikke behøver å bry seg om. Det holder å lære noen få funksjoner for å komme i gang, rådet Bergmann.

Det tredje problemet er at det finnes mye kode som er vanskelig å teste.

– Nybegynnere bør starte med kode som er enkel å teste. Det er mye kode det er vanskelig å skrive tester for. Han siterte Mi¨ko Hevery, som blant annet står bak verktøy som Angular og JsTestDriver:

The secret in testing is in writing testable code

Andre råd Bergmann kom med var å unngå statiske metoder og å skrive små kodeenheter.

– En metode trenger sjelden mer enn 30 til 40 linjer med kode, sa Bergmann.

Asynkron PHP

Stig Bakken var den tredje foredragsholderen under Zedge Tech Talks. Bakken har siden 2009 vært teknisk sjef i nettopp Zedge. Tidligere har han vært ansatt i selskaper som Fast, Yahoo og Google i Norge. I Yahoo var han leder for bildesøkgruppen.

Stig Bakken er teknisk sjef i Zedge. Han ble engasjert i PHP-prosjektet i 1996 og skrev blant annet Oracle-støtten som ble inkludert i PHP 2.0. Det var også Bakken som etablerte PEAR. <i>Bilde: Harald Brombach</i>
Stig Bakken er teknisk sjef i Zedge. Han ble engasjert i PHP-prosjektet i 1996 og skrev blant annet Oracle-støtten som ble inkludert i PHP 2.0. Det var også Bakken som etablerte PEAR. Bilde: Harald Brombach

Han er kanskje mest kjent for å ha etablert kodesamlingen PEAR (PHP Extension and Application Repository) i 1999. Han bidro med mye kode fram til 2002-2003.

– Jeg skrev mye kode under en pappaperm, men brant meg da litt ut, fortalte Bakken til digi.no. I ettertid har han mest vært observatør til PEAR, men oppgis fortsatt som vedlikeholder av en rekke pakker.

Bakkens foredrag handlet om asynkron PHP. Som nevnt kjøres PHP med én prosess og én tråd på serveren. Men Bakken presenterte målinger som viser at man kan oppnå betydelig redusert responstid og lastetid for websider dersom HTTP-kall kan kjøres parallelt på serveren.

Bakkens foredrag var svært teknisk, så vi skal ikke engang forsøke å gjengi det her. Bakken presenterte flere mulig tilnærminger man kan lage selv for å gi PHP en slag asynkronitet. Zedge har selv valgt en metode som kalles for «promises», som er inspirert av Promise-grensesnittet i CommonJS-spesifikasjonen.

Her finner du Bakkens presentasjon.

    Les også:

Les mer om:
Del
Kommentarer:
Du kan kommentere under fullt navn eller med kallenavn. Bruk BankID for automatisk oppretting av brukerkonto.
Tekjobb
Se flere jobber
En tjeneste fra