Je kon er op wachten. Eerst werd de muziek vermoord. Toen de film. En nu is het de beurt aan het boek. Door wie? Natuurlijk, de asociale stelende jeugd die niet meer wil betalen voor content. Aldus schrijver Ilja Leonard Pfeijffer in een column in het NRC.
Dat is natuurlijk allemaal flauwekul. ‘Niemand betaalt meer’ horen we al sinds 1999, toen Napster het als eerste mogelijk maakte om gratis muziek te downloaden. Het zou afgelopen zijn met de muziek: artiesten verdienen geen geld meer en je kunt straks alleen nog muziek horen in het museum.
Het is 2011 en er komt meer muziek uit dan ooit. De filmindustrie kwam met dezelfde argumenten en toch zijn er nog steeds films. Je zou denken dat mensen ondertussen een patroon ontdekken, maar Pfeijffer herhaalt dezelfde onheilsvoorspellingen als tien jaar geleden.
Wat zijn die voorspellingen? Ik zet ze voor u op een rijtje:
Niemand wil meer betalen voor content.
Makers krijgen geen geld meer. Einde van kunst en cultuur!
Ellende en verdoemenis. Wereldoorlog III. De wereld vergaat. Jezus komt terug op aarde.
Goed, die derde misschien niet. Wat betreft die eerste twee:
Niemand wil meer betalen voor content
Als de opkomst van het internet één ding heeft aangetoond is het wel dat mensen graag betalen voor content. Alleen niet zo graag voor de dragers. Twintig jaar geleden had je geen andere keuze dan een CD te kopen om je favoriete nummer te horen (en heel veel andere nummers waar niks aan was). De muziekindustrie dacht dat ze geen muziek verkochten maar plastic schijfjes en dus konden de prijzen lekker hoog worden gehouden.
Geen wonder dat de muziekindustrie helemaal geen zin had om iets aan die situatie te veranderen. De eerste digitale muziekkanalen waren dus allemaal illegaal: Napster, Kazaa, BitTorrent. Noem maar op. Waarom gebruikten mensen die diensten? Omdat ze graag muzikanten willen bestelen? Natuurlijk niet. Omdat er geen andere fatsoenlijke manier is om je iPod vol te krijgen. Een beetje iPod kan 5000 liedjes bevatten. Om die helemaal legaal vol te krijgen hoef je slechts 10 jaar lang een krantenwijk te lopen. En van dat geld kun je dan geen bier en sigaretten kopen. Geen wonder dat je liever download.
De boodschap is simpel: maak het voor de consument makkelijker dan de illegale alternatieven om aan content te komen. Ik betaal met liefde 5 euro per maand voor Spotify om geen gedoe te hebben met torrents en vage downloadsites met pornobanners.
Makers krijgen geen geld meer. Einde van kunst en cultuur!
Gelukkig gaat het de meeste kunstenaars niet om geld, maar om wat ze maken. Hoeveel muzikanten zijn er die hun muziek gratis op het internet zetten? Hoeveel filmmakers zetten hun filmpjes gratis op YouTube? Hoeveel schrijvers sturen hun schrijfsels gratis en voor niets de wereld in?
Het aantal mensen wat echt aan kunst kan verdienen is altijd heel erg klein geweest. Kunst is sappelen. En soms heb je geluk en kun je er wel een (mager belegde) boterham aan verdienen.
En dat verdorven internet kan je daar goed bij helpen. Ik ben de afgelopen jaren nog nooit zo veel naar (dure!) concerten geweest. Waarom? Omdat ik de muziek allemaal (bijna) gratis heb kunnen luisteren. Ik ben de afgelopen maanden nog nooit zoveel naar de bios geweest dankzij Cineville, waarmee je voor een vast bedrag per maand zo vaak naar de film mag als je wilt.
Dus lieve schrijvers: ga vooral door met schrijven. Bedenk nieuwe manieren om je publiek er kennis mee te laten maken. Gebruik het internet om er geld mee te verdienen. Onderzoek wat je publiek mist en speel daar op in.
En luister vooral niet naar mensen die zure stukjes schrijven in het NRC.
Cross-browser testing is pretty essential when developing web sites. Most of the bugs you need to fix are probably in older versions of Internet Explorer. Both Chrome and Firefox have a very fast release cycle, where new versions are released every six weeks or so.
However, there are still many people using the older 3.6 version of Firefox. Firefox 3.6 has a few bugs, and because of its big installed base you probably need to run some tests on it as well.
There’s a problem here: Firefox doesn’t like it when two different versions are run side-by-side. Fortunately there are a few tricks you can use to make this happen. This should also work on Snow Leopard, provided you have at least 10.6.2, because the --args parameter was introduced in that version.
Download the Firefox 3.6 release from Mozilla.com.
Unzip and mount the DMG file.
Drag the file from the DMG to your Desktop instead of to the Applications folder.
Rename the .app to ‘Firefox36.app’ and move it to your /Applications folder
Run this command from a Terminal (found in /Applications/Utilities): /Applications/Firefox36.app/Contents/MacOS/firefox-bin -ProfileManager
Add a new account. Call it ‘test’.
Run Automator. From the ‘Choose a type for your document’ menu, select ‘Application’.
Drag ‘Run Shell Script’ to the action area.
In the content area (where ‘cat’ is displayed) copy-paste this line: open /Applications/Firefox36.app --args -P test
Save the document to /Applications as ‘Firefox 3.6’
Drag ‘Firefox 3.6’ application from the Applications folder to your dock for fast access.
You’re done!
For a nice icon to differentiate your current Firefox version with the old one get the full resolution PNG from above this article right here. Open it in preview, select all (Cmd-A) and press copy (Cmd-C). Open up the Automator .app by right-clicking and selecting ‘Get info’ or hitting Cmd-I. Select the icon in the topleft corner so that it is outlined and press Paste (Cmd-V).
Jason Rudolph has a great blog post on merging files from one branch to another in git. In most cases you probably want to cherry-pick commits, however for a quick and fast solution this is pretty cool:
$ git branch
* master
twitter_integration
$ git checkout twitter_integration app/avatar.rb
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: app/models/avatar.rb
#
$ git commit -m "'Merge' avatar code from 'twitter_integration' branch"
[master]: created 4d3e37b: "'Merge' avatar code from 'twitter_integration' branch"
1 file changed, 72 insertions(+), 0 deletions(-)
Two things i noticed about this method:
Wildcards and directories work too. So instead of getting a single file from another branch you can also do a git checkout branch * or git checkout branch path/to/directory
All paths are relative, so if you’re not in the root of a repo, you need to give the relative path to your file(s).
Unfortunately request doesn’t come with an easy convenience parameter you can use, so you need to provide it by yourself. The common way is to add it as an extra HTTP header.
Let’s say you need to login to example.com using user and pass as your username/password.
var request = require('request'),
username = "john",
password = "1234",
url = "http://www.example.com",
auth = "Basic " + new Buffer(username + ":" + password).toString("base64");
request(
{
url : url,
headers : {
"Authorization" : auth
}
},
function (error, response, body) {
// Do more stuff with 'body' here
}
);
This is pretty verbose. Fortunately, you can use a trick using the URL itself, as specified in RFC 1738. Simply pass the user/pass before the host with an @ sign.
var request = require('request'),
username = "john",
password = "1234",
url = "http://" + username + ":" + password + "@www.example.com";
request(
{
url : url
},
function (error, response, body) {
// Do more stuff with 'body' here
}
);
De zogenaamde digitale nomade is in opkomst: geen kantoor meer nodig, je werkt op je laptop vanuit een koffiebar. Of zoiets. Nu zou ik mezelf helemaal geen digitale nomade willen noemen, maar ik vind het wel fijn om af en toe wat mails weg te werken op een andere plek dan mijn eigen huis.
De eisen zijn simpel: koffie en wifi. Maar dat te vinden is nog niet zo makkelijk. Ik probeer af en toe een locatie uit en ik blog hier mijn bevindingen.
Update: sinds 4 februari 2013 is het niet meer mogelijk om gratis te internetten in de OBA. Je betaalt 2 euro per uur of je moet een ledenpas voor € 17,50 per jaar kopen.
Wifi
Meestal goed. Voordat je kan internetten als niet-bieblid moet je eerst een account aanmaken. Zo’n beetje al je persoonsgegevens dien je te overhandigen, inclusief je paspoortnummer. Je account moet je laten goedkeuren bij de balie, en je paspoort moet je dan ook laten zien. Er zal vast een goede reden voor zijn, maar ik vind het wel heel heftig dat je zonder het overhandigen van al die gegevens niet kan internetten in de OBA.
Als je eenmaal een account heb kun je inloggen via ‘OBA-easynet’ met je wachtwoord en gebruikersnaam. Het netwerk is meestal goed, maar soms zijn er (tijdelijke) dipjes waardoor dingen tergend traag gaan. Het zal vast te maken hebben met de populariteit: op een gemiddelde dag zitten er heel wat mensen met laptops te werken.
Als het echt heel traag is: soms kun je ook de gratis wifi ontvangen van het naastgelegen Vapiano restaurant. Ook veranderen van plek heeft wel eens zin: het internet kan bijvoorbeeld een paar verdiepingen hoger opeens prima zijn, terwijl het bij de koffiecorner ontzettend traag is.
Op het eerste oog zijn er geen poorten geblokkeerd: Spotify, SSH, secure mail en IRC werken prima.
Koffie
Tot een uur of 18.00 is er een koffiebar open op de eerste etage, in de ‘leeszaal’ met kranten en dergelijke. De bar wordt gerund door La Place wat de forse prijzen verklaart: 2,20 voor een normale koffie, 2.60 voor een cappucino of latte. Die koffie komt dan uit een (weliswaar goede) automaat.
Stroom
In de leeszaal bij de koffiebar zijn bij alle tafels (wel enigszins onhandige geplaatste) stekkerdozen. Hoera!
Toilet
Op de begane grond is een toilet met een ouderwetse toiletjuffrouw. 30 cent per keer.
Omgeving en locatie
De OBA zit in een prachtig gloednieuw pand van de hand van architect Jo Coenen op het Oosterdokseiland. Het is ongeveer een kwartiertje lopen vanaf Amsterdam CS. Wel een klein beetje uit de richting van het centrum, en de route wordt op het moment van schrijven hevig verbouwd, dus het is een beetje behelpen.
De verplichte paspoortcheck, dure koffie en wisselend netwerk zijn minpuntjes. Maar: het pand is prachtig, de sfeer is prettig en het is zeer aan te prijzen dat de bieb, ook op zondag, tot 22.00 open is.
Silverlight is one of those browser technologies that you just wish wasn’t there. Proprietary,buggy, not widely used, and difficult to implement. Unfortunately, sometimes you can’t live without it when you want to play, for example, Windows Media files in a browser.
While working with Silverlight i encountered quite a few bugs in its implementation in browsers, especially when working together with Javascript. Here are a few bugs i encountered and possible workarounds.
All these bugs are noticed when using Silverlight 4.
overflow:hidden / overflow:auto bug
Browsers affected: Firefox 4 (Mac / Win)
The bug: when you put the Silverlight <object> inside a div, every time you change the overflow property from hidden to auto (making scrollbars appear) the Silverlight object re-initializes. This is especially frustrating with videos, that start from the beginning.
The official docs actually have this wonderful explanation:
Because of browser differences, the Silverlight plug-in does not support the cascading style sheets (CSS)overflow property on the object element or on a parent container element, such as a div element.
Workaround: This only seems to happen when the overflow property is changed by a user action, such as with a :hover pseudoclass. When you ‘force’ the browser to hide the scrollbar the Silverlight object doesn’t restart. For example, when you set the height of the div to a very large height the scrollbar disappears but the object doesn’t restart.
Another workaround when you need a scrollbar is to use a custom Javascript solution. I recommend the excellent jScrollPane jQuery plugin.
Offscreen initialize bug
Browsers affected: All browsers on Mac (tested: Chrome, Safari, Firefox)
The bug: This Mac-only bug happens when you initialize the Silverlight object at a place that is not on-screen (for example to create an audio-only player that you don’t want to see) the object doesn’t initialize. When you scroll the object into screen (e.g. by using Firebug) the object starts.
Workaround: difficult. With an audio player you could put it in a div with position: fixed, but putting multiple ‘audio pixels’ on top of each other using z-index won’t work though.
Ik had mijn moeder een laptop kado gedaan: mijn oude MacBook. Een van de eerste dingen die ze er mee wilde was radio luisteren. Ik keek met haar mee en toen viel het me op hoe ingewikkeld het is om ‘gewoon’ radio te luisteren op het internet.
Om te beginnen met de publieke radiozenders: die gebruiken allemaal nog standaard Windows Media Player. Dat werkt niet op een Mac. Je kunt wel Flash of Quicktime gebruiken maar dat moet dan eerst via een selectiemenu. Niet echt handig. En voor elke zender moet je naar een andere site. ‘Zappen’ tussen radiozenders is zo eigenlijk moeilijker dan bij een ouderwets radiotoestel.
Er zijn wel verzamelsites, zoals radio.nl, Nederland.FM en allradio.nl. Maar hebben een druk uiterlijk, gebruiken ook vaak Windows Media streams en staan vol reclamebanners.
Misschien heb je ‘m al gezien, misschien ook niet, maar sinds 1 april staat een nieuwe website online waar ik aan deelneem: 365dagenkunst.nl. Het concept is hetzelfde als 365 DAGEN HAY: elke dag een nieuw kunstwerk. Nieuw is dat de kunstwerken van verschillende kunstenaars komen: in totaal doen er twaalf mensen mee aan de website, sommige wekelijks, sommige tweewekelijks, en sommige eenmaal per maand.
De zogenaamde digitale nomade is in opkomst: geen kantoor meer nodig, je werkt op je laptop vanuit een koffiebar. Of zoiets. Nu zou ik mezelf helemaal geen digitale nomade willen noemen, maar ik vind het wel fijn om af en toe wat mails weg te werken op een andere plek dan mijn eigen huis.
De eisen zijn simpel: koffie en wifi. Maar dat te vinden is nog niet zo makkelijk. Ik probeer af en toe een locatie uit en ik blog hier mijn bevindingen.
Wisselend. Inloggen op ‘BIBLIOTHEEK DENHAAG’ (sic), klikken op ‘ik ga akkoord met die pdf met voorwaarden die ik niet lees’ en je kunt “draadloos internetten, niet via een kabel maar via een radiofrequentie” (aldus de handleiding).
De verbinding was over het algemeen vrij vlot, met wat kleine hikjes en vertragingen tot opeens de complete verbinding wegviel en het netwerk niet meer te vinden was. Misschien is het een incident, maar na een half uur was de verbinding nog steeds weg en het bezoek aan de bibliotheek dus afgelopen.
Ondanks onheilspellende berichten in de handleiding dat “het gebruik van MSNmessenger en e-mail clients niet mogelijk is” lijken er geen poorten te zijn geblokkeerd en werkt SSH, (secure) mail, FTP, Spotify en IRC prima.
Voor de nerds het bekende grafiekje van speedtest.net:
Koffie
In de koffiebar op de begane grond. In het weekend is er alleen een automaat die iets oplevert wat het midden houdt tussen slappe oploskoffie, afwaswater en chocolademelk. Die koffie mag je dan vervolgens alleen opdrinken in die (rumoerige en drukke) bar, in de rest van het gebouw zijn alleen flesjes water toegestaan.
Stroom
In de grote studiezaal op de vijfde verdieping zijn er stopcontacten ingebouwd in de tafels. Hulde! In de rest van het gebouw is het even zoeken naar stroom.
Toilet
Er zijn bizar weinig toiletten voor een gebouw met zoveel studieplekken en bezoekers. Alleen op de derde en vierde verdieping zijn kleine, behoorlijk vieze toiletten. Het enige voordeel: ze zijn gratis.
Omgeving en locatie
De bibliotheek zit in het prachtige ‘ijspaleis’ aan het Haagse Spui, op vijf minuten loopafstand van het centraal station en het binnenhof. De bibliotheek is ‘veel meer dan boeken alleen’, met oefenruimtes voor muzikanten, spelletjes, optredens en exposities.
Openingstijden
Doordeweeks tot 20.00, in het weekend tot 17.00. De complete openingstijden zijn hier te vinden.
Oordeel
Wisselend. De locatie is prachtig en rustig, maar het onbetrouwbare internet, de matige toiletten, en het gebrek aan koffie boven de begane grond zijn grote missers. Maar als het internet het doet, en je hebt geen behoefte aan koffie is het een prima plek.
jQuery 1.5 adds better support for JSONP requests. As you might know, JSONP is a way to avoid the same-origin policy and do cross-domain requests by adding a method call around the JSON data.
Because browsers don’t return data from requests that fail, error handling is tricky compared to normal AJAX requests. There is a workaround by using a timer, which is the way the popular jquery.jsonp plugin solves it.
jQuery 1.5 adds this workaround, so you don’t need this plugin. All other features of the plugin, such as custom callback naming, are possible in jQuery now as well.
The timeout parameter is essential, because this indicates when a request should be considered ‘failed’. Because of this extra parameter you need to use $.ajax instead of $.getJSON.
The req variable contains the jqXHR object, which can be used to attach multiple callbacks and error handlers.