Project 2 van #6projects: Markov Chain, Vice en Twitterbots

Mijn tweede project (van de 6) in 2017 is klaar! En het was een flinke bevalling. Maar het resultaat is – al zeg ik het zelf – awesome. Ik heb namelijk een website gemaakt die automagisch Vice-koppen genereert, en een Twitterbot die verknipte tweets van mijn eigen account maakt.

Viceheadlin.es

Een flinke tijd geleden zag ik deze website van Hay Kranen die automatisch nieuwe Correspondent-koppen maakt. Het gebeurt niet vaak dat ik zo bezeten raak van één idee: een script waarmee je van oude teksten nieuwe teksten kunt maken. En het levert regelmatig ook nog eens grammaticaal kloppende resultaten op. Kortom, mijn tweede project draait om Markov Chain.

Het doel van mijn tweede project was om een website en twitterbot met Markov Chain te maken. En dat is gelukt! Allereerst had ik een idee nodig voor mijn website.

Ik begon met de beschrijvingen van films op IMDB, maar die blijken grammaticaal net iets te ingewikkeld om samenhangende teksten op te leveren. Daarna heb ik nog een mengeling van koppen op nieuwssites overwogen, maar dat levert waarschijnlijk veel resultaten op die niet grappig of zelfs beledigend zijn. En toen dacht ik aan Vice.com. Net als bij Hay’s Correspondent-website heeft Vice hele opvallende headlines. Dus zelfs als je de woorden door elkaar husselt, het Vice-aspect kun je vaak nog herkennen. Na een korte brainstorm was de url Viceheadlin.es (heb ik ook eens een wat exotischer domein) aangevraagd.

Vervolgens heb ik ALLE Vice-koppen gescraped. Maar ik merkte dat mijn gekozen Markov Chain-library daar a) erg traag van werd, en b) veel troep als resultaat terug gaf. Ik moest de selectie dus iets terugbrengen om een snellere en betere website te krijgen. Uiteindelijk heb ik alle koppen van de secties Politics, Entertainment, LGBTQ, Drugs en NSFW binnengehaald. Met het filteren van duplicaten en nagenoeg gelijke koppen kwam ik uit op 4.764 koppen. Even een opsomming van de elementen die ik heb gebruikt.

  • De koppen heb ik met Parsehub gescraped.
  • Het script waarmee ik de koppen door elkaar hussel heb ik via Daniel Shiffman.
  • Vervolgens heb ik de website van Vice proberen te benaderen met Bootstrap.

Tijdens het project heb ik feedback gekregen van Tom Klaver en Yarno Ritzen (awesome, dank!). Daardoor heb ik uiteindelijk een aantal extra functies in de website gezet.

  • Met hun feedback heb ik de opmaak van de site telkens kunnen tweaken. Ik ben absoluut geen webdesigner, dus dan is het handig om iemand te hebben die met een frisse blik naar je ontwerp kijkt.
  • Ik was een favicon vergeten. Check hier hoe je zelf zo’n logootje bovenin je tabblad kunt toevoegen.
  • De share-functie: als je een headline hebt gegenereerd, kun je die via het Twitter-logo delen. Was een functie die ik uit mijn oude website Beste Kop Ooit heb gehaald.
  • De Read more/less, oftewel een collapse/expand. Hier zie je de code om het op je eigen site te gebruiken.

Eigenlijk is dit vooral een leuke oefening geweest in hoe je zo’n project kunt opzetten in korte tijd. Als ik later nog eens inspiratie heb om met Markov Chain andere teksten door elkaar te husselen, dan heb ik in ieder geval flink wat code klaar staan.

@vermanen_ebooks

Na mijn Vice-project wilde ik nog iets dieper in Markov Chain duiken. Misschien heb je wel eens van de zogeheten _ebooks-accounts gehoord op Twitter? Een van de bekendste voorbeelden is @horse_ebooks, een bijzonder spam-account op Twitter. Tegenwoordig wordt dit account niet meer gebruikt. Een aantal actieve accounts zijn @tijsbotmans en @degier_ebooks. Maar wat gebeurt er eigenlijk op die accounts?

Eenvoudig uitgelegd: een script dat periodiek draait, zoekt naar de laatste 3.600 tweets op één of meerdere accounts, en maakt van die oude tweets weer nieuwe berichten. Die berichten worden automatisch via een nieuw account verstuurd. Als je je eigen tweets hier in gooit, krijg je dus een soort verknipte versie van je eigen Twittergedrag.

Om dit voor elkaar te krijgen, heb ik een aantal tutorials doorgenomen. In het begin zonder al teveel succes. Ik wilde alles op mijn eigen server draaien, maar dat is mij nog niet gelukt. En toen zag ik deze uitstekende tutorial over een Twitterbot die via Heroku (een dienst die jouw scripts herhaaldelijk uitvoert) werkt. En je hoeft echt niet goed te zijn in programmeren om dit te kunnen volgen. Een beetje basiskennis van de terminal en hoe je bestanden kunt aanpassen is wel handig.

Het resultaat is @vermanen_ebooks, een account waarop tweets van mijn eigen @JerryVermanen-account worden verknipt en door elkaar gehusseld. Zeker niet de eerste persoon die zo’n account opzet (kijk maar), maar het is wel een ontzettend leuke oefening.

Hieronder mijn allereerste automagische tweet. Best wel trots op.

Maar in de tussentijd zijn er nog een aantal pareltjes van tweets ontstaan.

Wat heb ik geleerd?

Dit was een behoorlijk ingewikkeld project voor iemand met enkel basiskennis van programmeren. Maar alsnog heb ik dit in iets meer dan een maand voor elkaar gekregen. Het resultaat is waarschijnlijk alleen voor mijzelf echt grappig, maar dat maakt niet zoveel uit. Alleen door zulke projecten op te zetten en het een beetje luchtig te houden, kun je jezelf gemotiveerd houden voor de problemen die je ongetwijfeld gaat tegenkomen.

Ik vond het echt heel tof om eindelijk eens iets Markov Chain te doen. De lessen uit mijn voorgaande project kon ik ook direct toepassen tijdens het opzetten van Viceheadlin.es.

Het was ook de allereerste keer dat ik er over nadacht om een Twitterbot te maken. En eigenlijk is het best eenvoudig om met een library een botje aan te sturen. Als je een handleiding kunt lezen, dan heb je binnen een uur wel iets draaiende. Het wordt alleen tricky als je iets specifieks wil hebben. Maar goed, wellicht dat ik me daar later nog een keer op stort.

Ik ga mijn aankomende project iets eerder beginnen. Vrijdag 31 maart heb ik de cursus Data-Viz Drawing van Stefanie Posavec gevolgd. Sowieso wil ik de aankomende maanden persoonlijke data verzamelen, handmatig schetsen maken om een concept te ontwikkelen en een fysieke datavisualisatie maken. Deadline: 30 juni (maar het mag dus ook iets eerder klaar zijn).