Digg. Social bookmark website nummer één. Zelf ben ik niet zo gecharmeerd van Digg. Ik ben in ieder geval geen fanatieke gebruiker.
Maar het achterliggende principe van een social bookmarking algoritme vind ik dan wel weer interessant. Net zoals Google liever niks vertelt over de werking van de zoekmachine, is Digg allesbehalve spraakzaam over de manier waarop het
diggen van links in zijn werk gaat. Her en der op het internet kom je natuurlijk wel een ideetje tegen over de factoren die bepalen hoe een artikel op Digg gerangschikt wordt. Maar aan het einde van de dag blijft het toch gokwerk.
Als ik zelf een social bookmarking website moest maken ... hoe zou ik dan bepalen in welke mate een bepaald item opstoomt in de vaart der volkeren? Het is aardig om eens praktisch aan de slag te gaan met een (mogelijk) antwoord op deze vraag. Hieronder lees je over mijn berekening / weging van items op een sociale ezelsoorsite.
De allersimpelste benadering
Het simpelste is natuurlijk om elk item een startwaarde van nul te geven. En elke keer als iemand een item promoot door op de "ik promoot dit item" knop te klikken de waarde met 1 te verhogen. Vanzelfsprekend is er een check die kijkt of Piet niet meerdere keren op de promoot link klikt. Slechts 1x stemmen is geoorloofd.
Wat doe je met items die een gelijke waarde hebben? Welk item staat dan hoger in de pikorde? De tijd die verstreken is sinds het aanbrengen van het item is in dat geval bepalend. Nieuwere items scoren hoger. Zij hebben immers minder tijd nodig gehad om een bepaalde mate van waardering te bereiken. Simpel. Eigenlijk een beetje
te.
Gebruikerskarma
Karma: een positieve term om tot uiting te brengen dat
all animals are created equal. But some animals are more equal than others.
Het is mooi om gebruikers van het social bookmarking systeem te waarderen. Actieve gebruikers bijvoorbeeld. Je zou dat bijvoorbeeld kunnen doen door te kijken naar zaken als:
- het aantal aangebrachte links ( * 0,005)
- het aantal keren dat een gebruiker een link gepromoot heeft ( * 0,001)
- het aantal comments van een gebruiker ( * 0,0001)
- het aantal keer dat zijn/haar profiel bekeken is ( * 0,0001)
Elk van deze zaken zou je een bepaalde waardering kunnen meegeven. Bijvoorbeeld: 1 + (aantal aangebrachte links * 0,005 + aantal links gepromoot * 0,001 + aantal keren profiel bekeken * 0,0001 + aantal keer commentaar op links * 0,0001) / 10. Een gebruiker die voor de eerste keer een link promoot verhoogt de huidige waarde met 1. Maar een actievere gebruiker wordt beloond met net wat meer gewicht.
Het potentiële probleem in deze berekening is de afweging tussen waardering van een actieve instelling en het voorkomen van teveel macht op basis van activiteit.
Andere gebruikersfactoren die mogelijkerwijs mee zouden kunnen wegen:
- de tijd dat een persoon al geregistreerd is. Een persoon die een half jaar lid is, is
meer senior dan iemand die zich nog maar een week geleden registreerde. Hmmm. Dit kan als wegingsfactor gebruikt worden, maar alleen als er ook gekeken wordt naar de mate waarin de persoon in kwestie actief is. Oké Eerst het gemiddelde lidmaatschap in dagen bekijken. Zit de persoon in kwestie boven het gemiddelde? Zo ja, dan berekenen we het gemiddelde aantal aangebrachte links. Zit hij/zij hier boven? Geef de gebruiker dan wat extra gewicht.
- de kwaliteit van de links die door een persoon zijn aangebracht. Klinkt logisch. Maar hoe meet / waardeer je de kwaliteit van een link?
Views
Aan het aantal views (keren dat een link is aangeklikt) kan een meerwaarde worden toegekend. Immers, als er meer wordt geklikt op een bepaald item kan dat mogelijk worden uitgelegd als een grotere aantrekkingskracht (en dus meer potentieel). De overwaarde van impressies van een item kan als volgt tot uiting worden gebracht:
gewicht views = 1 + (aantal views van het betreffende item / totaal aantal views (alle items))
Demo
Er moet nog een heleboel aan gebeuren, maar de eerste (vereenvoudigde) aanzet voor een
social bookmarks demo heb ik inmiddels online gezet. Het valt ook nog niet mee om gefocust te blijven. Ik was afgelopen weekend, toen ik hiermee aan de slag ging, snel afgeleid door allerlei blingbling dingetjes. Lees: AJAX code, stijlbladen enzo.

Bij toeval stuitte ik op een bedrijf dat zoekmachinemarketing en -optimalistatie in haar pakket van diensten heeft. Op hun website doen ze uit de doeken hoe zij dat aanpakken. Onder begeleiding van een tweetal voorbeelden waarin getoond wordt hoe hoog het betreffende bedrijf rankt op de keyword combinaties
intranet ontwikkeling en
content management nederland. Altijd in voor een probeerseltje wil ik met een stukje tekst over de aanschaf van een intranet / content management systeem eens kijken of ik daarbij in de buurt kan komen. Overigens vraag ik me af of de tweede zoekwoord sequentie een realistische is. Laat het woord
Nederland weg en de SERPs zijn opeens een stuk minder bemoedigend.
Het onderstaande verhaaltje is trouwens niet geheel en al uit de duim gezogen. Ook in werkelijkheid is er momenteel een orientatie gaande voor wat betreft vervanging van het huidige intranet. Het liefst met koppelingen of integratie met een digitale sociale kaart.
We staan aan de vooravond van een belangrijke keuze. Ons intranet moet worden opgewaardeerd. De vraag is, welk content management systeem gaan we gebruiken? Het intranet moet bovenal flexibel moet zijn in de geboden mogelijkheden en functionaliteit. Met functionaliteit en flexabiliteit als uitgangspunt hebben we een aantal bedrijven die zich bezig houden met intranet ontwikkeling gevraagd om een demo van hun intranet product te presenteren.
Na een aantal intranet producten beoordeeld te hebben kan geconcludeerd worden: de keuze voor een content management systeem is in Nederland geen sinecure. Op het gebied van intranet ontwikkeling is de spoeling dun. Niet voor wat betreft kwantiteit. Er zijn in Nederland voldoende aanbieders van content managment systemen. De kwaliteit van de ge-evalueerde producten is vaak ronduit teleurstellend. Wij zijn er momenteel absoluut nog niet uit welk CMS geschikt is voor onze organisatie. Zelfs wordt overwogen om de ontwikkeling van het intranet in eigen beheer te doen. De kosten zullen bij een eigen implementatie fors zijn. Daar tegenover staat dat een maatwerk product zal in elk geval aan de functionele eisen die aan het intranet gesteld worden kan voldoen.
Een tijdje geleden schreef ik al over
mijn plannen om een url review systeempje op te zetten.
Nou. Ik ben hiermee nog niet klaar. Maar om te zeggen dat ik stilgegezeten heb? Ook niet. Achter de schermen heb ik al het één en ander gedaan.
Echter, tijdens het schrijven van de code voor de achterliggende beheerpagina's werd ik afgeleid door spielerei met manipulatie van het Document Object Model (DOM). Natuurlijk kan ik de boel op de voor mij traditionele manier beheren. Maar een wat hippere manier van informatie muteren op basis van een mix van DOM scripting en asynchrone calls naar de MySQL database is aardig. En een goede investering voor toekomstige inzet bovendien.
Ik betwijfel of dit het eindresultaat wordt van dit projectje, maar in elk geval is dit een illustratieve demo van
een manier waarop het Document Object Model ingezet kan worden om
de informatie in de afzonderlijke cellen in een tabel te manipuleren.
P.s. In deze situatie is het niet geïplementeerd, maar in een praktijksituatie zou ik, op het moment dat de tabeldata ververst wordt, een asynchrone call doen om de mutaties naar de achterliggende database weg te schrijven. Da's verder een koekje (aka appeltje-eitje), dus daar maak ik me er hier ff niet druk om ...
Dit demootje laat zien hoe ajax op een (naar mijn mening) nuttige manier kan worden ingezet.
Een plukje data wordt in een tabel ingeladen. Door te klikken op een cel wordt de inhoud ervan in een tekstvak ingeladen. Vervang deze vervolgens door een nieuwe waarde en klik op OK. De nieuwe waarde wordt als lekker hapje naar de achterliggende database-query gestuurd. De betreffende tabel cel wordt ook meteen ververst door de innerHTML eigenschap te herschrijven.
Mijns inziens vooral handig als onderdeel van je backend code. Of om een beetje de
wannabe trendy kat mee uit te hangen natuurlijk.
Check dan die demopagina
Een demootje met het MATCH sleutelwoord in MySQL om dynamisch links in te bouwen in een willekeurige tekst. Hoe werkt het?
Neem een (willekeurig) stuk tekst als uitgangspunt;
Bepaal met behulp van een reguliere expressie of er in deze tekst woorden staan van een (in het achterliggende script te definiëren) lengte;
Gebruik dit woord voor een MATCH AGAINST query die bepaalt of het betreffende woord in één van de andere records voorkomt;
Bouw het betreffende woord met behulp van de str_replace functie om tot een site-interne link;
Vervolgens kan er worden doorgeklikt naar een andere tekst waar het woord ook in voorkomt. En anders? Dan loopt de demo dood ...
Werkt vrij aardig. Behalve als er al interne ankers in de tekst staan. Dan wordt de link verkeerd gebouwd, het pad wordt bruut verpunkt en je wordt op een 404 getrakteerd. Grrr. Klusje voor de volgende versie. Nu even niet.
Nog een note on the side:
MySQL heeft voor het uitvoeren van een MATCH ... AGAINST query een fulltext index nodig die, voor zover ik weet, niet wordt ondersteund voor INNODB tabellen. Je tabel moet dus van het MyISAM type zijn.
Dynalink demoHet idee kwam ik op een andere website tegen: een stukje php code dat de favicon afbeelding van een externe website in zijn kladden grijpt en in een lijst toont. En ja, ik weet al wat je zeggen wilt, strict genomen is dit hotlinking en rippen van bandbreedte. Maar omdat een favicon meestal niet meer dan anderhalve kilobyte ofzo groot is kan ik me niet voorstellen dat iemand erover valt.
Bekijk het resultaat ...