<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>In Traction</title>
	
	<link>http://blog.jozilla.net</link>
	<description />
	<lastBuildDate>Fri, 11 May 2012 13:54:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/InTraction" /><feedburner:info uri="intraction" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>51.0295</geo:lat><geo:long>5.375</geo:long><item>
		<title>Belgian CHI Papers</title>
		<link>http://feedproxy.google.com/~r/InTraction/~3/T2_ldyyI8VM/</link>
		<comments>http://blog.jozilla.net/2012/05/08/belgian-chi-papers/#comments</comments>
		<pubDate>Tue, 08 May 2012 15:22:51 +0000</pubDate>
		<dc:creator>Jo Vermeulen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.jozilla.net/?p=480</guid>
		<description><![CDATA[It’s that time of the year again. This week, the annual CHI conference is taking place in Austin, Texas. While I’m not attending, I do try to follow the program somewhat through Twitter. CHI is generally considered to be the &#8230; <a href="http://blog.jozilla.net/2012/05/08/belgian-chi-papers/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It’s that time of the year again. This week, the <a href="http://chi2012.acm.org/">annual CHI conference</a> is taking place in <a href="http://en.wikipedia.org/wiki/Austin,_Texas">Austin, Texas</a>. While I’m not attending, I do try to follow the program somewhat through <a href="https://twitter.com/#!/search/%23chi2012">Twitter</a>.</p>
<p>CHI is generally considered to be the most prestigious conference on <a href="http://old.sigchi.org/cdg/cdg2.html#2_1">Human-Computer Interaction</a>, with acceptance rates between <a href="http://portal.acm.org/browse_dl.cfm?coll=portal&amp;dl=ACM&amp;idx=SERIES260&amp;linked=1&amp;part=series">20 and 25%</a> (CHI 2012 has an overal acceptance rate of <a href="http://dl.acm.org/citation.cfm?id=2207676">23%</a>: 2,930 papers were accepted out of 12,583 submissions). HCI research labs and individual researchers are often <em>compared</em> based on their track record for CHI (or the lack thereof). For example, <a href="http://hci.rwth-aachen.de/borchers">Professor Jan Borchers</a> of <a href="http://www.rwth-aachen.de/">RWTH Aachen</a> maintains a <a href="http://hci.rwth-aachen.de/chi-ranking">ranking of German universities</a> based on the number of CHI archival publications (full papers or notes) since 2003.</p>
<p>Unfortunately, participation of <a href="http://en.wikipedia.org/wiki/Belgium">Belgian</a> universities and companies at CHI tends to be rather limited, especially with respect to these archival publications. <a href="http://www.uhasselt.be/UH/EDM-Research/research-domains-edm/Human-Computer-Interaction.html">Our lab</a>, for example, got work-in-progress papers accepted before (e.g., <a href="http://dl.acm.org/citation.cfm?id=1125451.1125651">Telebuddies</a>), co-organized CHI workshops (e.g., <a href="http://www.eecs.tufts.edu/~oshaer/workshop/">User interface description languages for next generation user interfaces</a>), and had people in the <a href="http://www.chi2008.org/organizers.html">organizing committee</a>, but we did not (yet) get a full paper or note accepted to CHI. I must say we don’t always try every year, though. On the other hand, we do publish at more specialized conferences, such as UIST (<a href="http://dl.acm.org/citation.cfm?id=1866051">D-Macs</a>), Pervasive (<a href="http://www.springerlink.com/content/d0k1w44175271h72/">Situated Glyphs</a>), 3DUI (<a href="http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=4142854">Vanacken et al.</a>), Tabletop/TIS (<a href="http://dl.acm.org/citation.cfm?id=1731903.1731914">FluidPaint</a> [<a href="http://www.youtube.com/watch?v=fkl782OqqmA">video</a>]), PERCOM (<a href="http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5466973">Pervasive Maps</a>), INTERACT (<a href="http://www.springerlink.com/content/4013v3q5w3g5721l/">Haesen et al.</a>), MobileHCI (<a href="http://dl.acm.org/citation.cfm?doid=1377999.1378061">Luyten et al.</a>), AVI (<a href="http://dl.acm.org/citation.cfm?id=1385607">Gummy</a>), and EICS (<a href="http://dl.acm.org/citation.cfm?id=1996491">CAP3</a>). Some of these more specialized conferences are considered to be as competitive and prestiguous as CHI. This is especially the case for <a href="http://www.acm.org/uist/">UIST</a>, but also for <a href="http://www.cscw2012.org/">CSCW</a>, <a href="http://www.dis2012.org/">DIS</a> and <a href="http://www.ubicomp.org/ubicomp2012/">Ubicomp</a> &#038; <a href="http://pervasiveconference.org/2012/">Pervasive</a> (for the related area of ubiquitous computing). Since other scientific disciplines (e.g., physics, biology) are mostly focused on journals instead of conferences, some people explicitly <a href="http://patrickbaudisch.com/resume/resumePatrickBaudisch.pdf">mention</a> the importance of top HCI conferences such as CHI and UIST in their resume.</p>
<p>What about other Belgian universities? In 2009, <a href="http://soc.kuleuven.be/com/mediac/cuo/index.php?p=member&amp;id=6">dr. David Geerts</a> from <a href="http://soc.kuleuven.be/com/mediac/cuo/">CUO (KULeuven)</a> had a <a href="http://dl.acm.org/citation.cfm?doid=1978942.1979166">full paper</a> accepted to CHI. This was the first CHI archival publication from a Belgian institution in years. At that same edition of CHI, two researchers from <a href="http://w3.tue.nl/nl/">Eindhoven University of Technology (TU/e)</a> presented a <a href="http://www.bartneck.de/publications/2009/scientometricAnalysisOfTheCHI/">scientometric analysis of the CHI proceedings up until 2008</a>. Their analysis seems to indicate that the paper by Geerts was just the second Belgian archival paper at CHI. Indeed, Belgium has exactly 1 credit in the main proceedings up until 2008: </p>
<p><a href="http://blog.jozilla.net/wp-content/uploads/2012/05/chi_ranking.png"><img src="http://blog.jozilla.net/wp-content/uploads/2012/05/chi_ranking-500x403.png" alt="" title="CHI Ranking" width="500" height="403" class="aligncenter size-thumbnail wp-image-884" /></a></p>
<p>As far as I can tell, this refers to the <a href="http://portal.acm.org/citation.cfm?doid=169059.169340">paper at INTERCHI ‘93</a> by <a href="http://www.uclouvain.be/jean.vanderdonckt">Jean Vanderdonckt</a> and François Bodart of the <a href="http://www.uclouvain.be/">Université Catholique de Louvain</a>. Note that INTERCHI ‘93 was in fact a joint <a href="http://dl.acm.org/citation.cfm?id=157210">INTERACT+CHI conference</a> (it was also the first CHI conference that was held outside North America). </p>
<p>Belgium&#8217;s neighbouring countries do a lot better in the analysis: <a href="http://en.wikipedia.org/wiki/Netherlands">the Netherlands</a> have 17.17 credits, <a href="http://en.wikipedia.org/wiki/France">France</a> has 27.03 credits and <a href="http://en.wikipedia.org/wiki/Germany">Germany</a> is a clear winner with a score of 39.74 in the main proceedings. Belgium’s total number of credits per million inhabitants (which includes credits for extended abstracts &#8212; non-archival publications) is a bit higher than that of France, though (1.78 vs. 1.34).</p>
<p>Fortunately, the situation seems to be improving. Last year, KULeuven had another 2 archival papers accepted to CHI 2011: a <a href="http://dl.acm.org/citation.cfm?doid=1978942.1978986">note</a> by Geerts, and a <a href="http://dl.acm.org/citation.cfm?doid=1978942.1979166">full paper</a> by <a href="http://www.cs.unc.edu/~karl/">Karl Gyllstrom</a>. This year, there is <a href="http://dl.acm.org/citation.cfm?id=2208707">a note</a> co-authored by Anand Ramamoorthy from the <a href="http://www.ugent.be/en">University of Ghent</a>. <a href="http://anxma.com/">Steven Houben</a>, an <a href="http://www.uhasselt.be/">UHasselt</a> alumnus (and one of my former Master’s thesis students) who is now working on a PhD in <a href="http://www.itu.dk/~bardram/">Jakob Bardram</a>’s group, got a <a href="http://dl.acm.org/citation.cfm?id=2207676.2208689">CHI 2012 full paper</a> accepted too (congrats again, Steven!). Of course, there&#8217;s the question of what really constitutes a <em>Belgian CHI paper</em>. Is it enough if the paper is (co-)authored by researchers employed by a Belgian institution, or do the authors have to be Belgian? While Karl Gyllstrom and Anand Ramamoorthy are affiliated with Belgian universities, they are not Belgian citizens (as far as I can tell). On the other hand, while Steven is a Belgian citizen, he is not affiliated with a Belgian university or company.</p>
<p>This made me wonder if there were any other Belgians working abroad who ever co-authored papers at CHI. I could only think of Professor <a href="http://www.media.mit.edu/people/pattie/">Pattie Maes</a> (<a href="http://en.wikipedia.org/wiki/Pattie_Maes">VUB alumna</a>) who directs the <a href="http://ambient.media.mit.edu/">Fluid interfaces group</a> at <a href="http://media.mit.edu/">MIT Media Lab</a> (she currently has 4 CHI papers according to <a href="http://www.informatik.uni-trier.de/~ley/db/indices/a-tree/m/Maes:Pattie.html">DBLP</a>). I would love to hear about other people that I might have missed. </p>
<p>To conclude, there is certainly room for improvement, although we&#8217;re not doing that bad either. Let&#8217;s hope the HCI community in Belgium continues to grow and Belgium will eventually be as well represented at top HCI venues as our neighbouring countries.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/InTraction?a=T2_ldyyI8VM:qV64zM1i7dk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/InTraction?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=T2_ldyyI8VM:qV64zM1i7dk:vTIO0qPIxYU"><img src="http://feeds.feedburner.com/~ff/InTraction?i=T2_ldyyI8VM:qV64zM1i7dk:vTIO0qPIxYU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=T2_ldyyI8VM:qV64zM1i7dk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/InTraction?i=T2_ldyyI8VM:qV64zM1i7dk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=T2_ldyyI8VM:qV64zM1i7dk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/InTraction?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.jozilla.net/2012/05/08/belgian-chi-papers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.jozilla.net/2012/05/08/belgian-chi-papers/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=belgian-chi-papers</feedburner:origLink></item>
		<item>
		<title>Reflecting on Participating in the Vlaamse Programmeerwedstrijd</title>
		<link>http://feedproxy.google.com/~r/InTraction/~3/w3zkAPQvs-c/</link>
		<comments>http://blog.jozilla.net/2012/04/21/reflecting-on-participating-in-the-vlaamse-programmeerwedstrijd/#comments</comments>
		<pubDate>Sat, 21 Apr 2012 16:31:05 +0000</pubDate>
		<dc:creator>Jo Vermeulen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.jozilla.net/?p=697</guid>
		<description><![CDATA[Last Wednesday, I participated in the fourth edition of the Vlaamse Programmeerwedstrijd (VPW), hosted by PHL in Hasselt. The VPW is a Flemish programming contest inspired by the ACM International Collegiate Programming Contest (ICPC). Participants compete in teams of 3 &#8230; <a href="http://blog.jozilla.net/2012/04/21/reflecting-on-participating-in-the-vlaamse-programmeerwedstrijd/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last Wednesday, I participated in the fourth edition of the <a href="http://www.vlaamseprogrammeerwedstrijd.be/2012/">Vlaamse Programmeerwedstrijd (VPW)</a>, hosted by <a href="http://www.phl.be/">PHL</a> in <a href="http://en.wikipedia.org/wiki/Hasselt">Hasselt</a>. The VPW is a <a href="http://en.wikipedia.org/wiki/Flanders">Flemish</a> programming contest inspired by the <a href="http://en.wikipedia.org/wiki/ACM_International_Collegiate_Programming_Contest">ACM International Collegiate Programming Contest (ICPC)</a>. Participants compete in teams of 3 and are divided into three different categories: high school students (category I), undergraduate students (category II), and graduate students or professionals (category III). Teams get 3 hours to solve 5 problems in one of 12 supported programming languages, using a single computer. </p>
<p>My team competed in category III and consisted of myself and two colleagues. Our main motivation was fun, and curiosity of how well (or bad) we would do. Also, since I was encouraging students to participate, it wouldn&#8217;t hurt to set an example by participating myself too. </p>
<p>Or so I thought <img src='http://blog.jozilla.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Our team eventually did not do well, as we only managed to correctly solve 1 out of 5 exercises. There was a big gap between the top 5 and the other teams in our category. Only the teams ranking 1st and 2nd correctly solved all problems. The 3rd team solved 4 problems, the 4th and 5th ranked teams solved 3 problems, and from then on teams only solved 2 problems or less (four teams didn&#8217;t solve any problems). All except 1 team in the top 5 already participated in this contest before. This year&#8217;s winner actually ranked <a href="http://www.nwerc.eu/score/final.html">21st</a> last year in the <a href="http://www.nwerc.eu/">Northwestern European Regional Programming Contest (NWERC)</a>, which is a European contest that serves as a qualifier for the ACM ICPC World Finals. By the way, kudos to the two teams of Master&#8217;s students from our university who managed to rank 7th and 9th (and beat us too). </p>
<p>Nevertheless, I had a lot of fun participating. I think I have a better idea now of what matters in this kind of contest and how we could do better in the future. Here is a quick list of factors that I feel are important:</p>
<h2>Speed</h2>
<p>You have to work <em>really</em> fast. Teams get 3 hours for 5 problems, which comes down to 36 minutes per problem. That includes reading the problem description, thinking about the solution, actually coding it up and verifying that it works! </p>
<p>You can bring notes, books and existing code along (although, obviously, you are not allowed to use the web), so it makes sense to build your own library of useful algorithms and data structures which you can use, either written down on paper or available in code. This includes things like <a href="http://en.wikipedia.org/wiki/Graph_(data_structure)">graphs</a>, <a href="http://en.wikipedia.org/wiki/Tree_(data_structure)">trees</a>, <a href="http://en.wikipedia.org/wiki/Depth-first_search">DFS</a>, <a href="http://en.wikipedia.org/wiki/Breadth-first_search">BFS</a>, <a href="http://en.wikipedia.org/wiki/Backtracking">backtracking</a>, the <a href="http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes">Sieve of Eratosthenes</a>, <a href="http://en.wikipedia.org/wiki/Dijkstra's_algorithm">Dijkstra</a> and <a href="http://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm">Floyd-Warshall</a>. For example, we skipped one of the problems since we didn&#8217;t have a well-tested data structure available for it. Of course, you should also understand these algorithms and data structures and know when to use them.</p>
<p>Since speed is important, this means you have to be proficient in the language you&#8217;re using. You don&#8217;t have time to look up how a certain feature works, so make sure you know how to read input (obviously), how to work with built-in data structures (e.g. lists, strings, dictionaries, stacks, tuples) and how to perform common operations (e.g. copying containers, mathematical operations on numbers, replacing characters in strings, regex matching). We used <a href="http://python.org/">Python</a>, which has a few nice features such as built-in <a href="http://docs.python.org/library/functions.html#eval">eval</a> (useful for evaluating strings of mathematical expressions with the right operator precedence), <a href="http://www.vlaamseprogrammeerwedstrijd.be/current/io/oplossing_Python.py">easy I/O</a>, <a href="http://en.wikipedia.org/wiki/List_comprehension#Python">list comprehensions</a>, built-in <a href="http://docs.python.org/library/itertools.html#itertools.combinations">combinations</a> and <a href="http://docs.python.org/library/itertools.html#itertools.permutations">permutations</a> functions, while also being easy to learn. I heard that most of the top-scoring teams were using <a href="http://www.haskell.org/">Haskell</a>. </p>
<h2>Know about Time Complexity</h2>
<p>This is really essential. You have to be able to quickly assess the time complexity of your algorithm and decide whether it will good enough. Most problem descriptions include upper bounds on their inputs, which you should take into account (even if the example input is very small). This helps you to discard inefficient algorithms, and gives you more time to work out a better one. Most programs will have to perform well on large inputs, which means you will usually have to do better than O(N^2). </p>
<p>We made this mistake twice, because we were stressing over the amount of time left and wanted to quickly code up a working solution. While you can optimize your code, you don&#8217;t have time to change your algorithm when you have just finished a working (but slow) solution.  With about 25 minutes left, we had a working version for one of the problems, but didn&#8217;t succeed in optimizing that solution further to avoid exceeding the time limit for the contest input. So eventually, we didn&#8217;t get any points for our solution. What we should have done instead was think about the time complexity of our algorithm first, and then discard it when we would have noticed that it didn&#8217;t scale. </p>
<p>Moreover, C, C++ (and Java) have an advantage over scripting languages in terms of performance, since a suboptimal algorithm in C/C++ (e.g. O(N^2) instead of O(NlogN)) might get very close to the time limit but could still be fast enough. The same algorithm implemented in a scripting language will almost always be too slow. If you&#8217;re programming in Python, just try running your code with <a href="http://en.wikipedia.org/wiki/CPython">CPython</a> and <a href="http://pypy.org/">PyPy</a> to see what I mean. Here&#8217;s an example of running naive matrix multiplication (takes <a href="http://en.wikipedia.org/wiki/Computational_complexity_of_mathematical_operations#Matrix_algebra">cubic time</a>) of two randomized 500&#215;500 matrices in CPython versus PyPy:</p>
<pre>
$ time python n3matrix.py 500
real	2m30.598s
user	2m30.189s
sys	0m0.068s
$ time pypy n3matrix.py 500
real	0m13.244s
user	0m13.137s
sys	0m0.064s
</pre>
<p>The PyPy version runs in 13 seconds and would probably not exceed the contest time limit, while the CPython version takes a whopping 150 seconds! Even though there are great libraries for matrix operations in Python (hello <a href="http://numpy.scipy.org/">NumPy</a>!), this still matters since most programming contests don&#8217;t allow the use of external libraries. </p>
<p>Here&#8217;s a similar example of sorting a list of 10.000 elements using <a href="http://en.wikipedia.org/wiki/Bubble_sort">bubble sort</a> (a quadratic algorithm):</p>
<pre>
$ time python n2sort.py 10000
real	0m38.837s
user	0m38.730s
sys	0m0.016s
$ time pypy n2sort.py 10000
real	0m2.284s
user	0m2.192s
sys	0m0.036s
</pre>
<p>Of course, one could also argue that scripting languages allow you to implement and debug a solution more quickly than C/C++, but I guess it all depends on how fluent you are in your language of choice.  </p>
<h2>Teamwork</h2>
<p>Although you work in teams of 3 people, you can only use one computer, which means only one person at a time can do the actual coding. You will have to divide tasks. For example, one team member could try to get a head start on the next problems, or could sort problems in order of difficulty to select the next problem to work on collectively. I think this actually worked quite well in our team. </p>
<p>In our case, it helped to have the fastest programmer/typist on the keyboard most of the time, although we did switch several times when someone had an idea they wanted to try. If you switch a lot, make sure you standardize somewhat on the setup you use, or at least allow easy switching between tools. We made sure we had different editors on the laptop set up to work in a way that the other team members were comfortable with. Because we used Python, we also had to standardize on the number of spaces used for indentation.</p>
<h2>Practice and Study</h2>
<p>Finally, the best way to get better is by practicing (exemplified by the number of top-scoring teams who also participated in previous editions of the contest). You can practice on problem sets from previous years or online problems sets (e.g. <a href="http://projecteuler.net/">Project Euler</a>, <a href="http://uva.onlinejudge.org/index.php?option=com_onlinejudge&#038;Itemid=8">UVA</a>, or <a href="http://www.spoj.pl/">SPOJ</a>). Once you get better, it will probably also help to practice problems in contest conditions: as a team, with a time limit and just a single computer.</p>
<p>However, just practicing more probably won&#8217;t cut it. You are also going to need a good reference book on algorithms to look up problems, and suitable algorithms or heuristics for these problems. Since you won&#8217;t have enough time to read through books during the competition, you need to have this knowledge in your head (i.e. by putting the theory from the books into practice). I think you can only get better through a combination of theory and practice: studying different techniques and applying them in solutions to programming problems. Books on algorithms and data structures that I liked myself are: Skiena&#8217;s <a href="http://www.algorist.com/">The Algorithm Design Manual</a>, <a href="http://en.wikipedia.org/wiki/Introduction_to_Algorithms">CLRS</a> and Sedgewick&#8217;s <a href="http://algs4.cs.princeton.edu/">Algorithms</a>.</p>
<p>Of course, these are just my own observations, so comments are always welcome!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/InTraction?a=w3zkAPQvs-c:bUjxOLswbhM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/InTraction?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=w3zkAPQvs-c:bUjxOLswbhM:vTIO0qPIxYU"><img src="http://feeds.feedburner.com/~ff/InTraction?i=w3zkAPQvs-c:bUjxOLswbhM:vTIO0qPIxYU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=w3zkAPQvs-c:bUjxOLswbhM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/InTraction?i=w3zkAPQvs-c:bUjxOLswbhM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=w3zkAPQvs-c:bUjxOLswbhM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/InTraction?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.jozilla.net/2012/04/21/reflecting-on-participating-in-the-vlaamse-programmeerwedstrijd/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.jozilla.net/2012/04/21/reflecting-on-participating-in-the-vlaamse-programmeerwedstrijd/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=reflecting-on-participating-in-the-vlaamse-programmeerwedstrijd</feedburner:origLink></item>
		<item>
		<title>Getting up and running with the Kinect in Ubuntu 12.04</title>
		<link>http://feedproxy.google.com/~r/InTraction/~3/yJLWuejq7kE/</link>
		<comments>http://blog.jozilla.net/2012/03/29/getting-up-and-running-with-the-kinect-in-ubuntu-12-04/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 12:31:48 +0000</pubDate>
		<dc:creator>Jo Vermeulen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[kinect]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.jozilla.net/?p=624</guid>
		<description><![CDATA[I&#8217;m currently experimenting a bit with the Kinect depth camera, which I intend to use for a prototype. I&#8217;ve played around with the device before on Windows using the Microsoft Kinect SDK. Setting up libfreenect on Windows is actually quite &#8230; <a href="http://blog.jozilla.net/2012/03/29/getting-up-and-running-with-the-kinect-in-ubuntu-12-04/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently experimenting a bit with the <a href="http://en.wikipedia.org/wiki/Kinect">Kinect</a> depth camera, which I intend to use for a prototype. I&#8217;ve played around with the device before on Windows using the <a href="http://www.microsoft.com/en-us/kinectforwindows/develop/">Microsoft Kinect SDK</a>. Setting up <a href="https://github.com/OpenKinect/libfreenect">libfreenect</a> on Windows is actually quite a <a href="http://openkinect.org/wiki/Getting_Started#Windows">pain</a>, which was the reason why I started with the Microsoft SDK. As I wanted to code in <a href="http://xkcd.com/353/">Python</a>, I&#8217;ve had a look at <a href="http://pytools.codeplex.com/wikipage?title=PyKinect">PyKinect</a> and the <a href="http://pytools.codeplex.com/">Python Tools for Visual Studio</a> (see also this <a href="http://pyvideo.org/video/669/building-a-kinect-game-with-python">PyCon US 2012 talk</a> about building a Kinect game with Python). Unfortunately, the PyKinect samples seem to be <a href="http://pytools.codeplex.com/wikipage?title=PyKinect#Comments">outdated</a>, and don&#8217;t work with the latest version of the Kinect SDK (version 1.0, released in February).</p>
<p>So I decided to see how far I would get with the Kinect and libfreenect on <a href="http://www.ubuntu.com/ubuntu">Ubuntu</a> (12.04). Step 1: install the libfreenect demos to test if it works (this will also install libfreenect and its dependencies).  </p>
<pre>
$ sudo apt-get install libfreenect-demos
</pre>
<p>So far so good. Unfortunately, the demo application wouldn&#8217;t start:</p>
<pre>
$ freenect-glview
Kinect camera test
Number of devices found: 1
Could not claim interface on camera: -6
Could not open device
</pre>
<p>Strange.. I did another check to see if my user was in the plugdev group (which<br />
was the case):</p>
<pre>
$ groups jo
jo : jo adm cdrom sudo dip plugdev lpadmin sambashare
</pre>
<p>Then I noticed that the Kinect&#8217;s LED kept blinking continously, which usually means there&#8217;s some sort of connection problem. It was correctly recognized, though:</p>
<pre>
$ lsusb
...
Bus 002 Device 007: ID 045e:02b0 Microsoft Corp. Xbox NUI Motor
Bus 002 Device 008: ID 045e:02ad Microsoft Corp. Xbox NUI Audio
Bus 002 Device 009: ID 045e:02ae Microsoft Corp. Xbox NUI Camera
</pre>
<p>After a quick web search for the specific libfreenect-glview error message, I learned that recent versions of the <a href="http://en.wikipedia.org/wiki/Linux_kernel">Linux kernel</a> prevent libfreenect from claiming the Kinect as they now include a driver to <a href="http://thread.gmane.org/gmane.linux.kernel/1123824">support the device as a regular webcam</a> (see <a href="https://github.com/torvalds/linux/blob/master/drivers/media/video/gspca/kinect.c">kinect.c</a>), which is actually quite cool. This also means there should be a specific video device for the Kinect (/dev/video1 in my case).</p>
<p>The kernel modules are indeed loaded:</p>
<pre>
$ lsmod | grep -i gspca
gspca_kinect           12936  0
gspca_main             28366  1 gspca_kinect
videodev               98259  2 gspca_main,uvcvideo
</pre>
<p>Let&#8217;s try playing the camera stream using <a href="http://gstreamer.freedesktop.org/">GStreamer</a> and <a href="http://en.wikipedia.org/wiki/Video4Linux">Video4Linux</a>:</p>
<pre>
$ gst-launch-0.10 v4l2src device=/dev/video1 ! video/x-raw-yuv ! ffmpegcolorspace ! xvimagesink
</pre>
<p><a href="http://blog.jozilla.net/wp-content/uploads/2012/03/kinect-gstreamer.png"><img src="http://blog.jozilla.net/wp-content/uploads/2012/03/kinect-gstreamer-500x369.png" alt="" title="kinect-gstreamer" width="500" height="369" class="aligncenter size-thumbnail wp-image-644" /></a></p>
<p>That seems to work! </p>
<p>The Kinect actually has <a href="http://en.wikipedia.org/wiki/Kinect#Technology">two image sensors</a>: an RGB camera and a depth sensor, which consists of an infrared laser projector and a monochrome CMOS sensor. A depth map is created by projecting structured infrared light and capturing the resulting image from the monochrome sensor. As I wasn&#8217;t sure how to grab an image from the monochrome sensor, I contacted the author of the kernel module (<a href="http://ao2.it/">Antonio Ospite</a>). He told me it&#8217;s possible to get a monochrome image by specifying an image size of of 640&#215;488 pixels (instead of the usual 640&#215;480). Note that the kernel module currently only supports video streams from the monochrome sensor as unprocessed output. </p>
<p>If we pass that specific width and height to GStreamer, we get this:</p>
<p><a href="http://blog.jozilla.net/wp-content/uploads/2012/03/kinect-monochrome.png"><img src="http://blog.jozilla.net/wp-content/uploads/2012/03/kinect-monochrome-500x375.png" alt="" title="kinect-monochrome" width="500" height="375" class="aligncenter size-thumbnail wp-image-681" /></a></p>
<p>It&#8217;s also possible to get the full-size (1280&#215;1024) monochrome image. However, most webcam apps will just show the video stream from the RGB sensor for that resolution as you can&#8217;t specify that you want the specific <a href="http://article.gmane.org/gmane.linux.drivers.video-input-infrastructure/31345">Y10B format</a>. To do that, you can use a separate program like <a href="http://packages.ubuntu.com/precise/qv4l2">qv4l2</a>, which can be installed as follows:</p>
<pre>
$ sudo apt-get install qv4l2
</pre>
<p>To get the full-size monochrome image, run qv4l2, open the /dev/video1 device in raw mode (File > Open raw device), select 1280&#215;1024 for the frame size, and &#8220;Y10B &#8211; Y10B&#8221; for the capture format, and click the red capture button:</p>
<p><a href="http://blog.jozilla.net/wp-content/uploads/2012/03/kinect-monochrome-full.png"><img src="http://blog.jozilla.net/wp-content/uploads/2012/03/kinect-monochrome-full-500x222.png" alt="" title="kinect-monochrome-full" width="500" height="222" class="aligncenter size-thumbnail wp-image-683" /></a></p>
<p>OK, back to running the libfreenect demo. Someone over at superuser.com <a href="http://superuser.com/questions/377621/could-not-claim-interface-on-camera-6-when-trying-to-connect-usb-camera-kin/396927#396927">suggested</a> to remove the modules (so that the user-mode libfreenect driver could<br />
take over) and run libfreenect-glview again.</p>
<p>And indeed, after removing both gspca modules, the freenect-glview demo did work:</p>
<pre>
$ sudo modprobe -r gspca_kinect
$ sudo modprobe -r gspca_main
$ freenect-glview
Kinect camera test
Number of devices found: 1
GL thread
Write Reg 0x0006 <= 0x00
Write Reg 0x0012 <= 0x03
Write Reg 0x0013 <= 0x01
Write Reg 0x0014 <= 0x1e
Write Reg 0x0006 <= 0x02
Write Reg 0x0005 <= 0x00
Write Reg 0x000c <= 0x00
Write Reg 0x000d <= 0x01
Write Reg 0x000e <= 0x1e
Write Reg 0x0005 <= 0x01
...
</pre>
<p><a href="http://blog.jozilla.net/wp-content/uploads/2012/03/libfreenect-glview.png"><img src="http://blog.jozilla.net/wp-content/uploads/2012/03/libfreenect-glview-500x198.png" alt="" title="libfreenect-glview (left: depth, right: RGB)" width="500" height="198" class="aligncenter size-thumbnail wp-image-643" /></a></p>
<p>The left side of the window shows a colored depth image, while the right side shows the RGB image from the camera. Of course, it would be quite cumbersome to remove the modules again every time you want to use libfreenect. One <a href="http://pointclouds.org/documentation/tutorials/openni_grabber.php#troubleshooting">option</a> is to blacklist the gspca module as follows:</p>
<pre>
$ echo "blacklist gspca_kinect" >> /etc/modprobe.d/blacklist.conf
</pre>
<p>Now that we've got that sorted out, I'll try out the <a href="http://openkinect.org/wiki/Python_Wrapper">libfreenect Python wrapper</a> (or perhaps <a href="http://examples.simplecv.org/en/latest/examples/kinect.html">SimpleCV</a>).</p>
<p><strong>Update</strong>: <a href="http://ao2.it/">Antonio Ospite</a> pointed out in the comments that recent versions of libfreenect (0.1.2) can automatically detach the kernel driver. There's a <a href="https://launchpad.net/~floe/+archive/libtisch">PPA</a> available by <a href="http://floe.butterbrot.org/">Florian Echtler</a> with updated libfreenect packages for Ubuntu 12.04.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/InTraction?a=yJLWuejq7kE:KMDQwVv5VoI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/InTraction?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=yJLWuejq7kE:KMDQwVv5VoI:vTIO0qPIxYU"><img src="http://feeds.feedburner.com/~ff/InTraction?i=yJLWuejq7kE:KMDQwVv5VoI:vTIO0qPIxYU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=yJLWuejq7kE:KMDQwVv5VoI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/InTraction?i=yJLWuejq7kE:KMDQwVv5VoI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=yJLWuejq7kE:KMDQwVv5VoI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/InTraction?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.jozilla.net/2012/03/29/getting-up-and-running-with-the-kinect-in-ubuntu-12-04/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://blog.jozilla.net/2012/03/29/getting-up-and-running-with-the-kinect-in-ubuntu-12-04/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=getting-up-and-running-with-the-kinect-in-ubuntu-12-04</feedburner:origLink></item>
		<item>
		<title>Lenovo ThinkPad X121e</title>
		<link>http://feedproxy.google.com/~r/InTraction/~3/qJcbaIeIaKk/</link>
		<comments>http://blog.jozilla.net/2012/03/12/lenovo-thinkpad-x121e/#comments</comments>
		<pubDate>Mon, 12 Mar 2012 22:15:34 +0000</pubDate>
		<dc:creator>Jo Vermeulen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[lenovo]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[thinkpad]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://blog.jozilla.net/?p=563</guid>
		<description><![CDATA[I am writing this on my new laptop: a Lenovo ThinkPad X121e: Although my employer is so generous to provide me with a laptop for work purposes, I also wanted a new laptop at home for personal use. My only &#8230; <a href="http://blog.jozilla.net/2012/03/12/lenovo-thinkpad-x121e/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I am writing this on my new laptop: a <a href="http://shop.lenovo.com/gbweb/gb/en/learn/products/laptops/thinkpad/x-series/X121e_Intel/index.html">Lenovo ThinkPad X121e</a>:</p>
<p><a href="http://blog.jozilla.net/wp-content/uploads/2012/03/thinkpadx121e.jpg"><img src="http://blog.jozilla.net/wp-content/uploads/2012/03/thinkpadx121e-500x375.jpg" alt="" title="ThinkPad X121e" width="500" height="375" class="aligncenter size-thumbnail wp-image-589" /></a></p>
<p>Although my employer is so generous to provide me with a laptop for work purposes, I also wanted a new laptop at home for personal use. My only personal machine right now is my aging (and quite slow) 17 inch <a href="http://en.wikipedia.org/wiki/PowerBook_G4">Apple Powerbook G4</a>. Since most Apple software currently requires Intel processors, I can&#8217;t really upgrade it either. I also wanted something a bit more portable (no heavy, bulky 15-incher) with better battery life, which would be great for travelling.</p>
<p>While my work laptop runs Windows 7, I really miss having a <a href="http://www.youtube.com/watch?v=sh0OYWTkAsE">UNIX</a> environment available <a href="https://twitter.com/#!/jozilla/status/161486847057473536">at times</a>. I worked almost exclusively on <a href="http://en.wikipedia.org/wiki/Linux">Linux</a> since 2003, starting out with <a href="http://en.wikipedia.org/wiki/Mandriva_Linux">Mandrake</a>, moving from that to <a href="http://www.gentoo.org/">Gentoo </a>and then to <a href="http://www.debian.org/">Debian</a> to eventually settle on <a href="http://www.ubuntu.com/">Ubuntu</a>. A few years ago, I decided to move back to Windows due to bad hardware support on Linux (especially for newer laptops) and annoying bugs in Ubuntu. Nevertheless, I still prefer a UNIX environment for programming, and I love the power of the shell and how you can <a href="http://vimeo.com/11202537">quickly chain commands together to produce something useful</a>.</p>
<p>At first, I was thinking of just getting a new Apple laptop. Indeed, <a href="http://en.wikipedia.org/wiki/Mac_OS_X">OS X</a> is also based on UNIX but <em>does have</em> great hardware support and a nice UI. Furthermore, Apple builds high-quality hardware (I loved my Powerbook), and they sell the ultimate ultraportable laptop: the <a href="http://www.apple.com/macbookair/">Macbook Air</a>. </p>
<p>Unfortunately, I quickly discarded that idea when I realized again how expensive Apple laptops are. I didn&#8217;t really feel like shelling out <a href="http://store.apple.com/nl/browse/home/shop_mac/family/macbook_air/select">about 1200 EUR</a> just to get a Macbook Air with a decent amount of RAM and an SSD bigger than 64 GB.  So I started looking around for cheaper alternatives. Instead of complaining about Ubuntu not supporting certain hardware, I decided to look for hardware that would <em>Just Work (TM)</em> on Ubuntu. There are also some things I didn&#8217;t like that much on OS X, such as the lack of a well-integrated <a href="http://en.wikipedia.org/wiki/Advanced_Packaging_Tool">package manager</a>. At <a href="http://fosdem.org/">FOSDEM</a>, I remember seeing most developers work on either Apple machines or IBM (now <a href="http://lenovo.com/">Lenovo</a>) <a href="http://en.wikipedia.org/wiki/ThinkPad">ThinkPads</a>. Some people even used to say that Apple and IBM ThinkPad laptops are the only laptops really worth considering. ThinkPads also come in an ultraportable <a href="http://en.wikipedia.org/wiki/ThinkPad#X_series">X series</a>, which I thought was worth looking into.  </p>
<p>While the professional ThinkPad X series laptops are again quite expensive, Lenovo also has entry-level models, such as the  X100e, X120e or the X121e. These models come with either an <a href="http://en.wikipedia.org/wiki/AMD_Fusion">AMD Fusion</a> or an <a href="http://en.wikipedia.org/wiki/Sandy_Bridge#Mobile_platform">Intel Core i3</a> processor. The nice thing about the Intel model of the X121e is the fact that it&#8217;s quite <a href="http://ubuntuforums.org/showthread.php?t=1894892">well supported</a> in Linux, and has received <a href="http://www.notebookcheck.net/Lenovo-X121e-204562U-Laptop-Review.58880.0.html">nice reviews</a>. So, I decided to buy myself one.</p>
<p>In summary, here&#8217;s what I like about this laptop, compared the Macbook Air:</p>
<ul>
<li>Half the price. It costs around <a href="http://tweakers.net/pricewatch/300092/lenovo-thinkpad-x121e-(nwn7jmh).html">630 EUR</a>, and when purchasing a 53 EUR 2-year Next Business Day On Site Warranty, you get a <a href="https://www.lenovo-promotions.com/nl/notebook">100 EUR cashback</a>. That means you can get the laptop plus 2-year warranty for around 580 EUR, which is a great deal, in my opinion. The AMD version even starts from 400 EUR.</li>
<li>More ports (Ethernet, 3x USB, VGA, HDMI).</li>
<li>Better battery life (up to 9 hours according to Lenovo).</li>
<li>Customizability (it&#8217;s quite easy to replace the HDD, battery or add more RAM).</li>
<li>Built-in <a href="http://www.ericsson.com/solutions/mobile_broadband_modules/docs/F5521gw-screen.pdf">3G (HSPA) WAN and GPS module</a> (I really like this feature).</li>
<li>Comparable size and weight (11.6 inch and 1.3 kgs, about 250g heavier).</li>
<li>Comparable build quality (the laptop feels very sturdy).</li>
<li>Comparable keyboard quality (with <a href="http://en.wikipedia.org/wiki/Pointing_stick">TrackPoint</a>).</li>
</ul>
<p>Disadvantages are the slower processor (Core i3 versus the Macbook&#8217;s Core i5 or Core i7, but probably fine for my needs), the lower-quality display (same resolution but the Macbook Air&#8217;s is better, although I do prefer matte screens), slightly noisy fan at times, and the less sexy design (I myself actually quite like the look and feel of the device). </p>
<p>Oh, and it has a nice sleep animation (probably inspired by Apple&#8217;s own pulsing LED sleep animation):</p>
<p><a href="http://blog.jozilla.net/2012/03/12/lenovo-thinkpad-x121e/"><img src="http://img.youtube.com/vi/E6drOAYCb5A/default.jpg" width="130" height="97" border=0></a></p>
<p>Let&#8217;s see how installing Ubuntu goes on this one.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/InTraction?a=qJcbaIeIaKk:zJd3hb1mPHg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/InTraction?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=qJcbaIeIaKk:zJd3hb1mPHg:vTIO0qPIxYU"><img src="http://feeds.feedburner.com/~ff/InTraction?i=qJcbaIeIaKk:zJd3hb1mPHg:vTIO0qPIxYU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=qJcbaIeIaKk:zJd3hb1mPHg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/InTraction?i=qJcbaIeIaKk:zJd3hb1mPHg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=qJcbaIeIaKk:zJd3hb1mPHg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/InTraction?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.jozilla.net/2012/03/12/lenovo-thinkpad-x121e/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.jozilla.net/2012/03/12/lenovo-thinkpad-x121e/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=lenovo-thinkpad-x121e</feedburner:origLink></item>
		<item>
		<title>Moving my code from Launchpad to GitHub</title>
		<link>http://feedproxy.google.com/~r/InTraction/~3/Zn9aQn2pxgs/</link>
		<comments>http://blog.jozilla.net/2012/02/16/moving-my-code-from-launchpad-to-github/#comments</comments>
		<pubDate>Thu, 16 Feb 2012 01:27:00 +0000</pubDate>
		<dc:creator>Jo Vermeulen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bzr]]></category>
		<category><![CDATA[cassowary.net]]></category>
		<category><![CDATA[facade]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[pydgetrfid]]></category>
		<category><![CDATA[rcs]]></category>
		<category><![CDATA[uiml.net]]></category>

		<guid isPermaLink="false">http://blog.jozilla.net/?p=516</guid>
		<description><![CDATA[This afternoon, I decided to convert my old code repositories from bzr to git, and move them from Launchpad to GitHub. I have converted Cassowary.net, PydgetRFID, Facade, as well as Uiml.net. It turns out that converting a bzr repository with &#8230; <a href="http://blog.jozilla.net/2012/02/16/moving-my-code-from-launchpad-to-github/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This afternoon, I decided to convert my old code repositories from <a href="http://bazaar.canonical.com/">bzr</a> to <a href="http://git-scm.com/">git</a>, and move them from <a href="https://launchpad.net/~jozilla">Launchpad</a> to <a href="https://github.com/jozilla">GitHub</a>. I have converted <a href="http://jozilla.net/Software/CassowaryNet">Cassowary.net</a>, <a href="http://jozilla.net/Software/PydgetRFID">PydgetRFID</a>, <a href="http://jozilla.net/Software/Facade">Facade</a>, as well as <a href="http://jozilla.net/Software/UimlNet">Uiml.net</a>. </p>
<p>It turns out that converting a bzr repository with a single branch to git is quite easy. Here&#8217;s how I did it (after installing the latest versions of both bzr and git):</p>
<pre>
$ mkdir repo.git
$ cd repo.git
$ git init
$ bzr fast-export --plain ../repo.bzr | git fast-import
$ git reset --hard
</pre>
<p>Of course, <code>repo.bzr</code> is your old bzr repository here, while <code>repo.git</code> is your newly created git repository. The fast-export/fast-import commands convert the repository&#8217;s history from bzr to git. To populate our directory with the bzr repository&#8217;s files, however, we also need to perform a hard reset. If you need to convert multiple bzr branches to git, have a look at <a href="http://blogs.igalia.com/aperez/2008/11/convert-repositories-with-fast-exportimport/">this post</a>.</p>
<p>I started experimenting with distributed version control systems (DVCS) while working on my MSc thesis (around 2005). I originally maintained Cassowary.net using <a href="http://darcs.net/">darcs</a> (a DVCS written in <a href="http://www.haskell.org/haskellwiki/Haskell">Haskell</a>), and <a href="http://blog.jozilla.net/2006/12/18/uiml-net-and-cassowary-net-now-in-launchpad/" title="Uiml.net and Cassowary.net now in Launchpad">switched</a> to bzr later. Back in the <a href="http://blog.jozilla.net/2006/03/17/connecting-the-application-logic-with-the-user-interface-in-uiml-net/" title="Connecting the application logic with the user interface in Uiml.net">early days of Uiml.net</a>, we used <a href="http://uimldotnet.cvs.sourceforge.net/viewvc/uimldotnet/uiml.net/">CVS</a>, which was horrible at moving or renaming files, not to mention the inability to work offline and still commit your work. </p>
<p>I preferred darcs and bzr over git at the time because they were a lot easier to use. These days, git seems to have catched up to bzr in that regard. Back in 2006, I also did a few <a href="http://blog.jozilla.net/2006/03/03/bzr-versus-git/" title="Bzr versus git">performance tests</a> and <a href="http://blog.jozilla.net/2008/06/26/bzr-vs-git-the-sequel/" title="Bzr vs git, the sequel">found</a> that bzr was a lot slower than git. Things seem to have <a href="http://doc.bazaar.canonical.com/migration/en/why-switch-to-bazaar.html#high-storage-efficiency-and-speed">improved</a> somewhat, but git is still <em>The King of Speed</em>. Oh, and <a href="http://www.github.com/">GitHub</a> is great!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/InTraction?a=Zn9aQn2pxgs:SKTKWl4TUrs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/InTraction?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=Zn9aQn2pxgs:SKTKWl4TUrs:vTIO0qPIxYU"><img src="http://feeds.feedburner.com/~ff/InTraction?i=Zn9aQn2pxgs:SKTKWl4TUrs:vTIO0qPIxYU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=Zn9aQn2pxgs:SKTKWl4TUrs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/InTraction?i=Zn9aQn2pxgs:SKTKWl4TUrs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=Zn9aQn2pxgs:SKTKWl4TUrs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/InTraction?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.jozilla.net/2012/02/16/moving-my-code-from-launchpad-to-github/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.jozilla.net/2012/02/16/moving-my-code-from-launchpad-to-github/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=moving-my-code-from-launchpad-to-github</feedburner:origLink></item>
		<item>
		<title>Python introduction movie</title>
		<link>http://feedproxy.google.com/~r/InTraction/~3/WXfJXK8JK-E/</link>
		<comments>http://blog.jozilla.net/2009/11/14/python-introduction-movie/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 09:00:03 +0000</pubDate>
		<dc:creator>Jo Vermeulen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[teaching]]></category>

		<guid isPermaLink="false">http://blog.jozilla.net/?p=435</guid>
		<description><![CDATA[I just wanted to share this movie about the Python programming language. Although it&#8217;s a bit dated, I feel the movie still provides a nice overview of the benefits of Python, and explains why the language is good for educational &#8230; <a href="http://blog.jozilla.net/2009/11/14/python-introduction-movie/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I just wanted to share this movie about the <a href="http://www.python.org/">Python programming language</a>. Although it&#8217;s a bit <a href="http://lemonodor.com/archives/000921.html">dated</a>, I feel the movie still provides a nice overview of the benefits of Python, and explains why the language is good for educational purposes. It can be found at <a href="http://python.org/other/python.mov">python.org</a>.</p>

<p>You&#8217;ll see interviews with <a href="http://www.python.org/~guido/">Guido van Rossum</a> (creator of the Python language), <a href="http://catb.org/~esr/">Eric S. Raymond</a> (author of <a href="http://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar">&#8220;The Cathedral and the Bazaar&#8221;</a> and the excellent article <a href="http://www.linuxjournal.com/article/3882">&#8220;Why Python?&#8221;</a>), and Tim Peters (known a.o. from <a href="http://www.python.org/dev/peps/pep-0020/">The Zen of Python</a>).</p>

<div class="center">
[See post to watch QuickTime movie]<br />
</div>

<p>The film was originally called &#8220;A Python Love Story&#8221;, and was was made in 2001 by a class of high school students in <a href="http://www.apsva.us/yhs">Yorktown High School</a>  (Arlington, Virginia) together with their Computer Science teacher <a href="http://www.elkner.net/">Jeff Elkner</a>. Elkner is known for <a href="http://www.greenteapress.com/thinkpython/thinkCSpy/">translating</a> <a href="http://allendowney.com/">Allen Downey</a>&#8216;s <a href="http://www.greenteapress.com/thinkpython/">&#8220;How to Think Like a Computer Scientist&#8221;</a> into Python. The original (and longer) version of the video is available from the <a href="http://openbookproject.net/pyBiblio/pythonvideo.php">Python Bibliotheca</a>.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/InTraction?a=WXfJXK8JK-E:mIjgEhp8-gk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/InTraction?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=WXfJXK8JK-E:mIjgEhp8-gk:vTIO0qPIxYU"><img src="http://feeds.feedburner.com/~ff/InTraction?i=WXfJXK8JK-E:mIjgEhp8-gk:vTIO0qPIxYU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=WXfJXK8JK-E:mIjgEhp8-gk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/InTraction?i=WXfJXK8JK-E:mIjgEhp8-gk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=WXfJXK8JK-E:mIjgEhp8-gk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/InTraction?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.jozilla.net/2009/11/14/python-introduction-movie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://python.org/other/python.mov" length="71114090" type="video/quicktime" />
		<feedburner:origLink>http://blog.jozilla.net/2009/11/14/python-introduction-movie/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=python-introduction-movie</feedburner:origLink></item>
		<item>
		<title>Research update</title>
		<link>http://feedproxy.google.com/~r/InTraction/~3/aeLGGnwwGo8/</link>
		<comments>http://blog.jozilla.net/2009/10/30/research-update/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 18:33:39 +0000</pubDate>
		<dc:creator>Jo Vermeulen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[paper]]></category>
		<category><![CDATA[poster]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[ubicomp]]></category>

		<guid isPermaLink="false">http://blog.jozilla.net/?p=345</guid>
		<description><![CDATA[Quite a few things happened since I last posted about my research. Here is a (not so short) summary of what happened during my blogging leave of absence Ubicomp 2009 Our work on supporting why and why not questions to &#8230; <a href="http://blog.jozilla.net/2009/10/30/research-update/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Quite a few things happened since I last posted about my research. Here is a (not so short) summary of what happened during my blogging leave of absence <img src='http://blog.jozilla.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<h3>Ubicomp 2009</h3>

<p>Our work on supporting why and why not questions to improve end-user understanding in Ubicomp environments was accepted as a poster to <a href="http://www.ubicomp.org/ubicomp2009/">Ubicomp 2009</a></p>

<p><img src="http://jozilla.net/uploads/Research/VermeulenVanderhulstLuytenConinx_ubicomp-posters2009.png" alt="Answering Why and Why Not Questions in Ubiquitous Computing" title=""  class="centered" /></p>

<p>Jo Vermeulen, Geert Vanderhulst, Kris Luyten, and Karin Coninx. Answering Why and Why Not Questions in Ubiquitous Computing. To appear in the Ubicomp &#8217;09 Conference Supplement (Poster), Orlando, Florida, <span class="caps">US,</span> September 30th &#8211; October 3rd, 2009, 3 pages. </p>

<p><strong>Abstract</strong>: <em>Users often find it hard to understand and control the behavior of a Ubicomp system. This can lead to loss of user trust, which may hamper the acceptance of these systems. We are extending an existing Ubicomp framework to allow users to pose why and why not questions about its behavior. Initial experiments suggest that these questions are easy to use and could help users in understanding how Ubicomp systems work</em>. </p>

<p>There is a <a href="http://jozilla.net/Research/WhyQuestionsUbicomp2009Poster">separate page</a> for the poster on my homepage, including a <span class="caps">PDF </span>version of the <a href="http://jozilla.net/uploads/Research/VermeulenVanderhulstLuytenConinx_ubicomp-posters2009-poster.pdf">poster</a> and the <a href="http://jozilla.net/uploads/Research/VermeulenVanderhulstLuytenConinx_ubicomp-posters2009.pdf">extended abstract</a>. </p>

<p><a href="http://www.cc.gatech.edu/~mromero/">Mario Romero</a> has an excellent <a href="http://www.flickr.com/photos/65255375@N00/sets/72157622413210265/">Ubicomp 2009 photo set on Flickr</a>. </p>

<p>Here&#8217;s a picture of me explaining the poster:</p>

<p><a href="http://www.flickr.com/photos/65255375@N00/3991127976/" title="PA015545" target="_blank"><img src="http://farm3.static.flickr.com/2617/3991127976_c2f989181c.jpg" alt="PA015545" border="0" /></a></p>

<p>And here I am presenting in the One Minute Madness session:</p>

<p><a href="http://www.flickr.com/photos/65255375@N00/3990368625/" title="PA015479" target="_blank"><img src="http://farm3.static.flickr.com/2546/3990368625_aa88dec641.jpg" alt="PA015479" border="0" /></a></p>

<p><a href="http://www.flickr.com/photos/65255375@N00/3991124312/" title="PA015480" target="_blank"><img src="http://farm4.static.flickr.com/3470/3991124312_388fc335bf.jpg" alt="PA015480" border="0" /></a></p>

<p><a href="http://www.metkroketjesaub.be/">Karel Robert</a> helped me create a video for the One Minute Madness session that would stand out. Although it might have been a bit <em>too</em> attention-grabbing, I certainly had fun making it and presenting in the Madness session.</p>

<p>Here is the video:</p>

<p><a href="http://blog.jozilla.net/2009/10/30/research-update/"><img src="http://img.youtube.com/vi/MlqUElnw3EU/default.jpg" width="130" height="97" border=0 /></a></p>

<p>Next to presenting my poster, I also served as a <a href="http://www.ubicomp.org/ubicomp2009/volunteers.shtml">Ubicomp 2009 student volunteer</a>, which earned me a place in <a href="http://www.slideshare.net/gumption/ubicomp2009-opening-remarks">Joe McCarthy&#8217;s opening slides</a> for the conference (slide 6) <img src='http://blog.jozilla.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  </p>

<p>Being a student volunteer was lots of fun! I got to meet a lot of interesting people, and still had the opportunity to follow most of the sessions. I also explored the parks together with a few of the other volunteers (Ubicomp 2009 was held in <a href="http://disneyworld.disney.go.com/">Disney World</a>), and we even played beach volley on the last day <img src='http://blog.jozilla.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<p>When we went to the <a href="http://disneyworld.disney.go.com/parks/magic-kingdom/">Magic Kingdom</a>, I had to see <a href="http://www.etc.cmu.edu/global_news/?q=node/242">Randy Pausch&#8217;s plaque</a> at the Mad Tea Party:</p>

<p><a href="http://blog.jozilla.net/wp-content/uploads/2009/10/pausch-plaque.jpg"><img src="http://blog.jozilla.net/wp-content/uploads/2009/10/pausch-plaque-500x375.jpg" alt="Randy Pausch plaque in Disney World containing a quote from the Last Lecture" title="Randy Pausch plaque in Disney World containing a quote from the Last Lecture" width="500" height="375" class="aligncenter size-thumbnail wp-image-417 centered" /></a></p>

<p>The plaque contains a quote from Randy&#8217;s <a href="http://www.cmu.edu/uls/journeys/randy-pausch/index.html">Last Lecture</a>:</p>

<p><a href="http://blog.jozilla.net/wp-content/uploads/2009/10/pausch-plaque-detail.jpg"><img src="http://blog.jozilla.net/wp-content/uploads/2009/10/pausch-plaque-detail-500x375.jpg" alt="Randy Pausch: Be good at something; It makes you valuable... Have something to bring to the table, because that will make you more welcome." title="Randy Pausch: Be good at something; It makes you valuable... Have something to bring to the table, because that will make you more welcome." width="500" height="375" class="aligncenter size-thumbnail wp-image-418 centered" /></a></p>

<p> If you haven&#8217;t watched the Last Lecture yet, I strongly recommend <a href="http://www.youtube.com/watch?v=ji5_MqicxSo">you do</a>! It will be an hour well-spent.</p>

<h3>Full paper accepted to AmI 2009</h3>

<p>The full paper that we submitted to the <a href="http://www.ami-09.org/">third international conference on Ambient Intelligence 2009</a>, was accepted as well. This work was a collaboration with <a href="http://www.slenders.be/jonathan/">Jonathan Slenders</a>, one of our Master&#8217;s students.</p>

<p><img src="http://jozilla.net/uploads/Research/VermeulenSlendersLuytenConinx_ami2009.jpg" alt="I Bet You Look Good on the Wall: Making the Invisible Computer Visible" title="I Bet You Look Good on the Wall: Making the Invisible Computer Visible"  class="centered" /></p>

<p>Jo Vermeulen, Jonathan Slenders, Kris Luyten, and Karin Coninx. To appear in the Proceedings of AmI &#8217;09, the Third European Conference on Ambient Intelligence, Salzburg, Austria, November 18th &#8211; 21st, 2009, Springer <span class="caps">LNCS,</span> 10 pages.</p>

<p><strong>Abstract</strong>: <em>The design ideal of the invisible computer, prevalent in the vision of ambient intelligence (AmI), has led to a number of interaction challenges. The complex nature of AmI environments together with limited feedback and insufficient means to override the system can result in users who feel frustrated and out of control. In this paper, we explore the potential of visualizing the system state to improve user understanding. We use projectors to overlay the environment with a graphical representation that connects sensors and devices with the actions they trigger and the effects those actions produce. We also provided users with a simple voice-controlled command to cancel the last action. A small first-use study suggested that our technique could indeed improve understanding and support users in forming a reliable mental model.</em>. </p>

<p>There is again a <a href="http://jozilla.net/Research/VisibleComputerAmI2009">separate page</a> for the paper on my homepage, together with a <a href="http://jozilla.net/uploads/Research/VermeulenSlendersLuytenConinx_ami2009.pdf"><span class="caps">PDF </span>version</a>. </p>

<p>Basically, our technique visualizes the different events that occur in a Ubicomp environment, and shows how these events can lead to the system taking actions on behalf of the user and what effects these actions have. Here is a video of the technique:</p>

<p><a href="http://blog.jozilla.net/2009/10/30/research-update/"><img src="http://img.youtube.com/vi/gztUqtvvMHs/default.jpg" width="130" height="97" border=0 /></a></p>

<p>The AmI 2009 conference takes place in <a href="http://en.wikipedia.org/wiki/Salzburg">Salzburg</a> in about three weeks.</p>

<h3>Talk at <span class="caps">SIGCHI.</span>be</h3>

<p>I also submitted a paper to <a href="http://sigchi.be/"><span class="caps">SIGCHI.</span>be</a>&#8216;s (the Belgian <a href="http://www.sigchi.org/"><span class="caps">SIGCHI</span></a> chapter) <a href="http://sigchi.be/blog/p/detail/2009-fall-conference-on-new-communities">2009 Fall Conference on New Communities</a>. The paper was titled <em>Improving Intelligibility and Control in Ubicomp Environments</em>, and motivated the need for intelligibility and control in Ubicomp while also giving a short summary of the Ubicomp 2009 poster and AmI 2009 paper. </p>

<p>Here are the slides:</p>

<p><iframe src="http://www.slideshare.net/slideshow/embed_code/2276932" width="425" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe><br/><br/></p>

<p>Thanks to everyone at our lab who contributed in one way or another (either by participating in user studies, or by reviewing drafts of the papers) <img src='http://blog.jozilla.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  </p>

<p>Specials thanks to:</p>


<ul>
<li> <a href="http://www.metkroketjesaub.be/">Karel Robert</a> for designing the visualizations we used in the AmI 2009 paper and for helping me with the Ubicomp 2009 One Minute Madness video.</li>
<li>Dani&#235;l Teunkens for drawing the why question storyboards that were used in the <span class="caps">SIGCHI.</span>be presentation.</li>
<li> <a href="http://research.edm.uhasselt.be/~mhaesen/">Mieke Haesen</a> for being a great actress in the AmI 2009 movie <img src='http://blog.jozilla.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>Kris Gabri&#235;ls for posing in the picture we used for the Ubicomp 2009 poster abstract.</li>
</ul>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/InTraction?a=aeLGGnwwGo8:vhvdbVDmkmA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/InTraction?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=aeLGGnwwGo8:vhvdbVDmkmA:vTIO0qPIxYU"><img src="http://feeds.feedburner.com/~ff/InTraction?i=aeLGGnwwGo8:vhvdbVDmkmA:vTIO0qPIxYU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=aeLGGnwwGo8:vhvdbVDmkmA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/InTraction?i=aeLGGnwwGo8:vhvdbVDmkmA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=aeLGGnwwGo8:vhvdbVDmkmA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/InTraction?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.jozilla.net/2009/10/30/research-update/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://blog.jozilla.net/2009/10/30/research-update/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=research-update</feedburner:origLink></item>
		<item>
		<title>Facade update: code available and information about related student projects</title>
		<link>http://feedproxy.google.com/~r/InTraction/~3/7Q02VxZrU04/</link>
		<comments>http://blog.jozilla.net/2009/10/30/facade-update-code-available-and-information-about-related-student-projects/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 13:59:48 +0000</pubDate>
		<dc:creator>Jo Vermeulen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[CVtypes]]></category>
		<category><![CDATA[facade]]></category>
		<category><![CDATA[facedetection]]></category>
		<category><![CDATA[opencv]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[webcam]]></category>

		<guid isPermaLink="false">http://blog.jozilla.net/?p=356</guid>
		<description><![CDATA[My previous posts on face detection with Python and on changing the user&#8217;s presence when he/she is detected by the webcam are two of the most popular articles on my blog. There were quite a few comments that asked about &#8230; <a href="http://blog.jozilla.net/2009/10/30/facade-update-code-available-and-information-about-related-student-projects/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>My previous posts on <a href="http://blog.jozilla.net/2008/06/27/fun-with-python-opencv-and-face-detection/">face detection with Python</a> and on <a href="http://blog.jozilla.net/2008/06/27/small-update-on-face-detection-post/">changing the user&#8217;s presence when he/she is detected by the webcam</a> are two of the most popular articles on my blog. There were quite a few comments that asked about the code for this project.</p>

<p>Although I already created a <a href="http://jozilla.net/Software/Facade">Facade project page</a>  a while ago and made the code available <a href="http://research.edm.uhasselt.be/~jvermeulen/code/facade/">through Bazaar</a>, I never announced it here. To make it easier to try the script out, I also uploaded <a href="http://jozilla.net/uploads/Software/facade-20091030.tar.gz">an archive of the code</a>. This version includes a simple Python script that works on Windows (<kbd>simple_winclient.py</kbd>) that performs face detection.</p>

<p>I noticed today that <a href="http://www1.cs.columbia.edu/~jwgu/">Jinwei Gu</a>, a PhD student at the <a href="http://www.cs.columbia.edu/">University of Columbia</a> and teaching assistant for the course <span class="caps">COMS W4737 </span>(E6737) Biometrics, included my blog post in a <a href="http://www1.cs.columbia.edu/~jwgu/facedetect/">list of links</a>  to resources for doing face detection.</p>

<p>Last year, two students improved the presence detection in Facade during their Bachelor&#8217;s theses. </p>

<p><a href="http://presenceagent.wordpress.com/">Bram Bonn&#233;</a> worked on the network aspect, to allow users to have their presence detected on multiple computers. When users would move from one computer to another (or to a mobile device), their messages would automatically be routed to their current machine. </p>

<p>Here are a few screenshots from Bram&#8217;s thesis:</p>

<p><img src="http://blog.jozilla.net/wp-content/uploads/2009/10/bram2.PNG" alt="Multi-device presence" title="Multi-device presence" width="273" height="190" class="aligncenter size-full wp-image-359 centered" /></p>

<p><a href="http://blog.jozilla.net/wp-content/uploads/2009/10/bram.PNG"><img src="http://blog.jozilla.net/wp-content/uploads/2009/10/bram-499x314.PNG" alt="An everywhere messaging service that takes into account the user&amp;#039;s presence." title="An everywhere messaging service that takes into account the user&amp;#039;s presence." width="499" height="314" class="aligncenter size-thumbnail wp-image-360 centered" /></a></p>

<p>Bram also created a demo video of his system:</p>

<p><a href="http://blog.jozilla.net/2009/10/30/facade-update-code-available-and-information-about-related-student-projects/"><img src="http://img.youtube.com/vi/MT9UVdT8_Lg/default.jpg" width="130" height="97" border=0 /></a></p>

<p><a href="http://userpresence.wordpress.com/">Kristof Bamps</a> worked on supporting a more diverse set of sensors (e.g. presence of a Bluetooth phone, keyboard and mouse input). He used a decision tree to model all these sensors, and determine the user&#8217;s correct presence based on the collected information. </p>

<p>Two screenshots from Kristof&#8217;s thesis:</p>

<p><img src="http://blog.jozilla.net/wp-content/uploads/2009/10/kristof.PNG" alt="Showing the user&amp;#039;s presence state" title="Showing the user&amp;#039;s presence state" width="410" height="171" class="aligncenter size-full wp-image-358 centered" /></p>

<p><a href="http://blog.jozilla.net/wp-content/uploads/2009/10/kristof2.PNG"><img src="http://blog.jozilla.net/wp-content/uploads/2009/10/kristof2-500x106.PNG" alt="A history of presence changes" title="A history of presence changes" width="500" height="106" class="aligncenter size-thumbnail wp-image-357 centered" /></a></p>

<p>Kristof&#8217;s demo video:</p>

<p><a href="http://blog.jozilla.net/2009/10/30/facade-update-code-available-and-information-about-related-student-projects/"><img src="http://img.youtube.com/vi/GNOTvQtqgI4/default.jpg" width="130" height="97" border=0 /></a></p>

<p>I have unfortunately not yet found the time yet to merge Kristof&#8217;s and Bram&#8217;s code into the main Facade branch, but this should not be too big of a problem.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/InTraction?a=7Q02VxZrU04:ambAgme1JQw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/InTraction?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=7Q02VxZrU04:ambAgme1JQw:vTIO0qPIxYU"><img src="http://feeds.feedburner.com/~ff/InTraction?i=7Q02VxZrU04:ambAgme1JQw:vTIO0qPIxYU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=7Q02VxZrU04:ambAgme1JQw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/InTraction?i=7Q02VxZrU04:ambAgme1JQw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=7Q02VxZrU04:ambAgme1JQw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/InTraction?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.jozilla.net/2009/10/30/facade-update-code-available-and-information-about-related-student-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.jozilla.net/2009/10/30/facade-update-code-available-and-information-about-related-student-projects/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=facade-update-code-available-and-information-about-related-student-projects</feedburner:origLink></item>
		<item>
		<title>blog@CACM</title>
		<link>http://feedproxy.google.com/~r/InTraction/~3/Wv5qxinibx4/</link>
		<comments>http://blog.jozilla.net/2009/03/24/blogatcacm/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 19:03:04 +0000</pubDate>
		<dc:creator>Jo Vermeulen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[hci]]></category>
		<category><![CDATA[research]]></category>

		<guid isPermaLink="false">http://blog.jozilla.net/?p=326</guid>
		<description><![CDATA[Apparantely, there&#8217;s a Communications of the ACM group blog now, called blog@CACM. There is also a blog roll that includes the blog of Daniel Lemire, which happens to be one of my favorite research blogs. Although Daniel works in a &#8230; <a href="http://blog.jozilla.net/2009/03/24/blogatcacm/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Apparantely, there&#8217;s a Communications of the <span class="caps">ACM </span>group blog now, called <a href="http://cacm.acm.org/blogs/about-the-blogs/">blog@CACM</a>. There is also a blog roll that includes the blog of <a href="http://www.daniel-lemire.com/blog/">Daniel Lemire</a>, which happens to be one of my favorite research blogs. Although Daniel works in a different subdiscipline of computer science, I enjoy reading his research advice and interesting viewpoints on the process of doing research.</p>

<p>The group blog features an interesting post by <a href="http://tlau.org/">Tessa Lau</a>, titled <a href="http://cacm.acm.org/blogs/blog-cacm/22198-three-misconceptions-about-human-computer-interaction/fulltext"><em>Three Misconceptions About Human-Computer Interaction</em></a>, which raises a few interesting points. In my opinion, <span class="caps">HCI </span>is much more fundamental to creating interactive systems than people usually believe. In this context, I would like to refer to an <a href="http://patrickbaudisch.com/publications/2005-Phan-Ambidextrous-PatrickBaudischFullInterview.html">interview</a> with <a href="http://patrickbaudisch.com/">Patrick Baudisch</a> that I recently read, in which he explains how he got started in <span class="caps">HCI</span>:</p>

<blockquote>
<strong>Doantam</strong>: How did you get started working on human-computer interaction?<br/><br />
<strong>Patrick</strong>: Without knowing it. I was a Ph.D. student in Darmstadt, Germany and worked on user interfaces for information filtering systems. A friend of mine saw my work and said &#8220;oh, I did not know you were in <span class="caps">HCI, </span>too&#8221;.<br/><br />
That was the first time I heard of that field.<br />
</blockquote><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/InTraction?a=Wv5qxinibx4:4vww5O_1zX8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/InTraction?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=Wv5qxinibx4:4vww5O_1zX8:vTIO0qPIxYU"><img src="http://feeds.feedburner.com/~ff/InTraction?i=Wv5qxinibx4:4vww5O_1zX8:vTIO0qPIxYU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=Wv5qxinibx4:4vww5O_1zX8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/InTraction?i=Wv5qxinibx4:4vww5O_1zX8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=Wv5qxinibx4:4vww5O_1zX8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/InTraction?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.jozilla.net/2009/03/24/blogatcacm/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blog.jozilla.net/2009/03/24/blogatcacm/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=blogatcacm</feedburner:origLink></item>
		<item>
		<title>New Homepage</title>
		<link>http://feedproxy.google.com/~r/InTraction/~3/rxpYsluP8k4/</link>
		<comments>http://blog.jozilla.net/2009/03/17/new-homepage/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 17:42:46 +0000</pubDate>
		<dc:creator>Jo Vermeulen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[homepage]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[pmwiki]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://blog.jozilla.net/?p=262</guid>
		<description><![CDATA[I finally updated my homepage today. It used to be a custom Rails website, with RHTML views that I edited through SSH. I never got around to create a database model for my website, and to be frank, I am &#8230; <a href="http://blog.jozilla.net/2009/03/17/new-homepage/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I finally updated <a href="http://jozilla.net/">my homepage</a> today. It used to be a custom <a href="http://rubyonrails.org/">Rails</a> website, with <a href="http://en.wikipedia.org/wiki/ERuby"><span class="caps">RHTML</span></a> views that I edited through <span class="caps">SSH.</span> I never got around to create a database model for my website, and to be frank, I am glad that I didn&#8217;t since my homepage&#8217;s structure changed <strong>a lot</strong>. On the other hand, having to login remotely and edit the view with <a href="http://www.vim.org/">Vim</a> every time I wanted to add a publication to my homepage was too big of a burden. The net result was that I did not update my website as much as I wanted to.</p>

<p>A few months ago I decided to look for a better solution. I experimented with various solutions, including <a href="http://drupal.org/">Drupal</a> (with a lot of help from <a href="http://wimleers.com/">Wim Leers</a>, thanks Wim!) and <a href="http://wikkawiki.org/">WikkaWiki</a> (with a few tips from <a href="http://nitens.org/">Dario Tarborelli</a>) before finally settling on <a href="http://pmwiki.org/">PmWiki</a>. In this post, I will describe my rationale for choosing PmWiki over Drupal and WikkaWiki.</p>

<p>An advantage of Drupal is that it is extremely flexible. For instance, the website&#8217;s menu and corresponding <span class="caps">URL </span>structure can be completely customized. It also allows you to define content types such as &#8220;Course&#8221; or &#8220;Student&#8221; in a graphical way with the <a href="http://drupal.org/project/cck"><span class="caps">CCK</span></a> module and visualize them with the <a href="http://drupal.org/project/views">Views</a> module. However, this takes quite some initial work. Moreover, changes to the structure (e.g. allowing courses to have associated pictures of student projects) requires changing all this again. I believe that I should be able to change the structure of my homepage at any time. Adding a related publication to a software project or to a Master&#8217;s thesis should not involve a whole day of editing content types. Although I could use the <em>Page</em> content type for all my content, this is considered bad practice since Drupal only uses <em>Page</em> for static pages that almost never change. Of course, using Drupal only to provide a shared template and a global menu is massive overkill <img src='http://blog.jozilla.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<p>In the same period, I read an interesting blog post on <a href="http://www.academicproductivity.com/">Academic Productivity</a> about <a href="http://www.academicproductivity.com/2009/how-to-run-an-invisible-wiki/">using a wiki to invisibly power a (research) homepage</a> by Dario Tarborelli. A wiki seemed to provide a solution to structural flexibility, since it allows users to quickly rearrange content. However, as Dario points out, there are two problems that often make people suspicious of using a wiki for their website:</p>


<ol>
<li>anyone can edit the content of a wiki</li>
<li>wikis look <em>wikish</em></li>
</ol>



<p>Dario demonstrates in the blog post that <a href="http://wikkawiki.org/">WikkaWiki</a> can easily overcome both issues with access control lists and an easy-to-use skin system. He continues by giving a few advantages of using wikis for content management:</p>


<ul>
<li>they allow you to edit and modify content at the speed of light</li>
<li>they allow you to easily embed all sort of contents in a page</li>
<li>they allow you to set granular access privileges for specific pages, which is a very powerful solution for collaborative work with colleagues and coauthors</li>
</ul>



<p>I started to experiment with a WikkaWiki-based homepage and was able to very quickly migrate my content and create a custom skin. I was impressed! There was a catch though. WikkaWiki did not support file uploads in an easy way, and custom markup (e.g. lists with a certain <span class="caps">CSS </span>class) seemed to be hard to achieve. Having the ability to upload files was essential for me, since I did not want to use an (S)FTP client everytime I wanted to add a publication or screenshot. Custom markup would be nice to style my <a href="http://jozilla.net/Research/Publications">publications list</a>. Although WikkaWiki supports embedding <span class="caps">HTML </span>directly, it is obviously not ideal to have large amounts of embedded <span class="caps">HTML </span>in the content of a page.</p>

<p>Then I decided to have a look at <a href="http://pmwiki.org/">PmWiki</a> . I already heard about PmWiki before. Jori used it to power <a href="http://research.edm.uhasselt.be/~jori/page/">his homepage</a>, and <a href="http://research.edm.uhasselt.be/~pquax/">Peter</a> also used it to power the Mobile and Pervasive Computing <a href="http://didactiekinf.uhasselt.be/mpc/">course website</a>. Of course, the fact that 6th most frequent author in <span class="caps">HCI </span>uses PmWiki to power his <a href="http://pages.cpsc.ucalgary.ca/~saul/wiki/pmwiki.php">personal homepage</a> and the <a href="http://grouplab.cpsc.ucalgary.ca/">homepage of his research group</a> helps as well <img src='http://blog.jozilla.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  A few other examples of PmWiki usage by <span class="caps">HCI </span>researchers or groups: </p>


<ul>
<li>personal website of <a href="http://www.itu.dk/~bardram/">Jakob E. Bardram</a></li>
<li>the website of the <a href="http://insitu.lri.fr/">in|situ</a> research group in Paris, France</li>
<li>personal website of <a href="http://www.seangustafson.com/">Sean Gustafson</a></li>
</ul>



<p>But the question was of course: how can I use PmWiki to invisibly power my website? I decided to post a <a href="http://www.mail-archive.com/pmwiki-users@pmichaud.com/msg16587.html">message</a> on the PmWiki mailing list asking for help, and got many helpful responses. One of the things I especially like about PmWiki is the helpful and lively community. Everything I wanted to do with PmWiki was either explained in the <a href="http://www.pmwiki.org/wiki/Cookbook/Cookbook">Cookbook</a>, or pointed out by someone on the mailing list. As an example of a very nice website invisibly powered by PmWiki, take a look at the <a href="http://www.villageschool.us/">Village School website</a>.</p>

<p>These are the steps that I followed:</p>


<ol>
<li>Install PmWiki: this is very easy, just extract the archive and point a web browser to pmwiki.php (<a href="http://pmwiki.org/wiki/PmWiki/Installation">detailed instructions</a>). PmWiki does not require a database, it uses flat files (<a href="http://www.pmwiki.org/wiki/PmWiki/FlatFileAdvantages">yes, flat files!</a>). That means you can easily copy a PmWiki installation from one directory to another (or even from one server to another).</li>
<li>Create a new skin by copying the default pmwiki skin in a new directory and give it an appropriate name.</li>
<li>Start editing the page template and <span class="caps">CSS </span>file to suit your liking. Hide typical wiki elements <a href="http://www.w3schools.com/css/pr_class_display.asp">with <span class="caps">CSS</span></a> or by removing them from the template. PmWiki supports conditional markup so you can change the displayed page actions based on your login status. For more information, see <a href="http://article.gmane.org/gmane.comp.web.wiki.pmwiki.user/53806/">this post on the mailing list</a> and the <a href="http://www.pmwiki.org/wiki/PmWiki/SitePageActions">documentation about page actions</a>. You can also add conditional markup to hide the PmWiki documentation pages from <a href="http://pmwiki.org/wiki/PmWiki/SitePages">the sidebar</a>. If you refer to images in your <span class="caps">CSS </span>file, just keep in mind that the path is relative (e.g. refer to <kbd>pmwiki/pub/skins/myskin/icons/trash.gif</kbd> as <kbd>background: url(icons/trash.gif);</kbd>).</li>
<li>Set <a href="http://www.pmwiki.org/wiki/PmWiki/PasswordsAdmin">a password</a> for editing pages.</li>
<li>Set up <a href="http://www.pmwiki.org/wiki/PmWiki/Uploads">file uploads</a> (disabled by default). Once uploads are enabled, PmWiki will automatically create the <kbd>uploads/</kbd> directory when you upload a file. You might have to change the <a href="http://www.pmwiki.org/wiki/PmWiki/UploadsAdmin">maximum upload size</a>.</li>
<li>Set up <a href="http://www.pmwiki.org/wiki/Cookbook/CleanUrls">clean <span class="caps">URL</span>s</a> like <kbd>Main/Homepage</kbd> instead of <kbd>pmwiki.php?n=Main.Homepage</kbd> (preferably with mod_rewrite). This is a lot easier than it sounds due to the excellent documentation.</li>
<li>Done! Now you can start adding your content.</li>
</ol>



<p>A few other random tips:</p>


<ul>
<li>You delete a page by replacing its contents with the word &#8220;delete&#8221;.</li>
<li>Conditional markup is extremely useful to hide content that you don&#8217;t want to show yet. Just surround it with <kbd>(:if false:)</kbd> and <kbd>(:ifend:)</kbd> directives.</li>
<li>PmWiki&#8217;s markup is very flexible. You can easily add <span class="caps">CSS </span>classes to elements (see <a href="http://www.pmwiki.org/wiki/PmWiki/WikiStyles">WikiStyles</a>) and create advanced tables (see <a href="http://www.pmwiki.org/wiki/PmWiki/TableDirectives">Table directives</a>).</li>
<li>PmWiki supports <a href="http://www.pmwiki.org/wiki/PmWiki/WikiGroup">wiki groups</a>. This allows you to structure your pages in namespaces, so you can have for example both a Research.Activities and a Teaching.Activities page.</li>
</ul>



<p>Finally, here is the result:</p>

<p><a href="http://blog.jozilla.net/wp-content/uploads/2009/03/new_homepage.png"><img src="http://blog.jozilla.net/wp-content/uploads/2009/03/new_homepage-500x276.png" alt="My new PmWiki-based homepage" title="My new PmWiki-based homepage" width="500" height="276" class="size-thumbnail wp-image-309" /></a></p>

<p>All in all, I am very happy with it. I especially like the fact that I can add or change content quickly, wherever I am. All I need is a browser.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/InTraction?a=rxpYsluP8k4:e1HBqRkEF2I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/InTraction?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=rxpYsluP8k4:e1HBqRkEF2I:vTIO0qPIxYU"><img src="http://feeds.feedburner.com/~ff/InTraction?i=rxpYsluP8k4:e1HBqRkEF2I:vTIO0qPIxYU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=rxpYsluP8k4:e1HBqRkEF2I:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/InTraction?i=rxpYsluP8k4:e1HBqRkEF2I:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/InTraction?a=rxpYsluP8k4:e1HBqRkEF2I:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/InTraction?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.jozilla.net/2009/03/17/new-homepage/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		<feedburner:origLink>http://blog.jozilla.net/2009/03/17/new-homepage/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=new-homepage</feedburner:origLink></item>
	</channel>
</rss>

