Smörgåsbord

Ambachtelijk bereide beschouwingen.

Today I’ve finally joined the Electronic Frontier Foundation as a student member. The EFF can be compared to consumer- and human rights organizations, but the EFF is operating at the cutting-edge of law and technology – as far as I know they’re the only organization of this kind.
Yes, there’s the Foundation for a Free Information Infrastructure too. They do very important work, mostly regarding EU legislation – they’re not as grassrooty, though, and you don’t get any swag with your membership ;-)
The EFF are quite effective – they take organizations and governments to court (list of legal victories) and make patent offices reexamine bogus patents with some success. And much, much more.
If you sympathize with the EFF (or FFII) you should seriously consider joining them. You have an obligation – if you (the geek/intellectual) don’t, who will? Your plumber won’t. Not because these issues do not apply to him – the issues affect society at large – but because he (yes I’m being a total snob here) simply doesn’t understand technology and law as well as he understands a clubbed baby seals or tsunami’d villages. Therefore, join the EFF and leave it up to plumbers and kindergarten teachers to contribute to WWF and AIDS funds. Those are worthy targets as well, but that’s not the point – they appeal to a much larger “donation market” and will get their funds anyway because of that. I’m snobby but right, am I not? Leave a comment if you (dis)agree.


Tags:

[Update @20090607: De code moet regelmatig bijgewerkt worden om veranderingen op player.omroep.nl te reflecteren. De laatste versie kun je altijd downloaden van de officiële pagina, daar kun je ook pingen (via een issue) als het script aangepast moet worden aan een nieuwe versie van player.omroep.nl (m.a.w., als het niet meer werkt).]

Ik heb een Greasemonkey-scriptje geschreven dat op player.omroep.nl een dialoogje geeft waarvan je de inhoud direct in een shell (Bash-shell, wellicht ook de standaard Bourne-shell) kan pasten. Je krijgt iets dergelijks voorgeschoteld:

export TIEFDIR="${PWD}"; export TEMPDIR=$(mktemp -d); cd ${TEMPDIR} && mplayer -dumpstream -user-agent 'Windows-Media-Player/11.0.6001.7000' 'http://cgi.omroep.nl/legacy/player?/ceres/vara/rest/2009/VARA_101192917/bb.20090424.asf' && mv stream.dump ${TIEFDIR}/'De Wereld Draait Door - 25-04-2009.wmv' && cd - && rmdir ${TEMPDIR}

Dat maakt het downloaden van videomateriaal van uitzendinggemist.nl een stukje makkelijker. Natuurlijk moet je wel Firefox + Greasemonkey-extensie, een shell en MPlayer hebben, maar wie heeft dat nou niet ;-)
Hier kun je de source lezen en als je Greasemonkey hebt geïnstalleerd kun je hier op “Install” klikken.
Surf vervolgens naar uitzendinggemist.nl en fair-use er op los.
En hier natuurlijk het leukste stuk van de source. Ik schrijf haast nooit Javascript dus opmerkingen/aanvullingen zijn zeer welkom.

var playert = document.getElementById("player");
// Listener for node insertions (generated by omroep.nl's javascript)
if (playert) playert.addEventListener("DOMNodeInserted", genAlert, true);
 
function genAlert()
  {
  var playert = document.getElementById("player");
  var embedelement = document.getElementById('MediaPlayer');
  if (embedelement)
  //The embed element got inserted - now we have all required parameters for dumping
    {
    var pastetext;
    var source = embedelement.getAttribute("src").replace("'","\\'"); //These URL's shouldn't have "'" in them but we escape them just to be sure.
    //Create a copy of the title & date info so we can use DOM functions to separate the two
    var worktitle = document.importNode(playert.getElementsByTagName("h3")[0],true);
    var worktitledatespan = worktitle.getElementsByTagName("span")[0];
    var datum = worktitledatespan.innerHTML.replace("'","\\'"); //Escape ' to make shell-safe
    if (!datum) datum = 'nodate';
    worktitle.removeChild(worktitledatespan);
    var titel = worktitle.innerHTML.replace("'","\\'"); //Escape ' to make shell-safe
    if (titel && source)
      {
      playert.removeEventListener("DOMNodeInserted", genAlert, true);
      pastetext = 'export TIEFDIR="${PWD}"; export TEMPDIR=$(mktemp -d); cd ${TEMPDIR} && '
      pastetext+= "mplayer -dumpstream -user-agent 'Windows-Media-Player/11.0.6001.7000' '"+source+"' && ";
      pastetext+= 'mv stream.dump ${TIEFDIR}/\''+titel+' - '+datum+'.wmv\' && cd - && rmdir ${TEMPDIR}';
      alert(pastetext);
      }
    }
  }

[Update: Het NOS-journaal heeft vodcasts, vrij te downloaden in h.264-formaat. Hoera! Hoe zouden ze dat met rechten geregeld hebben? Hoe dan ook, de algemene principes die hieronder worden uiteengezet zijn helaas nog wel geldig voor de content van de omroepen op bijvoorbeeld uitzendinggemist.nl - waarvoor hier een GreaseMonkey-script dat dumpen van de stream vereenvoudigt.]
Vandaag gaan we illegale software gebruiken om het NOS-journaal te kunnen downloaden. Wat we gaan doen is niet illegaal, maar het gekke is dat de software die we nodig hebben om iets legaals te doen, illegaal is! Dat is raar, heeft met de aard van het internet te maken, dus dat verdient een blogpost.
Eerst wat uitleg over hoe de wereld in elkaar zit. Daarna gaan we aan de slag. Ongeduldig, en niet geïnteresseerd in de wereld? Scrollen!

Fair use

Scenario: Je wilt het journaal kijken.

  • maar niet nu, nee, straks in de bus
  • of ergens anders waar geen internetverbinding is
  • of je wilt er in kunnen spoelen zonder problemen
  • of je wilt de aflevering archiveren
  • of delen knippen & plakken naar zelfgemaakt videomateriaal (”remixen”)
  • of je wilt niet helemaal die NOS-site navigeren, maar gewoon met één druk op de knop klaar zijn…

Downloaden dus. En dat wordt je zo moeilijk mogelijk gemaakt, ondanks het feit dat dat journaal van het door jou afgestane belastinggeld wordt gemaakt. Bovendien wordt het beschikbaar gesteld in een formaat waarvoor licenties van Microsoft of Windows-software nodig is — alsof de overheid alleen nog maar Audi’s zou toestaan op de publieke weg.

Raar, toch? Waarom kun je niet gewoon het journaal downloaden en het ergens op je gemak bekijken, of een fragment laten zien in een presentatie [edit: in privésfeer!] of zo? Dat heet ‘fair use’.

Geen fair use voor jou!

Voor de NOS is het probleem met ‘fair use’ dat ze daarvoor het videomateriaal moet aanbieden op een manier waarop ze verdere controle over het materiaal verliezen. Een voorbeeld: Als jij je gedownloade afleveringen in de bus bekijkt, dan is dat ‘fair use’. Maar ga jij een beeldbank beginnen met al het materiaal dat de NOS van een extern mediabedrijf betrekt (zaken als video’s van die aardbeving in Italië laatst), dan heeft de NOS een probleem omdat dit niet hun materiaal is, ze hebben het slechts in licentie. En die licentie voorziet hoogstwaarschijnlijk niet in ongebreidelde herverspreiding – dan zou de bezittende mediabedrijf het gras voor zijn eigen voeten wegmaaien, of hoe noem je dat.

Het punt is dus dat het heel moeilijk wordt dat laatste (copyrightschending) te verhinderen als je downloaden toestaat. Daarom wordt er gestreamd, en streamen gaat doorgaans in een nogal lullige resolutie. Jammer voor ons!
Maar streamen is toch eigenlijk een soort downloaden? Dat klopt. Als je het journaal bekijkt op de manier zoals de NOS het bedoeld heeft (en 99% van de mensen doet dat zo) komt het materiaal inderdaad langs je computer – maar het zit dan “opgesloten” in een mediaplayer die jou niet toestaat om dat wat er aan materiaal langszoeft op te slaan. Dat heet DRM – officieel Digital Rights Management, in de volksmond Digital Restrictions Management – en de mogelijkheid tot het opleggen van restricties is één van de redenen waarom de omroepen niet een open, licentievrij formaat als Ogg Theora gebruiken – een formaat waarvoor iedereen een mediaspeler kan programmeren, voor een desktopbesturingssysteem naar keuze. Want als iedereen zijn eigen mediaspeler kan schrijven, wie garandeert dan dat er beperkingen zullen worden ingebouwd om het opslaan van streams tegen te gaan?

Dus stop het materiaal in een niet-vrij formaat waarvoor een licentie van Microsoft nodig is, een licentie die Microsoft niet geeft aan makers van programma’s die opslaan van streams toestaan, en klaar! Toch?
Het is een handhavingsprobleem dat wordt afgewikkeld op de gebruikers, en wel door deze gebruikers sterk in hun vrijheden te beperken. Het is niet de fout van de NOS dat de wereld op deze manier in elkaar zit. Er is, voor zover ik weet, nog geen oplossing voor dit probleem zonder ingrijpende veranderingen in bedrijfsmodellen.

Ondertussen willen we nog steeds het journaal downloaden en daar fair-use dingen mee doen.

MPlayer to the rescue

Er is een relatief kleine, maar bovengemiddeld technisch onderlegde gemeenschap van gebruikers van en ontwikkelaars voor besturingssystemen uit de Linux/BSD-hoek. Via reverse engineering en ongetwijfeld wat hacks zijn er mediaspelers gemaakt die het ‘geheime’ video- en streamingformaat kunnen lezen, zonder daarvoor een licentie te kopen. Ik weet niet hoe het in Europa zit – wij hebben gelukkig geen softwarepatenten en geen DMCA – maar onder de Amerikaanse patentwetgeving is dat illegaal.

Download dus MPlayer van http://www.mplayerhq.hu, of installeer ‘m via je packagemanager. Gebruik van deze software is niet illegaal. De makers zijn mogelijk niet legaal bezig, maar wij blijven vandaag legaal.

De syntax is ongeveer zo (in een shelletje natuurlijk):

mplayer -dumpstream -user-agent browserid URL

waarbij browserid de browseridentificatiestring is zoals deze in de logs van de webserver van de publieke omroep zal gaan verschijnen, en URL de URL van de stream is.
Voor de browseridentificatie kun je alles invullen wat je maar wilt. Je kunt ‘m “Sjoernaaldownlooier 2.03 Beta” noemen als je wilt. Maar het punt is dat we niet willen opvallen, want we willen dit graag kunnen blijven doen. Een zeer geschikte browseridentificatiestring is daarom

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Dat is die van een niet al te beste browser op een niet al te chique besturingssysteem

[edit: we moeten natuurlijk de UA van de player hebben, niet die van de browser!]
Windows-Media-Player/11.0.6001.7000
Dat is die van een mediaspeler met DRM, maar dat is dus wat de hoi polloi gebruiken.

Vervolgens moeten we MPlayer nog een URL geven. Uitvissen welke dat is is nontriviaal – een simpele ‘view source’ op de afspeelpagina van site van de NOS is niet voldoende omdat het streamobject met javascript geïnjecteerd wordt. Met de Firebug-extensie voor Firefox kun je wel de URL terugvinden, dus als je ook willekeurige afleveringen van uitzendinggemist.nl wilt downloaden kun je die gebruiken. De URL die ik gevonden heb wijst altijd naar het laatste journaal, hartstikke handig:

http://cgi.omroep.nl/cgi-bin/streams?/nos/journaal/laatstejournaalBB.wmv

Dus dan wordt het:

mplayer -dumpstream -user-agent 'Windows-Media-Player/11.0.6001.7000' 'http://cgi.omroep.nl/cgi-bin/streams?/nos/journaal/laatstejournaalBB.wmv'

(maar dan op één regel). Downloaden duurt net zolang als de aflevering zelf, even geduld dus. De output laat geen voortgang zien. Maar als je dit ziet is het goed gegaan:

Everything done. Thank you for downloading a media file containing proprietary and patented technology.
Core dumped ;)

Exiting... (End of file)

Voor de niet-nerds: Dit is humor, en ja, die “;)” is een knipoogsmiley. Hoe dan ook – we hebben nu een bestand ’stream.dump’. Die kun je afspelen met

mplayer stream.dump
Presto!

En verder

Als je echt wilt reltrappen kun je de boel nog met bijvoorbeeld ffmpeg2theora in een vrij en open formaat omzetten en verspreiden via BitTorrent. Dat is niet legaal. Het is ook niet legaal om dit (mbv wat scripts) met alle afleveringen van alles dat op uitzendinggemist.nl te verkrijgen is te doen. Niet legaal, maar wel technisch haalbaar, en zo’n onuitwisbare middelvinger van een terabyte is een statement zonder weerga dat wij het handhavingsprobleem van iemand anders niet op ons bordje willen krijgen, onderwijl vreugde verspreidend onder iedereen die ook in de bus een aflevering van ‘t een of ander wil bekijken.
Klinkt dat als imagine-all-the-people-dromerij? De Noorse publieke omroep stelt zelf programma’s beschikbaar in een open formaat, in hoge resolutie, via BitTorrent, zonder DRM.


Tags: , ,

When person A tells person B to lay off the crackpipe, it’s usually because A doesn’t understand B’s humour. Usually, B is not smoking crack. B is, in fact, displaying what he or she thinks is good sense of humour. Well, whoever implemented the registration process for FaceBook and the associated bug reporting functions has a REALLY GREAT sense of humour.

Prelude

Yesterday I decided to register at Facebook. Yes, I know, this is against some of my principles but I don’t think I’ll be making myself popular by being a total nerd each time – I am not going to ask near-strangers to make a special effort when they want to share $pictures_taken_during_certain_event_with_me_in_it with me. I just want to download the pictures to my own album thankyouverymuch, and I need an account for that.

Registering

Well, the form for registering on the facebook homepage looks simple enough. I usually use my gmail-account when signing up to websites, with my accountname suffixed by +some_tag. This is called “sub-addressing” and it’s mighty convenient. Do you have gmail? Try it! If your email address is myaccount@gmail.com, send a message to myaccount+hey-look-a-sub-address@gmail.com. It will pop up in your inbox. You can then use gmail’s filters on the TO:, use your imagination. If you run your own mailserver, you have even more flexibility in what you can do with sub-addressing.
So I put in myaccount+facebook@gmail.com and hit Sign Up. Facebook responds thusly:

Please enter a valid email address.

Ah right. But IT IS VALID. It’s not the first time I encounter an email address validation function that doesn’t accept valid email addresses. I suppose development of such a validation function goes a bit like this:

DEV#1: “Chief software architect told us to put in an email validation function.”
DEV#2: “Sure! Hmmm, say, what does a valid email address look like anyway?”
DEV#1: “What, do you think there’s a standard on this? Some sort of agreement on what is a valid email address? Ha-ha-ha! Of course not. And I’m a Web Developer® so I’m an expert on email addresses. I’ve seen so many email addresses in my life, I think I’ve seen them all! I’ll just exclude everything that doesn’t look like an email address I’ve ever seen. Presto!”

The standard the devs were looking for is RFC5322. “Do you know what an RFC is” should be the first question on any job interview for a web developer position. Without standards, you’re nowhere on the internet.

File bug report

Being a good geek, I embarked on a quest to point out the existance of RFC5322 to the Facebook folks. On the Help / Sign Up: Bugs and Known Problems page there’s a “I’d like to submit a bug report” link that takes you to a form for submitting signup bugs.

I could not help but try to use my sub-addressed gmail account as a contact address on this bug, but…

facebook-t

How stupid of me. They need a T! I assume they ran out of. By now I’m thinking of chartering a helicopter, flying to Facebook’s headquarters, and dropping really big concrete letter-T’s on them. But then again, they might not see this as humourous. Oh well, on with the show: I use a non-subaddressed account and click Submit.
A couple of hours later I find this gem in my inbox:


From: The Facebook Team <info+du7b7dy@facebook.com>
To: (address removed)
Subject: Re: SIGNUP-BUGS: valid email address is not accepted
Date: Tue, 14 Apr 2009 05:14:20 -0700
Reply-to: The Facebook Team <info+du7b7dy@facebook.com>
Sender: <info+du7b7dy@facebook.com>
X-Mailer: ZuckMail [version 1.00]

Hi,

Please reply to this email to verify that you are the owner of the
account that you referenced in your Facebook support inquiry. This
security step must be completed before Facebook can respond to your
inquiry. We apologize for any inconvenience.

If this email address is not associated with your account, please reply
to this email from an email address that is associated with your Facebook
account, ensuring that this email is in your response (this may require
you to copy and paste this text if your email client removes this email
from your reply).

Look at the Reply-to:, the From: and the Sender:. Is that a subaddressed email address or what? This is getting ridiculous!
More worrisome is them mentioning ‘the account you referenced in your Facebook support enquiry’. At this moment I’m thinking that they might need confirmation of the contact details of the bugreport before looking at it. Of course. Because that’s what it said in the ‘Magical T’ form (see screenshot above). I have to enter an email address, and if I have one that’s associated with a Facebook account I am to use that one. If they would require a facebook account for any bug reports they would do the check before letting me submit any bugs at all, wouldn’t they? But any email address is fine – it says so on the form – AND YOUR FORM IS CALLED “SIGNUP-BUGS”! If I’m filing a bug report because I can’t sign up then, by pure and simple logic , I DO NOT HAVE AN ACCOUNT. Requiring me to create an account so I can contact you about not being able to create an account is INSANE. Anyone not on crack gets this, so I get my hopes up and confirm my email address. It is with great anticipation that I open up the e-mail I get twenty minutes later:


From: The Facebook Team <info+du7b7dy@facebook.com>
Subject: Re: SIGNUP-BUGS: valid email address is not accepted
<snip - ed>

We currently do not have a registration under this email address.

Unfortunately, you will need to go through the sign up process again.
If you experience any further problems or encounter issues logging in,
please visit http://www.facebook.com/help.php?page=746.

Thanks,

The Facebook Team

FACEBOOK PEOPLE SMOKE CRACK

No of course they don’t. They just happen to have a really intricate sense of humour and a really crappy QA process. I tried to help and point these flaws out to them, but for the moment, I’m defeated. And I’m definitely not going to trust Facebook with my data thankyouverymuch.


Tags: , , , , ,

This is a private post. See this page for details.


Tags: ,

Gisteren rolde ik mijn tank weer eens naar de UMU-campus. Ditmaal met camera voorop “gemonteerd”:


a720ophusqvarna


En dat levert de volgende beelden op:


Download de hogeresolutieversie.

Het experiment heeft bij mij bijgedragen aan gegroeid inzicht met betrekking tot

  • cameratechnieken en hoe deze toe te passen teneinde doodgewone alledaagse scenes spannender te laten lijken dan dat ze zijn;
  • de causale keten met de elementen plaatselijke fietspadgesteldheid, fietsen, en modder op mijn broek;
  • de verhouding mens:boom die hier precies het omgekeerde is van die van Utrecht

Als de video bij jou ook tot vragen of inzichten leidt dan weet je de commentbox te vinden.


Tags: ,
© 2009-2011 Wicher Minnaard | electronic mail | theme: righteously modified "dark strict"