<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Sukria.net</title>
	<atom:link href="http://www.sukria.net/fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sukria.net/fr</link>
	<description>I will press many keys on my keyboard causing an implementation to occur.</description>
	<lastBuildDate>Wed, 18 Jan 2012 17:11:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Smart Meters: behavioural tracking brought to real-life</title>
		<link>http://www.sukria.net/fr/archives/2012/01/18/smart-meters-behavioural-tracking-brought-to-real-life/</link>
		<comments>http://www.sukria.net/fr/archives/2012/01/18/smart-meters-behavioural-tracking-brought-to-real-life/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 17:11:38 +0000</pubDate>
		<dc:creator>sukria</dc:creator>
				<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Behavioural]]></category>
		<category><![CDATA[Tracking]]></category>

		<guid isPermaLink="false">http://www.sukria.net/fr/?p=1872</guid>
		<description><![CDATA[Linky, ERDF&#8217;s Smart Meter (France) It&#8217;s well known that the more we enter the digital era, the more our life becomes tracked. Our mobile phones, credit cards or web browsers leave tracks behind our back. Most of Digital-natives are aware of that, but there is a rather new and intrusive tracking method that is making &#8230; <a href="http://www.sukria.net/fr/archives/2012/01/18/smart-meters-behavioural-tracking-brought-to-real-life/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="alignright">
<img src="/fr/wp-content/uploads/2012/01/ERDF-Linky-Smart-Meter.jpg" alt="Linky Smart Meter (ERDF)" title="Say hello to ERDF's BigBrother device: Linky." class="illustration" />
<div class="caption">Linky, ERDF&#8217;s Smart Meter (France)</div>
</div>
<p>It&#8217;s well known that the more we enter the digital era, the more our life becomes tracked. Our mobile phones, credit cards or web browsers leave tracks behind our back. </p>
<p>Most of <em>Digital-natives</em> are aware of that, but there is a rather new and <a href="http://endoftheamericandream.com/archives/no-more-privacy-smart-meters-are-surveillance-devices-that-monitor-the-behavior-in-your-home-every-single-minute-of-every-single-day">intrusive</a> tracking method that is making its way to our homes, it&#8217;s called <em>electronic tracking</em>.</p>
<p>It&#8217;s well explained in a talk given at the <a href="http://events.ccc.de/congress/2011/">28th Chaos Communication Congress</a> entitled <a href="http://events.ccc.de/congress/2011/Fahrplan/events/4754.en.html">Smart Hacking For Privacy</a>.</p>
<p>The idea is simple: if I monitor your home&#8217;s energy consumption regularly, I can say how many electronic devices you have, how many of them are up and running, when you&#8217;re at home, and even, theorically, which channel you&#8217;re watching on TV.</p>
<p>How so?</p>
<p>Each electronic device (a dish washer, a fridge, a computer) has a specific pattern of energy consumption, it&#8217;s like a digital signature saying &#8220;I&#8217;m here!&#8221; to the moniotoring device. All this was an interesting theory but was hardly usable in real life&#8230; Until energy providers started deploying so-called <em><a href="http://en.wikipedia.org/wiki/Smart_meter">Smart Meters</a></em>.</p>
<p>Smart Meters are a new kind of electical meters that are able to measure very frequently the global consumption of a house, it&#8217;s deployed in order to increase the precision of the consumer bills but can be used in many ways to become surveillance devices that monitor the behavior of the customers.</p>
<p>This leads to unprecedented and invisible invasions of the consumer privacy.</p>
<p>Even better: not only the Smart Metter is able to tell how many devices you have, and what they are, but it&#8217;s also theorically able to tell which TV show you&#8217;re watching!</p>
<p>The energy signature of a TV depends on the image it displays on screen (actually, its brightness will change its energy consuption pattern). So if the device has acces to a patterns database, it can compare the one your TV is leaking with it and find out which show you&#8217;re watching&#8230; Scary.</p>
<p>It appears that all of this raw data is sent by smart meters to energy providers, what will they do with that? It&#8217;s an unpleasant and opened question.</p>
<p>If they do use it to profile your home, it&#8217;s to me one of the most intrusive, invisible and violent profiling method we could imagine: the whole house being tracked, every 2 seconds, transparently.</p>
<p>I can disable my cookies if I don&#8217;t want to be tracked online, I can shut my phone down if I don&#8217;t want my provider to know where I am, I can pay cash if I don&#8217;t want my bank to track my expenses, but how could I live without electricity at home?</p>
<div id='teoShare' ><div id='teo2Google'>
		<!-- Place this tag where you want the +1 button to render -->
		<g:plusone size='tall' annotation='none'></g:plusone>

		<!-- Place this render call where appropriate -->
		<script type='text/javascript'>
		  (function() {
			var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
			po.src = 'https://apis.google.com/js/plusone.js';
			var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
		  })();
		</script>
		</div><div id="teoTweet" >
		<a href="http://twitter.com/share" class="twitter-share-button" data-count="none" data-via="sukria">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> </div></div><div style="height:0px; width:0px; overflow:hidden;"><a href="http://www.zeitblog.com/?in=plugin">blog tools and plugins from www.zeitblog.com</a></div><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sukria.net/fr/archives/2012/01/18/smart-meters-behavioural-tracking-brought-to-real-life/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The 10 rules of the pragmatic programmer</title>
		<link>http://www.sukria.net/fr/archives/2012/01/06/the-10-rules-of-the-pragmatic-programmer/</link>
		<comments>http://www.sukria.net/fr/archives/2012/01/06/the-10-rules-of-the-pragmatic-programmer/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 15:52:09 +0000</pubDate>
		<dc:creator>sukria</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[Pragmatism]]></category>
		<category><![CDATA[Programmer]]></category>

		<guid isPermaLink="false">http://www.sukria.net/fr/?p=1823</guid>
		<description><![CDATA[In my last post I spoke about how meetings can impact your productivity at work, I realized I could also write something about a programmer&#8217;s productivity in a more general manner. At Weborama we have training days twice a year, where we give talks and traning sessions. I gave a talk last time about how &#8230; <a href="http://www.sukria.net/fr/archives/2012/01/06/the-10-rules-of-the-pragmatic-programmer/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="alignright">
<img src="/fr/wp-content/uploads/2012/01/brad-pitt-fight-club.jpg" alt="Fight Club - Brad Pitt" title="Do you want to join the club of Pragmatic Programmers?" class="illustration" />
</div>
<p>In my last post I spoke about how <a href="http://www.sukria.net/fr/archives/2012/01/02/productivity-at-work-and-meetings/">meetings can impact your productivity at work</a>, I realized I could also write something about a programmer&#8217;s productivity in a more general manner.</p>
<p>At Weborama we have <em>training days</em> twice a year, where we give talks and traning sessions. I gave a talk last time about how to become a <em>Pragmatic Programmer</em>. Of course all of the ideas came from <a href="http://pragprog.com/the-pragmatic-programmer">the famous book</a>.</p>
<p>Here are the 10 most interesting <em>rules</em> I&#8217;ve found in that book, if a programmer manages to apply them in his daily duties, no doubt they&#8217;re pragmatic (and productive).</p>
<h3>Rule #1: Do not repeat yourself</h3>
<p>Respect the DRY principle:</p>
<p><em>Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.</em> </p>
<p>This will increase your maintenance capabilities and lower bugs proliferation.</p>
<h3>Rule #2: Fix broken windows</h3>
<p>The concept of Broken Windows come from the criminological theory: </p>
<p><em>Consider a building with a few broken windows. If the windows are not repaired, the tendency is for vandals to break a few more windows. Eventually, they may even break into the building, and if it&#8217;s unoccupied, perhaps become squatters.</em></p>
<p>In software development, broken windows are bad designs, wrong decisions or even poor code. If you don&#8217;t fix them as you find them, you&#8217;ll end up quickly with <a href="http://en.wikipedia.org/wiki/Software_rot">software rot</a>.</p>
<h3>Rule #3: Crash Early</h3>
<p>It&#8217;s always better to make your code crash as soon as possible. Using return values (error codes) to notify a calling component about an error is a very bad idea. Eventually, a component will ignore that value, that means that an error can occur and silently be ignored.</p>
<p>As the saying goes: <em>Dead software don&#8217;t lie</em>.</p>
<h3>Rule #4: Use tracer bullets</h3>
<p>The idea of tracer bullets is to get things up in production as soon as you can. </p>
<p>We speak also about <em>code that glows in the dark</em>. When you have a new projet in mind, try to get to the point where you can ship something in production. Just make it as simple as possible, don&#8217;t try to envision everything in the first place. The first target is to have a simple, consistent package that works, <strong>in production</strong>. After that, you&#8217;ll be able to upgrade that package iteratively.</p>
<p>The tracer bullet is your first package, by reducing its feature set, you&#8217;ll focus on the essential: production/packaging/deployment issues. Other features and enhancements will come later on. This strategy has also the benfit of reducing the risk of premature optimizations (which is <a href="http://c2.com/cgi/wiki?PrematureOptimization">the root of all evil</a>, as you may already know).</p>
<h3>Rule #5: Write Shy Code</h3>
<p>Shy code is basically what we call the <a href="http://en.wikipedia.org/wiki/Law_of_Demeter">Law of Demeter</a>. It could be described as the Principle of Least Knowledge, as <a href="http://en.wikipedia.org/wiki/Law_of_Demeter">Wikipedia explains</a>:</p>
<p><em><br />
The guideline [...] can be succinctly summarized in one of the following ways:</p>
<ul>
<li>Each unit should have only limited knowledge about other units: only units &#8220;closely&#8221; related to the current unit.</li>
<li>Each unit should only talk to its friends; don&#8217;t talk to strangers.</li>
<li>Only talk to your immediate friends.</li>
</ul>
<p></em></p>
<p>Respecting the Law of Demeter when writing code enhance maintainability and reduce code duplication (so yes, that helps you repsect rule #1).</p>
<h3>Rule #6: Configure, don&#8217;t integrate</h3>
<p>Details mess up our pristine code, they change frequently. Every change to the code is a risk to break the system. To avoid that, you should get the details out of the code, in configuration files. Configurable code is called « soft code », it&#8217;s adaptable to change.</p>
<p>Whenever you come to the point where you put details into your codebase, stop, and extract them out of it. The time you spend now will pay-off ten times in the future.</p>
<h3>Rule #7: Refactor Early, refactor often</h3>
<p>You should <a href="http://en.wikipedia.org/wiki/Refactoring">refactor</a>, yes, but when? Here are the moments when refactoring is a good idea:</p>
<ul>
<li>You&#8217;ve found some duplication you want to remove (again, rule #1!)
</li>
<li>You want to extract details out of the code (rule #6)
</li>
<li>You see a way to <a href="http://en.wikipedia.org/wiki/Generalization">generalize</a> something in your code.
</li>
</ul>
<p>Also, don&#8217;t refactor blindly, if you go into a refactoring session it&#8217;s very important to do it well, or it will come back to bite you:</p>
<ul>
<li>Don&#8217;t refactor and add functionality at the same time</li>
<li>Make sure you have tests to avoid regressions</li>
<li>Take short, deliberate steps. Change one thing at a time.</li>
</ul>
<h3>Rule #8: Design to test</h3>
<p>If you&#8217;re a perfectionist, you might write your tests <em>before</em> the code (it&#8217;s called <a href="http://en.wikipedia.org/wiki/Test_driven_development">Test-Driven Development</a>) but it&#8217;s not mandatory. A matter of taste I&#8217;d say. What is important though is that you always keep tests in mind when you write the code. Respecting the Law of Demeter (rule #5) will definitely help, because a good encapsulation always leads to testable code.</p>
<p>If a part of the code is difficult (or impossible) to test, you need to refactor it to smaller components.</p>
<h3>Rule #9: if you&#8217;ve found a bug, write a test</h3>
<p>This is a very sane approach: whenever a bug is found in production, first thing to do is to write a test that reproduces the issue. That way you&#8217;ll be sure to understand the bug correctly <em>before</em> thinking at the fix and you&#8217;ll have a non-regression test that will make sure the bug won&#8217;t happen again.</p>
<h3>Rule #10: Know when to stop</h3>
<p>Programmers are like painters, they build a picture of some part of the world out of their mind. The major difficulty here is not know when, or where to stop. Keep in mind that perfect software does not exist (no, you won&#8217;t be able to write it, no matter how hard you try).</p>
<p><center><img src="/fr/wp-content/uploads/2012/01/280px-Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg" alt="Starry Night - Van Gogh" class="illustration"/></center></p>
<p>When is a painting finished? Only the painter can say so. You are the painter of your code, know when to stop.</p>
<div id='teoShare' ><div id='teo2Google'>
		<!-- Place this tag where you want the +1 button to render -->
		<g:plusone size='tall' annotation='none'></g:plusone>

		<!-- Place this render call where appropriate -->
		<script type='text/javascript'>
		  (function() {
			var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
			po.src = 'https://apis.google.com/js/plusone.js';
			var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
		  })();
		</script>
		</div><div id="teoTweet" >
		<a href="http://twitter.com/share" class="twitter-share-button" data-count="none" data-via="sukria">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> </div></div><div style="height:0px; width:0px; overflow:hidden;"><a href="http://www.zeitblog.com/?in=plugin">blog tools and plugins from www.zeitblog.com</a></div><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sukria.net/fr/archives/2012/01/06/the-10-rules-of-the-pragmatic-programmer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Productivity at work and meetings</title>
		<link>http://www.sukria.net/fr/archives/2012/01/02/productivity-at-work-and-meetings/</link>
		<comments>http://www.sukria.net/fr/archives/2012/01/02/productivity-at-work-and-meetings/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 16:21:34 +0000</pubDate>
		<dc:creator>sukria</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[Meetings]]></category>

		<guid isPermaLink="false">http://www.sukria.net/fr/?p=1803</guid>
		<description><![CDATA[Chain by OZinHO Recently a coworker lent me the famous book Rework by 37 Signals. Interesting book, a bit sarcastic and pretentious I&#8217;d say: many ideas are exposed as the holy truth, like if there was only one way to see things, but some ideas do indeed make sense. If you don&#8217;t know it, that &#8230; <a href="http://www.sukria.net/fr/archives/2012/01/02/productivity-at-work-and-meetings/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="alignright">
<img src="/fr/wp-content/uploads/2012/01/2129771580_d851f325bb_m.jpg" alt="chains" title="Are meetings enslaving your agenda?" class="illustration" />
<div class="caption"><a href="http://www.flickr.com/photos/75905404@N00/">Chain</a> by <a href="http://www.flickr.com/photos/75905404@N00/">OZinHO</a></div>
</div>
<p>Recently a coworker lent me the famous book <em><a href="http://37signals.com/rework/">Rework</a></em> by 37 Signals. Interesting book, a bit sarcastic and pretentious I&#8217;d say: many ideas are exposed as the <i>holy truth</i>, like if there was only one way to see things, but some ideas do indeed make sense.</p>
<p>If you don&#8217;t know it, that book is about how to manage your schedule at work in order to improve your productivity. Although it&#8217;s supposed to be read by <i>entrepreneurs</i> many topics are of general interest. My past experience with <a href="http://yoolinkpro.com">YoolinkPro</a> as a startup co-founder also gave me an interesting perspective when I read that book (according to that book we did many mistakes at that time but YoolinkPro is still there and more and more efficient as time goes).</p>
<p>One of the idea in that book that stroke me was that meetings kill productivity, here are the main reasons why:</p>
<ul>
<li>Meetings have a very low information/minute rate
</li>
<li>Meetings always diverge from their initial plan
</li>
<li>Meetings are very costy (4 people in a one-hour meeting costs 4 hours to the company)
</li>
<li>Meetings tend to proliferate (a meeting will lead to a new one and so on)
</li>
</ul>
<p>In my daily job I spend lots of time in meetings, so that part of the book caught my attention. I wondered if I could do things better.</p>
<p>So I should try to <a href="http://www.lifehack.org/articles/productivity/kill-meetings-to-get-more-done.html">kill meetings</a> as much as I can, OK, but what is the alternative? If I need to coordinate a team on a technical subject, if I need to discuss a strategic choice for the company? Looks that most of the &#8220;Meeting Killers&#8221; vote for massive email usage.</p>
<p>I can see the benefit: emails are processed <i>when you want to</i> so you can group that task in different moments in your day rather than being <a href="http://blogs.hbr.org/ashkenas/2011/02/dont-let-your-calendar-manage.html">managed by your calendar</a>. But is that an universal solution? What is the issue we try to fix with meetings?</p>
<p>Well, let&#8217;s step back a bit: <i>Why do we do meetings?</i></p>
<p>We do meetings when we need to share information between more than two people. Actually, a meeting is supposed to <em>give an answer</em> to one or more questions that involves these people. Sometimes, a meeting is also schedulded to <em>take a decision</em>.</p>
<p>Can we do that by email?</p>
<p>Despite the book I&#8217;d say that it depends, to me the key here is to answer the question: is that question or that decision blocking someone <strong>now</strong> ? Can&#8217;t that wait a day?</p>
<p>Most of the time you&#8217;ll see that it actually can wait a day. In this situations, then yes, I agree an email is better than a meeting. The email should be written very clearly though, it should not be too long (long emails are <a href="http://zenhabits.net/snore/">counterproductive</a>) and should clearly expose the question that need to be answered (or the decision to be taken).</p>
<p>In other situations, I think a meeting is still the good way to go, but again, it should be well defined, should not involve more than 4/5 people and should be limited in time (when the ring bells, it&#8217;s over, period).</p>
<p>Another interesting idea to balance the whole &#8220;Kill the meetings&#8221; thing is to choose a time-frame when meetings are forbidden, it may be all the mornings, or for instance a whole day when you will never allow a meeting to be planed. I think I&#8217;ll experiment with that, like for instance, the &#8220;no meetings thursday&#8221;.</p>
<p>Feel free to share your experiences in the comments, I&#8217;m interested to see other point of views on the subject.</p>
<div id='teoShare' ><div id='teo2Google'>
		<!-- Place this tag where you want the +1 button to render -->
		<g:plusone size='tall' annotation='none'></g:plusone>

		<!-- Place this render call where appropriate -->
		<script type='text/javascript'>
		  (function() {
			var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
			po.src = 'https://apis.google.com/js/plusone.js';
			var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
		  })();
		</script>
		</div><div id="teoTweet" >
		<a href="http://twitter.com/share" class="twitter-share-button" data-count="none" data-via="sukria">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> </div></div><div style="height:0px; width:0px; overflow:hidden;"><a href="http://www.zeitblog.com/?in=plugin">blog tools and plugins from www.zeitblog.com</a></div><p>Related posts:<ol>
<li><a href='http://www.sukria.net/fr/archives/2012/01/06/the-10-rules-of-the-pragmatic-programmer/' rel='bookmark' title='The 10 rules of the pragmatic programmer'>The 10 rules of the pragmatic programmer</a> <small>In my last post I spoke about how meetings can...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.sukria.net/fr/archives/2012/01/02/productivity-at-work-and-meetings/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Boxee Box, the ultimate media-center</title>
		<link>http://www.sukria.net/fr/archives/2011/12/14/boxee-box-the-ultimate-media-center/</link>
		<comments>http://www.sukria.net/fr/archives/2011/12/14/boxee-box-the-ultimate-media-center/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 17:41:44 +0000</pubDate>
		<dc:creator>sukria</dc:creator>
				<category><![CDATA[Main]]></category>
		<category><![CDATA[Boxee]]></category>
		<category><![CDATA[media-center]]></category>
		<category><![CDATA[TV]]></category>

		<guid isPermaLink="false">http://www.sukria.net/fr/?p=1788</guid>
		<description><![CDATA[The Boxee Box in action. It&#8217;s been around two years since I use Boxee. When I discovered it, I bought an Acer Revo, and powered Boxee on a freshly installed Ubuntu system. That was working well and I got a cheap full-featured media-center that way, but there was still a couple of rough edges: The &#8230; <a href="http://www.sukria.net/fr/archives/2011/12/14/boxee-box-the-ultimate-media-center/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="alignright">
<img src="/fr/wp-content/uploads/2011/12/boxee1.png" alt="" title="The kind of box you won't hide" class="illustration" />
<div class="caption">The Boxee Box in action.</div>
</div>
<p>It&#8217;s been around two years since I use Boxee. When I discovered it, I bought an Acer Revo, and powered Boxee on a freshly installed Ubuntu system.</p>
<p>That was working well and I got a cheap full-featured media-center that way, but there was still a couple of rough edges:</p>
<ul>
<li>The thing is a bit noisy</li>
<li>Flash HD videos were unable to play correctly</li>
<li>No real remote controller (the iPhone/Android app is great, but well, it&#8217;s not as good as a real remote).
</li>
<li>Running a complete Ubuntu system to power a media-center always sounded overkill to me</li>
</ul>
<p>I was a bit hesitating though: would the Boxee Box be that better than my home-made station? I&#8217;ll have the same software afterall, is the hardware they&#8217;ve designed with D-Link worth the change?</p>
<p>There was only one way to know it, so, I finally bought the little not-really-square monster, the <a href="http://boxee.tv/">Boxee Box</a>. Since yesterday, it replaces elegantly my Revo and the small green-smiley-face-logo shines in the dark. Here are my first impressions.</p>
<ul>
<li>It&#8217;s very small and elegant, you really want it to be visible :) It&#8217;s classy
</li>
<li>It&#8217;s completely silent, very good point
</li>
<li>The remote changes everything, really
</li>
<li>Flash HD videos play smoothly</li>
<li>The software is actually not the same, it&#8217;s a complete firmware dedicated to the box, and it&#8217;s better organized than the opensource version of Boxee (very nice feature: the internal search engine and the UPnP support).
</li>
</ul>
<p>So if you&#8217;re looking for the ultimate media-center, stop searching it exists, and is called <em>Boxee Box</em>!</p>
<div id='teoShare' ><div id='teo2Google'>
		<!-- Place this tag where you want the +1 button to render -->
		<g:plusone size='tall' annotation='none'></g:plusone>

		<!-- Place this render call where appropriate -->
		<script type='text/javascript'>
		  (function() {
			var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
			po.src = 'https://apis.google.com/js/plusone.js';
			var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
		  })();
		</script>
		</div><div id="teoTweet" >
		<a href="http://twitter.com/share" class="twitter-share-button" data-count="none" data-via="sukria">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> </div></div><div style="height:0px; width:0px; overflow:hidden;"><a href="http://www.zeitblog.com/?in=plugin">blog tools and plugins from www.zeitblog.com</a></div><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sukria.net/fr/archives/2011/12/14/boxee-box-the-ultimate-media-center/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Social Web, so what?</title>
		<link>http://www.sukria.net/fr/archives/2011/12/13/social-web-so-what/</link>
		<comments>http://www.sukria.net/fr/archives/2011/12/13/social-web-so-what/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 22:54:14 +0000</pubDate>
		<dc:creator>sukria</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[social networks]]></category>

		<guid isPermaLink="false">http://www.sukria.net/fr/?p=1743</guid>
		<description><![CDATA[High Sheeps by Bertoz I came accross this interesting article about social networks, the main idea being that taking over Facebook is not the question anymore: OK, Facebook has 800 millions active users, that&#8217;s huge. But the question is no more &#8220;how many users you can get into your social network&#8221;, it&#8217;s more, &#8220;why will &#8230; <a href="http://www.sukria.net/fr/archives/2011/12/13/social-web-so-what/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="alignright">
<img src="http://www.sukria.net/fr/wp-content/uploads/2011/12/sheeps_m.jpg" alt="Sheeps" title="Are we social?" width="220" height="144" class="illustration" />
<div class="caption"><a href="http://www.flickr.com/photos/bertozland/33402924/">High Sheeps</a> by <a href="http://www.flickr.com/people/bertozland/">Bertoz</a></div>
</div>
<p>I came accross <a href="http://thewhatnoise.blogspot.com/2011/12/social-future-is-niche-people-are.html">this interesting article about social networks</a>, the main idea being that taking over Facebook is not the question anymore: OK, Facebook has 800 millions active users, that&#8217;s huge.</p>
<p>But the question is no more &#8220;how many users you can get into your social network&#8221;, it&#8217;s more, &#8220;why will users come to your social network&#8221;.</p>
<p>That&#8217;s a very interesting point of view, and I&#8217;d say I couldn&#8217;t agree more with the idea that at some point, the number of active users is not a value I&#8217;d look for, actually it&#8217;s the opposite. Did you look recently at your Facebook wall? It&#8217;s just an empty room filled with wind and pop-corn.</p>
<p>My Facebook account is undead and whenever I log on to see what&#8217;s happening in my &#8220;friends&#8221; life, all I see is how much their life is exciting. OK, this last one was a bit sarcastic, but frankly, it&#8217;s not far from the truth. It&#8217;s just, well, boring. Also, don&#8217;t take me wrong, I&#8217;m not saying I don&#8217;t care about my friends life, I&#8217;m saying that everything in Facebook contribute to lower the quality of publications.</p>
<p>On the other hand, I make a big use of Twitter and am interested to check out what&#8217;s happening in my circles on Google+. Why so? Because the users I&#8217;m following there are interesting, they have something to say other than where they spent their holydays, how much they love their dog or whatever they ate at lunch. At the same time, their audience is paying more attention, that changes everything.<br />
It&#8217;s a virtuous circle: more expectation from your audience brings better content.</p>
<p>There are less users, more specialized, yes indeed. And that&#8217;s why it&#8217;s better.</p>
<div id='teoShare' ><div id='teo2Google'>
		<!-- Place this tag where you want the +1 button to render -->
		<g:plusone size='tall' annotation='none'></g:plusone>

		<!-- Place this render call where appropriate -->
		<script type='text/javascript'>
		  (function() {
			var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
			po.src = 'https://apis.google.com/js/plusone.js';
			var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
		  })();
		</script>
		</div><div id="teoTweet" >
		<a href="http://twitter.com/share" class="twitter-share-button" data-count="none" data-via="sukria">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> </div></div><div style="height:0px; width:0px; overflow:hidden;"><a href="http://www.zeitblog.com/?in=plugin">blog tools and plugins from www.zeitblog.com</a></div><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sukria.net/fr/archives/2011/12/13/social-web-so-what/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Double-pass Spam filtering with GMail and procmail</title>
		<link>http://www.sukria.net/fr/archives/2011/10/02/double-pass-spam-filtering-with-gmail-and-procmail/</link>
		<comments>http://www.sukria.net/fr/archives/2011/10/02/double-pass-spam-filtering-with-gmail-and-procmail/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 11:41:40 +0000</pubDate>
		<dc:creator>sukria</dc:creator>
				<category><![CDATA[Hacks]]></category>

		<guid isPermaLink="false">http://www.sukria.net/fr/?p=1737</guid>
		<description><![CDATA[Filtered flare by slimmer_jimmer Just to remember the hack (and to share with those who may not be aware of it) here is how to use GMail as a Spam filter. First, go to your GMail settings and activate a forward to your main email address. When it&#8217;s done, any non-SPAM email that arrives to &#8230; <a href="http://www.sukria.net/fr/archives/2011/10/02/double-pass-spam-filtering-with-gmail-and-procmail/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="alignright">
<img src="http://www.sukria.net/fr/wp-content/uploads/2011/10/filter_m.jpg" alt="" title="" width="240" height="160" class="illustration" />
<div class="caption"><a href="http://www.flickr.com/photos/slimjim/4143016519/">Filtered flare</a> by <a href="http://www.flickr.com/photos/slimjim/">slimmer_jimmer</a></div>
</div>
<p>Just to remember the hack (and to share with those who may not be aware of it) here is how to use GMail as a Spam filter.</p>
<p>First, go to your GMail settings and activate a forward to your main email address.</p>
<p>When it&#8217;s done, any non-SPAM email that arrives to your GMail account will be forwarded (note that you can keep a copy in GMail, this is a great combo to have a backup of your emails).</p>
<p>Then, back to your email server side, you need to bounce all incoming emails to your GMail account; but we don&#8217;t want to create an infinite loop, so we&#8217;ll make sure we don&#8217;t bounce an email that comes from GMail&#8217;s forward (thanks to the <code>X-Forwarded-For</code> header).</p>
<pre>
# forward to gmail account for spam filtering - cf http://mboffin.com/post.aspx?id=1636
:0
* !X-Forwarded-For: YOURACCOUNT@gmail.com YOU@YOUREMAILSERVER
{
    :0fw
    | formail -IDelivered-To

    :0
    ! YOURACCOUNT@gmail.com
}
</pre>
<p>And Voila! That&#8217;s all you need, now all your emails go through the following flow:</p>
<pre>
Your mail server -> GMail -> GMail's Spam filter -> Your mail server
</pre>
<div id='teoShare' ><div id='teo2Google'>
		<!-- Place this tag where you want the +1 button to render -->
		<g:plusone size='tall' annotation='none'></g:plusone>

		<!-- Place this render call where appropriate -->
		<script type='text/javascript'>
		  (function() {
			var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
			po.src = 'https://apis.google.com/js/plusone.js';
			var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
		  })();
		</script>
		</div><div id="teoTweet" >
		<a href="http://twitter.com/share" class="twitter-share-button" data-count="none" data-via="sukria">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> </div></div><div style="height:0px; width:0px; overflow:hidden;"><a href="http://www.zeitblog.com/?in=plugin">blog tools and plugins from www.zeitblog.com</a></div><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sukria.net/fr/archives/2011/10/02/double-pass-spam-filtering-with-gmail-and-procmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dancer2 prototype</title>
		<link>http://www.sukria.net/fr/archives/2011/09/30/dancer2-prototype/</link>
		<comments>http://www.sukria.net/fr/archives/2011/09/30/dancer2-prototype/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 12:13:45 +0000</pubDate>
		<dc:creator>sukria</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Dancer]]></category>
		<category><![CDATA[dancer2]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://www.sukria.net/fr/?p=1731</guid>
		<description><![CDATA[Guardian of Unity Forerunner by Wessen I am very glad and proud to announce here that I&#8217;ve came up with a prototype of dancer2 that pleases me enough to be advertised. The source code was hosted on a private Git repo (kudos to Sawyer) but I&#8217;ve now decided to push it on GitHub. dancer2 is &#8230; <a href="http://www.sukria.net/fr/archives/2011/09/30/dancer2-prototype/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="alignright">
<img src="/fr/wp-content/uploads/2011/12/3240905176_f03d44550f_m.jpg" alt="Robot" title="Meet my new shiny toy!" width="220" height="144" class="illustration" />
<div class="caption"><a href="http://www.flickr.com/photos/weesen/3240905176/">Guardian of Unity Forerunner</a> by <a href="http://www.flickr.com/photos/weesen/">Wessen</a></div>
</div>
<p>I am very glad and proud to announce here that I&#8217;ve came up with a prototype of dancer2 that pleases me enough to be advertised.</p>
<p>The source code was hosted on a private Git repo (kudos to <a href="http://blogs.perl.org/users/sawyer_x/" title="SawyerX on blogs.perl.org">Sawyer</a>) but I&#8217;ve now decided to push it <a href="https://github.com/PerlDancer/Dancer2" title="dancer2 repo on GitHub">on GitHub</a>.</p>
<p>dancer2 is a complete rewrite of <a href="http://perldancer.org" title="Perl Dancer website">Dancer</a> aiming at providing the same awesomeness with the following major changes:</p>
<ul>
<li>no more globals in the core
</li>
<li>100% object-oriented backend (based on <a href="https://metacpan.org/module/Moo" title="Moo on MetaCPAN">Moo</a>)
</li>
<li>better scoping for sub-applications
</li>
<li>better design (no more encapsulation violations, <a href="http://en.wikipedia.org/wiki/Law_of_Demeter" title="Wikipedia article about the Law of Demeter">Law of Demeter</a>, &#8230;)
</li>
</ul>
<p>It&#8217;s not finished yet (dancer2 supports 80% of the Dancer&#8217;s DSL) but all the core is done. It&#8217;s well tested (around 80% of code coverage at this point) and I think the last 20% wont be hard to implement (session and serializer keywords mostly).</p>
<p>It&#8217;s able to run simple applications (it can run the PerlDancer.org<br />
website for instance).</p>
<p>Of course, with your real-life applications, chances are that it will break in many places, this is where you can help. I&#8217;d like to have as many reports as possible regarding upgrades tests.</p>
<p>You can test very easily your app with dancer2:</p>
<pre>
  $ git clone http://github.com/PerlDancer/Dancer2.git
  $ cd YOUR_APP
  $ perl -I../dancer2/lib bin/app.pl
</pre>
<p>
Also, important to know: most of the plugins may not be working well.
</p>
<p>Here are the next steps:</p>
<ul>
<li>Finish the DSL</li>
<li>Work on plugins backward compat</li>
<li>Write a &#8220;delta&#8221; POD (also list the deprecations)</li>
<li>Write a Dancer::BackwardCompat glue module for easier upgrades</li>
</ul>
<div id='teoShare' ><div id='teo2Google'>
		<!-- Place this tag where you want the +1 button to render -->
		<g:plusone size='tall' annotation='none'></g:plusone>

		<!-- Place this render call where appropriate -->
		<script type='text/javascript'>
		  (function() {
			var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
			po.src = 'https://apis.google.com/js/plusone.js';
			var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
		  })();
		</script>
		</div><div id="teoTweet" >
		<a href="http://twitter.com/share" class="twitter-share-button" data-count="none" data-via="sukria">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> </div></div><div style="height:0px; width:0px; overflow:hidden;"><a href="http://www.zeitblog.com/?in=plugin">blog tools and plugins from www.zeitblog.com</a></div><p>Related posts:<ol>
<li><a href='http://www.sukria.net/fr/archives/2010/03/03/about-performances/' rel='bookmark' title='About performances'>About performances</a> <small>I recently focused on Dancer&#8217;s core with a single target...</small></li>
<li><a href='http://www.sukria.net/fr/archives/2010/07/03/perl-dancer-meeting-1-report/' rel='bookmark' title='Perl Dancer meeting #1 report'>Perl Dancer meeting #1 report</a> <small>Here is my quick report of the first Dancer meeting...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.sukria.net/fr/archives/2011/09/30/dancer2-prototype/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>CPAN-ratings, Fake Trolls and doing marketing politics right</title>
		<link>http://www.sukria.net/fr/archives/2011/07/22/cpan-ratings-fake-trolls-and-doing-marketing-politics-right/</link>
		<comments>http://www.sukria.net/fr/archives/2011/07/22/cpan-ratings-fake-trolls-and-doing-marketing-politics-right/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 11:31:29 +0000</pubDate>
		<dc:creator>sukria</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[CPAN]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Trolls]]></category>

		<guid isPermaLink="false">http://www.sukria.net/fr/?p=1718</guid>
		<description><![CDATA[Troll by wyldanthem If you follow either the Perl Dancer community or the Sinatra one, you may be aware of what happened yesterday: some unknown individual posed as different members of the Sinatra core team on CPAN ratings in order to trash Dancer. The comments posted were rude and clearly intented to harm the project &#8230; <a href="http://www.sukria.net/fr/archives/2011/07/22/cpan-ratings-fake-trolls-and-doing-marketing-politics-right/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="alignright">
<img src="/fr/wp-content/uploads/2011/12/2769395493_cc3843477c_m.jpg" alt="Troll" title="Haters gonna hate" class="illustration" />
<div class="caption"><a href="http://www.flickr.com/photos/wyldanthem/2769395493/">Troll</a> by <a href="http://www.flickr.com/photos/wyldanthem/">wyldanthem</a></div>
</div>
<p>If you follow either the <a href="http://perldancer.org">Perl Dancer</a> community or the <a href="http://www.sinatrarb.com/">Sinatra</a> one, you may be aware of what happened yesterday:  some unknown individual posed as different members of the Sinatra core team on CPAN ratings in order to trash Dancer. The comments posted were rude and clearly intented to harm the project or the people involved with it.</p>
<p>It&#8217;s not the first time Dancer is the target of an unknown individual (who always sends his attacks anonymously), we already experienced that whenever a news was posted to HackerNews about Dancer. But this time, the attack was more aggresive, 5 different accounts were created in a row on Bitcard to downgrade the CPAN ratings average of Dancer. Furthermore they used the names of known people in the Sinatra community, in order to make it look even more harmful.</p>
<p>But what was the result of that? Well, it turned out to be one of our most productive and positive marketing action since we launched our advent calendar. Yes. Because our first reaction when this came to our attention was to contact the Sinatra community, in order to check out with them if they were related to that or not.</p>
<p>Tunred out they had clearly nothing to do with this childish attacks, and were even as offended as we were that Sinatra could be associated to such low behaviour. In the end, the result of all this is an official statement <a href="http://twitter.com/#!/sinatra/status/94074367755042816">from Sinatra</a> saying that &#8220;<a href="http://www.sinatrarb.com/2011/07/21/sinatra-loves-dancer.html">Sinatra loves Dancer</a>&#8220;. It has triggered a <a href="http://twitter.com/#!/seacreature/status/94096796250415104">lot of</a> <a href="http://twitter.com/#!/obfuscurity/status/94081686911987712">very positive</a>  <a href="http://twitter.com/#!/nihiliad/status/94101049232736256">noise</a> on Twitter for both Sinatra (who clearly appears to be a very classy community) and Dancer who benefits from the huge spotlight Sinatra gave. For this, I thank very gracefully the Sinatra community and more precisely <a href="http://rkh.im/">Konstantin Haase</a>.</p>
<p>Back from a CPAN author point of view, I wonder if we couldn&#8217;t make the CPAN-ratings system a bit more troll-safe. It is clearly very easy to create a bunch of accounts for poisoning on purpose a distribution. On the other hand, negative ratings should remain possible, otherwise the rating system would be useless (If as a CPAN author I delete all the negative reviews of my distributions, I alter the reality). I understand it&#8217;s a tricky design issue to solve, but I think we should spend energy on it.</p>
<p>In our case, we had the chance to be part of a very noisy event, and that helped us to have some of the fake ratings removed, but what would have happened if your distribution had less spotlights? If you don&#8217;t have an active community to defend it? If you don&#8217;t know who to contact to have some abusing ratings moderated? Then you&#8217;re vulnerable to trolls.</p>
<p>Maybe the following points could enhance the ratings system (feel free to comment on them):</p>
<ul>
<li>add a &#8220;Report abuse&#8221; link on the rating items, in order to be able to ask easily for moderation</li>
<li>downgrade/hide/moderate any ratings that have a very high proportion of negative votes (like 1 of 20).</li>
<li>prevent multiple accounts creation in a row: if the same IP address creates more than X accounts in the same time window, something suspicious may be happening, maybe we could block that IP for a while, like a day, &#8230;
</li>
<li>Another idea is to allow CPAN authors either not to appear on the CPAN-ratings page, or to reset their ratings (all of them)</li>
</ul>
<p>I&#8217;m sure there are lots of other options. Feel free to comment on that. Maybe we could use also some sort of &#8220;reputation score&#8221; like <a href="http://stackoverflow.com">StackOverflow</a> does in order to enlight the ratings by revelance.</p>
<div id='teoShare' ><div id='teo2Google'>
		<!-- Place this tag where you want the +1 button to render -->
		<g:plusone size='tall' annotation='none'></g:plusone>

		<!-- Place this render call where appropriate -->
		<script type='text/javascript'>
		  (function() {
			var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
			po.src = 'https://apis.google.com/js/plusone.js';
			var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
		  })();
		</script>
		</div><div id="teoTweet" >
		<a href="http://twitter.com/share" class="twitter-share-button" data-count="none" data-via="sukria">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> </div></div><div style="height:0px; width:0px; overflow:hidden;"><a href="http://www.zeitblog.com/?in=plugin">blog tools and plugins from www.zeitblog.com</a></div><p>Related posts:<ol>
<li><a href='http://www.sukria.net/fr/archives/2010/07/09/dancer-global-thoughts-about-our-philosophy/' rel='bookmark' title='Dancer, global thoughts about our philosophy'>Dancer, global thoughts about our philosophy</a> <small>If you follow Perl5 blogs you may have been aware...</small></li>
<li><a href='http://www.sukria.net/fr/archives/2010/02/17/dancer-1-150-released/' rel='bookmark' title='Dancer 1.150 released'>Dancer 1.150 released</a> <small>I&#8217;m happy to announce the release of Dancer 1.150. This...</small></li>
<li><a href='http://www.sukria.net/fr/archives/2010/01/06/dancer-1-100-released/' rel='bookmark' title='Dancer 1.100 released'>Dancer 1.100 released</a> <small>A new version of Dancer has just been published on...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.sukria.net/fr/archives/2011/07/22/cpan-ratings-fake-trolls-and-doing-marketing-politics-right/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to Identify a Good Perl Programmer, part 2</title>
		<link>http://www.sukria.net/fr/archives/2011/03/04/how-to-identify-a-good-perl-programmer-part-2/</link>
		<comments>http://www.sukria.net/fr/archives/2011/03/04/how-to-identify-a-good-perl-programmer-part-2/#comments</comments>
		<pubDate>Fri, 04 Mar 2011 09:57:36 +0000</pubDate>
		<dc:creator>sukria</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Interview]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://www.sukria.net/fr/?p=1708</guid>
		<description><![CDATA[Superman by Dunechaser Chromatic has published a set of questions to identify good Perl programmers. I use it now for every job interview I handle (we want to hire experienced Perl programmers here at Weborama) and am very pleased with the results so far. I don&#8217;t expect applicants to be able to answer every single &#8230; <a href="http://www.sukria.net/fr/archives/2011/03/04/how-to-identify-a-good-perl-programmer-part-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="alignright"><img src="/fr/wp-content/uploads/2011/03/142079357_c2202440ae_m.jpg" alt="" title="because Clark Kent might be around" width="240" height="180" class="illustration" />
<div class="caption"><a href="http://www.flickr.com/photos/dunechaser/142079357/">Superman</a> by <a href="http://www.flickr.com/photos/dunechaser/">Dunechaser</a></div>
</div>
<p>Chromatic has published <a href="http://www.modernperlbooks.com/mt/2011/01/how-to-identify-a-good-perl-programmer.html">a set of questions to identify good Perl programmers</a>. I use it now for every job interview I handle (we want to hire experienced Perl programmers here at <a href="http://weborama.com/">Weborama</a>) and am very pleased with the results so far.</p>
<p>I don&#8217;t expect applicants to be able to answer every single question, but with this questionaire, I have a very solid base upon which I can build the interview. Moreover, it&#8217;s quite impossible for the applicant to bluff, she can try, but she will fail.</p>
<p>After doing this interview a couple of times, I&#8217;ve came up with a set of new questions I like to ask, here there are:</p>
<ul>
<li>How do you detect the caller&#8217;s context in a subroutine?</li>
<li>What is the difference between die and croak?</li>
<li>How do you mesure the code coverage of a test suite?</li>
<li>What&#8217;s the difference between <code>eval $foo</code> and <code>eval { $foo }</code>, bonus point if you can show off that difference with a code snippet</li>
<li>Explain what happens when the line <code>use SomeModule;</code> is executed. Bonus point for telling <em>when</em> it is executed.</li>
<li>Same question for <code>no SomeModule;</code></li>
<li>What&#8217;s the difference between <code>(1, 2, 3, 4, 5)</code> and <code>[1, 2, 3, 4, 5]</code>?</li>
<li>With the following: <code>my $code = sub { 42 } </code>, explain what we get in <code>$code</code></li>
<li>Is the following valid Perl 5 code: <code>[foo => 42, bar => 44]</code>? Explain the resulting data structure. Bonus point for giving another syntax for the same structure.</li>
<li>Do you know a new built-in keyword of Perl 5 added in the 5.10 version?</li>
<li>How would you match an email in a given string?</li>
<li>Do you know a way to profile a perl program?</li>
<li>Do you know how to run a perl program with the debugger?</li>
<li>How would you transform a list of integers to a list of their power by two?</li>
<li>What do I have in @list with the following: <code>@list = ('a' .. 'e')</code></li>
<li>Can you explain the difference between <code>my $foo = shift;</code> and <code>my ($foo) = @_</code> ?
</li>
</ul>
<div id='teoShare' ><div id='teo2Google'>
		<!-- Place this tag where you want the +1 button to render -->
		<g:plusone size='tall' annotation='none'></g:plusone>

		<!-- Place this render call where appropriate -->
		<script type='text/javascript'>
		  (function() {
			var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
			po.src = 'https://apis.google.com/js/plusone.js';
			var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
		  })();
		</script>
		</div><div id="teoTweet" >
		<a href="http://twitter.com/share" class="twitter-share-button" data-count="none" data-via="sukria">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> </div></div><div style="height:0px; width:0px; overflow:hidden;"><a href="http://www.zeitblog.com/?in=plugin">blog tools and plugins from www.zeitblog.com</a></div><p>Related posts:<ol>
<li><a href='http://www.sukria.net/fr/archives/2010/07/01/perl-dancer-meeting-1/' rel='bookmark' title='Perl Dancer meeting #1'>Perl Dancer meeting #1</a> <small>As explained on the mailing list, we had the idea...</small></li>
<li><a href='http://www.sukria.net/fr/archives/2010/07/03/perl-dancer-meeting-1-report/' rel='bookmark' title='Perl Dancer meeting #1 report'>Perl Dancer meeting #1 report</a> <small>Here is my quick report of the first Dancer meeting...</small></li>
<li><a href='http://www.sukria.net/fr/archives/2009/09/11/thoughts-about-an-easy-to-use-mocker-for-perl/' rel='bookmark' title='Thoughts about an easy-to-use Mocker for Perl'>Thoughts about an easy-to-use Mocker for Perl</a> <small>Unit-testing is the way to go in modern programing. When...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.sukria.net/fr/archives/2011/03/04/how-to-identify-a-good-perl-programmer-part-2/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Perl Bulgaria 2011 Report</title>
		<link>http://www.sukria.net/fr/archives/2011/02/28/perl-bulgaria-2011-report/</link>
		<comments>http://www.sukria.net/fr/archives/2011/02/28/perl-bulgaria-2011-report/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 08:43:46 +0000</pubDate>
		<dc:creator>sukria</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[bulgaria]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[sofia]]></category>

		<guid isPermaLink="false">http://www.sukria.net/fr/?p=1683</guid>
		<description><![CDATA[This weekend I was invited to Bulgaria Perl Workshop that takes place at Sofia for giving a talk about Dancer. First of all I&#8217;d like to thank Marian Marinov and Peter Shangov for inviting me, and also the french perl mongers who helped for making the sponsoring of my trip possible. It&#8217;s the first time &#8230; <a href="http://www.sukria.net/fr/archives/2011/02/28/perl-bulgaria-2011-report/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This weekend I was invited to <a href="http://2011.perlbulgaria.org/sofia2011/">Bulgaria Perl Workshop</a> that takes place at Sofia for giving a talk about <a href="http://perldancer.org">Dancer</a>.<br />
First of all I&#8217;d like to thank Marian Marinov and       Peter Shangov for inviting me, and also the french perl mongers who helped for making the sponsoring of my trip possible.</p>
<p><img src="/fr/wp-content/uploads/2011/02/bpw2011.jpg" alt="Bulgarian Perl Workshop" /></p>
<p>It&#8217;s the first time I&#8217;m invited as a guest to a Perl event, it&#8217;s really exciting to see how Dancer drives me into new situations!<br />
I already said that I enjoyed seeing Dancer taking its own life, but now, it starts to drive mine! Which is even better ;)</p>
<p><em>Friday</em></p>
<p>I&#8217;ve landed at the Sofia airport friday afternoon at 4PM. The flight went pretty well, and the landing was very smooth. Apprently &#8220;Bulgaria Air&#8221; is not famous for that, so I guess I got lucky!</p>
<p>My first impression when I got out of the plane was the freezing air. When I left Paris, it was around 5° (C) and Sofia was around -6° (C). It&#8217;s like going back in time, when we had snow in Paris&#8217; streets in december! But it&#8217;s a very subjective point of view, because Alexey Kapranov, who came from Moscow told us it was -20° (C) over there!</p>
<p>Marian Marinov came gently to take me at the aiprort and drove me downtown to meet Alexey who had found a <a href="http://www.facebook.com/freesofiatour?v=app_10442206389">free city-tour</a> driven by Vanya, a very enthusisast guide.<br />
We went by walk to see most of the historical buildings of Sofia. Yes, you can  actually do that by walk, because the center of the city is not very big and most of the historical places are grouped in the same district.</p>
<p>It&#8217;s interesting that this city has &#8220;mutable&#8221; buildings :) From time to time, churches turn into mosques, and to churches again. A lot of Sofia&#8217;s buildings  change during time, depending on the political<br />
position of the country. Sometimes it&#8217;s destroyed then rebuilt again and so on. It&#8217;s like a volatile city! Apparently this is going to change, because bulgarian people want to stop desroying their<br />
buildings, even if there are strong feelings linked to them. &#8220;<em>It&#8217;s part of our history</em>&#8221; said Vanya, &#8220;<em>wether it&#8217;s bad or good history, it&#8217;s still history, hence we should stop destroying buildings</em>&#8220;.</p>
<p><img src="/fr/wp-content/uploads/2011/02/sofia.jpg" alt="Sofia" /></p>
<p>I&#8217;ve also been surprised to see that France had strong trading connections with Bulgaria in the past. We&#8217;ve seen some historical stones with scriptures written in french.<br />
We had dinner in a sweet restaurant in Sofia, and we tried a couple of meals (Chopska Salata!), it was pretty good.</p>
<p><em>Saturday</em></p>
<p>The Perl Bulgraia Workshop takes place in the &#8220;French Center&#8221; of Sofia&#8217;s university, which is actually funded by the French embassy.<br />
Actually we are in the french library of the university, it&#8217;s funny to be surrounded by french books when you&#8217;ve flew 2,500 kilometers to the east ;)</p>
<p>The conference started at 11 AM with Alexey&#8217;s talk about HTTP sessions handling. It was interesting because he went through all the details of the HTTP session protocol, explaining what stateless connections are and how cookies were used to provide that missing state in HTTP. Then we&#8217;ve seen the famous technique of embeding the whole session in an encrypted cookie; and what pros and cons you have then.</p>
<p>I did my talk about Dancer then, I&#8217;ve used the <a href="http://slides.perldancer.org">slides I had done for OSDCfr 2010</a> and refreshed them before. The talk went pretty well, I think. I tried to show off all the main key-features of Dancer and most importantly its spirit. I think I made my point. I was comfortable and felt like being more fluent than the talk I did at FOSDEM. Maybe the practice is helping ;) I should do more talks in english!</p>
<p>My slideshow lasted 30 minutes, so I had another 10 to do some live demos. I had prepared a set of very small working examples for showing off Dancer&#8217;s sessions, serializers and logger engines. It was a good way to end the presentation: after 30 minutes of talking, the audience is much more receptive if you break the way things are done.<br />
Moreover, live demo are always more exciting than slides, because, you know, it&#8217;s live!</p>
<p>I also had with me two Dancer T-shirts to offer so I proposed to make a small lottery to find out who will win them. &#8220;<em>What would be the best way to do that?</em>&#8221; I wondered, &#8220;<em>well, it has to be powered by Dancer!</em>&#8220;.<br />
So here I was writing a silly app during the last talk (I had 30 minutes to build the app, no more!). The app is basically the following:</p>
<pre class="prettyprint">
my @people = (...);
get '/winner' => sub {
    shuffle @people and $people[0];
};
dance;
</pre>
<p>Of course I also wrapped all that with a nice HTML/CSS layout in order to display the winner&#8217;s name in huge characters, with a centered position.</p>
<p>Well that&#8217;s it, the beast was alive in time! Then I filled the list with the people registered on the BPW website and we were ready.</p>
<p>It was very funny to do, we may do that as well at the French Perl Workshop, it&#8217;s a very funny way to close the event and to show off Dancer&#8217;s ease of use. You have an idea, 30 minutes later it&#8217;s live.</p>
<p>I really enjoyed this trip to Sofia, and was very happy to be part of the Bulgarian workshop. </p>
<p>So long Sofia, and thanks for the fish!</p>
<div id='teoShare' ><div id='teo2Google'>
		<!-- Place this tag where you want the +1 button to render -->
		<g:plusone size='tall' annotation='none'></g:plusone>

		<!-- Place this render call where appropriate -->
		<script type='text/javascript'>
		  (function() {
			var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
			po.src = 'https://apis.google.com/js/plusone.js';
			var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
		  })();
		</script>
		</div><div id="teoTweet" >
		<a href="http://twitter.com/share" class="twitter-share-button" data-count="none" data-via="sukria">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> </div></div><div style="height:0px; width:0px; overflow:hidden;"><a href="http://www.zeitblog.com/?in=plugin">blog tools and plugins from www.zeitblog.com</a></div><p>Related posts:<ol>
<li><a href='http://www.sukria.net/fr/archives/2011/02/06/fosdem-2011-report/' rel='bookmark' title='FOSDEM 2011 report'>FOSDEM 2011 report</a> <small>So this year I was to FOSDEM, and this was...</small></li>
<li><a href='http://www.sukria.net/fr/archives/2010/07/03/perl-dancer-meeting-1-report/' rel='bookmark' title='Perl Dancer meeting #1 report'>Perl Dancer meeting #1 report</a> <small>Here is my quick report of the first Dancer meeting...</small></li>
<li><a href='http://www.sukria.net/fr/archives/2010/06/12/french-perl-workshop-2010-report/' rel='bookmark' title='French Perl Workshop 2010 report'>French Perl Workshop 2010 report</a> <small>I&#8217;m just back from FPW 2010 and I want to...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.sukria.net/fr/archives/2011/02/28/perl-bulgaria-2011-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

