nerd moment: forensische softwareontwikkeling

Even een momentje nerd gedachten. Ik ben software-ontwikkelaar, dus het mag ;-). In die hoedanigheid krijg ik vaak het verzoek een website opnieuw te maken. Het proces wat leid tot een compleet herbouwde website noem ik vanaf nu forensische softwareontwikkeling.

Ik zal het proberen uit te leggen. Vaak zijn opdrachtgevers van het opbouwen van een website (wat voornamelijk een software aangelegenheid is) geen technisch aangelegde mensen. Als vastgelegd moet worden wat er gemaakt moet worden, moet ik uitgaan van het ‘zicht’ wat die persoon heeft op het systeem. Daarmee doe ik gelijk een aanslag op mijn psychologisch inzicht, mensen kennis. In essentie moet ik door de ogen van één persoon die slechts een deel of aspect van een site ziet (verwijzing naar het verhaal van de drie blinden en de olifant) bepalen hoe het geheel zou moeten werken. Een erg tijdrovend en onnauwkeurig proces.

Liever heb ik dan toch de tegenhanger waarmee ik deze blog begon: forensische softwareontwikkeling, ofwel gebaseerd op de software (‘bewijzen’ en ‘feiten’) die ik aantref probeer ik een beeld te bouwen van wat er nu is. Het is een beetje als bij CSI, dan zegt Grissom: “Trust to the evidence”, vertrouw op de bewijzen. Impliciet moet je dus meningen en ‘getuigenissen’ wantrouwen. Dit is iets wat verbazend dicht bij het softwareontwikkelproces komt.

helaas nog zoeken

Ik had het eerder over een ‘you know what I mean’-factor bij het vinden van dingen op het Internet. Nu zijn er wat mensen die al een tijd bezig zijn dat te bereiken met een semantisch web, een redactionele hel.

Hulk

Wat is de aanleiding als je iets wilt vinden op het Internet? Juist, het ‘hoe zat het ook alweer’-gevoel, gevolgd door het ‘waar stond het ook alweer’-moment. Je zoekt practisch altijd in het verleden. Vaak vind je bij het zoeken niet omdat je niet exact kan aangeven in welke context je zoekt. Voorbeeld: je zoekt een foto van die acteur die de groene superschurk (of was het nou een held?) speelde in de originele televisie serie rond 1980, maar niet de meervoudige mr. Universe. Je gaat dus zoeken op “green villan 1980s”, ofzo. Nu zal je alleen iets vinden als deze woorden toevallig bijelkaar staan in een artikel, wat gaat over Lou Ferrigno, of over de film die een paar jaar totaal flopte, dat samen met heel erg veel links naar websites die wellicht ook terzake doen. Dat komt omdat “1980s” niet geinterpreteerd wordt als ‘ergens rond 1980’, dus 1978, 1979, etc en green en villan is misschien niet de letterlijke bewoording van een redacteur. Dat werkt dus niet.

Je wilt dus eigenlijk dat al die steekwoorden gekoppeld worden aan het artikel wat je wilt lezen. Op die manier is de kans immers het grootst dat iets gevonden word. Dat is het populaire taggen. Het werkt, maar niet helemaal. Dan is er nog een semantisch web, wat een redactioneel concept is, het absoluut beschrijven van een artikel, plaatje, geluidje, video (auteur, eigenaar, datum, oorsprong, afmetingen, onderwerp, locatie, links naar relevante andere objecten, noem maar op (zogenaamde metadata)). De manier en de inhoud van dat redigeren en annoteren is vastgelegd in strikte regels, waardoor de zekerheid van het vinden hoger is dan als je zomaar wat woorden eraan zou hangen zoals dat bij ‘tagging’ (taxonomie) gebeurd.

Je kan je voorstellen dat er niemand is die het Internet met terugwerkende kracht gaat ‘determineren’. Stel dat dit zou gebeuren, dan zou je een wolk krijgen met objecten die eigenschappen (metadata) en tags delen, waardoor ze bij een zoektocht relevantie krijgen. Dus omdat er een artikel is wat door mij is geschreven over semantische webben, worden andere artikelen van mij relevant bij het zoeken naar semantiesche webben. De objecten zijn dus niet gekoppeld, maar hun metadata. Dus als een object verkeerd, onnauwkeurig of ‘subjectief’ worden geannoteerd, verliest het waarde in een zoektocht.

Dus op die manier koppelen is wel leuk en als het goed gebeurd, erg waardevol, maar het meeste van het internet is door navelstaarders en onkundigen geschreven. Deze mensen houden geen rekening met de vindbaarheid van hun werk, of weten niet hoe. Daarom kunnen we ervan uitgaan dat het niet lukt, of voor slechts een heel klein deel. Alternatieven is: een metawolk kweken. Het is zoiets als het samenstellen van een encyclopedie door eerst de bibliotheek van de Haagse Bibliotheek te fotograferen en te sorteren op de hoeveelheid letters op elke boekpagina.

Dat werkt dus niet, je moet de inhoud begrijpen om er waarde aan te hechten. Je moet bijwijze van spreken de ‘tags’ van elk boek, een context geven zodat ze een verband aangaan met andere tags. Dus niet omdat ze hetzelfde zijn, maar omdat ze hetzelfde betekenen in de juiste context. In het voorbeeld uit het begin: als ik zeg ‘green’ dan heb ik alleen dat het een kleur is, als ik het een context geef met ‘villan’, dan zijn de kansen al groot dat ik in de mythische verhalen terecht kom. Als ik als laatste ‘1980s’ erbij voeg (en dit is wat je eigenlijk bedoeld als je het intypt), dan wordt er direct een periode aan gekoppeld. Jouw zoekopdracht wordt zeg maar een wolk van zichzelf, een wolk van groene mytische figuren die ‘leefden’ in de jaren 80. Als elk object (artikelen, fotos en videos) in een zoekmachine ook zo’n wolkje heeft, doordat de inhoud begrepen word, kan je dingen vinden, de wolkjes zullen immers op elkaar lijken. Maar dan wordt het dus moeilijk. Er is nog niet genoeg rekenkracht om al die gegevens op het Internet te ‘begrijpen’, of om overal zo’n wolkje erbij te maken.

migratie naar wordpress

Zo, ik werd de traagheid van sneaker.nl echt helemaal zat, dus heb ik mijn blog software gemigreerd van Typo (Ruby) naar WordPress (PHP). Ik heb al velen geholpen met hun WordPress installatie, en hoemeer ik daarmee werkte, hoemeer ik vond dat ik er ook aanmoest.

Samen met dat de server voor deze site in L.A. (USA) staat en dat Typo op een nogal verrotte implementatie van Ruby On Rails draait, zorgde ervoor dat de site soms gewoon niet verscheen. Onvergevelijk eigenlijk, maar Typo was opzich wel een coole applicatie, in zijn tijd was Typo technisch gezien ver voor WordPress. Nu heeft WordPress de schade ingehaald en verder. WordPress heeft  zoveel coole plugins, waar ik ook gebruik van maak (voor tags, del.icio.us, flickr, plaatjes, podcasting, en nog veel meer). Een fijn stuk software.
Ik laat de opmaak voorlopig even zoals het nu is, alleen een plaatje aanpassen en alle benodigde plugins installeren.
Voor de migratie heb ik een migratie scriptje van Travis aangepast en uitgevoerd… dat werkte prima.

podspinsels IV sponsor addendum

Ik ben opgang, nog een klein stukje over sponsoring, want daar komt immers het geld vandaan.

Zijn we nou af van doelgroepen? Moet de sponsor nou zelf in de markt om een profiel op te stellen door content te sponsoren? Nee! is het antwoord.

Het enige wat sponsoren willen: effectief geld investeren in doelgroepen zodat er voor weinig geld veel mensen op de stoep staan om hun producten af te nemen. Dan is diffusie van de markt alleen practisch voor micro-sponsorship, dus kleine beetjes geld of natura aan veel programmamaker (contentproducent), of gewoon een klein beetje geld aan één contentproducent (de computer winkel op de hoek, of het café waar het programma opgenomen mocht worden.

Maar grote spelers willen die moeite niet nemen, ze nemen voor reclame en productplaatsing ook imagebuilders in dienst. Het zelfde geld voor het inzetten van geld en middelen voor sponsorships. Er komt (of is) een partij die een image van een merk of product analyseert en kijkt waar die het ‘geplaatst’ kan worden. Er wordt door zo’n partij (sponsor broker) dus een sponsorpakket samengesteld, net als TV maar fijnmaziger (niet veel reclame op TV3 en veel op discovery, maar kleine beetjes over meer content-eenheden).

Dan de consument: niets is stommer dan elk uur dezelfde reclame te horen, of nog erger: een reclame die me niet aanspreekt. Dat kan door die product-profielen voorkomen worden. Een product heeft namelijk meerdere contentproducenten die eraan gekoppeld kunnen worden (het profiel). Elke producent neemt met zijn publiek een eigen (al dan niet overlappend) deel van de doelgroep van het product voor zijn rekening. Dus de producent heeft een consumenten-profiel en de sponsor (of een product) ook, die kunnen deels of helemaal overlappen wat het aangaan van een relatie tussen sponsor en contentproducent waarschijnlijker maakt.

Op die manier is het handig om per contentproducent een soort ‘sponsor pool’ op te stellen. Zo’n ‘sponsor pool’ is een portfolio met relevante sponsoren. Bij elke ‘uitzending’ kan een producent zelf kiezen welke sponsor deze keer wordt gebruikt. Zo’n ‘sponsor pool’ kan vanuit de sponsor-broker én, of de contentproducent worden samengesteld. Dus een sponsor-broker denkt: hee, dit product hoort bij dit soort content, en de producent denkt: hee, dat zou een goede sponsor zijn. De relatie en het contract wordt op micro-niveau (per contenteenheid/ aflevering) afgesloten. Dus per aflevering zegt een producent en een sponsor: wij horen bij elkaar. Dat kan een relatie worden, maar hoeft niet.

Omdat er met meer zekerheid te zeggen is wie de consument is, kan de sponsor ook meer risico nemen. Denk aan aanbiedingen aan ‘leden’ van een contentproducent. Dus ik ben lid van een mini-serie, die wekelijks wordt aangeboden en de sponsor bied alleen de kijkers een korting of extratje aan. Dan is er minder kans op dat er gestrooit word, maar verwend door de sponsor.

Op deze manier is er kans voor zowel de producent, de consument als de sponsor om fijner van content te genieten. De sponsor bedekt met zijn budget een groter en exactere doelgroep, met minder risico. De producent put uit meer en geschiktere sponsoren met hart voor de content. De consument krijgt wat hij wilt en raakt positief geprikkeld door zowel de content als de sponsoring.

de ‘you know what I mean’-factor voor zoeken

Bij google heb je er het meeste last van. Je zoekt op een woord, maar het synoniem of met een extra bijwoord blijkt het zoeken beter te werken. Dat weet je pas als je het probeert. Waarom heeft software niet de ‘je weet toch’-factor. Zo van: oh, je bedoeld zeker … En niet qua spelling, maar qua semantiek.

Ik zocht een apparaat met behulp van google; een zogenaamde compressor, wat gebruikt wordt om je stemgeluid te optimaliseren voor opname. Maar het moest wel een kleine zijn, in tegenstelling tot de meest voorkomende 19′ variant. Dus ik zoek op ‘Compressor mini’ en ‘compressor tiny’ en ‘compressor portable’, zonder al te veel geluk. Pas toen ik zocht op ‘compressor half rack’ had ik beet, maar wie verzint dat dan?

‘half rack’ is een term in radioland wat staat voor ‘de helft kleiner dan normaal’, bij mij heet dat ‘daagbaar’ of ‘klein’, maar google begreep dat niet. De semantische betekenis van draagbaar (portable) is niet bekend bij google, die controlleerd hooguit of je zoekterm statistisch relevant is (daarom kan google ook hier en daar tips geven als: ‘je bedoeld zeker broodrooster, i.p.v. bloodrooster). Wat google niet kan is kijken wat het woord betekend en dan bepalen of er semantische (in de zelfde betekenis) alternatieven zijn. En dat is wel gewenst

Je wilt natuurlijk uiteindelijk ‘vinden’ en niet ‘zoeken, filteren, lezen, verfijnen en misschien vinden’. Wat daarom nog gewenster is, is het bepalen van semantische waarde in de context (de andere woorden) van de zoekopdracht. Als ik zeg ‘klein olifantje’, dan bedoel ik eigenlijk een beest van een paar honder kilo, maar slechts drie jaar oud (dus jong). Als ik zeg ‘kleine computer’, dan bedoel ik veel kleiner dan andere computers, of misschien wel laptop (dat is immers ook een kleine computer). Als google dat zou weten, dan zou hij kunnen suggereren: je bedoelt een jonge olifant, of een portable computer, waarmee de kans dat je iets vind ook veel groter is.

semantisch netwerkSematisch web © Aidministrator

Bovenstaande is een beetje moeilijk te maken en impliceerd het gebruik van zogenaamde semantische netwerken. Dat zijn een heleboel woorden in een database, die op basis van hun betekenis een relatie aangaan met andere woorden. Artikelen met bepaalde woorden kunnen daardoor gekoppeld worden aan artikelen met andere woorden, maar dezelfde betekenis.