<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

 <title>Librador</title>
 
 <link href="http://www.librador.com" />
 <updated>2012-05-27T02:22:31+02:00</updated>
 <id>http://www.librador.com/</id>
 
 <author>
   <name>Martin Vilcans</name>
   
 </author>
 

 
 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Librador" /><feedburner:info uri="librador" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
   <title>Ludum Dare 23 postmortem</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/SwruWV_v_hw/" />
   <updated>2012-04-29T00:00:00+02:00</updated>
   <id>http://www.librador.com/2012/04/29/Ludum-Dare-23-postmortem</id>
   <content type="html">&lt;span class='image '&gt;&lt;a href='/images/blog/tinyshipping.png'&gt;&lt;img src='/images/blog/tinyshipping_508x400.png' width='508' height='400' alt='' /&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;Last weekend, I took part in the the 48 hour online game competition &lt;a href='http://www.ludumdare.com'&gt;Ludum Dare&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The result of the theme voting was announced at 3 a.m. Saturday morning (Swedish time). I spent the morning without working on the game, but thinking a little about the theme, which was &lt;em&gt;tiny world&lt;/em&gt;. My first idea, and the one I went for, was a cross between two old games: Ports of Call and Elite. Ports of Call because it would be about shipping cargo across the world, and Elite because of the trading aspect, coupled with real-time driving of the vessels. In the end, it turned out less like a strategy game and more like a driving game compared to my original idea. All for the better, I think.&lt;/p&gt;

&lt;p&gt;The competition entry can be &lt;a href='http://ld23.librador.com'&gt;played online&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I spent most of the time working on the game at different cafés in Stockholm. Two friends joined, so we could work on our respective games while chatting and drinking coffee.&lt;/p&gt;

&lt;p&gt;I posted about &lt;a href='http://www.ludumdare.com/compo/2012/04/16/im-in-html-game-or-not/'&gt;the technology I was going to use&lt;/a&gt; on the Ludum Dare site, and those are the tools I actually ended up using, so I actually made an HTML/JavaScript/WebGL based game instead of chickening out and using proved technology.&lt;/p&gt;

&lt;p&gt;Let me tell you a bit about the tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href='http://www.initializr.com/'&gt;Initializr&lt;/a&gt;: Generates a set of files that&amp;#8217;s a template for an HTML project. Perhaps not that necessary for a one page game, but it comes with some useful functionality, like build scripts for minifying JavaScript code.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://coffeescript.org'&gt;CoffeeScript&lt;/a&gt;: A programming language that is a very thin layer on top of JavaScript. Think of it like JavaScript with better syntax and fewer pitfalls. CoffeeScript can be set up to watch for changes in your CoffeeScript source files, and compile them into JavaScript as soon as they change. This works well, except that in my setup, I only got an error message in the console only if there was a compilation error. In the future, I&amp;#8217;ll make sure it pops up a notification (Growl style) so I won&amp;#8217;t miss compilation errors and wonder why my code changes don&amp;#8217;t do anything.&lt;br /&gt;CoffeeScript the programming language works well. It has some syntactic quirks, but it still is better than pure JavaScript. Debugging reminds me about old times when I had to look at disassembled code to debug code written in C++, but now I have to look at JavaScript code to debug code originally written in CoffeeScript. I don&amp;#8217;t consider this much of a problem, because the CoffeeScript code and JavaScript code are pretty similar. It&amp;#8217;s mostly a matter of line numbers that don&amp;#8217;t match up.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://mrdoob.github.com/three.js/'&gt;three.js&lt;/a&gt;: A library for 3D graphics in JavaScript that takes care of some low-level details in WebGL. Unfortunately it doesn&amp;#8217;t have &lt;em&gt;any&lt;/em&gt; API documentation, but the code is easy to read, so it isn&amp;#8217;t a huge problem. I didn&amp;#8217;t try anything advanced with three.js, but it served my purposes well.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://pivotal.github.com/jasmine/'&gt;Jasmine&lt;/a&gt;: A JavaScript testing framework (or &lt;em&gt;BDD framework&lt;/em&gt; as they call it; the difference is philosophical). I set this up beforehand in case I would write code that would benefit from tests. In the end, I used it very little, but I think it is the best testing framework that I&amp;#8217;ve seen in any language, and I&amp;#8217;ll continue using it for future projects.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://fabfile.org'&gt;Fabric&lt;/a&gt;: Basically just a way to write scripts that run on remote hosts, using Python instead of something like Bash. I prepared Fabric tasks beforehand for uploading the project to my server, so I could deploy a new version with a single command. It was useful to easily deploy once in a while so that other people could test the game.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://analytics.google.com'&gt;Google Analytics&lt;/a&gt;: Used to track the number of visitors that has WebGL enabled, the number of visitors that started the game, and the number that finished it. This is just to satisfy my curiosity. I would like to add error reporting, so that every error that occurs is reported so I get to know about it.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://www.drpetter.se/project_sfxr.html'&gt;sfxr&lt;/a&gt;: For creating the sound effects. It is a sound synthesizer with a confusing interface, but with just a few clicks you can get a useful sound. If you like 80&amp;#8217;s style sound effects, that is.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://www.blender.org'&gt;Blender&lt;/a&gt;: For creating the 3D model for the ships.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://www.gimp.org'&gt;Gimp&lt;/a&gt;: For general image manipulation.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://www.adobe.com/products/photoshop.html'&gt;Photoshop&lt;/a&gt;: For painting the Earth texture.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://linuxmint.com'&gt;Linux Mint&lt;/a&gt;: Primary development OS (laptop).&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://www.ubuntu.com'&gt;Ubuntu&lt;/a&gt;: Secondary development OS (desktop).&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://windows.microsoft.com'&gt;Windows&lt;/a&gt;: For running Photoshop and sfxr.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://git-scm.com'&gt;Git&lt;/a&gt; on &lt;a href='https://github.com'&gt;GitHub&lt;/a&gt;: Version control. &lt;a href='https://github.com/vilcans/LD23'&gt;Here&amp;#8217;s the repository&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://www.mozilla.org/en-US/firefox/fx/'&gt;Firefox&lt;/a&gt; with &lt;a href='http://getfirebug.com'&gt;Firebug&lt;/a&gt;: Main development browser.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='https://www.google.com/chrome'&gt;Google Chrome&lt;/a&gt; and &lt;a href='http://www.chromium.org/Home'&gt;Chromium&lt;/a&gt;: For testing. Chrome has better performance than Firefox, but I&amp;#8217;m so used to developing with Firefox, so that&amp;#8217;s what I used.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://www.gnu.org/software/make/'&gt;Gnu Make&lt;/a&gt;: Build scripts.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://www.vorbis.com/'&gt;vorbis-tools&lt;/a&gt;: For converting audio from wav to ogg.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some lessons learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;HTML text elements on top of WebGL canvas drastically reduced performance. In Chrome, using requestAnimationFrame helped, but not in Firefox.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;It is possible to play sound clips by programatically creating a new &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt; element for every sound, but every time I do that, the browser connects to the server and gives visible stutter. It may be possible to make it work smoothly by setting cache headers properly on the audio URLs. Another untested idea is to use data URLs instead of HTTP URLs.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Caching &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt; elements does not work. When you call the &lt;code&gt;play&lt;/code&gt; function on the element, the sound does not always play. This is probably because there needs to be some time between every call to &lt;code&gt;play&lt;/code&gt; for one element.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Considering my relatively relaxed attitude towards the competition, the game turned out pretty well. As always at the end of one of these competitions, I have lots of plans for how the game can be improved and that I should make a real polished game out of it.&lt;/p&gt;

&lt;p&gt;I just know how that normally turns out. You know, there are so many other games to be made!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=SwruWV_v_hw:BklmE4wqcHc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=SwruWV_v_hw:BklmE4wqcHc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=SwruWV_v_hw:BklmE4wqcHc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=SwruWV_v_hw:BklmE4wqcHc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=SwruWV_v_hw:BklmE4wqcHc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=SwruWV_v_hw:BklmE4wqcHc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/SwruWV_v_hw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2012/04/29/Ludum-Dare-23-postmortem/</feedburner:origLink></entry>
 
 <entry>
   <title>I'm in Ludum Dare 23</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/EXLdi6Emj7o/" />
   <updated>2012-04-19T00:00:00+02:00</updated>
   <id>http://www.librador.com/2012/04/19/Im-in-Ludum-Dare-23</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ll be competing in the 10 year anniversary of the online game competition &lt;a href='http://www.ludumdare.com'&gt;Ludum Date&lt;/a&gt;. This will be my first time in that competition, but as you surely remember, I took part in &lt;a href='http://www.librador.com/2006/11/21/The-72-Hour-Game-Development-Competition/'&gt;another rapid game development competition&lt;/a&gt; a while back.&lt;/p&gt;

&lt;p&gt;Oh, it was six years ago&amp;#8230;&lt;/p&gt;

&lt;p&gt;Time flies.&lt;/p&gt;

&lt;p&gt;Anyway:&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve posted a bit about what &lt;a href='http://www.ludumdare.com/compo/2012/04/16/im-in-html-game-or-not/'&gt;technology I&amp;#8217;ll use for this competition&lt;/a&gt; at the Ludum Date site.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=EXLdi6Emj7o:LSFi2GTfrcc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=EXLdi6Emj7o:LSFi2GTfrcc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=EXLdi6Emj7o:LSFi2GTfrcc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=EXLdi6Emj7o:LSFi2GTfrcc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=EXLdi6Emj7o:LSFi2GTfrcc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=EXLdi6Emj7o:LSFi2GTfrcc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/EXLdi6Emj7o" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2012/04/19/Im-in-Ludum-Dare-23/</feedburner:origLink></entry>
 
 <entry>
   <title>Screenplain towards 1.0</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/MxGnojAHR8g/" />
   <updated>2012-02-26T00:00:00+01:00</updated>
   <id>http://www.librador.com/2012/02/26/Screenplain-towards-1.0</id>
   <content type="html">&lt;p&gt;&lt;a href='http://www.screenplain.com'&gt;Screenplain&lt;/a&gt; is a utility I made for converting a movie screenplay from a simple text file to a good looking format.&lt;/p&gt;

&lt;p&gt;Since my previous post &lt;a href='http://www.librador.com/2011/12/09/SPMD-Screenplain-and-Marked/'&gt;SPMD, Screenplain and Marked&lt;/a&gt;, the specification of the text format has changed somewhat since screenwriter &lt;a href='http://johnaugust.com/'&gt;John August&lt;/a&gt; joined the collaborative effort of creating a simple text format for screenplays. It also has changed its name from Screenplay Markdown to &lt;a href='http://fountain.io/'&gt;Fountain&lt;/a&gt;, which as you can see has its own web site now.&lt;/p&gt;

&lt;p&gt;Screenplain now can read and understand most features of the Fountain format. Here’s a screenshot of the HTML output from a document with &lt;em&gt;sections&lt;/em&gt;, which allow you to structure your screenplay:&lt;/p&gt;
&lt;span class='image '&gt;&lt;a href='/images/blog/screenplain-sections.png'&gt;&lt;img src='/images/blog/screenplain-sections_538x400.png' width='538' height='400' alt='' /&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;Thanks to &lt;a href='http://www.candlerblog.com/'&gt;Jonathan Poritsky&lt;/a&gt; for the work on the CSS for Screenplain’s HTML output.&lt;/p&gt;

&lt;p&gt;Try &lt;a href='http://www.screenplain.com/'&gt;Screenplain online&lt;/a&gt; or download the &lt;a href='https://github.com/vilcans/screenplain'&gt;code from Github&lt;/a&gt;. The code is still work in progress, but it can be used today as a command-line program. It can also be used as a library, but the API may change, so I don’t guarantee that it’s stable yet.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=MxGnojAHR8g:c66mOG4rgzI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=MxGnojAHR8g:c66mOG4rgzI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=MxGnojAHR8g:c66mOG4rgzI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=MxGnojAHR8g:c66mOG4rgzI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=MxGnojAHR8g:c66mOG4rgzI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=MxGnojAHR8g:c66mOG4rgzI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/MxGnojAHR8g" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2012/02/26/Screenplain-towards-1.0/</feedburner:origLink></entry>
 
 <entry>
   <title>So much better: Fincher's The Girl with the Dragon Tattoo</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/8BwScEwaTtw/" />
   <updated>2012-01-29T00:00:00+01:00</updated>
   <id>http://www.librador.com/2012/01/29/Finchers-Girl-with-the-Dragon-Tattoo-So-much-better</id>
   <content type="html">&lt;span class='image aside-right'&gt;&lt;a href='/images/blog/The_Girl_with_the_Dragon_Tattoo_Poster.jpg'&gt;&lt;img src='/images/blog/The_Girl_with_the_Dragon_Tattoo_Poster_264x400.jpg' width='264' height='400' alt='' /&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;In a previous rant I posed the question, &lt;a href='http://www.librador.com/2011/03/22/What-is-wrong-with-The-Girl-with-the-Dragon-Tattoo/'&gt;&amp;#8220;What is wrong with The Girl with the Dragon Tattoo&amp;#8221;&lt;/a&gt; (the Swedish version, directed by Niels Arden Oplev) and proceeded with trying to figure out why I didn&amp;#8217;t care very much for this successful film.&lt;/p&gt;

&lt;p&gt;I was pretty sure that David Fincher&amp;#8217;s re-adaptation of the novel would be better.&lt;/p&gt;

&lt;p&gt;And boy, was I right. I love it when that happens. (Although I&amp;#8217;m getting used to it.)&lt;/p&gt;

&lt;p&gt;Minor spoilers ahead!&lt;/p&gt;

&lt;p&gt;The story is very much the same. The differences between the two versions is more about the details. The mise en scène, costumes, writing, cinematography and editing just feels much more solid. (Especially the writing and editing. In Fincher&amp;#8217;s version we don&amp;#8217;t get stupid lines like &amp;#8220;Do you have a negative scanner?&amp;#8221; followed by an pointless scene showing the main character scanning old photos.)&lt;/p&gt;

&lt;p&gt;First of all, there&amp;#8217;s the &lt;a href='http://www.youtube.com/watch?feature=player_detailpage&amp;amp;v=tcp9Ysi75f0'&gt;title sequence&lt;/a&gt;:&lt;/p&gt;
&lt;object style='height: 390px; width: 640px'&gt;
  &lt;param name='movie' value='http://www.youtube.com/v/tcp9Ysi75f0?version=3&amp;feature=player_detailpage' /&gt;
  &lt;param name='allowFullScreen' value='true' /&gt;
  &lt;param name='allowScriptAccess' value='always' /&gt;
  &lt;embed allowfullscreen='true' type='application/x-shockwave-flash' src='http://www.youtube.com/v/tcp9Ysi75f0?version=3&amp;amp;feature=player_detailpage' width='640' height='360' allowScriptAccess='always' /&gt;
&lt;/object&gt;
&lt;p&gt;Fincher&amp;#8217;s movie starts out with pretty much the same scenes as Oplev&amp;#8217;s version, but this dark, oily and disturbing James Bondesque sequence makes up for the lack of an opening scene that gives a hint about the events that will follow.&lt;/p&gt;

&lt;p&gt;When the story starts to unfold, it is exciting even though having seen Oplev&amp;#8217;s version, I know what will happen. (I guess that was &amp;#8220;everone else&amp;#8217;s&amp;#8221; experience of the Swedish film, as &amp;#8220;everyone else&amp;#8221; had already read the book and loved the film. See &lt;a href='/2011/03/22/What-is-wrong-with-The-Girl-with-the-Dragon-Tattoo/'&gt;my old post&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;I didn&amp;#8217;t count, but I think Fincher cut down on the number of characters, and certainly tells a tighter story. The story with Salander&amp;#8217;s supervisor was good in Oplev&amp;#8217;s film (the best part of the film actually), but felt disconnected from the rest of the story. Fincher manages to keep it all together. And he makes Bjurman the rapist a more interesting character.&lt;/p&gt;

&lt;p&gt;Talking about characters, Fincher&amp;#8217;s Salander shows more of a character arc. She starts out harsh and unpleasant, but by the end she shows more emotions and we end up feeling sorry for her. In Oplev&amp;#8217;s version she she&amp;#8217;s sort of an asshole through the whole movie. That&amp;#8217;s cool too, but we humans love to see people change for the better.&lt;/p&gt;

&lt;p&gt;All in all, Fincher&amp;#8217;s film is a better watch than Oplev&amp;#8217;s. With seven times the budget, anything else would have been embarassing.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=8BwScEwaTtw:ALMDG1A0ubE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=8BwScEwaTtw:ALMDG1A0ubE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=8BwScEwaTtw:ALMDG1A0ubE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=8BwScEwaTtw:ALMDG1A0ubE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=8BwScEwaTtw:ALMDG1A0ubE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=8BwScEwaTtw:ALMDG1A0ubE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/8BwScEwaTtw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2012/01/29/Finchers-Girl-with-the-Dragon-Tattoo-So-much-better/</feedburner:origLink></entry>
 
 <entry>
   <title>SPMD, Screenplain and Marked</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/rQ0llIgOszw/" />
   <updated>2011-12-09T00:00:00+01:00</updated>
   <id>http://www.librador.com/2011/12/09/SPMD-Screenplain-and-Marked</id>
   <content type="html">&lt;p&gt;It&amp;#8217;s about time I tell you about one project that I&amp;#8217;ve been working on from time to time for the last months. It&amp;#8217;s called Screenplain, and its purpose in life is to take an input file in a simple text format and output a properly formatted screenplay.&lt;/p&gt;
&lt;span class='image '&gt;&lt;a href='/images/blog/screenplain.png'&gt;&lt;img src='/images/blog/screenplain_607x400.png' width='607' height='400' alt='' /&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;Screenplain can create files in HTML and FDX format (a file format used by Final Draft, which is commonly used in the film industry), but the most interesting story is perhaps the one about the &lt;em&gt;input&lt;/em&gt; format.&lt;/p&gt;

&lt;p&gt;The idea is that a plain text format is flexible. It can be edited on almost any computer or mobile device. If you&amp;#8217;re on the go and there&amp;#8217;s no screenwriting software for your smartphone, you can still edit plain text files with it. The problem with text files is that it can be difficult to comply with the standard screenplay format. With Screenplain you don&amp;#8217;t have to. Just write your script as plain text, and Screenplain takes care of formatting it so it looks good.&lt;/p&gt;

&lt;p&gt;I started working on Screenplain this summer, and at the same time &lt;a href='http://prolost.com'&gt;Stu Maschwitz&lt;/a&gt; pulled a lazyweb and basically wrote, &amp;#8221;&lt;a href='http://prolost.com/blog/2011/8/9/screenplay-markdown.html'&gt;wouldn&amp;#8217;t it be great if there was some screenplay software that could work with plain text?&lt;/a&gt;&amp;#8221; He had given much more thought to the idea and even wrote a formal specification of the text format. He called the format Screenplay Markdown (SPMD) as it is inspired by John Gruber&amp;#8217;s popular &lt;a href='http://daringfireball.net/projects/markdown/'&gt;Markdown&lt;/a&gt; (which I&amp;#8217;m incidentally using to write this very blog post). Great! I rewrote Screenplain to use his format instead of the one that I had come up with.&lt;/p&gt;

&lt;p&gt;Then I created an &lt;a href='http://www.screenplain.com'&gt;online version of Screenplain&lt;/a&gt; so that people can try it out without having to install anything. That caught some interest.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.candlerblog.com/'&gt;Jonathan Poritsky&lt;/a&gt; did a great job on creating a style sheet so that Screenplain&amp;#8217;s HTML output looks as close as possible to an actual screenplay. (This is tricky to do in HTML.) He also made sure that Brett Terpstra&amp;#8217;s Markdown editor &lt;a href='http://markedapp.com/'&gt;Marked&lt;/a&gt; got &lt;a href='http://support.markedapp.com/kb/how-to-tips-and-tricks/using-screenplay-markdown-with-marked'&gt;support for SPMD&lt;/a&gt; through Screenplain.&lt;/p&gt;

&lt;p&gt;There is still lots to do with Screenplain. I&amp;#8217;d like to add PDF output support and perhaps make it more friendly for people who aren&amp;#8217;t that familiar with the command line (though if you have a Mac, Marked should be easy to use). If it weren&amp;#8217;t for Stu&amp;#8217;s and Jonathan&amp;#8217;s enthusiastic support and work, I still wouldn&amp;#8217;t have considered Screenplain ready for release. But as people say: Release early, release often. And I did &amp;#8211; the former. And I understood that Screenplain is already pretty damn useful. Please let me know what &lt;em&gt;you&lt;/em&gt; think.&lt;/p&gt;

&lt;p&gt;Screenplain is licensed under MIT and the code is &lt;a href='https://github.com/vilcans/screenplain'&gt;available at Github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Today, Jonathan and Brett made a second release of SPMD for Marked (which uses Screenplain). See their posts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jonathan Poritsky&amp;#8217;s &lt;a href='http://www.candlerblog.com/2011/12/08/screenplay-markdown-for-marked-is-here/'&gt;post about SPMD for Marked&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Brett Terpstra&amp;#8217;s &lt;a href='http://brettterpstra.com/calling-screenwriter-nerds/'&gt;post about SPMD for Marked&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=rQ0llIgOszw:mfcZC3J__A0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=rQ0llIgOszw:mfcZC3J__A0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=rQ0llIgOszw:mfcZC3J__A0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=rQ0llIgOszw:mfcZC3J__A0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=rQ0llIgOszw:mfcZC3J__A0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=rQ0llIgOszw:mfcZC3J__A0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/rQ0llIgOszw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2011/12/09/SPMD-Screenplain-and-Marked/</feedburner:origLink></entry>
 
 <entry>
   <title>Usability and terminology in Git</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/h_pyMB48tLI/" />
   <updated>2011-07-23T00:00:00+02:00</updated>
   <id>http://www.librador.com/2011/07/23/Usability-and-terminology-in-Git</id>
   <content type="html">&lt;p&gt;&lt;em&gt;&amp;#8220;A rose by any other name would smell just as sweet.&amp;#8221;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;True, but in usability you shouldn&amp;#8217;t get too poetic with what you call things. It&amp;#8217;s easier to grasp concepts in a piece of software if it is consistent in what words it uses to describe them. One piece of software that is notoriously bad at consistent wording is Git.&lt;/p&gt;

&lt;p&gt;Being new to version control using Git can be confusing. There are many concepts that may be foreign if you&amp;#8217;re used to centralized version control systems. More so if you haven&amp;#8217;t used version control at all before. Unfortunately, Git doesn&amp;#8217;t make the transition very smooth as it has some serious usability problems related to terminology. This makes it harder than necessary to learn the concepts in Git, even though they actually aren&amp;#8217;t that complex. That&amp;#8217;s a shame since Git is a very nice version control system.&lt;/p&gt;

&lt;p&gt;Just to make it clear, I&amp;#8217;m a pretty competent Git user. People tend to think that if you complain about the usability of a piece or software, you&amp;#8217;re just not very good at it. When I say that C++ sucks for instance, it&amp;#8217;s based on 15 years of experience with it. So while I personally have no problems (any more) with the usability issues I&amp;#8217;ll discuss in this post, I can still see that they are problems as they make it harder to teach and learn Git.&lt;/p&gt;

&lt;p&gt;To start working on a git repository, you typically clone an existing one. Easy, just use the clone command and give it the URL of the repository:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git clone /path/to/some_project.git&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So, what does Git answer to the above command?&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Initialized empty Git repository in /home/martin/some_project/.git&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;WTF? I expected it to create a clone of a repository, not create an empty repository. Well, it did actually create a clone. The confusing message is from the &lt;code&gt;git init&lt;/code&gt; command that is run as a first step before git fetches and merges the other repository.&lt;/p&gt;

&lt;p&gt;Anyway, on to my point about terminology. Let&amp;#8217;s create a file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ echo Hello &amp;gt;foo.txt&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#8230;and use the &lt;code&gt;git status&lt;/code&gt; command to check the state of the project:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# On branch master
# Untracked files:
#   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to include in what will be committed)
#
#	foo.txt
nothing added to commit but untracked files present (use &amp;quot;git add&amp;quot; to track)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So now Git tells us that our new file is &amp;#8220;untracked.&amp;#8221; Sounds reasonable. We haven&amp;#8217;t added it to version control yet. Git is friendly and tells us to use &lt;code&gt;git add&lt;/code&gt; to add the file. OK, let&amp;#8217;s do that and check the status again:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git add foo.txt
$ git status
# On branch master
# Changes to be committed:
#   (use &amp;quot;git reset HEAD &amp;lt;file&amp;gt;...&amp;quot; to unstage)
#
#	new file:   foo.txt
#&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We have now &amp;#8220;added&amp;#8221; the file. It appears under &amp;#8220;Changes to be committed.&amp;#8221; And Git&amp;#8217;s helpful output from the status command tells us how to &amp;#8220;unstage&amp;#8221; it.&lt;/p&gt;

&lt;p&gt;As a Git user, you&amp;#8217;d know that the &lt;code&gt;git add&lt;/code&gt; command adds the file to the &amp;#8220;index.&amp;#8221; Contrary to its name, the &amp;#8220;index&amp;#8221; does not just hold the names of the files to be committed. It actually contains the content of the files as well. It is sometimes called the &amp;#8220;staging area&amp;#8221; instead, which is a better name, as it reflects what it is for: It is an area where you prepare your next commit. Note that neither the word index &amp;#8220;index&amp;#8221; nor the full term &amp;#8220;staging area&amp;#8221; has been used in the commands or output so far.&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s see what we&amp;#8217;re going to commit. The following command will show the differences between the last commit and the contents of the &amp;#8220;index&amp;#8221; a.k.a. the &amp;#8220;staging area&amp;#8221;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git diff --cached&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;OK, so you add the &lt;code&gt;--cached&lt;/code&gt; flag to see the difference between the &amp;#8220;index&amp;#8221;/&amp;#8221;staging area&amp;#8221; and the previous commit. So I guess the &amp;#8220;index&amp;#8221;/&amp;#8221;staging area&amp;#8221; can be called the &amp;#8220;cache&amp;#8221; too? Even though it&amp;#8217;s in no way similar to what you usually mean when you use the word &amp;#8220;cache&amp;#8221; in a computer context? (In all fairness, &lt;code&gt;--staged&lt;/code&gt; is a synonym to &lt;code&gt;--cached&lt;/code&gt;, which maps much better to the terminology used in the rest of the user interface.)&lt;/p&gt;

&lt;p&gt;If we edit a file that was already in the project, we get:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git status
# On branch master
# Changed but not updated:
#   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)
#   (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)
#
#	modified:   a.txt
#
no changes added to commit (use &amp;quot;git add&amp;quot; and/or &amp;quot;git commit -a&amp;quot;)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now, Git says that the file is modified. It also says that it&amp;#8217;s &amp;#8220;changed but not updated.&amp;#8221; So, what&amp;#8217;s up with &amp;#8220;updated&amp;#8221;? That&amp;#8217;s the same thing as &amp;#8220;staged,&amp;#8221; right?&lt;/p&gt;

&lt;p&gt;To sum this up, you &amp;#8220;add&amp;#8221; an &amp;#8220;untracked&amp;#8221; file to the &amp;#8220;index&amp;#8221; (bad name) a.k.a. &amp;#8220;staging area&amp;#8221; (good name) a.k.a. &amp;#8220;cache&amp;#8221; (lousy name). Then it becomes a &amp;#8220;change to be committed&amp;#8221; that can be &amp;#8220;unstaged&amp;#8221; using the &amp;#8220;reset&amp;#8221; command. If you change an existing file, it becomes &amp;#8220;changed&amp;#8221;/&amp;#8221;modified&amp;#8221; and needs to be &amp;#8220;updated&amp;#8221; (which you do with &amp;#8220;add&amp;#8221;).&lt;/p&gt;

&lt;p&gt;Can you see the problem here?&lt;/p&gt;

&lt;p&gt;(Based on Git version 1.7.0.4.)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=h_pyMB48tLI:YuGVAwW1UQA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=h_pyMB48tLI:YuGVAwW1UQA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=h_pyMB48tLI:YuGVAwW1UQA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=h_pyMB48tLI:YuGVAwW1UQA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=h_pyMB48tLI:YuGVAwW1UQA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=h_pyMB48tLI:YuGVAwW1UQA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/h_pyMB48tLI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2011/07/23/Usability-and-terminology-in-Git/</feedburner:origLink></entry>
 
 <entry>
   <title>How to run Django without a database</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/8B63y6aAM0Q/" />
   <updated>2011-05-23T00:00:00+02:00</updated>
   <id>http://www.librador.com/2011/05/23/How-to-run-Django-tests-without-a-database</id>
   <content type="html">&lt;p&gt;Django is an all-in one solution for building interactive web sites. It&amp;#8217;s very good for a typical setup with a web server and a database. But what if you don&amp;#8217;t need a database, for example if you get all the data through external services? Or if you&amp;#8217;re using Django with a NoSQL database, not using Django&amp;#8217;s built-in support for data models?&lt;/p&gt;

&lt;p&gt;It is possible to run Django without setting up a database. In settings.py, just set DATABASES to an empty dictionary:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;DATABASES = {}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Much of the default functionality in Django expects there to be a database. The following common applications will not work with this configuration because they require a database:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;auth&lt;/li&gt;

&lt;li&gt;contenttypes&lt;/li&gt;

&lt;li&gt;sites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These applications have to be disabled.&lt;/p&gt;

&lt;p&gt;The following applications can be used without a database:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sessions: Can be &lt;a href='http://docs.djangoproject.com/en/1.3/topics/http/sessions/#using-cached-sessions'&gt;configured&lt;/a&gt; to use a file or the cache instead of the database.&lt;/li&gt;

&lt;li&gt;messages: Does not use any storage directly, but depends on sessions by default. This can be &lt;a href='http://docs.djangoproject.com/en/1.3/ref/contrib/messages/#storage-backends'&gt;configured&lt;/a&gt; though.&lt;/li&gt;

&lt;li&gt;staticfiles: Does not use the database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The only problem left is that Django&amp;#8217;s test runner sets up a database when you run the command &lt;code&gt;manage.py test&lt;/code&gt;. It is simple to disable that behaviour.&lt;/p&gt;

&lt;p&gt;Just create the file &lt;code&gt;testing.py&lt;/code&gt; with the following contents:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;quot;&amp;quot;&amp;quot;Support for testing.&amp;quot;&amp;quot;&amp;quot;

from django.test.simple import DjangoTestSuiteRunner

class DatabaselessTestRunner(DjangoTestSuiteRunner):
    &amp;quot;&amp;quot;&amp;quot;A test suite runner that does not set up and tear down a database.&amp;quot;&amp;quot;&amp;quot;

    def setup_databases(self):
        &amp;quot;&amp;quot;&amp;quot;Overrides DjangoTestSuiteRunner&amp;quot;&amp;quot;&amp;quot;
        pass

    def teardown_databases(self, *args):
        &amp;quot;&amp;quot;&amp;quot;Overrides DjangoTestSuiteRunner&amp;quot;&amp;quot;&amp;quot;
        pass&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then in settings.py, make the following setting:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;TEST_RUNNER = &amp;#39;testing.DatabaselessTestRunner&amp;#39;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That&amp;#8217;s it. Now the test runner will not set up and tear down a database.&lt;/p&gt;

&lt;p&gt;Even though you can&amp;#8217;t use Django&amp;#8217;s models (the object/relational mapper), you will still need to create a file called &lt;code&gt;models.py&lt;/code&gt; in the application directory. This is so the test runner searches for the tests in the corresponding &lt;code&gt;tests.py&lt;/code&gt; file. The &lt;code&gt;models.py&lt;/code&gt; file can be empty.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=8B63y6aAM0Q:8rxGrtyKRQk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=8B63y6aAM0Q:8rxGrtyKRQk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=8B63y6aAM0Q:8rxGrtyKRQk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=8B63y6aAM0Q:8rxGrtyKRQk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=8B63y6aAM0Q:8rxGrtyKRQk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=8B63y6aAM0Q:8rxGrtyKRQk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/8B63y6aAM0Q" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2011/05/23/How-to-run-Django-tests-without-a-database/</feedburner:origLink></entry>
 
 <entry>
   <title>My most popular posts</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/ULuKh6SSda4/" />
   <updated>2011-05-20T00:00:00+02:00</updated>
   <id>http://www.librador.com/2011/05/20/My-most-popular-posts</id>
   <content type="html">&lt;p&gt;Statistics is more interesting than you might think, at least when it is about things that affect you. I have been using Google Analytics on this site since April 2007, so I have gathered some data about what posts visitors read, what keywords they used to find it, where they are from and what browser they are using. Sometimes the statistics surprise you.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s the list of my most popular blog posts since April 2007. (The total number of pageviews is in parenthesis.)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;28 Feb 2008 » &lt;a href='http://www.librador.com/2008/02/28/Make3D-Creates-3D-Models-from-Photos/'&gt;Make3D Creates 3D Models from Photos&lt;/a&gt; (2570)&lt;/li&gt;

&lt;li&gt;06 Dec 2007 » &lt;a href='http://www.librador.com/2007/12/06/Fotowoosh-released-as-Facebook-app/'&gt;Fotowoosh released as Facebook app&lt;/a&gt; (1609)&lt;/li&gt;

&lt;li&gt;17 Aug 2009 » &lt;a href='http://www.librador.com/2009/08/17/Jekyll-blogging-like-a-hacker/'&gt;Jekyll: Blogging like a hacker&lt;/a&gt; (1140)&lt;/li&gt;

&lt;li&gt;14 Jun 2009 » &lt;a href='http://www.librador.com/2009/06/14/How-to-enable-remote-desktop-on-headless-Mac/'&gt;How to enable remote desktop on headless Mac&lt;/a&gt; (1091)&lt;/li&gt;

&lt;li&gt;01 Feb 2008 » &lt;a href='http://www.librador.com/2008/02/01/The-Real-Problem-with-Software-Piracy/'&gt;The Real Problem with Software Piracy&lt;/a&gt; (1004)&lt;/li&gt;

&lt;li&gt;08 Aug 2007 » &lt;a href='http://www.librador.com/2007/08/08/The-Confusing-Mouseover/'&gt;The Confusing Mouseover&lt;/a&gt; (723)&lt;/li&gt;

&lt;li&gt;16 Jan 2009 » &lt;a href='http://www.librador.com/2009/01/16/The-frame-rate-of-the-universe/'&gt;The frame rate of the universe&lt;/a&gt; (637)&lt;/li&gt;

&lt;li&gt;14 Jun 2008 » &lt;a href='http://www.librador.com/2008/06/14/Set-maximum-threads-in-Blender%21/'&gt;Set maximum threads in Blender!&lt;/a&gt; (578)&lt;/li&gt;

&lt;li&gt;26 Feb 2009 » &lt;a href='http://www.librador.com/2009/02/26/Meme-time-Wikipedia-album-generator/'&gt;Meme time: Wikipedia album generator&lt;/a&gt; (520)&lt;/li&gt;

&lt;li&gt;26 Apr 2008 » &lt;a href='http://www.librador.com/2008/04/26/3D-Movies-Mainstream-or-Gimmick/'&gt;3D Movies - Mainstream or Gimmick?&lt;/a&gt; (474)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;From the top two posts, it&amp;#8217;s obvious that creating 3D models from photos is a popular subject.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s a bit depressing to see that nothing I&amp;#8217;ve written here since 2009 has been very popular. But then again, these are accumulated statistics over a long time, and it&amp;#8217;s natural that older posts have had the time to get more views.&lt;/p&gt;

&lt;p&gt;At least those posts reflect the content of this blog pretty well. That is, it&amp;#8217;s very unfocused. The only post I&amp;#8217;m not very happy about being on this list is &lt;a href='http://www.librador.com/2007/08/08/The-Confusing-Mouseover/'&gt;The Confusing Mouseover&lt;/a&gt;, because the only reason that it&amp;#8217;s popular is that lots of people google Microsoft Powerpoint. Perhaps I should set up robots.txt so that search engines don&amp;#8217;t index that page to avoid disappointing people. Or I could use that Google juice to promote my own alternative to Powerpoint. I just need to create one.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=ULuKh6SSda4:5aiPcurJSIo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=ULuKh6SSda4:5aiPcurJSIo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=ULuKh6SSda4:5aiPcurJSIo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=ULuKh6SSda4:5aiPcurJSIo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=ULuKh6SSda4:5aiPcurJSIo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=ULuKh6SSda4:5aiPcurJSIo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/ULuKh6SSda4" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2011/05/20/My-most-popular-posts/</feedburner:origLink></entry>
 
 <entry>
   <title>Stockholm Python User Group</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/6X1FpbKH51w/" />
   <updated>2011-04-15T00:00:00+02:00</updated>
   <id>http://www.librador.com/2011/04/15/Stockholm-Python-User-Group</id>
   <content type="html">&lt;p&gt;Less than a month ago I was looking for a Python user group in Stockholm, without finding any. One week ago, the local Django group changed its name to &lt;a href='https://groups.google.com/group/python-stockholm'&gt;Stockholm Python User Group&lt;/a&gt;, which made my day. I didn&amp;#8217;t know that they were more like a Python group anyway. Yesterday&amp;#8217;s meetup, which was the first I attended, was informal and spawned some interesting discussions.&lt;/p&gt;

&lt;p&gt;This post is my attempt at making the group easier to find.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=6X1FpbKH51w:5ZEfbhmdamc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=6X1FpbKH51w:5ZEfbhmdamc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=6X1FpbKH51w:5ZEfbhmdamc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=6X1FpbKH51w:5ZEfbhmdamc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=6X1FpbKH51w:5ZEfbhmdamc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=6X1FpbKH51w:5ZEfbhmdamc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/6X1FpbKH51w" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2011/04/15/Stockholm-Python-User-Group/</feedburner:origLink></entry>
 
 <entry>
   <title>Higher frame rates in upcoming blockbusters</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/3i8_aKbXUBo/" />
   <updated>2011-04-13T00:00:00+02:00</updated>
   <id>http://www.librador.com/2011/04/13/Higher-frame-rates-in-upcoming-blockbusters</id>
   <content type="html">&lt;p&gt;It&amp;#8217;s not just &lt;a href='http://www.librador.com/2008/10/24/Increase-the-frame-rate-or-be-boring-and-conservative/'&gt;me&lt;/a&gt; any more. Prominent people in the movie industry are proposing higher frame rates for movies. &lt;a href='http://www.bleedingcool.com/2011/04/12/peter-jacksons-statement-on-why-the-hobbit-is-being-filmed-at-48-fps/'&gt;Peter Jackson is shooting The Hobbit at 48 fps&lt;/a&gt; and &lt;a href='http://www.hollywoodreporter.com/news/james-cameron-urges-industry-use-173577'&gt;James Cameron considers 48 or 60 fps&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Critics say that film has been viewed at 24 fps for 90 years and it has worked just fine. True, but why not aim for better image quality? Filmmakers have done that since the medium was invented. It&amp;#8217;s not like film stock and lenses didn&amp;#8217;t evolve since the 1920&amp;#8217;s. They also say that higher frame rates look like soap operas shot on video. The notion that higher frame rates look cheap will for sure be proved wrong when The Hobbit and Avatar 2 premieres.&lt;/p&gt;

&lt;p&gt;The most interesting idea comes from the conspiracy theorists that say that increasing the frame rate is a way for the big studios to produce movies with technology too expensive for independents. Following the digital revolution in filmmaking you can get camera gear that is just as good (or the same) as the equipment used by the major studios for relatively little money. Today there&amp;#8217;s no reason that there should be differences in the image quality between high and low budget films. Unless of course the major studios start shooting at 60 fps, which the indies can&amp;#8217;t afford, which is the whole point of this according to the conspiracy theory.&lt;/p&gt;

&lt;p&gt;My view on this is that we may have to accept that. And it may not be a bad thing.&lt;/p&gt;

&lt;p&gt;In the future, there may be a more visible difference between high and low budget movies. Hollywood blockbusters will be 60 fps and 3D, while indies will be 24 fps and 2D. There&amp;#8217;s nothing wrong with that. In the 60&amp;#8217;s, many low budget movies were still shot in black and white. It didn&amp;#8217;t make them worse than the expensive ones, although they had a clearly different look. And as always, &lt;em&gt;different&lt;/em&gt; doesn&amp;#8217;t equal &lt;em&gt;worse&lt;/em&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=3i8_aKbXUBo:LzmF6m5achw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=3i8_aKbXUBo:LzmF6m5achw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=3i8_aKbXUBo:LzmF6m5achw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=3i8_aKbXUBo:LzmF6m5achw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=3i8_aKbXUBo:LzmF6m5achw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=3i8_aKbXUBo:LzmF6m5achw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/3i8_aKbXUBo" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2011/04/13/Higher-frame-rates-in-upcoming-blockbusters/</feedburner:origLink></entry>
 
 <entry>
   <title>New job at Wussap</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/F1NUoVNml_U/" />
   <updated>2011-04-12T00:00:00+02:00</updated>
   <id>http://www.librador.com/2011/04/12/New-job-at-Wussap</id>
   <content type="html">&lt;p&gt;Yesterday was the last day of my paternity leave. I&amp;#8217;m not going back to &lt;a href='http://www.hiq.se'&gt;HiQ&lt;/a&gt;, which is a bit sad since I have had a bunch of great colleagues there. But I have a good reason. My new job is as the CTO of the web startup &lt;a href='http://www.wussap.com'&gt;Wussap&lt;/a&gt;. I love being in charge of software development with a small and focused team, so I couldn&amp;#8217;t say no to this opportunity. I think we&amp;#8217;ll be able to release a great product, but it&amp;#8217;s too early for me to say when. I&amp;#8217;ll keep you updated.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=F1NUoVNml_U:jfjhB-jt6ik:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=F1NUoVNml_U:jfjhB-jt6ik:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=F1NUoVNml_U:jfjhB-jt6ik:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=F1NUoVNml_U:jfjhB-jt6ik:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=F1NUoVNml_U:jfjhB-jt6ik:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=F1NUoVNml_U:jfjhB-jt6ik:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/F1NUoVNml_U" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2011/04/12/New-job-at-Wussap/</feedburner:origLink></entry>
 
 <entry>
   <title>What is wrong with The Girl with the Dragon Tattoo</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/OfFwdCxfeeE/" />
   <updated>2011-03-22T00:00:00+01:00</updated>
   <id>http://www.librador.com/2011/03/22/What-is-wrong-with-The-Girl-with-the-Dragon-Tattoo</id>
   <content type="html">&lt;span class='image aside'&gt;&lt;a href='/images/blog/man-som-hatar-kvinnor.jpg'&gt;&lt;img src='/images/blog/man-som-hatar-kvinnor_280x400.jpg' width='280' height='400' alt='' /&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;I must be wrong.&lt;/p&gt;

&lt;p&gt;The 2009 film The Girl with the Dragon Tattoo (Swedish: &lt;em&gt;Män som hatar kvinnor&lt;/em&gt;) was a box-office smash hit both in its native Sweden and abroad. Not only has it been popular among the audience, but it has received plenty of good reviews and awards. The book upon which it is based will be adapted again by no-one less than David Fincher.&lt;/p&gt;

&lt;p&gt;So I must be wrong when I thought The Girl with the Dragon Tattoo wasn&amp;#8217;t a very good film. I didn&amp;#8217;t think it was bad. Even a little bit better than most of all of the police movies that we produce in this country. I just didn&amp;#8217;t think it was very special.&lt;/p&gt;

&lt;p&gt;Perhaps I just don&amp;#8217;t understand its greatness. It could be, because &lt;em&gt;I&amp;#8217;m the single person in Sweden who hasn&amp;#8217;t read the book&lt;/em&gt;. That must be it. You need to be prepared for this kind of film. You can&amp;#8217;t go to the cinema without any previous understanding of the story.&lt;/p&gt;

&lt;p&gt;Yeah, that must be the problem.&lt;/p&gt;

&lt;p&gt;Only, is it a good idea to require the audience to have read the book to enjoy its adaptation? What is the point of the movie then?&lt;/p&gt;

&lt;p&gt;Here is my &lt;em&gt;very humble&lt;/em&gt; opinion (I&amp;#8217;m very humble here as I&amp;#8217;m contradicting the collected opinion of critics and audience as well as David bloody Fincher): An adaptation should stand on its own. You shouldn&amp;#8217;t have to have read the book to enjoy the movie.&lt;/p&gt;

&lt;p&gt;A common problem with movies adapted from books seem to be that the filmmakers are afraid to upset those who have read the book. People may have favourite sequences or characters, so it&amp;#8217;s safest to keep everything from the book. It&amp;#8217;s just that everything can&amp;#8217;t fit into the length of a feature film, so the result is an unfocused story with many subplots and characters.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m hoping that Fincher will dare to create a more focused story, possibly disappointing those who will miss their favourite scene.&lt;/p&gt;

&lt;p&gt;Since Fincher&amp;#8217;s readaptation will hit the cinemas this year, I&amp;#8217;ll now go into details about what bothered me with the Swedish version, and we&amp;#8217;ll see later on if Fincher&amp;#8217;s version is better in those respects. The following will be somewhat spoilerish, so if you haven&amp;#8217;t seen it (unlikely if you&amp;#8217;re Swedish), I suggest you stop now. You&amp;#8217;ll need to have seen it to understand what I&amp;#8217;m talking about anyway. It will be quite long too. Sorry about that.&lt;/p&gt;

&lt;h2 id='plot'&gt;Plot&lt;/h2&gt;

&lt;p&gt;The main story of the movie is about how journalist Mikael Blomkvist tries to find out what happened to the girl Harriet Vanger, of the wealthy Vanger family, who disappeared 40 years ago. The movie is busy presenting characters and subplots for the first 80 minutes or so. A telling quote from when Blomkvist is having dinner with Martin and Cecilia Vanger at about 47 minutes into the movie: &lt;em&gt;&amp;#8220;Om jag ska vara helt ärlig så har jag inte hittat någonting.&amp;#8221;&lt;/em&gt; (&amp;#8220;To be honest, I haven&amp;#8217;t found anything.&amp;#8221;)&lt;/p&gt;

&lt;p&gt;So Blomkvist doesn&amp;#8217;t find out much in the beginning, but then he discovers a series of cold-case murders that seem to be connected to the girl&amp;#8217;s disappearance. The story gets more interesting after this, and a little tickling gruesome. (Not as much as an average episode of CSI, mind you.) When I went to this movie, I was a little surprised by this, as there is no hint in the first 30 minutes or so that there will be anything gruesome in it.&lt;/p&gt;
&lt;span class='image aside-right'&gt;&lt;a href='/images/blog/La_vita_e_bella.jpg'&gt;&lt;img src='/images/blog/La_vita_e_bella_267x400.jpg' width='267' height='400' alt='' /&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;Movies often begin with a scene that gives the audience a feel for what kind of movie this is. (In Swedish this is called &lt;em&gt;anslag&lt;/em&gt;; I can&amp;#8217;t find the English word right now, please help me!) A simple example is the opening scene before the credits of many James Bond movies. This scene can be short and doesn&amp;#8217;t have to be that much connected to the actual story of the film. Its purpose is to give the audience a promise about what kind of movie they&amp;#8217;re going to see. Even &lt;a href='https://secure.wikimedia.org/wikipedia/en/wiki/La_vita_%C3%A8_bella'&gt;Life is Beautiful&lt;/a&gt; (&lt;em&gt;La Vita è Bella&lt;/em&gt;) which begins as a slapstick comedy and ends as a concentration camp drama begins with a short scene that gives a hint of what will happen later on. So even though scenes 2 through 10 are about showing the mundane everyday life of the main character, scene 1 should give a hint about what we will see after that.&lt;/p&gt;

&lt;p&gt;The Girl with the Dragon Tattoo could have begun with a short scene with an anonymous girl trapped in the murderer&amp;#8217;s cage. That would have created interest and give a foreshadowing of the gruesomeness to come.&lt;/p&gt;

&lt;p&gt;Anyway, Blomkvist together with hacker/weirdo Lisbeth Salander finally find the murderer, and since he hadn&amp;#8217;t had a lot of screen time before that, I didn&amp;#8217;t care very much about it. I was neither surprised nor knew from the start who the murderer was.&lt;/p&gt;

&lt;h2 id='characters'&gt;Characters&lt;/h2&gt;

&lt;p&gt;The Girl with the Dragon Tattoo has one strong character, Lisbeth Salander. She is the one you remember after seeing the movie, and most of the talk about the movie has been about her and the actress Noomi Rapace. (By the way, she prepared for the role by losing several kilos. Gaining and losing weight is the kind of preparation that gets you Oscars!) The other characters are quite plain in comparison with Salander. That&amp;#8217;s all nice and well. Not every character can be extreme in a movie that&amp;#8217;s supposed to be realistic.&lt;/p&gt;

&lt;p&gt;I could argue that there are two many characters, which is a common problem with book adaptations. That would perhaps just reveal my inability to keep track of more than a couple of main characters, so we will go on to&amp;#8230;&lt;/p&gt;

&lt;h2 id='exposition'&gt;Exposition&lt;/h2&gt;

&lt;p&gt;How, as a filmmaker, do you get information across to the audience? For example, to understand the story the audience needs to know why two characters hate each other, who the owner of a certain car is, or where the keys to the wine cellar are.&lt;/p&gt;

&lt;p&gt;Getting the information across to the audience is called exposition. This can be done in interesting ways, or it can be deadly boring to the audience. The &amp;#8220;correct&amp;#8221; way to give the audience information is to apply age-old dramaturgical patterns that keep the audience interested in getting the information. Getting information across to the audience through the dialogue between two conflicting characters is one way. Or only giving out small hints, one at a time, so the audience &lt;em&gt;wants&lt;/em&gt; to find out more. As a filmmaker, if a character just holds a monologue about how it is, you&amp;#8217;re probably boring the audience.&lt;/p&gt;

&lt;p&gt;In The Girl with the Dragon Tattoo, there are several sequences of obvious exposition. For example when Henrik Vanger (the elderly CEO of the Vanger company) tells the story about the disappearance of Harriet Vanger. Director Niels Arden Oplev uses voice-over monologues and elements like black and white portraits on a wall and some small gauge footage shot at the day of the girl&amp;#8217;s disappearance. It&amp;#8217;s a cheap and fast way to get the information across. It&amp;#8217;s definitely not a visual experience, and feels a lot like a low-budget educational video for viewing in schools. If they had simplified the story, much of this exposition would have been unnecessary, so the information that still would have to come across could be presented in a more interesting way.&lt;/p&gt;

&lt;h2 id='subplots'&gt;Subplots&lt;/h2&gt;

&lt;p&gt;Movies often contain parallel storylines. Subplots can provide depth make by telling a story that is thematically similar to the main storyline. They can be used as something to cut away to so that slow parts of the main story can be skipped. Or they can be used to create tension by cutting away from the main storyline when it&amp;#8217;s getting exciting. But what if the subplot is more interesting than the main story? Shouldn&amp;#8217;t then the subplot have been the main story instead?&lt;/p&gt;

&lt;p&gt;In The Girl with the Dragon Tattoo, there is a subplot about Lisbeth Salander and her supervisor, the creepy sadist/rapist Bjurman. It&amp;#8217;s a subplot that takes quite a lot of screen time, which adds to the already (too) long length of the movie. Unfortunately, it&amp;#8217;s the most interesting story in the movie, so I don&amp;#8217;t think it should be cut. The main storyline about Harriet&amp;#8217;s disappearance is far from as interesting as this one. Question is, will Fincher be able to make the main story as interesting as Salander&amp;#8217;s?&lt;/p&gt;

&lt;p&gt;There are hints of other subplots in the movie. There is a suggestion that Cecilia Vanger is romantically interested in Blomkvist. At approximately 49 minutes into the movie, she invites Blomkvist for a glass of wine. He politely denies, and what seems to be the beginning of a subplot ends up nowhere. I guess this scene is probably a remnant from the book, where this subplot probably led somewhere.&lt;/p&gt;
&lt;span class='image aside-right'&gt;&lt;a href='/images/blog/TheArchitectMatrix.jpg'&gt;&lt;img src='/images/blog/TheArchitectMatrix_280x123.jpg' width='280' height='123' alt='' /&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;The movie is bookended by the story about how Blomkvist has been setup by powerful industrialist Hans-Erik Wennerström and will have to go to jail for libel. There&amp;#8217;s nothing dramaturgically wrong with bookends unrelated to the main story, although I think the events around it get a bit too much screen time in a movie that is already too long. It serves as a setup for the sequels, but setting things up for a sequel often makes a movie worse. What would The Matrix be if they have included the Architect and the Merovingian in the first movie?&lt;/p&gt;

&lt;p&gt;This is just the ramblings of a confused Swede. I must be wrong. Everyone else loved this movie. And the book is great, I&amp;#8217;m sure. I still haven&amp;#8217;t read it.&lt;/p&gt;

&lt;p&gt;I actually have high hopes about David Fincher&amp;#8217;s readaptation. He&amp;#8217;s a great director. I mean, he even managed to make a movie about the development of a freaking web site exciting. So perhaps he&amp;#8217;ll make The Girl with the Dragon Tattoo justice. I&amp;#8217;m crossing my fingers.&lt;/p&gt;

&lt;p&gt;UPDATE: See &lt;a href='http://www.librador.com/2012-01-29-Finchers-Girl-with-the-Dragon-Tattoo-So-much-better'&gt;the follow up post&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=OfFwdCxfeeE:nGxDoPV6Ywk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=OfFwdCxfeeE:nGxDoPV6Ywk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=OfFwdCxfeeE:nGxDoPV6Ywk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=OfFwdCxfeeE:nGxDoPV6Ywk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=OfFwdCxfeeE:nGxDoPV6Ywk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=OfFwdCxfeeE:nGxDoPV6Ywk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/OfFwdCxfeeE" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2011/03/22/What-is-wrong-with-The-Girl-with-the-Dragon-Tattoo/</feedburner:origLink></entry>
 
 <entry>
   <title>Dangers of SVG and the img tag</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/erMvmsfImMc/" />
   <updated>2011-03-09T00:00:00+01:00</updated>
   <id>http://www.librador.com/2011/03/09/Dangers-of-SVG-and-the-img-tag</id>
   <content type="html">&lt;p&gt;At this week&amp;#8217;s meeting at &lt;a href='http://www.owasp.org/index.php/Sweden'&gt;OWASP Sweden&lt;/a&gt;, security researcher Mario Heiderich held a presentation about the security implications of SVG support in modern web browsers.&lt;/p&gt;

&lt;p&gt;SVG (Scalable Vector Graphics) is based on XML and is typically considered an image format, just like JPEG or PNG, only that it is based on vector graphics instead of bitmaps. But there is a big difference: &lt;strong&gt;SVG files can contain code&lt;/strong&gt;. The code is in JavaScript and may be in &amp;#60;script&amp;#62; tags or otherwise embedded in the SVG.&lt;/p&gt;

&lt;p&gt;The immediate danger of this is that any site that allows a user to upload or link to an image may be open for cross site scripting attacks. For example, an attacker can upload an SVG file to Wikipedia and have its code executed in an unsuspecting victim&amp;#8217;s browser. Or an attacker can just post a link to an SVG image on a forum. If the forum software links to images with the &amp;#60;img&amp;#62; tag, the users&amp;#8217; browsers will load the SVG and possibly execute the code. (Security measures have been added to avoid this, but according to Mario Heiderich they are easy to circumvent.)&lt;/p&gt;

&lt;p&gt;My main takeaway from the presentation was that the &amp;#60;img&amp;#62; tag is not as harmless as it may seem after SVG support was added. You need to be careful with it!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Added March 11th:&lt;/strong&gt; Here is &lt;a href='http://www.owasp.org/images/0/03/Mario_Heiderich_OWASP_Sweden_The_image_that_called_me.pdf'&gt;Mario&amp;#8217;s presentation about SVG&lt;/a&gt;. He also held a &lt;a href='http://www.owasp.org/images/a/a3/Mario_Heiderich_OWASP_Sweden_Locking_the_throneroom.pdf'&gt;presentation about protecting against XSS with Object.defineProperty&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=erMvmsfImMc:HGn-K7kv3I0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=erMvmsfImMc:HGn-K7kv3I0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=erMvmsfImMc:HGn-K7kv3I0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=erMvmsfImMc:HGn-K7kv3I0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=erMvmsfImMc:HGn-K7kv3I0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=erMvmsfImMc:HGn-K7kv3I0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/erMvmsfImMc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2011/03/09/Dangers-of-SVG-and-the-img-tag/</feedburner:origLink></entry>
 
 <entry>
   <title>Media center's standby power consumption</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/l2E0i-ufBqw/" />
   <updated>2011-03-05T00:00:00+01:00</updated>
   <id>http://www.librador.com/2011/03/05/Media-centers-power-consumption</id>
   <content type="html">&lt;p&gt;I wrote previously about my &lt;a href='http://www.librador.com/2011/01/18/Computer%27s-Standby-Power-Consumption/'&gt;computer system&amp;#8217;s power consumption in standby mode&lt;/a&gt;, where I noted that my computer and peripherals used 13.5 watts when it was switched &amp;#8220;off&amp;#8221;.&lt;/p&gt;

&lt;p&gt;Next, I tested on our media center (which is just a fancy name for our TV and its connected devices).&lt;/p&gt;

&lt;p&gt;Here are the results:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Device&lt;/th&gt;&lt;th&gt;Switched On&lt;/th&gt;&lt;th&gt;In Standby&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;46" plasma TV&lt;/td&gt;&lt;td&gt;200 W&lt;/td&gt;&lt;td&gt;0.5 W&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Cable box&lt;/td&gt;&lt;td&gt;10 W&lt;/td&gt;&lt;td&gt;8 W&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Stereo amplifier&lt;/td&gt;&lt;td&gt;Depends&lt;/td&gt;&lt;td&gt;7 W&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Nintendo Wii&lt;/td&gt;&lt;td&gt;15 W&lt;/td&gt;&lt;td&gt;1 or 6 W&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;PS3 Slim&lt;/td&gt;&lt;td&gt;64 W&lt;/td&gt;&lt;td&gt;0.5 W&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;DVD/hard disk recorder&lt;/td&gt;&lt;td&gt;31 W&lt;/td&gt;&lt;td&gt;3 W&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='sum'&gt;&lt;td&gt;Total&lt;/td&gt;&lt;td&gt;319+ W&lt;/td&gt;&lt;td&gt;23.5 or 36 W&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The measurement for the TV is approximate since a plasma TV uses more or less power depending on the brightness of whatever it&amp;#8217;s displaying. The drain in standby mode is just half a watt, which is very good. There are new rules within the European Union that devices should not use more than 0.5 watts in standby mode, and since the TV is new, it complies with this.&lt;/p&gt;

&lt;p&gt;The Wii&amp;#8217;s power consumption in standby depends on whether the &lt;em&gt;standby connection&lt;/em&gt; is enabled. (It&amp;#8217;s in Wii Settings &amp;#8594; Settings &amp;#8594; WiiConnect24.)&lt;/p&gt;

&lt;p&gt;The cable box is suprisingly bad. It hardly consumes any less energy in standby mode than when it&amp;#8217;s switched on. The stereo amplifier is very bad too. I don&amp;#8217;t use it that often, and it has a real, physical off button, so I don&amp;#8217;t mind it so much.&lt;/p&gt;

&lt;p&gt;For the computer, I bought a power strip that automatically cuts the power to the peripherals when the computer is switched off. I&amp;#8217;m not very fond of the idea of doing this for the TV. It doesn&amp;#8217;t seem safe to cut the power to the game consoles if you switch off the TV, accidentally or not. Also, the cable box requires up to a minute to boot after the power has been cut. Our family watch TV a lot, so it has to be fast and easy to switch on and off. I have no good solution to this.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=l2E0i-ufBqw:_4kYom-FIMU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=l2E0i-ufBqw:_4kYom-FIMU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=l2E0i-ufBqw:_4kYom-FIMU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=l2E0i-ufBqw:_4kYom-FIMU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=l2E0i-ufBqw:_4kYom-FIMU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=l2E0i-ufBqw:_4kYom-FIMU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/l2E0i-ufBqw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2011/03/05/Media-centers-power-consumption/</feedburner:origLink></entry>
 
 <entry>
   <title>Git vs Mercurial presentation</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/5UK6v0ccLdM/" />
   <updated>2011-03-04T00:00:00+01:00</updated>
   <id>http://www.librador.com/2011/03/04/Git-vs-Mercurial-presentation</id>
   <content type="html">&lt;p&gt;&lt;a href='https://docs.google.com/a/zoom.nu/present/view?id=dg5jzx2c_9chxw5mtz'&gt;Here&amp;#8217;s the presentation&lt;/a&gt; that I and Johan Maasing held at yesterday&amp;#8217;s &lt;a href='https://sites.google.com/site/stockholmgtug/'&gt;Google Technology User Group Stockholm&lt;/a&gt; meeting. It&amp;#8217;s a brief comparison of the Git and Mercurial version control systems. I guess it won&amp;#8217;t give you much unless you a) understand Swedish and b) attended the talk, as most of the interesting parts were in the whiteboard presentation and the interaction with the audience.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=5UK6v0ccLdM:jILvSGHtG70:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=5UK6v0ccLdM:jILvSGHtG70:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=5UK6v0ccLdM:jILvSGHtG70:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=5UK6v0ccLdM:jILvSGHtG70:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=5UK6v0ccLdM:jILvSGHtG70:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=5UK6v0ccLdM:jILvSGHtG70:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/5UK6v0ccLdM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2011/03/04/Git-vs-Mercurial-presentation/</feedburner:origLink></entry>
 
 <entry>
   <title>Computer's standby power consumption</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/1cmjJdoPFPM/" />
   <updated>2011-01-18T00:00:00+01:00</updated>
   <id>http://www.librador.com/2011/01/18/Computer's-Standby-Power-Consumption</id>
   <content type="html">&lt;p&gt;I guess you know that many electronic devices aren&amp;#8217;t really switched &lt;em&gt;off&lt;/em&gt; when you switch them off. Sometimes this is convenient. It is easier to switch on the TV with the remote than pressing a button on the set. This requires the device to be in standby mode to be able to receive the signal. The problem is that standby mode consumes power. Even many devices that you switch on with a physical button are in standby mode. The button is more like a key that the electronics in the device is constantly waiting for you to press. Few devices today, except for lamps, have a &lt;em&gt;real&lt;/em&gt; button that physically disconnects the power. (I have a network switch that is marketed as &amp;#8220;green&amp;#8221; because it has this environmentally friendly feature, an &lt;em&gt;actual&lt;/em&gt; on/off button.)&lt;/p&gt;

&lt;p&gt;In total, there is a lot of power consumed by all those devices that are in standby. I bought a cheap power consumption meter to see how much power my electronics use when I&amp;#8217;m not using them.&lt;/p&gt;

&lt;p&gt;I tested it on my desktop computer. I don&amp;#8217;t use the computer daily, and only in the evenings, so it is switched off most of the time.&lt;/p&gt;

&lt;p&gt;Or is it really switched &lt;em&gt;off&lt;/em&gt;? I measured the amount of power used after I shut down the computer.&lt;/p&gt;

&lt;p&gt;When the computer is in standby, the whole system still consumes 13.5 watts. By switching devices off, I found out the power consumption for each of them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Computer: 2 watts&lt;/li&gt;

&lt;li&gt;Two monitors: 3 watts (1 watt in standby mode initiated with button)&lt;/li&gt;

&lt;li&gt;Powered USB hub: .5 watts&lt;/li&gt;

&lt;li&gt;Eight port gigabit switch: 8 watts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can see, most of the power is used by the switch. This makes sense, since it doesn&amp;#8217;t have a standby mode, and it&amp;#8217;s still on. This is not the &amp;#8220;green&amp;#8221; switch I was talking about before, so to turn this one off, I&amp;#8217;d have to pull the plug.&lt;/p&gt;

&lt;p&gt;The monitors enter some kind of power saving state when I switch off the computer. An interesting discovery was that when I press the standby button on the monitors, they enter a &amp;#8220;deeper&amp;#8221; standby state that uses less power. The monitor still uses power while keeping itself busy waiting for me to press the button again.&lt;/p&gt;

&lt;p&gt;OK, 13.5 watts is not a huge number, but it is unnecessary since I don&amp;#8217;t use this computer that much. In the future, I&amp;#8217;ll be more careful switching off the whole system with the button on the power strip.&lt;/p&gt;

&lt;p&gt;Some more &amp;#8220;fascinating facts&amp;#8221;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The &amp;#8220;micro monitor&amp;#8221; speakers use 10 watts when not in use, but they have a real power button and I remember to switch them off most of the time.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;The whole system uses 230 watts when the computer is on and idle, 134 watts when it&amp;#8217;s idle with screen saver (the kind that puts the monitor in the &amp;#8220;light&amp;#8221; standby state).&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;When the computer is in sleep mode, the system uses 1.5 watts more than when the computer is switched &amp;#8220;off.&amp;#8221;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=1cmjJdoPFPM:kUqyV-UY4-k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=1cmjJdoPFPM:kUqyV-UY4-k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=1cmjJdoPFPM:kUqyV-UY4-k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=1cmjJdoPFPM:kUqyV-UY4-k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=1cmjJdoPFPM:kUqyV-UY4-k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=1cmjJdoPFPM:kUqyV-UY4-k:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/1cmjJdoPFPM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2011/01/18/Computer%27s-Standby-Power-Consumption/</feedburner:origLink></entry>
 
 <entry>
   <title>Alex Ferrari's Red Princess Blues</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/u4KVffRrlYs/" />
   <updated>2010-11-30T00:00:00+01:00</updated>
   <id>http://www.librador.com/2010/11/30/Alex-Ferraris-Red-Princess-Blues</id>
   <content type="html">&lt;span class='image '&gt;&lt;a href='/images/blog/red_princess_blues.jpg'&gt;&lt;img src='/images/blog/red_princess_blues_640x360.jpg' width='640' height='360' alt='' /&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;I received a copy of Alex Ferrari&amp;#8217;s new short film &lt;a href='http://www.redprincessblues.com'&gt;Red Princess Blues&lt;/a&gt; in the mail. Yes, snail mail still exists, and it is a good way to get someone&amp;#8217;s attention. As I prefer watching movies on the TV instead of the computer, I&amp;#8217;m thankful for that. So what can I say about the film?&lt;/p&gt;

&lt;p&gt;Well, there are two kinds of short films: the ones that use the short format to tell an interesting story, and the ones that are more like a showcase for a feature. OK, there are more kinds, like art films that don&amp;#8217;t bother to tell a story at all, but let&amp;#8217;s leave that aside. I have the impression that American shorts more often than not are the showcase kind, that are supposed to be a &amp;#8220;demo&amp;#8221; for the real deal, which is the feature. Producing a short is a way to show that you have the skills to produce a good feature. In Europe, shorts are more regarded as an art form in itself. In my opinion, many European shorts are too much &lt;em&gt;art&lt;/em&gt; and too little &lt;em&gt;movie&lt;/em&gt;, but the good ones deliver a cinematic experience that works with the short format instead of feeling just like a trimmed down feature.&lt;/p&gt;

&lt;p&gt;I have written previously about Ferrari&amp;#8217;s shorts &lt;a href='http://www.librador.com/2005/11/04/Broken/'&gt;Broken&lt;/a&gt; and &lt;a href='http://www.librador.com/2007/07/11/Cyn/'&gt;Cyn&lt;/a&gt;. I thought Broken was a great action/effects sequence, but it didn&amp;#8217;t deliver what felt like a complete story. It was more like a sequence taken from an action movie, hence a feature showcase. Cyn was more like a real (European style if you will) short film as it told a short but complete story.&lt;/p&gt;

&lt;p&gt;So what about Red Princess Blues? It&amp;#8217;s a tale of Zoe, a young innocent girl who goes to some seedy carnival backstage bar. She meets the sleazy carnival worker Rimo. Being sleazy is like a rule at this place, so everyone is dripping of grease and sweat. Several scenes in Robert Rodriguez&amp;#8217;s movies come to mind, like in the bar in From Dusk Till Dawn. Anyway, a young innocent girl in a shabby bar; that can only end in trouble. And it does. Fortunately for Zoe, the mysterious Princess is there to help her out of the situation. The film&amp;#8217;s climax is a fight scene with (for a short) impressive stunts and choreography.&lt;/p&gt;

&lt;p&gt;What makes this short stand out from so many others is the production design. The bar with the old and worn posters for carnival attractions looks great. There&amp;#8217;s also good acting from Richard Tyson (Rimo, the seedy carny) and some well-written dialogue.&lt;/p&gt;

&lt;p&gt;So, in what category does this short belong? Does it feel like a demo for a feature? The answer to that is, yes, definitely. It is actually supposed to be the first scene in a feature film. Perhaps it&amp;#8217;s unfair to judge it as a short for this reason, but sorry, Alex, I&amp;#8217;m European. I look at shorts as independent works of themselves.&lt;/p&gt;

&lt;p&gt;Even though the movie&amp;#8217;s runtime is only 11 minutes, the story moves along a bit too slowly. After the first minute, you pretty much know what will happen. The title character, Princess, doesn&amp;#8217;t get much screen time until the last third of the movie, which is problematic since in any movie there isn&amp;#8217;t much drama until the protagonist and antagonist start their conflict. Spending seven minutes before introducing the protagonist would not be a good idea even in a long format film, so I hope Ferrari will reconsider this if he gets to make a feature.&lt;/p&gt;

&lt;p&gt;Apart from there being not much of a story, I was impressed by this film. It was shot in two days at a budget of $10,000, which is low but not ultra-low, and the production values are great.&lt;/p&gt;

&lt;p&gt;The film, together with behind the scenes material, is sold as an iPhone application, an interesting way to market and sell a short. It&amp;#8217;s only 99 cents, but with enough downloads it may be a way to finance a movie.&lt;/p&gt;

&lt;p&gt;So, does Red Princess Blues work as a stand-alone short film? Not really. But as a &amp;#8220;demo&amp;#8221; to attract attention and financing for a feature? Absolutely.&lt;/p&gt;

&lt;p&gt;Go have a look at the &lt;a href='http://www.redprincessblues.com'&gt;film&amp;#8217;s web site&lt;/a&gt;, and also take a look at the animated prequel &lt;em&gt;Red Princess Blues Animated&lt;/em&gt; which is available on &lt;a href='http://www.myspace.com/video/vid/53030642'&gt;MySpace&lt;/a&gt; and &lt;a href='http://www.imdb.com/video/wab/vi3392864793/'&gt;IMDB&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=u4KVffRrlYs:uPRC_R65Klg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=u4KVffRrlYs:uPRC_R65Klg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=u4KVffRrlYs:uPRC_R65Klg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=u4KVffRrlYs:uPRC_R65Klg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=u4KVffRrlYs:uPRC_R65Klg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=u4KVffRrlYs:uPRC_R65Klg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/u4KVffRrlYs" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2010/11/30/Alex-Ferraris-Red-Princess-Blues/</feedburner:origLink></entry>
 
 <entry>
   <title>Copyright works both ways</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/q9jX9WPOU7Y/" />
   <updated>2010-11-28T00:00:00+01:00</updated>
   <id>http://www.librador.com/2010/11/28/Copyright-works-both-ways</id>
   <content type="html">&lt;p&gt;This week there were upset voices on Twitter about copyright infringement. Copyright infringement? On the internet? Doesn&amp;#8217;t that happen all the time? Does anyone care? you may ask.&lt;/p&gt;

&lt;p&gt;Well, those two cases retrieved attention from the internet crowd because the roles were reversed. (Of course, the people on the net are individuals with differing opinions. I use the term internet crowd as a sweeping generalization for the general views that are shared by most of the people active on Twitter, blogs etc.)&lt;/p&gt;

&lt;p&gt;In the &lt;a href='http://illadore.livejournal.com/30674.html'&gt;first case&lt;/a&gt;, food blogger Monica Gaudio discovered that an article she had written had been republished by a magazine without her permission or knowledge; a clear case of copyright infringement. In the &lt;a href='http://www.dagensmedia.se/nyheter/kampanjer/article3024183.ece'&gt;other case&lt;/a&gt; (in Swedish), a web agency asked an applicant for a web design position to design a sample web site for one of their clients. The agency then sold the applicant&amp;#8217;s sample as their own to the client without paying or even telling the applicant.&lt;/p&gt;

&lt;p&gt;Both these cases are the kind that cause uproar among the internet crowd. All while the very same crowd defends the organized copyright infringement on a grand scale that is known as file sharing. This phenomenon is understandable. In the case of the &amp;#8220;little man&amp;#8221; versus the powerful enemy, we humans tend to side with the underdog. But with millions of &amp;#8220;little men&amp;#8221; with the power of communication offered by the internet, they are more empowered than ever and can take down even a large corporation. It is not David versus Goliath anymore.&lt;/p&gt;

&lt;p&gt;Copyright itself doesn&amp;#8217;t take sides. We need to remember that copyright is not only for the big corporations to abuse. There is some idea of fairness about it as well, an idea that the internet crowd seems to agree on. In the discussions about copyright and so called piracy, we need to keep in mind that copyright works both ways. It gives rights not only to the large corporations, but also to the little man.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=q9jX9WPOU7Y:WRuXQrM_2VU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=q9jX9WPOU7Y:WRuXQrM_2VU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=q9jX9WPOU7Y:WRuXQrM_2VU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=q9jX9WPOU7Y:WRuXQrM_2VU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=q9jX9WPOU7Y:WRuXQrM_2VU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=q9jX9WPOU7Y:WRuXQrM_2VU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/q9jX9WPOU7Y" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2010/11/28/Copyright-works-both-ways/</feedburner:origLink></entry>
 
 <entry>
   <title>Programming podcasts</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/oESGEMvaRQ0/" />
   <updated>2010-11-17T00:00:00+01:00</updated>
   <id>http://www.librador.com/2010/11/17/Programming-podcasts</id>
   <content type="html">&lt;p&gt;I find podcasts a convenient way to get information when I don&amp;#8217;t have my hands and eyes free to read a book or browse the web.&lt;/p&gt;

&lt;p&gt;Here are the podcasts about programming that I&amp;#8217;m currently subscribed to.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://twit.tv/FLOSS'&gt;FLOSS Weekly&lt;/a&gt; (&lt;a href='http://leoville.tv/podcasts/floss.xml'&gt;RSS feed&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Randal Schwartz and co-hosts interview people in the free/open source software community. The target audience is obviously pretty technical, as they often talk about programming-related subjects. Since I am pretty technical, I don&amp;#8217;t mind, but to make free/open source software more popular among non-techies, a podcast with a user perspective would complement this very well. But perhaps only technical people listen to podcasts to begin with, I don&amp;#8217;t know.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.se-radio.net/'&gt;Software Engineering Radio&lt;/a&gt; (&lt;a href='http://feeds.feedburner.com/se-radio'&gt;feed&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Two German guys talk about serious software development. As you might guess, it does get a bit dull sometimes. They do have some interesting guests and subjects though, so it&amp;#8217;s worth a listen. Since they often discuss fundamental topics instead of the latest fad, this podcast would be a good listen for someone wanting to break into software engineering.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.hanselminutes.com'&gt;Hanselminutes&lt;/a&gt; (&lt;a href='http://feeds.feedburner.com/HanselminutesCompleteMP3'&gt;feed&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t usually program for Windows specifically, and never for .Net, but this podcast is so well done that I enjoy it anyway. Many episodes are not about Windows development at all, and those are of course the most interesting ones.&lt;/p&gt;

&lt;p&gt;So, what are &lt;em&gt;your&lt;/em&gt; favourite podcasts? I&amp;#8217;d like to listen to more good ones, so I appreciate tips.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=oESGEMvaRQ0:haVjtasYQEE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=oESGEMvaRQ0:haVjtasYQEE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=oESGEMvaRQ0:haVjtasYQEE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=oESGEMvaRQ0:haVjtasYQEE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=oESGEMvaRQ0:haVjtasYQEE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=oESGEMvaRQ0:haVjtasYQEE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/oESGEMvaRQ0" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2010/11/17/Programming-podcasts/</feedburner:origLink></entry>
 
 <entry>
   <title>Dynamic Stockholm</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/3OeaLeBV6ts/" />
   <updated>2010-10-22T00:00:00+02:00</updated>
   <id>http://www.librador.com/2010/10/22/Dynamic-Stockholm</id>
   <content type="html">&lt;p&gt;There was a mini-conference a couple of days ago called Dynamic Stockholm, which was about dynamic programming languages.&lt;/p&gt;

&lt;p&gt;It started at four o&amp;#8217;clock, and I missed the first presentation by &lt;a href='http://divineprogrammer.blogspot.com'&gt;Mikael Kindborg&lt;/a&gt;. I guess it was similar to the one I have heard before.&lt;/p&gt;

&lt;p&gt;I arrived at the venue at &lt;a href='http://en.wikipedia.org/wiki/Kastellholmen'&gt;Kastellholmen&lt;/a&gt; (an islet close to the city center), midway through Niklas Björnerstedt&amp;#8217;s talk about agile software releases. It didn&amp;#8217;t seem that connected to the theme, but Niklas&amp;#8217;s Twitter handle is &lt;a href='http://twitter.com/smalltalk80'&gt;smalltalk80&lt;/a&gt;, so I guess that&amp;#8217;s his connection to the event.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://blog.fitzell.ca/'&gt;Julian Fitzell&lt;/a&gt;&amp;#8217;s talk about Seaside was interesting, because it&amp;#8217;s a web framework with a different approach, using a programming language with a different approach; Smalltalk.&lt;/p&gt;

&lt;p&gt;The most interesting talk this day was about Groovy. I didn&amp;#8217;t expect much, but &lt;a href='http://twitter.com/niklasl'&gt;Niklas Lindström&lt;/a&gt;&amp;#8217;s presentation convinced me that Groovy is a much more powerful language than I had wrongly assumed. If you&amp;#8217;re in a Java environment, it&amp;#8217;s definitely worth a look.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://twitter.com/hankhero'&gt;Henrik Hjelte&lt;/a&gt; spoke about Common Lisp. I was hoping to get an understanding about what&amp;#8217;s so great about it, because some people are so in love with it. Sure, macros seem great, but if it comes at the price of unreadable code, I&amp;#8217;m not so sure that it&amp;#8217;s worth it. Unfortunately Henrik&amp;#8217;s speedy presentation didn&amp;#8217;t help improving this picture much, as in my eyes and ears it was difficult to follow. The audiovisual presentation style, using heavy metal music and images, was a fun though.&lt;/p&gt;

&lt;p&gt;I think &lt;a href='http://twitter.com/jonasbeckman'&gt;Jonas Beckman&lt;/a&gt;&amp;#8217;s talk would have been difficult to follow too if I hadn&amp;#8217;t been very familiar with Python already. Python is a difficult language to impress people with since it doesn&amp;#8217;t have one single feature that&amp;#8217;s really cool. Instead, Python is a pragmatic language that is well designed, has great standard and third party libraries, is easy to learn and has lots of useful features. Jonas still made a heroic attempt at showing one specific cool feature of Python: generators. It was interesting since it made me think about generators a little differently. I&amp;#8217;m not so sure that it &amp;#8220;sold&amp;#8221; the language to the other attendees though.&lt;/p&gt;

&lt;p&gt;Björn Eiderbäck&amp;#8217;s final talk about Smalltalk was inspiring. Smalltalk is a nice language. For good or bad, it has the idea that it is not only a programming language, but a complete environment. You don&amp;#8217;t just edit Smalltalk in a text editor and compile it on the command line. The development environment and the runtime is tightly coupled in a way that provides some very nice dynamic features for development and debugging. At the same time, you&amp;#8217;re very much tied to the environment, so if you don&amp;#8217;t like its text editor for example, you&amp;#8217;re not going to be happy. The whole idea is perhaps too different, especially if you&amp;#8217;re a text editor and command-line person. For example, Björn briefly showed the built-in version control of the Smalltalk environment, something that I would prefer to use an external tool for. (Here I admittedly express the kind of conservatism that suppresses progress.)&lt;/p&gt;

&lt;p&gt;Unfortunately there is no web page for the event, so it&amp;#8217;s difficult to tell if there will be more of them. I hope so, because it&amp;#8217;s always fun to hear about ideas and views from like-minded people.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a href='http://www.highlevelbits.com/2010/10/dynmaic-stockholm-2010.html'&gt;froderik&amp;#8217;s post about the event&lt;/a&gt; for helping me remembering people&amp;#8217;s names.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=3OeaLeBV6ts:Z70__M7CwnY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=3OeaLeBV6ts:Z70__M7CwnY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=3OeaLeBV6ts:Z70__M7CwnY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=3OeaLeBV6ts:Z70__M7CwnY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=3OeaLeBV6ts:Z70__M7CwnY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=3OeaLeBV6ts:Z70__M7CwnY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/3OeaLeBV6ts" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2010/10/22/Dynamic-Stockholm/</feedburner:origLink></entry>
 
 <entry>
   <title>Mobile friendlier site with media query in CSS</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/NH765wFq3CY/" />
   <updated>2010-06-05T00:00:00+02:00</updated>
   <id>http://www.librador.com/2010/06/05/Mobile-friendlier-site-with-media-query-in-CSS</id>
   <content type="html">&lt;p&gt;I got a HTC Desire phone today after living with an old non-smart SonyEricson for a while, so I thought it was time to update this site so it looks better on mobile phones.&lt;/p&gt;

&lt;p&gt;The design of my site is based on &lt;a href='http://quotedprintable.com/pages/scribbish'&gt;Scribbish&lt;/a&gt; which was originally a theme for the Typo blog engine that I &lt;a href='http://github.com/vilcans/scribbish-jekyll'&gt;ported&lt;/a&gt; to the site generator &lt;a href='http://github.com/mojombo/jekyll/'&gt;Jekyll&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Scribbish has a fixed layout that is 900 pixels wide, which is too much for the iPhone and Android browsers. You would have to either scroll around horizontally to see the whole page, or zoom out and make the text unreadable. (Browsers for less powerful phones actually can handle this better by not even trying to render the pages the same as in a desktop browser.)&lt;/p&gt;

&lt;p&gt;A fixed layout isn&amp;#8217;t very friendly to people who don&amp;#8217;t want to run their web browser maximized. For some reason, web designers are very curious about what resolution people have on their monitors, so they know how wide they can make their designs. The resolution of the screen is irrelevant. What matters is the size of the browser window!&lt;/p&gt;

&lt;p&gt;To make this site look better on a device with less than 900 horizontal pixels, or in a window less than 900 pixels wide, I made some changes to the CSS of the site. If the width is at least 950 pixels, the sidebar is located to the right. In a thinner display window, it is placed at the bottom of the page instead to give more horizontal room.&lt;/p&gt;

&lt;p&gt;I have tested the changes in Firefox, Chrome, IE6, IE8, on an iPod Touch and Android and it looks fine. Internet Explorer doesn&amp;#8217;t support the &lt;em&gt;media query&lt;/em&gt; feature of CSS, so it will not move the sidebar to the bottom if the window is thin, but the page is not worse off than it was before.&lt;/p&gt;

&lt;p&gt;Please let me know if you find any problems with the new design!&lt;/p&gt;

&lt;p&gt;For the ones curious about how the media query looks, here&amp;#8217;s what I added to the stylesheet to override the styles for devices with a width of less than 950 pixels:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@media all and (max-width: 950px) {
  #header {
    height: auto;
    padding-bottom: 12px;
  }
  #container, #content, #sidebar {
    float: none;
    width: 100%;
    padding: 0;
    border: none;
    margin: 0;
  }
  #sidebar {
    border-top: 1px solid black;
    padding-top: 5px;
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=NH765wFq3CY:2O_JmgjcCas:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=NH765wFq3CY:2O_JmgjcCas:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=NH765wFq3CY:2O_JmgjcCas:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=NH765wFq3CY:2O_JmgjcCas:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=NH765wFq3CY:2O_JmgjcCas:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=NH765wFq3CY:2O_JmgjcCas:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/NH765wFq3CY" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2010/06/05/Mobile-friendlier-site-with-media-query-in-CSS/</feedburner:origLink></entry>
 
 <entry>
   <title>Use web technologies for GUI development!</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/rA-Nz7ZpvWg/" />
   <updated>2010-06-03T00:00:00+02:00</updated>
   <id>http://www.librador.com/2010/06/03/Use-web-technologies-for-GUI-development</id>
   <content type="html">&lt;p&gt;HTML, CSS and JavaScript is the future for GUI programming. This is one message I got out of the &lt;a href='http://www.swdc-central.com'&gt;Scandinavian Web Developer Conference&lt;/a&gt; this week.&lt;/p&gt;

&lt;p&gt;It used to be difficult to create web pages that looked and behaved like desktop applications. But since web applications became more popular, the tools and practices improved. Today, using web technologies to make user interfaces may not only be as easy as using a GUI framework for desktop applications. It may even be easier to use HTML and CSS for the GUI design and JavaScript for the logic. Think about it: There are probably more people that know HTML and CSS than there are people who know how to create a GUI in Java Swing, Qt, Adobe Flex or .net. There is plenty of information online about HTML and CSS. There are good libraries that facilitates making application-style GUIs in HTML.&lt;/p&gt;

&lt;p&gt;And when it comes to JavaScript, it is becoming a mature language. Large complex applications are written in JavaScript. It&amp;#8217;s not only about mouseovers and drop-down menus any more. FireBug for Firefox and Google Chrome&amp;#8217;s debugger are some of the great development tools avaiable. The edit/run cycle is very short. And as far as programming languages goes, while not being perfect, JavaScript is a quite nice language.&lt;/p&gt;

&lt;p&gt;Then there&amp;#8217;s the platform independence, which has become even more important after Microsoft lost their total dominance on user-facing operating systems. They have lost some users to Mac, but today there are many other platforms that people use every day. I&amp;#8217;m thinking about mobile devices, which is a diverse market with several platforms that have little in common except one thing: They all support HTML, CSS and JavaScript in their browsers.&lt;/p&gt;

&lt;p&gt;Even though it is problematic to create a web page that renders exactly the same on all browsers on all operating systems, HTML+CSS+JS has achived something that no other framework has done: It has good portability while allowing you to create beautiful and sleek user interfaces.&lt;/p&gt;

&lt;p&gt;Web technologies are definitely worth a look when considering what user interface framework to use for your next project. Even an off-line desktop application, or a mobile &amp;#8220;app&amp;#8221; may be conveniently implemented in HTML, CSS and JavaScript.&lt;/p&gt;

&lt;p&gt;Perhaps I need to sleep off that cool-aid from the conference now. Anyway, thanks to &lt;a href='http://unclescript.blogspot.com/'&gt;Peter Svensson&lt;/a&gt; for arranging and to the speakers for the inspirational talks.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=rA-Nz7ZpvWg:u8Dqruij7GU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=rA-Nz7ZpvWg:u8Dqruij7GU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=rA-Nz7ZpvWg:u8Dqruij7GU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=rA-Nz7ZpvWg:u8Dqruij7GU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=rA-Nz7ZpvWg:u8Dqruij7GU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=rA-Nz7ZpvWg:u8Dqruij7GU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/rA-Nz7ZpvWg" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2010/06/03/Use-web-technologies-for-GUI-development/</feedburner:origLink></entry>
 
 <entry>
   <title>A new photographic guideline?</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/RMN_lmAet5g/" />
   <updated>2010-05-13T00:00:00+02:00</updated>
   <id>http://www.librador.com/2010/05/13/A-new-photographic-guideline</id>
   <content type="html">&lt;p&gt;&amp;#8220;Make sure the subject fills 10%, 56% or 80% of the frame.&amp;#8221; Can this be a new guideline that photographers should know about? A research paper presented at last week&amp;#8217;s &lt;a href='http://www.eurographics2010.se'&gt;Eurographics&lt;/a&gt; seems to suggest so.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.math.zju.edu.cn/ligangliu/CAGD/Projects/Composition/'&gt;Optimizing Photo Composition&lt;/a&gt; by Dr. Ligang Liu et al describes an algorithm that measures how well a photograph is composed. For this they use photographic &amp;#8220;rules&amp;#8221; that professional photographers know and use because they are known to give aestethically pleasing results. One of them is the &amp;#8220;rule of thirds&amp;#8221;, where you draw four imaginary lines to divide the image into a 3 by 3 grid and place the subject close to one of the intersections. Liu et als algorithm measures how well a photo adheres to this and other guidelines that are known to create a good balance in the image.&lt;/p&gt;

&lt;p&gt;An interesting result of their research is that they seem to have discovered a rule of photographic composition that was previously unknown.&lt;/p&gt;

&lt;p&gt;In their algorithm, they measure the number of pixels occupied by the photographic subject (the &amp;#8220;salient region&amp;#8221;) relative to the size of the whole photo. This gives how large the subject is in the picture. When measuring this on several professional photographs, they found that this &amp;#8220;fill ratio&amp;#8221; was not evenly distributed or followed a simple bell curve. Instead, some ratios were obviously more common than others. See the histogram below, taken from their paper.&lt;/p&gt;
&lt;span class='image '&gt;&lt;a href='/images/blog/salient_regions.png'&gt;&lt;img src='/images/blog/salient_regions.png' width='382' height='283' alt='' /&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;Can this be a photographic guideline that professional photographers so far have followed intuitively? Should it be included in photographic tutorials, along with the rule of thirds?&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=RMN_lmAet5g:B6VV3IR0T0c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=RMN_lmAet5g:B6VV3IR0T0c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=RMN_lmAet5g:B6VV3IR0T0c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=RMN_lmAet5g:B6VV3IR0T0c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=RMN_lmAet5g:B6VV3IR0T0c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=RMN_lmAet5g:B6VV3IR0T0c:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/RMN_lmAet5g" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2010/05/13/A-new-photographic-guideline/</feedburner:origLink></entry>
 
 <entry>
   <title>This kicks content-aware fill's ass!</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/GgUCfLWTizs/" />
   <updated>2010-05-12T00:00:00+02:00</updated>
   <id>http://www.librador.com/2010/05/12/This-kicks-content-aware-fills-ass</id>
   <content type="html">&lt;p&gt;Last week I went to &lt;a href='http://www.eurographics2010.se/'&gt;Eurographics 2010&lt;/a&gt;. I&amp;#8217;m not currently working with anything related to advanced graphics research, so I didn&amp;#8217;t have to consider what information would be useful and could choose sessions completely based on my personal interests.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.cs.cmu.edu/~efros/'&gt;Alexei Efros&lt;/a&gt; keynote was about how data from large online image collections (such as &lt;a href='http://www.flickr.com/'&gt;flickr&lt;/a&gt;) can be used to do the seemingly impossible task of removing an object from a photograph and replacing it with a plausible background. If you thought Photoshop&amp;#8217;s new &lt;a href='http://www.youtube.com/watch?v=NH0aEp1oDOI&amp;amp;feature=player_embedded'&gt;content-aware fill&lt;/a&gt; was amazing, wait until you see this. It&amp;#8217;s close to magic.&lt;/p&gt;
&lt;span class='image '&gt;&lt;a href='/images/blog/efros.jpg'&gt;&lt;img src='/images/blog/efros_640x142.jpg' width='640' height='142' alt='' /&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;Shown in the image: Original image, masked image, candidate replacements and final result. See the &lt;a href='http://graphics.cs.cmu.edu/projects/scene-completion/'&gt;paper and presentations&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=GgUCfLWTizs:bx73D9WFaSc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=GgUCfLWTizs:bx73D9WFaSc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=GgUCfLWTizs:bx73D9WFaSc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=GgUCfLWTizs:bx73D9WFaSc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=GgUCfLWTizs:bx73D9WFaSc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=GgUCfLWTizs:bx73D9WFaSc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/GgUCfLWTizs" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2010/05/12/This-kicks-content-aware-fills-ass/</feedburner:origLink></entry>
 
 <entry>
   <title>Back to school</title>
   <link href="http://feedproxy.google.com/~r/Librador/~3/zj9mu-khiog/" />
   <updated>2010-04-08T00:00:00+02:00</updated>
   <id>http://www.librador.com/2010/04/08/Back-to-school</id>
   <content type="html">&lt;p&gt;This is another one of those &amp;#8220;long time, no see&amp;#8221; posts. My wife and I got our second son in November. Wonderful as he is, he still requires plenty of attention. After he&amp;#8217;s asleep for the night (between 8 and 11 pm), I have taken classes in Nuke and RenderMan at &lt;a href='http://fxphd.com/'&gt;fxphd&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So as you can guess, I&amp;#8217;ve been busy. I haven&amp;#8217;t had the time to write more than &lt;a href='http://twitter.com/vilcans'&gt;140 characters at a time&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But now I&amp;#8217;m doing something very different and exciting. I&amp;#8217;m taking time off work to go back to university and write a thesis. The subject is &lt;strong&gt;open source software in visual effects for motion pictures&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m also producing a new short film which will be more ambitious than anything I&amp;#8217;ve done before. The project is in an early phase, and we haven&amp;#8217;t settled for a title yet. I will have to get back with more information later on.&lt;/p&gt;

&lt;p&gt;So I will still be busy, obviously, but I&amp;#8217;m planning to write here about the progress of both the thesis and the film project.&lt;/p&gt;

&lt;p&gt;And by the way, this evening I will be holding a short presentation about &lt;a href='http://code.google.com/apis/maps/documentation/geocoding/index.html'&gt;Google&amp;#8217;s geocoding service&lt;/a&gt; at &lt;a href='http://sites.google.com/site/stockholmgtug/'&gt;Stockholm Google Technology User Group&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Librador?a=zj9mu-khiog:GwZRAB4LSsg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=zj9mu-khiog:GwZRAB4LSsg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=zj9mu-khiog:GwZRAB4LSsg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=zj9mu-khiog:GwZRAB4LSsg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?i=zj9mu-khiog:GwZRAB4LSsg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Librador?a=zj9mu-khiog:GwZRAB4LSsg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Librador?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Librador/~4/zj9mu-khiog" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.librador.com/2010/04/08/Back-to-school/</feedburner:origLink></entry>
 

</feed>

