Steffest Digitale Pulptuur

How to cheat on online polls like #MCMG

Vorig weekend opende Imke Dielen de "Most cute Male Geek" verkiezing.
Eigenlijk wilde ik dat alles gewon negeren, want - en ik mag dat zeggen he Imke - ik vond het vooral wat aandachttrekkerij, tot ik vrijdagavond zag dat @wolfr 9000+ stemmen achter zijn naam had staan.
Onder het motto "Allaai gast, alsge trisht, doegedan injees goe" oftewel "Wasdana, nen antwaarpenaar kan toch beter trishen dan die Netlash-gasten zekers" heb ik vrijdag dan toch eens een scriptje gemaakt om een mede-antwerpenaar van wat stemmen te voorzien. (Vooral ook omdat imke zelf zeer uitnodigend was)
Hier een kleine handleiding:

Stap 1 bij elke webapplicatie is altijd dezelfde: rechts klikken en "view source" kiezen.
Daar lezen we <noscript> <a href="http://answers.polldaddy.com/poll/1357963/">View Poll</a></noscript>
Wat de url is van de quiz op polldaddy.
Het meeste interessante op die pagina is de "vote" knop, die stuurt immers de actie door naar de webserver.

de actie is javascript:vote(1357963,0,0,1,10);
OK, dan even kijken waar die javascript staat.
in de HTML code staat <script type="text/javascript" language="javascript" src="/js/common.js?x=35"> <script src="js/common.js?x=35" type="text/javascript">
dus de url waar de javascript code staat is http://answers.polldaddy.com/js/common.js?x=35

daarin staat (in versimpelde versie)

function vote(id, poll_other, rand, poll_type,u)
{
for(i=0; i {
if(document.formPoll.elements[i].checked)
{answerString +=document.formPoll.elements[i].value + ',';}
}
location.href = '/vote/?va='+u+'&pt='+poll_type+'&r='+rand+'&p='+ id +'&a='+ answerString +'&o='+ otherText;
}

aha

de code location.href zegt tegen de browser om naar en bepaalde url te gaan.
en welk url dat is wordt mede bepaald door de variablelen die we aan de functie vote meegeven.
De "vote" knop roept javascript:vote(1357963,0,0,1,10)op, waardoor we al de url /vote/?va=10&pt=1&r=0&p=1357963&a='+ answerString +'&o=

om de waarde van answerstring te kennen, kijken we weer naar de HTML broncode van de poll waar we <input type="checkbox" id="PDI_answer6978941" value="6978941"></input> atog terugvinden.

answerString vervangen we door "6978941," wat de waarde is van de checkbox voor atog + een komma (dat is het + ',' stuk in de vote functie)

de volledige string wordt dan http://answers.polldaddy.com/vote/?va=10&pt=1&r=0&p=1357963&a=6978941,&o=
en inderdaad: Als we deze url oproepen in de browser, zien we dat er 1 vote bij atog is bijgekomen.

We zouden dan als een gek op refresh kunnen gaan klikken, maar na een paar 100 keer heeft polldaddy ook wel door dat er iets niet klopt en weigert dan nog nieuwe stemmen te tellen van je PC.
Je krijgt dan het volgende

Als je nu een andere PC zou gebruiken, zou je met die URL wel weer verder kunnen stemmen, maar handig is dat niet.
Gelukkig zijn daar verschillende oplossingen voor, en een oplossing die voor url-oproepen goed werkt is een zogenaamde "cgi proxy"
Dit is een script dat op een webserver draait, en als doorgeefluik dient voor webpagina's, zodat de doelwebserver (polldaddy) niet kan zien waar het verzoek eigenlijk vandaan komt.
Bovendien past zo'n proxy script nog wat slimmigheden toe om zich telkens als een andere "pc" te vermommen, waardoor het veel minder kans heeft ook geblokeerd te worden.
Je kunt zo'n script zelf op je server zetten, maar er zijn ook lijsten met publieke cgi proxies (die zijn vrij te gebruiken, al moet je er wel een kwak reclame bij nemen)
de URL http://anonymouse.org/cgi-bin/anon-www.cgi/http://answers.polldaddy.com/vote/?va=10&pt=1&r=0&p=1357963&a=6978941,&o= bijvoorbeeld roept de polldaddy stem pagina op via zo'n proxyscript zodat je zelf buitenschot blijft.
Je kunt zoveel proxy scripts tegelijk gebruiken als je wil, de webserver zal ze immers als verschillende verzoeken aanschouwen.
Dan is het nog zaak dat om de zoveel tijd automatisch te laten herhalen via een cron of een autorefresh en klaar, de tijd doet de rest.

Ik heb het script ongeveer 40 uur laten lopen en in die tijd heeft het ruim 100.000 stemmen uitgebracht.
en voor alle duidelijkheid: atog had niets te maken met deze valsspelerei - hij is uiteraard de eerlijkheid zelfve (EN een terechte winnaar! :-) )

Dit was natuurlijk maar een leutigheids-poll, maar de bottomline is: als je een online tool of spel gebruikt waarbij er ECHT iets belangrijks te winnen valt ... spendeer dan meer dan de helft van je resources aan de beveiliging ervan, want gegarandeerd dat er hopen nerds rondlopen die niets liever doen dan je actie om zeep te helpen door het systeem te kraken.

Tags: in 't Nederlands, ScriptingGeef je reactie (6)
 

Klara4kids

a picture called mobile_2_55_37 PM_2202009klara4kids.jpg (click to enlarge) "Klassieke muziek duikt verrassend vaak op in speelgoed, tekenfilms en computerspelletjes. Terecht want welke muziek weet de verbeelding zo sterk te prikkelen?" staat er in deze advertentie voor Klara4kids.

Want een onzinnige marketingspeak. Het komt gewoon zo vaak voor omdat het royalty en copyright vrije muziek is ...

Dat gezegd zijnde ... een leuk initiatief www.klara4kids.be


(Posted by mobile phone) Geef je reactie (1)
 

Microsoft Surface

Vorige woensdag woonde ik een Windows Mobile Smackdown bij met mooie sneak-preview over windows mobile 6.5.
Later daarover meer, maar even leuk was dat we ook konden spelen met de Microsoft Surface PC: Een soort koffietafel scherm met een groot multi-touch oppervlak.
Naais .... VERY naais.
Ik zou er supergraag wat applicaties voor willen ontwikkelen, maar met een prijskaartje van 11.000 euro plus een extra 2.000 euro voor de developmentkit zal dat nog niet voor in 't kort zijn Smile
(Sponsors mogen zich uiteraard altijd aanbieden)

Hier  een korte video impressie.
't gefilmd met mijn GSM, dus behoorlijk crappy.
Veel betere videokwaliteit vind je bij LVB.
Misschien moet ik mij toch eens zo'n flip HD aanschaffen voor dergelijke instant-shots

Tags: Gadgets, in 't NederlandsGeef je reactie (1)
 

Googlewhack sabelplassen

a picture called sabelplassen.jpg (click to enlarge)

Ik had er nog nooit van gehoord: Googlewack - en zelfs Googlewhackblatt
Het is dus een (zinnig) woord dat slechts 1 zoekresultaat op google oplevert.
En jawel, vandaag werd door @eyeballkid en @wim_morc  ontdek dat sabelplassen er 1 is.
Iedereen weet meteen wat sabelplassen is en toch komt het op het hele publieke internet maar 1 keer voor,
meer bepaald in een artikel van de Standaard over wemasturbate (@wemasturbate op twitter)

Een googlewack is natuurlijk heel delicaat, want zodra er iemand schrijft dat sabelplassen een uniek woord is, wordt dat opgepikt door google en is het er geen meer. Het is een beetje zoals het vinden van een klavertje 4 in een dichtbegroeid klaverveld: als je het plukt is het weg, en als je het niet plukt vind je het waarschijnlijk later nooit meer terug.

Het zijn kleine dinkies als deze die me doen glimlachen, en alleen daardoor al veel waard zijn.

Update: Oh nee - ik heb het verprutst - nu zijn er al 4 resulaten op http://www.google.be/search?q=sabelplassen
Damn, Google is snel ... dat heeft net 5 uur geduurd.

Tags: in 't Nederlands, Lifelog, Pulp, TwitterGeef je reactie (10)
 

Magical Multicolor Lights


My first (very simple) Arduino project combines Tikitag to create some magical lamps that change color depending on the objects you put in front of them. (and then the magic is gone as the trick is explained)
The sourcecode of all scripts and programming can be downloaded here.
tikitag

Tags: Gadgets, in English, Programming, ScriptingGeef je reactie (3)
 

Twitter Follower Wonderwall

The übercool @bnox hopped over 1000 twitter-followers yesterday and posted her wonderwall of twitter-followers on her blog.
It was generated by a script by Walter Higgins. Cool! Only one thing: I noticed it had only 700 peeps on it. (Actually, I miscounted so thanks @StefaanLesage for the recount )
It's stupid things like this that bug me (litteraly)
I'm conditioned by my job of course: when I see a software bug I automatically switch to "Can we fix it? YES WE CAN!" mode.
I created a little script that gets your followers and displays them in a grid. It turned out to be piece of cake thanks to Twitter's excellent API.
Here's the script if you want to make your own Wonderwall or adapt it.

<%
twitterAccount = "steffest"
twitterPass    = "******"
twitterUser    = "Bnox"
page=1
colcount=1

response.write("<h1>"&twitterUser&"</h1>")
response.write("<table><tr>")
twitter_getfollowers()
response.write("</tr></table>")

function twitter_getfollowers()
	twitterurl = "http://twitter.com/statuses/followers/"&twitterUser&".xml?page=" & page
	set objXMLHTTP = Server.CreateObject("MSXML2.SERVERXMLHTTP")
	objXMLHTTP.Open "GET", twitterurl, false,twitterAccount,twitterPass
	
	objXMLHTTP.Send
	Set objXML = Server.CreateObject("MSXML2.DOMDocument")
	bAns = objXML.loadXML(objXMLHTTP.responseText)
	
	if bAns then
		set objItemNodes = objXML.DocumentElement.SelectNodes("user")
		if objItemNodes.length>0 and page<50 then
			for each oNode in objItemNodes
				user_name = ""
				user_image = ""
				if not oNode.selectSingleNode("screen_name") is nothing then user_name = oNode.selectSingleNode("screen_name").Text
				if not oNode.selectSingleNode("profile_image_url") is nothing then user_image = oNode.selectSingleNode("profile_image_url").Text
				response.write("<td><a href=""http://twitter.com/"&user_name&"""><img src="""&user_image&""" border=""0"" width=""48"" height=""48""></a></td>")
				colcount=colcount+1
				if colcount>15 then 
					response.write("</tr><tr>")
					colcount=1
				end if
			next
			
			page=page+1
			twitter_getfollowers()
		end if
	end if
	
	set objXMLHTTP=nothing
	twitter_getfollowers = true

end function
%>
Tags: in English, Scripting, TwitterGeef je reactie (0)
 

USB LED graphic equaliser

Another demo of the LED-matrix screen.
This time I created a program that monitors the audio levels of your PC and renders a graphic equaliser or a simple VU meter on the LED-panel.
Of course the scrolling text is also still present.


Much to my surprise the hardest part was how to capture the audio information of your PC.
After some digging I ended up with the most excellent BASS audio library of Un4seen.
It's very well documented and very easy to integrate in your own projects.
Luckily some examples where included how a graphic equaliser works because that stuff gets pretty theoretical very fast ! (and I had no clue)

The idea is to build a large - but low-res - custom LED wall (or hey ... a T-shirt you know) to replace the current 8x8 LED matrix. I have something wandering my mind of a panel, 60cm width and 240 cm high, with 8x16 or even 16x32 RGB led-boxes.
We'll see what resolution I can achieve and what will run out first: my mind, my time or my budget :-)

Tags: Gadgets, in English, ProgrammingGeef je reactie (0)
 

Twitter on a tiny LED display

As a small exercise in my progress towards to ultimate tweetshirt, I created an interface for a 8x8 LED matrix display.
It doesn't do much at this moment: a program runs on the PC, fetches your latest tweet and controls the USB attached LEDs to show it as scrolling text.

The hardware is from Byvac and is cheap and easy, but also a bit limited.
The software is by me and uses their IASI-2 protocol
The scrolling is in fact much smoother then appears in the video.
Maybe I'll rework the hardware interface to control a 4x4x4 LED cube.
I ordered an Arduino today, which will allow much more low level processing and control for these kind of things
a 8x8 RGB display seems a nice project to start with, hoping to scale up to a 16x16 grid if things are going well.

Tags: Gadgets, in English, Programming, TwitterGeef je reactie (2)
 

Snowboarding

a picture called mobile_1_58_14 PM_1192009IMAG0134.jpg (click to enlarge)

Woohoo, heel de piste voor ons alleen zeg !



(Posted by mobile phone)

Tags: in 't Nederlands, LifelogGeef je reactie (1)
 

In car entertainment system deluxe

a picture called mobile_3_36_57 PM_1182009Afb0043.jpg (click to enlarge)

Onderweg naar La Bresse te sardienen in een te krappe wagen. Gelukkig hangt er als bij toeval een mega luxe entertainment system aan het plafond. (en dat zonder duct tap: magic !)

(Posted by mobile phone)

Tags: in 't Nederlands, Lifelog, PulpGeef je reactie (2)
 

Koekentrein

a picture called mobile_3_20_24 PM_1172009koekentrein.jpg (click to enlarge)

Suikerkoeken trein gemaakt. Berefun!
En eigenlijk was dit ook een test voor een twitter/blog client voor windows mobile dat ik in elkaar flansde, mét ondersteuning om rechtreeks foto's en video's vanop je mobiele telefoon te posten.
Het post of naar je blog, of naar twitter/plurk/facebook, of naar alletwee tegelijk.

Mooi, dat schijnt netjes te werken. Nu nog een naam verzinnen
(Posted by mobile phone)

Tags: Blogging, in 't Nederlands, Lifelog, Programming, TwitterGeef je reactie (0)
 

Twitter op Radio 1

Terwijl vorige week op Studio Brussel nog over Twitter werd gesproken in termen als "De spiegel van de oppervlakkigheid" en "Zeffbevrediging" en "transhumanisme" gooit radio1 het vandaag over de journalistieke boeg, zoals we dat van hen gewend zijn.
@netlash en @bnox zaten in de studio bij Peeters & Pichal om de zin en onzin van twitter toe te lichten.
De (nieuws)impact van twitter werd meteen aan de praktijk getoetst door een experimentje: gisteren werd via @bnox deze tweet de wereld ingestuurd.


Het werdt veelvuldig opgepikt en bereikte dan ook snel de nieuwsredacties, wat (gelukkig) resulteerde in wat telefoontjes naar de heer van Quickenborne en mevrouw Peeters in kwestie.
Experiment geslaagd, zou ik zeggen!

Interessante reportage, hieronder te beluisteren. (Met dank aan @mreys voor de opname)


(Of download de .mp3 hier)

Hier nog war screenshots van het bericht dat (even) op de site van de Gazet van Antwerpen stond. Tags: Cultuur, in 't Nederlands, Lifelog, TwitterGeef je reactie (2)