Netsensei

Much Ado About Nothing

Php

Bookmarks van november 17th tot november 23rd

Twitter API: babysteps

** techneutenwaarschuwing **

Gisteren ben ik wat met de Twitter API beginnen spelen. De whatnow? De Twitter API, dus. Samengevat: wanneer je zelf een programma schrijft, laat de API van toepassing x of service y toe om (beperkt) gebruik te maken van diens functionaliteit. Als je, bijvoorbeeld, met Twitter Stats werkt, dan zal die via de API van Twitter al je gebruikersgegevens opvragen, ontvangen en verwerken in mooie grafiekjes.

Op zich schrijft een API enkel voor welke regels je moet volgen om te kunnen communiceren. De programmeertaal, het platform of weet-ik-veel waar je zelf mee aan de slag bent, spelen een stuk minder een rol. Buiten dan dat ze je in staat moeten stellen om gebruik te kunnen maken van die functionaliteit.

Afin, dat was de theorie. De praktijk dan maar. Stel dat je de Twitter website beu bent of geen browser bij de hand, maar je wil wel twitteren, hoe doe je dat? Wel, men neme de API. Die zegt dat je een HTTP POST verzoekje moet sturen naar een bepaalde URL met je paswoord, username en het berichtje dat je wil versturen. je berichtje mag uiteraard niet langer dan 140 tekens zijn. Twitter zal je berichtje dan oppikken.

Eerste probleem: hoe stuur je een HTTP POST request zonder browser? Wel, dat kan je met cURL. Dit is een tooltje waarmee je direct met webservers en nog veel meer kan spreken. Deze versie (windows! Linux e.a. beschikbaar. Kies de no-ssl versie.) heb je nodig. In je commando prompt (dosbox, whatever) voer je het commando ‘curl’ uit. Je moet natuurlijk een aantal parameters zoals een URL en watnog meegeven om iets zinnigs te doen met cURL. In casu geef je volgende URL mee:

http://twitter.com/statuses/update.xml

Daarmee zijn we er nog niet. Je moet eerst inloggen bij Twitter vooraleer je een tweet kan sturen. Dat doe je door aan het curl commando volgende parameter mee te geven:

-u username:paswoord

Uiteraard vervangen door je eigen logingegevens. Tenslotte, moet je nog het berichtje mee geven als een HTTP POST request. Daarvoor dient de -d parameter van cURL. Daarbij moet je nog specificiëren dat het berichtje een status is. Dat doe je met ‘status=’ Het resultaat is dit:

-d status="Twittering from cURL"

Dat alles moeten we nu in één commando doorgeven aan Twitter. Dat doe je zo:

curl -u username:paswoord -d status="Twittering from cURL" http://twitter.com/statuses/update.xml

Als je als goed hebt ingevoerd, dan zou je een heleboel tekst in XML formaat teruggespuugd moeten krijgen. Die zal o.a. je profielgegevens bevatten en de nieuw aangepaste status met het tijdstip. Doe je het verkeerd krijg je ofwel geen output, ofwel een foutmelding in een XML berichtje.

Zo. Je hebt net voor het eerst rechtstreeks gebruik gemaakt van de Twitter API om los van de Twitter website toch te kunnen twitteren. Bravo! Als je PHP programmeur bent, dan zou je op een gelijkaardige manier met curl voor PHP aan de slag kunnen om van de Twitter API gebruik te maken.

OpenID versus rekenkracht

OpenID maakt gebruik van nogal wat cryptografische berekeningen om gedeelde sleutels te genereren. Die zijn nodig om de communicatie tussen consumer, provider en user te kunnen authenticeren.

Helaas is cryptografie een kleine aanslag op de rekenmogelijkheden van een pc. Vandaag ben ik tegen zo’n limiet aangelopen. Ik had een wordpress installatie op mijn lokale server geïnstalleerd met daarin een checkout van de plugin uit mijn subversion repository. Na wat inpaswerk (nog op een paar op te lossen probleempjes gestoten) kwam het testwerk: werkt mijn plugin ook op een maagdelijke wordpress installatie? Ik werd geconfronteerd met volgende melding:

Fatal error: Maximum execution time of 30 seconds exceeded in /storage/www/wordpress/wp-content/plugins/openid/Auth/OpenID/BigMath.php on line 250

Niet fraai. Mijn server is een oude pentium 2 met een standaard Debian ‘Etch’ stable. Wat opzoekwerk leert mij dat PHP 5 in Debian Etch standaard wordt gecompileerd met de nogal BC Math module. En die is blijkbaar ondergeschikt aan de veel snellere GMP module. Natuurlijk wil het lukken dat er in de stable apt pool geen php5-gmp module of zo zit die ik snel even kan installeren. Bugger! Dan maar even betrouwen op de module die dotdeb.org levert. Dat blijkt uiteindelijk de oplossing te zijn: nu werkt het wel naar behoren.

Bon. Ideaal om de komende tijd weer wat debugwerk te verrichten.

Verlof

Eén van mijn betere ideeën was om verlof te nemen deze week. Schoon weer, geen regen, niet te warm en niet te koud. Ideaal! Wilde plannen heb ik niet. Voorlopig heb ik mij eigenlijk voornamelijk bezig gehouden om openid te doorgronden.

Ik heb mij gelijk de JanRain PHP library gedownload om er wat mee te spelen. De uitleg in de API documentatie was zo duidelijk dat ik meteen een eenvoudige consumer kon maken en via mijn blog (een openid delegate in het jargon) mijn openid verifiëren. Meer zelfs, toen ik mijn implementatie even vergeleek met één van de voorbeelden van JanRain bleken die quasi krek hetzelfde te zijn! En zelf een server opzetten en laten draaien is ook niet zo heel erg moeilijk.

Alle technische mumbjumbo goed en wel, maar wat wil ik er nu mee aanvangen? Ik denk aan een aantal dingen. Maar laten we beginnen met openid support in WordPress. Het zou al mooi zijn moest ik een eenvoudige plugin kunnen schrijven die OpenID toevoegt aan comments. Het idee is om zo OpenID nog wat verder te leren kennen. Daarna zien we wel weer…

Smarty

Ik ben al enkele dagen aan de slag met Smarty, een template engine voor PHP, om mijn Beads projectje te herschrijven. Het handige is dat ik nu de presentatie volledig kan scheiden van de backend en de business logic. Meer zelfs Smarty dwingt mij zo’n beetje om alles objectgeoriënteerd te doen.

Waarom zou ik dat willen? Omdat properder code te genereren, om code te hergebruiken, om te kiezen voor een andere template engine moest ik dat willen,… Tot nu toe bestond mijn projectje uit een HTML pagina die afzonderlijke PHP functies aanriep. Het gevolg was een hoop spaghetticode die maar weinig flexibiliteit toeliet. Dat ligt nu totaal anders. Stel dat ik een andere template engine wil, dan kan ik dat perfect zonder het zaakje volledig te moeten herschrijven. Het mooie is dat ik ongelofelijk snel nu dingen kan gaan implementeren. Waar ik vroeger serieus heb moeten knoeien om een min-of-meer werkende login te schrijven, heb ik het nu geklaard met een paar regels.

Naarmate ik er verder in op ga in de eenvoud en de kracht van een dergelijke werkwijze, verbaast het mij meer en meer dat een systeem zoals WordPress hier geen gebruik van maakt. Het zou volgens mij een hoop complexiteit en problemen kunnen wegnemen. De codebase van WordPress een beetje kennende denk ik dat zo’n rewrite wishfull thinking is. Maar als er al een next-gen blogengine die WordPress kan aftroeven, zit eraan te komen, dan zal het er wel eentje moeten zijn die van een template engine zoals Smarty gebruik maakt!

In het nieuw

Zo. Ik heb mijn weblogje in een nieuw kleedje gestoken. Ik wilde er aan het begin van het nieuwe jaar eens werk van maken en dus heb ik de voorbije week af en aan wat zitten pleuren met HTML, CSS en PHP. Als je de blogosfeer een beetje kent, dan zal je wel zien dat ik de mosterd ook bij anderen heb gehaald voor een aantal zaken. Beter goed gekopieerd dan slecht uitgevonden en al. Ik hoop dat het resultaat bevalt.

Bij de site niet helemaal doorkomt: even je browser cache legen en refreshen met F5 zou moeten helpen. Als je problemen of opmerkingen hebt mag je mij gerust een mailtje sturen.

O ja, ik ben ook achter de schermen bezig om het zaakje beter te beschermen tegen spammers en hackers. Als er iets uitvalt: geen paniek dus.

Alvast een gelukkig nieuwjaar dus!

Update: ik merk dat de delicious plugin lastig doet. Ik heb al verschillende geprobeerd maar geen die echt goed lijkt te werken. Ik vermoed dat het ligt aan de magpie bibliotheek ligt. Tegenwoordig zit die ingebouwd in wordpress. De cache wordt niet bewaard in een apart bestandje maar in de databank. Daar moet ik eens naar kijken.

Base64

* Opgelet: techneutengeweuzel! *

Wat doet een mens die helemaal nog geen zin heeft om om 3 uur ’s nachts te gaan slapen? Die implementeert gewoon voor de gein RFC 3584 voor Base64 encoding in PHP onder het motto ‘het moet niet altijd sexy-spannende-web-twee-punt-nul software zijn.

Demo
Source code

Maar waarom? In PHP zitten er toch al die handige base64_encode en base64_decode functies? Wel, ’t is eens een mooie progammeeroefening.

Gehacked (4)

Die ochtend in mijn postbus:

Geachte heer,
De hacker heeft gebruik gemaakt van een algemeen veiligheidslek in PHP daar meerdere websites getroffen werden. De PHP-versie op de server is daarop geupgrade naar de laatste nieuwe versie 4.4.4. Ook werden er nieuwe regels toegevoegd in ModSecurity (apache-plugin) om de meest bekende veiligheidslekken zoals XSS, Sql-injection en andere te blokkeren.
De schade die de hacker aanbracht bleef beperkt tot:

  • het plaatsen van een index.html bestand in de public_html map
  • Aanpassen/Overschrijven entries in de tabel categories van de database

Deze aanpassingen hadden tot gevolg dat een redirect werd gedaan naar de website. De gevolgen zijn dus relatief beperkt gebleven.
De FTP-logbestanden van netsensei.nl gaven geen verdachte loginpogingen weer. Preventief zijn beide ips geblockt.
Om problemen in de toekomst te vermijden raad ik u aan om regelmatig uw software te upgraden naar de laatste nieuwe versie.

Jeuj. Beter laat dan nooit. En ’t was dus duidelijk géén probleem met wordpress of zijn plugins. Enfin, voor ik hou het nog even zo omdat ik nog redelijk wat onderhoudswerk voor de boeg heb.

Beads

Het kan verkeren, zei Bredero. Blijkbaar heb ik een [tag]project[/tag] gevonden waar ik iets van wil maken: een schijnbare rip-off van del.icio.us. Het is een PHP script waarmee je zelf aan [tag]bookmarking[/tag] kan gaan doen en je bookmarks kan publiceren. Het was een idee van oud-collega D. Het probleem was namelijk het bijhouden en uitwisselen van ons bibliografisch apparaat op het werk in een centrale locatie. Ik flanste op een dag en een nacht een [tag]PHP[/tag] script ineen waarmee dat mogelijk werd. Anderen vonden het idee goed genoeg om het ook te willen gebruiken. Gaandeweg ging de bal aan het rollen en tot mijn verrassing gaat het al wat verder dan het oorspronkelijke idee. Los van het klassieke taggen van bookmarks en het bookmarken met een del.icio.us stijl knopje zitten er een aantal specifieke features in:

  • Commentaar toevoegen per link (discussiemogelijkheid)
  • Het al dan niet toekennen van een ‘public’ of ‘private’ status aan links en comments. Enkel ingelogde gebruikers krijgen ‘private’ boodschappen te zien.

Ik zou er graag nog wat verder mee in de groupware richting mee gaan. De codebase is op dit momenteel een hoop bijeen gehackte functies. Niet ideaal maar het doet wel wat het moet doen. Er zit nog een pak sleutelwerk aan maar het begint wel vorm te krijgen. Suggesties en ideeën zijn welkom.

beads

O ja, ik heb overigens ervaren dat ik nood had aan een bibliotheek van ‘must have’ functies: communicatie met een MySQL server/databank, error handling, sanitisatie van input (XSS en SQL injections vermijden), etc. Er kruipt best wel wat tijd in om die aan te leggen. Aangezien ik heb gemerkt dat ik nog volop lerende ben, zijn die in volle wasdom. Het gevolg is dat het grondig uitwerken van functionaliteit en features niet altijd even prioritair is. Daar hoop ik wel verandering in te brengen naarmate mijn codebase verder uitbreidt en flexibeler wordt. Benieuwd waar dit naartoe leidt…

‘Ollander

Blijkbaar stel ik nogal wat mensen teleur dat ik géén Hollander ben. Hah! Mijn dot nl tld zet mensen nogal op het verkeerde been. No sweat, tijd om het nog maar eens uit de doeken te doen.

In de jaren stillekens was ik lid van het systeembeheerdersteam bij deze mensen. Ik had daar toen wat webruimte waar ik mijn eerste stappen in PHP en het bloggen zette. Toen ik daar wegging in 2003, moest ik uitkijken naar een nieuw toevluchtsoord. Op dat moment volgde ik de Nederlandse weblogscene. Van een vergelijkbare Vlaamse blogosfeer was toen nog niet écht sprake. Via een actie van Flabber en Flaxe webhosting kon ik goedkoop webruimte met alles erop en eraan op de kop tikken. Maar dan wel met de dot nl extensie. Met de jaren ging ook hier alles in een stroomversnelling en ben ik mijn interesse voor de Nederlandse webloggers wat verloren voor wat hier gebeurt. Alleen de dot nl naam is nog een restantje uit dat verleden.

Overigens heb ik ook een dot be naam geregistreerd staan. Alleen promoot ik die niet zo omdat iedereen mijn dot nl naam al zo goed kent.

« Vorige blogposts Pagina 1 van 2 pagina's Volgende blogposts »