PHP-Benelux 2013 (Antwerpen)

Door Sam de Poorter, back-end developer
6 februari 2013 - 2065 x bekeken - Categorieën: Tech

Niet geheel traditiegetrouw zijn we een uur voor de aftrap al aanwezig, ruimte die we hebben gebruikt om onderling af te stemmen dat minstens één collega bij elke interessante sessie aanwezig is. Elke ronde bestaat namelijk uit drie sessies die synchroon naast elkaar worden gegeven. Aangezien we met vijf man sterk zijn,  biedt dat gelukkig gelegenheid om sessies te bezoeken die juist voor een ontwikkelaar persoonlijk interessant zijn. In deze post worden alleen de sessies behandeld die ik persoonlijk heb bijgewoond.

Keynote

Het evenement wordt afgetrapt door Chris Hartjes (Grumpy Programmer). Het is een keynote, dus licht van stof en het gekozen thema wordt verder uit de doeken gedaan. Centraal staat ditmaal degelijke en testbare code waar iedereen vrolijk van wordt, ook je collega’s. Chris gebruikt deze gelegenheid om de intentie van het spelen van zijn rol als ‘grumpy programmer’ verder bloot te leggen. Hier komt uit dat een team draait om balans, soms is enig pessimisme noodzaak om beide voeten op de grond te houden. Het ‘klagen’ als grumpy programmer over andermans werk, is bedoelt om centrale programmeerproblemen onder de aandacht te brengen.  De talk zet een luchtige sfeer uit en zorgt op een humoristische manier dat problemen bespreekbaar worden, een rol die Chris vaker op zich neemt.

Regex Clinic

De eerste daadwerkelijke talk wordt verzorgt door Andrei Zmievski. Regex is noodzaak binnen het webdomein, maar veel ontwikkelaars schuwen nog steeds dit onderwerp. Jammer want het is een behoorlijk krachtige tool als je dit goed onder de knie hebt! Opbouwend vanaf de basis worden de aangeduide mogelijkheden specifieker en complexer. Persoonlijk was ik zeer te spreken over deze sessie, vooral over de nadruk op performance en het ‘clean’ opzetten van een regex. Dit is namelijk een onderdeel van regex dat je moeilijk of niet terugvindt op andere media.

Slides Regex Clinic

There is a PHP-Library for that!

Persoonlijk was dit één van de sessies waar ik naar uitkeek, dus ik ben nieuwsgierig aangesloten bij Hugo Hamon. Zoals de naam weggeeft is het onderwerp PHP-libraries (dus niet frameworks). De eerste sheet bevatte geen tekst, alleen een plaatje van een wiel. En gezien het onderwerp werd de insteek direct helder; ‘don't reinvent the wheel’. Hugo is duidelijk thuis in de materie en behandelt de volgende libraries: 

  • Monolog: Op een generieke manier loggen, zowel file, database als mail-based, of een combiniatie van deze.
  • Imagine: Het bewerken en verwerken van images via een simpele en uniforme wijze, ondersteunt de grote spelers zoals imagemagick en GD. 
  • Guzzle: In het kort bedoelt voor http-requests, zonder de rondslomp van het creëren van een eigen webservice of zorgen maken om de juiste headers.
  • Geocoder: Het ophalen van geografische gegevens aan de hand van een adres, of andersom. Deze library ondersteunt tevens meer dan 20 verschillende providers en biedt dus vrijheid.
  • Faker: Vorm van een data-provider, kan ingezet worden om tal van random zaken te generen als namen, ip-addressen, hashes, teksten, telefoonummers ISBN-nummers en meer. 
  • Doctrine Annotations parsers: PHP-annotations, metadata opslaan binnen je klassen wat wordt ingezet tijdens runtime. Als dit je niks zegt heb je er waarschijnlijk nog geen behoefte aan.
  • Doctrine ORM: Object Relational Mapping, wordt ingezet als abstractielaag tussen objecten en een database.
  • Assetic: Samensmelting van Assets en Filters, het merged benodigde bestanden (bijvoorbeeld Javascript en CSS) samen zodat er minder http-requests nodig zijn.

Buiten deze waslijst zijn ook de volgende libraries nog behandelt: Swiftmailer, Pimple, Twigg, PHP Cs Fixer, Plum Deployment en Goutte.

Ik ben nog steeds erg enthousiast over deze sessie, veel van de genoemde libraries zijn geweldig en toonaangevend, deze sessie somde ze mooi op en liet mij zien hoe makkelijk inpasbaar ze eigenlijk zijn. Enkele van deze kunnen wellicht nog een mooie aanvulling vormen voor E-sites. Zelf zie ik interessante mogelijkheden in het toepassen van Monolog om het loggen uniform te houden. Of om Faker in te zetten bij unit-testen, voor een test met realistische en dynamische input.

Slides There is a library for that

7 Tools for your devops stack

Ik moet eerlijk bekennen dat deze sessie gegeven door Kris Buytaert, minder voor mij was weggelegd. De naam lijkt een samensmelting tussen developers en operators, dus daar was ik ook vanuit gegaan aangezien de sessieomschrijving niks concreet prijsgaf. Maar de sessie bleek vooral voor operatiors, hoe deze een dashboard kunnen inrichten en zaken scherper kunnen monitoren. In een rap tempo vliegen onderwerpen als Logstash, Kibana, Graphite en Jenkins voorbij. Buiten dat het mijn onderwerp niet is vond ik de nadruk op de organisatie(devops), zijn geschiedenis en beweging verkeerd. Ik zie liever dat er wordt ingegaan op de techniek bij de besproken onderwerpen.

Slides 7 tools for your devops stack

Usability for Developers

Voor de variatie een vrouwelijke speaker, Beth Tucker Long  (bekend van PHP Architect). Een luchtige sessie (ideaal om op dag 2 de conferentiedag mee te starten)  met de focus op design en front-end. Het enige relevante issue voor back-end was het terugplaatsen van post-waarden na validatie. Het is prima om jezelf eens te verdiepen in andere raakvlakken van je code, maar dit was een erg laagdrempelige sessie. De aangehaalde punten bestonden uit het correct positioneren van elementen (waar gebruikers ze verwachten), (kleur)consistentie en richtlijnen voor het opstellen van usabilitytesten. De aangehaalde punten en voorbeelden waren prima maar ik had liever meer diepgang gezien binnen het onderwerp, zelfs als back-end ontwikkelaar.

Make Your Project SOLID!

Na een nette eigen introductie van Tobias Schlitt is het tijd om de vijf bijhorende principes van ‘SOLID’ door te nemen:

  • Single responsibility princicple: Één verantwoordelijkheid per klas, dus seperation of concerns.
  • Open closed principle: Klassen moeten open zijn voor uitbreidingen, maar dicht voor wijzingen.
  • Liskov substitution principle: Al iets listiger, Objecten die van elkaar overerven moeten door elkaar vervangbaar zijn, qua aanroep en vorm van afhandeling. 
  • Dependency inversion principle: Het abstracteren van verwijzingen (verbergen van implementatiedetails), met de zijnotitie dat je over-engineering moet voorkomen.
  • Interface segregation principle: Het voorkomen van onnodige afhankelijkheden, onnodige functionaliteit en een onduidelijke opgezette interface.

Voor de scherpe lezer valt het wellicht al op, de principes staan op volgorde als ’SOLDI’. Tobias gaf een PHP-elephant weg aan de eerste persoon die de fout kon ontdekken tijdens deze presentatie. Sterke manier om de aandacht te vestigen op de presentatie zelf. Het is belangrijk om deze principes aan te houden, degelijke oplossingen (zoals veel design-patterns) houden deze ook volledig aan.

Slides Make Your Project SOLID!

Process any amounts of data. Any time

Deze talk(door Juozas Kaziukenas) is erop gebrand om grote hoeveelheden data te verwerken. De boodschap is om je applicatie schaalbaar in te richten, zodat de hoeveelheid data minimaal invloed heeft op het mogelijk geheugengebruik. Om dit te onderbouwen worden voorbeelden aangehaald als het inlezen van bestanden en databasegegevens, http-requests ontvangen en de bijhorende verwerkingen. De grondslag ligt hier bij één centraal punt, data direct verwerken en geen stacks opbouwen. Dit zorgt dat het geheugen continu geflushed wordt en dat beschikbare data direct wordt verwerkt, dus niet batchgewijs. Om dit enigszins te versnellen, wordt ook het toepassen van meerdere ‘pipes’ toegelicht met behulp van gearman, wat hopelijk in de toekomst mogelijk wordt met native PHP ( verwachting is van PHP 5.5. en verder).

Slides Process any amounts of data. Any time

Practical Design Patterns in PHP

Nogmaals een sessie van Hugo Hamon die ik bijwoon, dankzij de vorige sessie met hoge verwachtingen. Na de algemene uitleg wat er wordt verstaan onder een design-pattern, wordt het spits afgebeten met de volgende design-patterns:

  • Facade-pattern
  • Adapter-pattern
  • Template Method-pattern
  • Strategy-pattern
  • Decorator-pattern
  • Composite-pattern
  • Factory method-pattern
  • Observer-pattern

     

Voor een onderwerp als design-patterns vormt dit een stevig aantal om in een sessie van een uur te doorlopen. Ik maak al redelijk wat gebruik van een groep van deze patterns maar sommige zijn ook mij onbekend. Ik vermoed dat men nieuw in de materie niet geheel alles plaats kon geven, maar dat lijkt me ook niet de juiste insteek. Ik vind het belangrijk dat het bestaansrecht is aangegeven met bijhorende toepassingen en daarin is deze sessie ook prima geslaagd. Design-patterns kunnen het best worden uitgelegd aan de hand van voorbeelden met code, daarvoor verwijs ik graag door naar de sheets van Hugo die hierin goed geslaagd is.

Slides Practical Design Patterns in PHP

Application Logic Security

Deze spreker had wat mij betreft meer tijd mogen opeisen voor zijn sessie. Enerzijds omdat zijn materie relevant en behoorlijk interessant is, anderzijds omdat de sessie een erg gejaagde indruk maakte. De nadruk lag als verwacht geheel op security, maar met een andere invalshoek dan we gewend zijn. Deze sessie besteedt aandacht aan elementen buiten het veelal besproken Cross-site-scripting, Cross-site Request Forgery en(SQL) Code injection. Aangehaalde onderwerpen zijn:

    • Authenticatie en sessie management;
    • Richtlijnen voor een veilig wachtwoord, rainbow tables en PHP 5.5 verify password functionaliteit.
    • Onveilige encrypte-methoden;
    • MD5 (met GPU-cluster haalt men soms 180 miljard hashes per seconde), SHA1.
    • Tegengaan van brute-force-attacks;
    • Captcha’s, blocken naar aantal pogingen en natuurlijk timeouts.
    • Data-acces-management (mede andere ontwikkelaars beschermen);
    • Het correct inzetten van een centrale Acces Control Layer (ACL).
    • Loggen van gebruikeracties, voor patroonherkenning voor je applicatie;
    • Hoe moet er gelogged worden en hoe moet je deze logs gebruiken om patronen te herkennen?
    • Validatie van input;
    • Nuttig toepassen van PHP native filters, met belangrijke aandachtspunten.
    • Random-generatie van formuliervelden ter bescherming voor bots;
    • Gebruiken van sessie-management en hash_hmac om dit te realiseren. 
    • Nuttig en efficiënt toepassen van HTTPS (do’s and dont’s);
    • Behandeling van cURL instellingen in verband met SSL.
    • PHP Error handling; 
    • Natuurlijk nooit errors weergeven op je productieomgeving: men zet hiervoor kwaadwillig google in, aangezien deze errors met gevoelige informatie indexeert.  En loggen naar harde schijf en syslog is het veiligst, aangezien dit eigenlijk altijd kan, in tegenstelling tot het wegschrijven in een database na een fout.

Persoonlijk heb ik aardig wat opgestoken tijdens deze talk. Zo legt hij duidelijk de pro’s en contra’s uit van elk onderwerp. Laagdrempelig wordt aangegeven hoe men kwaadwillig Google kan inzetten om potentiële sites voor een ’hack’ te scannen. Maar daarnaast gaat hij ook in op algoritme-complexiteit zodat een wachtwoord(hash) veel moeilijker te kraken is dan met een MD5- of SHA1-hash. Uiteindelijk zijn niet alleen best-practises toegelicht, maar ook duidelijke nadelen benoemd van momenteel  populaire methoden. Hiermee wordt je eigen inzicht en ontwikkeling vergroot. 

Slides Application Logic Security

Conclusie

Het is interessant om te zien wat voor ontwikkelingen er komen en wat de huidige best-practises hierbij zijn. Dit geeft je als organisatie inzicht in zaken waar je goed mee bezig bent. En op welke punten je jezelf nog verder kan professionaliseren. Ongetwijfeld is de informatie die wordt samengevat in de sessies op internet te vinden, maar niet in de kraakheldere vorm als tijdens deze conferentie. Mooi voor de organisatie, mooi voor het netwerken en zeker mooi voor mij als ontwikkelaar. Volgend jaar ben ik er vermoedelijk weer te vinden!

E-sites actief op GitHub

Door E-sites

Wij developers bij E-sites zijn al een behoorlijke tijd fan van de community, maar vanaf nu zijn we ook als organisatie actief op GitHub… - Lees meer

Lees verder