Imports all the Wordpress history into jekyll.

It kinda seems to work!
This commit is contained in:
julien lengrand-lambert
2014-02-09 01:14:08 +01:00
parent d403fe40b5
commit 2e27933441
77 changed files with 7366 additions and 0 deletions

View File

@@ -1,2 +1,4 @@
source 'https://rubygems.org'
gem 'github-pages'
gem "sequel"
gem "mysql2"

View File

@@ -37,6 +37,7 @@ GEM
rb-inotify (>= 0.9)
rb-kqueue (>= 0.2)
maruku (0.7.0)
mysql2 (0.3.15)
parslet (1.5.0)
blankslate (~> 2.0)
posix-spawn (0.3.8)
@@ -51,6 +52,7 @@ GEM
rdiscount (2.1.7)
redcarpet (2.3.0)
safe_yaml (0.9.7)
sequel (4.7.0)
toml (0.1.0)
parslet (~> 1.5.0)
yajl-ruby (1.1.0)
@@ -60,3 +62,5 @@ PLATFORMS
DEPENDENCIES
github-pages
mysql2
sequel

View File

@@ -0,0 +1,101 @@
---
layout: page
status: publish
published: true
title: Job Space
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 2
wordpress_url: http://www.lengrandlambert.fr/wordpress/?page_id=2
date: 2011-10-13 15:14:21.000000000 +02:00
categories: []
tags: []
comments:
- id: 1063
author: Design, Innovation and Hacking in a couch | loup2fu
author_email: ''
author_url: http://www.lengrand.fr/2012/05/design-innovation-and-hacking-in-a-couch/
date: !binary |-
MjAxMi0wNS0yOSAxMjowNzo0NiArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxMTowNzo0NiArMDIwMA==
content: ! '[...] Job Space [...]'
- id: 1148
author: Is Descartes the father of Agile development? | loup2fu
author_email: ''
author_url: http://www.lengrand.fr/2012/06/is-descartes-the-father-of-agile-development/
date: !binary |-
MjAxMi0wNi0wNCAxMDowNToyNSArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNi0wNCAwOTowNToyNSArMDIwMA==
content: ! '[...] Job Space [...]'
- id: 1207
author: ! 'Llama : Profile activation problems | loup2fu'
author_email: ''
author_url: http://www.lengrand.fr/2012/06/llama-profile-activation-problems/
date: !binary |-
MjAxMi0wNi0xMyAxMjo0OTo1NSArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNi0xMyAxMTo0OTo1NSArMDIwMA==
content: ! '[...] Job Space [...]'
- id: 1210
author: How working as a cook helped me be a better developer | loup2fu
author_email: ''
author_url: http://www.lengrand.fr/2012/06/how-working-as-a-cook-helped-me-be-a-better-developer/
date: !binary |-
MjAxMi0wNi0xNCAxMzoyMjo1NCArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNi0xNCAxMjoyMjo1NCArMDIwMA==
content: ! '[...] Job Space [...]'
- id: 1921
author: ! 'Presenting Ivolution : Timelapse creation with face recognition | loup2fu'
author_email: ''
author_url: http://www.lengrand.fr/2012/08/presenting-ivolution-timelapse-creation-with-face-recognition/
date: !binary |-
MjAxMi0wOC0yMSAxMzozNDowOSArMDIwMA==
date_gmt: !binary |-
MjAxMi0wOC0yMSAxMjozNDowOSArMDIwMA==
content: ! '[...] Job Space [...]'
- id: 2121
author: Petit guide de l’expatriation. . . | loup2fu
author_email: ''
author_url: http://www.lengrand.fr/2012/09/petit-guide-de-lexpatriation/
date: !binary |-
MjAxMi0wOS0yNiAxMjozMjozNCArMDIwMA==
date_gmt: !binary |-
MjAxMi0wOS0yNiAxMTozMjozNCArMDIwMA==
content: ! '[...] Job Space [...]'
---
<a href="http://www.lengrand.fr/wp-content/uploads/2012/01/face.jpg"><img class="alignright size-full wp-image-506" title="Job profile" src="http://www.lengrand.fr/wp-content/uploads/2012/01/face.jpg" alt="my Job profile" width="147" height="298" /></a>Welcome in the professional part of my website. Here you will learn a bit more about my Job experience.
I am an <strong>Image Processing Engineer</strong>, and my daily work is to design algorithms based on <strong>Computer Vision</strong>.
Most of my educational internships have taken place in the sonar world; and especially in automatic mine hunting techniques.
Right after school, I spent some time working with <strong>smart cameras</strong> in which hardware ressources were very limited. I dealt with <strong>low footprint developments</strong>, algorithms optimization and embedded electronics.
Lately, my girlfriend and me decided to leave France and move to<strong> the Netherlands</strong>. I now work as a<strong> software engineer</strong> at <a title="spacemetric" href="http://www.spacemetric.com/" target="_blank">Spacemetric</a>, a Swedish company that provides image management solutions for satellite and airborne sensor.
You can find my <strong>Resume</strong><a title="Resume" href="http://dl.dropbox.com/u/4286043/00_Website/00_CV/en_Lengrandlambert.pdf" target="_blank"> right here</a>.
<div>Some of the projects of my previous experiences have led to <strong>publications</strong>. You can find copies here :</div>
<div>
<ul>
<li><a title="ECUA2010_1" href="http://dl.dropbox.com/u/4286043/00_Website/01_Publis/Fusion_GESMA_ECUA.pdf" target="_blank">Sonar images segmentation and classification fusion, ECUA 2010</a></li>
<li><a title="ECUA2010_2" href="http://dl.dropbox.com/u/4286043/00_Website/01_Publis/ATR_TNO_ECUA.pdf" target="_blank">Automatic target recognition in synthetic aperture sonar images for autonomous mine hunting, ECUA 2010</a></li>
<li><a title="EGC2010" href="http://dl.dropbox.com/u/4286043/00_Website/01_Publis/Fusion_GESMA_EGC.pdf" target="_blank">Fusion de segmentation et classification automatique dimages sonar, EGC 2010</a></li>
</ul>
</div>
Finally, here are various links where my name was mentioned. They deal with a personal project managed with friends during the engineering cursus.
<ul>
<li><a title="Ouest_France" href="http://www.ouest-france.fr/actu/actuLocale_-Nouveau-logiciel-de-tri-postal-pour-l-Esat-_-1299976------29019-aud_actu.Htm" target="_blank">Ouest France Mars 2010 Nouveau logiciel de tri postal pour lEsat</a></li>
<li><a title="Courrier_Cadres" href="http://dl.dropbox.com/u/4286043/00_Website/02_Articles/Courrier_Cadres.pdf" target="_blank">Courrier Cadres Juin 2011 Les Secteurs qui recrutent</a></li>
<li><a title="Deviens_Ingenieur" href="http://www.deviensingenieur.fr/07243663/0/fiche___pagelibre/%26RH=1263900174129%26RF=1263907205390" target="_blank">Deviensingenieur.fr Lingénieur est le quotidien</a></li>
<li><a title="l_Express" href="http://lexpansion.lexpress.fr/carriere/cinq-secteurs-en-grande-forme_251835.html" target="_blank">LExpress Avril 2011 Cinq secteurs en grande forme</a></li>
</ul>
As knowledge is meant to be <strong>shared</strong>, I would enjoy to give you some more information about my previous projects.
So <strong>feel free</strong> to ask for more information, and <a title="Mail_Me" href="mailto:julien@lengrandlambert.fr" target="_blank">let me know</a> about your opportunities!
<strong>Julien</strong>

View File

@@ -0,0 +1,16 @@
---
layout: nav_menu_item
status: publish
published: true
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 17
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=17
date: 2011-10-17 13:44:22.000000000 +02:00
categories: []
tags: []
comments: []
---
You are now in the professional part of my website. Here you will learn a bit more about my Job. I am an Image Processing Engineer, and my daily work is to design algorithms based on Computer Vision. Most of my previous experiences have taken place in the sonar world; and especially in automatic mine hunting techniques. Today, I work with smart cameras in which hardware essources are very limited. I deal with low footprint developments, algorithms optimization and embedded electronics. You can find my Resume both in French and English right here : English Resume French Resume Some of the projects of my previous experiences have led to publications. You can find copies here : Sonar images segmentation and classification fusion, ECUA 2010 Automatic target recognition in synthetic aperture sonar images for autonomous mine hunting, ECUA 2010 Fusion de segmentation et classification automatique dimages sonar, EGC 2010 Finally, here are various links where my name was mentioned. They deal with a personal project managed with friends during the engineering cursus. Ouest France Mars 2010 Nouveau logiciel de tri postal pour lEsat Courrier Cadres Juin 2011 Les Secteurs qui recrutent Deviensingenieur.fr Lingénieur est le quotidien LExpress Avril 2011…

View File

@@ -0,0 +1,16 @@
---
layout: nav_menu_item
status: publish
published: true
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 18
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=18
date: 2011-10-17 13:44:22.000000000 +02:00
categories: []
tags: []
comments: []
---
I am Julien Lengrand-Lambert, a french 23 year old guy living in France. After some time hanging around with a Flickr, a blogger, a local server, . . . I finally acquired my own domain name. I am lucky enough (unlucky some might say? ) to have a family name complex enough for the domain still to be available :) This website aims at regrouping in one place most of my online identity. I am an Image Processing Engineer, and you will find professional stuff in the Job section . My hobbies are diverse from photography to software programming, often Computer Vision related. You can find my personal projects on my github account .. And as the aim of knowledge is to be shared, I keep track of my programming tips and use my blog to share information. On a wider world, I am a Linux lover for 5 years now, running Crunchbang and ArchLinux on a daily basis. I climb and boulder twice a week for some years, and listen to all kind of music (from death metal to hardcore music :P ). Feel free to join my network, and spend some time to visit my contacts, theyre worth it! C U ! JulienCet article est à traduire en français. Mais vous pouvez…

View File

@@ -0,0 +1,18 @@
---
layout: nav_menu_item
status: publish
published: true
title: Home page
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
excerpt: Home page
wordpress_id: 16
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=16
date: 2011-10-17 13:44:22.000000000 +02:00
categories: []
tags: []
comments: []
---

View File

@@ -0,0 +1,88 @@
---
layout: page
status: publish
published: true
title: About me
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 10
wordpress_url: http://www.lengrandlambert.fr/wordpress/?page_id=10
date: 2011-10-17 13:13:28.000000000 +02:00
categories: []
tags: []
comments:
- id: 1058
author: Design, Innovation and Hacking in a couch | loup2fu
author_email: ''
author_url: http://www.lengrand.fr/2012/05/design-innovation-and-hacking-in-a-couch/
date: !binary |-
MjAxMi0wNS0yOSAwOToyMzo0MCArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAwODoyMzo0MCArMDIwMA==
content: ! '[...] About me [...]'
- id: 7305
author: Ivor Diosi
author_email: ivor.diosi@gmail.com
author_url: ''
date: !binary |-
MjAxMy0wNC0wMSAwODozMzo1NSArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNC0wMSAwNzozMzo1NSArMDIwMA==
content: ! "Dear Julien,\r\n\r\nI've stumbled upon your beautiful website and I
am wondering how to get in touch.\r\nI am looking for a CV collaborator, please
respond so I can tell you more.\r\n\r\nThank you very much.\r\n\r\nIvor Diosi"
- id: 8423
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0wNC0xMSAwOToyODo0MCArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNC0xMSAwODoyODo0MCArMDIwMA==
content: ! "Hey Ivor, \r\n\r\nI just sent you an email :)."
- id: 17325
author: Yukti Suri
author_email: yukti.buzz@gmail.com
author_url: ''
date: !binary |-
MjAxMy0wOS0xMSAxNzoyNDoyNyArMDIwMA==
date_gmt: !binary |-
MjAxMy0wOS0xMSAxNjoyNDoyNyArMDIwMA==
content: ! "Hello Julien,\r\n\r\nI have recently finished my Masters in Computer
Vision and Robotics and I am looking for a research oriented software development
job in Image Processing and Computer Vision. I stumbled upon your website and
found your list of relevant companies. I am now looking into the list and would
be applying in most. Your list looks great and I would like to thank you for sharing
it.\r\nOn the other hand if you can give me any other advise or contacts in this
regard, than I would be really thankful.\r\nCheers,\r\nYukti"
- id: 17521
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0wOS0xNyAwNzo1MTo1NyArMDIwMA==
date_gmt: !binary |-
MjAxMy0wOS0xNyAwNjo1MTo1NyArMDIwMA==
content: ! "Hey Yukti, \n\nThanks for the kind words!\nI hope you find what you
search for in the list. \n\nLet me know if you find other companies I should add.
\n\nCheers, \nJulien"
---
<div class="mceTemp"><dl class="wp-caption alignright" style="width: 310px;"><dt><a href="http://www.lengrand.fr/wp-content/uploads/2011/12/avatar1.jpg"><img title="Avatar_full_res" src="http://www.lengrand.fr/wp-content/uploads/2011/12/avatar1-300x200.jpg" alt="my avatar" width="300" height="200" /></a></dt></dl></div>
I am <strong>Julien Lengrand-Lambert</strong>, a french 24 year old guy living in Utrecht, the Netherlands.
After some time hanging around with a Flickr, a blogger, a local server, . . . I finally acquired my own domain name. I am lucky enough (unlucky some might say? ) to have a family name complex enough for the domain still to be available :)
This website aims at regrouping in one place most of my online identity.
I am an <strong>Image Processing Engineer</strong>, and you will find professional stuff in the <strong><a title="Job Space" href="http://www.lengrand.fr/job-space/">Job section</a></strong> .
My hobbies are diverse from photography to software programming, often Computer Vision related. You can find my <strong>personal projects</strong> on my <strong><a href="https://github.com/jlengrand">github account</a></strong> ..
And as the aim of knowledge is to be shared, I keep track of my <strong><a href="http://lengrand.fr/progTips.html">programming tips</a></strong> and use my <strong><a title="my blog" href="http://lengrand.fr/" target="_blank">blog</a></strong> to share information.
On a wider world, I am a <strong>Linux lover</strong> for 5 years now, running Crunchbang and ArchLinux on a daily basis. I climb and boulder twice a week for some years, and listen to all kind of music (from death metal to hardcore music :P ).
<strong>Feel free to join my <a title="linkedin" href="http://nl.linkedin.com/pub/julien-lengrand-lambert/14/660/551/en" target="_blank">network</a></strong>, and spend some time to visit my contacts, they're worth it!
<strong>C U !</strong>
<strong>Julien</strong>

View File

@@ -0,0 +1,91 @@
---
layout: post
status: publish
published: true
title: Activate numpad on startup
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 29
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=29
date: 2011-10-18 13:14:24.000000000 +02:00
categories:
- tips
tags:
- numpad
- startup
- activate
comments:
- id: 7643
author: elchusco
author_email: elchusco12du63@gmail.com
author_url: ''
date: !binary |-
MjAxMy0wNC0wNCAxMzowNDoxNyArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNC0wNCAxMjowNDoxNyArMDIwMA==
content: ! "Hi!\r\nI know this is an old post but i noticed that today, april 2013,
the command numlock isn't included inthe numlockx package. So I used the numlockx
cmd in the autostart SH script. I don't know if it was a mistake, but i'd like
to correct it. \r\nHowever, thanks for this tips..."
- id: 8422
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0wNC0xMSAwOToyNTo0MSArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNC0xMSAwODoyNTo0MSArMDIwMA==
content: ! "hey, \r\n\r\nThanks for letting me know. \r\nI'll check that next time
I boot my Linux machine :). \r\n\r\nWhich distro are you running on ?"
- id: 10188
author: Fabian
author_email: hello@fabianpeter.de
author_url: http://fabianpeter.de
date: !binary |-
MjAxMy0wNS0wNyAwODoxNjoxOSArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNS0wNyAwNzoxNjoxOSArMDIwMA==
content: Just tried this. After installing "numlockx", the correct command on Crunchbang
(debian wheezy) is "numlockx on/off/toggle" :)
- id: 10417
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0wNS0xMCAxOToxNDowMSArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNS0xMCAxODoxNDowMSArMDIwMA==
content: ! "Hey!\r\n\r\nThanks for the feedback. It is more than likely that you´re
right, this post is old and I haven´t used Linux in while!\r\n\r\nI´ll check that
on my next install :)"
---
Hi all,
I recently switched from Ubuntu to Crunchbang as main distribution for my home computer and I may even talk a bit more about it in a later post ;)
The main topic here is that my num pad wad not activated by default on boot, and I had to tap Verr. Num on each login. My password  having numbers, it quickly became quite boring . . .
Running Ubuntu, the solution was quite simple  : installing the numlockx package from the main repository.
Gaving Debian now, I tried the same :
[bash]
$sudo apt-get install numlockx
[/bash]
The package did install actually, but seems like it was not enough. . .
To run on startup, this module had to be added to the list of apps to be started <strong>after</strong> the X server .
On my Openbox based Crunchbang, the solution was to edit my autostart.sh to add a new line :
[bash]
$ echo &quot;(sleep 5s &amp;&amp; numlock) &amp;&quot; \
&gt;&gt; ~/.config/openbox/autostart.sh
[/bash]
<div>That's all !</div>
<div>CU</div>
<div><strong>Julien</strong></div>

View File

@@ -0,0 +1,51 @@
---
layout: post
status: publish
published: true
title: Converting a flv file to avi
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 31
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=31
date: 2011-10-18 13:16:00.000000000 +02:00
categories:
- tips
tags:
- flv
- avi
comments: []
---
<em>This article was originally written on 1st July, 2010 in my previous blog.</em>
When working on slide presentations, it might be useful to insert one or two small videso that illustrates your words.
Most of my videso come from media websites, such as youtube, dailymotion, . . ..
Problem is, some of the compression formats are not quite usual and it might be difficult to read them easily.
Here is a small tip to convert a flv file to avi, which is mainly supported on all OSes.
This tip is useful for Linux users only ;)
First of all, install the <strong>ffmpeg</strong> package. All debian based distros can do the following. For the others, look at your package manager possibilities, or check for <a href="http://ffmpeg.org/download.html">sources</a>.
[bash]
$ sudo apt-get install ffmpeg
[/bash]
Now, convert the video, replacing the argument to fit with your flv file.
[bash]
$ ffmpeg -o /your/flv/file.flv -vcodec mpeg1-video \
-acodec copy -ar 44100 -s 320x240 -y /your/avi/file.avi
[/bash]
For more information, check at <a href="http://pwet.fr/man/linux/commandes/ffmpeg">ffmpeg man page</a> ;)
&nbsp;
C U ;)
<strong>Julien</strong>

View File

@@ -0,0 +1,36 @@
---
layout: post
status: publish
published: true
title: First message!
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 25
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=25
date: 2011-10-18 13:11:56.000000000 +02:00
categories:
- misc
tags:
- welcome
- first message
comments: []
---
<strong>Here it is!</strong>
After some time hanging around with a Flickr, a blogger, a local server, . . . I finally bought myself <a title="my domain name" href="http://www.lengrand.fr/" target="_blank">my own domain name</a>.
I am lucky enough (unlucky some might say? ) to have a family name complex enough for the domain still to be free. Seems like none of my family members felt like having his website.
Why am I writing right here?
There are two major reasons :
<ul>
<li>I am a software engineer, with absolutely no background into web programming. I was searching for a new night playground, and I found it :).</li>
<li>As everyone, I have an online identity, created with the posts and websites I am active in. I was getting bored to stay attached to those 'close worlds' that community publishing tools are. I wanted to be able to set up my own website, from scratch and without too much guidelines. This domain name is an opportunity to put most of my publications on the net in only one place.</li>
</ul>
So be it.
For now, there are only two main active parts of the site : <a title="gallery" href="http://www.fluidr.com/photos/49365498@N03/sets" target="_blank">my photo gallery</a>, and this blog which is aimed at being kind of 'technical'.
I say technical in the way that I will publish here some tips and hints I searched for as a software developer and Linux user. I simply hope that some of those tips can help someone else.
As an information, the content of my old websites will in some time be dragged back in here.
<strong>Julien</strong>

View File

@@ -0,0 +1,64 @@
---
layout: post
status: publish
published: true
title: Synchronize config files between computers
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 33
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=33
date: 2011-10-18 13:17:55.000000000 +02:00
categories:
- tips
tags:
- windows
- dropbox
- synchronize
- backup
- config
comments: []
---
Hi all,
Today, a small hint for Linux users having <strong>DropBox</strong> running on their computer. I guess everyone knows what DropBox is. . .
If not, feel free to have a look <a href="https://www.dropbox.com/referrals/NTQyODYwNDM5?src=global9">there</a> (and win 250 more mos for me and you at the same time). In one word, DB allows to have a folder of your computer on the cloud. This way, you have access to you important files, wherever you are.
Most of us now have multiple computers (at work, at home, laptop, . . . ). All of them are configured, and often have similar configurations. And you know how important those files are  in order to feel weel and have his feets on a Linux distribution.
I am used to tune my configuration files, such as my .bashrc and so. And it is quite painful to find an alias one day and have to search for it the day after on another computer.
DropBox offers a simple solution to this problem, as with <strong>symbolic links</strong> we can keep trace of our different configuration files live.
Here is the way to do it:
Create a new folder in your DropBox repo :
[bash]
$ mkdir DropBoxRepo/laptopConfig
[/bash]
Move in it and create simlinks to each config file you want to backup (for example your .bashrc):
[bash]
$cd DropBoxRepo/laptopConfig; ln -s ~/.bashrc .bashrc
[/bash]
Voilà!
Now, you have access to a copy of your bashrc <strong>wherever you go</strong>, and may use it to tune another computer. And it works even with entire folders (like your ~/bin)
In case all you computer have the exact same configuration files, you might do the other way around, and use your DropBox folder as basis for your config files :
[bash]
$cd ~; ln -s  DropBoxRepo/Config/.bashrc .bashrc
[/bash]
Be careful however, because modifications will have to be done in the DropBox folder now. And updates will only take place after your DropBox synchronization. <strong>So avoid dangerous ideas</strong>, such as synchronizing your /etc/fstab :D
&nbsp;
That's all for today,
<strong>C U</strong>

View File

@@ -0,0 +1,18 @@
---
layout: nav_menu_item
status: publish
published: true
title: Small pieces of my world
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
excerpt: Small pieces of my world
wordpress_id: 176
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=176
date: 2011-10-23 16:23:13.000000000 +02:00
categories: []
tags: []
comments: []
---

View File

@@ -0,0 +1,31 @@
---
layout: post
status: publish
published: true
title: My pics on DeviantArt
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 198
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=198
date: 2011-10-24 00:14:52.000000000 +02:00
categories:
- misc
tags:
- gallery
- piwigo
- deviantart
comments: []
---
Hi all,
I dropped my locally stored gallery (based on Piwigo) and jumped to DeviantArt.
Piwigo was a bit too complex for me. What I really wanted was simply a gallery of my favorite pictures. So here we go!
You can find my photos <a title="DA" href="http://jlengrand.deviantart.com/" target="_blank">in here</a> now.
Bye !
<strong>EDIT : My pics are also available <a title="my pics on Fluidr" href="http://www.fluidr.com/photos/49365498@N03/sets" target="_blank">on Fluidr</a> !</strong>

View File

@@ -0,0 +1,296 @@
---
layout: post
status: publish
published: true
title: Why I don't use adBlocker and co
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 200
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=200
date: 2011-10-25 09:18:43.000000000 +02:00
categories:
- misc
tags:
- adblocker
- web
- chrome
- firefox
comments:
- id: 26
author: James
author_email: treasonx@gmail.com
author_url: ''
date: !binary |-
MjAxMS0xMi0wMiAxMzoxMDo0OSArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0wMiAxMjoxMDo0OSArMDEwMA==
content: ! "I feel the same way. I will actually make it a point to click on ads
for some of my favorite sites. In gmail I click an ad at least once a day. Just
want to show my support for the great free content and apps on the internet!\r\n\r\nThat
being said I do hate the ads which take over an entire site with a tiny \"click
here to skip\" button. Those are the worst and most of the time least interesting
ads for me to look at. Also preroll on youtube or any other video site is horrible,
usually on a video site I want a quick chuckle and then move along. Sometimes
if a short video has a preroll I will just leave the page (Fail blog does this
alot and its not worth waiting). Sometimes the preroll ads are longer than the
video! I find the best ads a subtle targeted ads. I really dont mind ads that
take my search or even the topic of the site into consideration."
- id: 27
author: Simon Bartlett
author_email: simon.bartlett@me.com
author_url: http://simonbartlett.co.uk
date: !binary |-
MjAxMS0xMi0wMiAxMzoxMjoxMSArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0wMiAxMjoxMjoxMSArMDEwMA==
content: I have no problem with advertisements, but I do have a problem with advertisement
agencies and other organisations that track my online activity. Until there's
such a day when those organisations respect my privacy, I will continue to use
AdBlock.
- id: 28
author: Andre
author_email: andre@email.com
author_url: ''
date: !binary |-
MjAxMS0xMi0wMiAxMzoyNjoxOCArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0wMiAxMjoyNjoxOCArMDEwMA==
content: ! "I think the biggest problem isn't the ad itself, but the ad networks
that track the user without any respect.\r\n\r\nMaybe instead of using an less
intrusive Ad Network, one that shows ads based on your content not the past visits
of the user.\r\n\r\nThe first ads networks worked that way, but they realized
that could track all navigation from the user to increase revenue for everybody."
- id: 29
author: Andre
author_email: andre@email.com
author_url: ''
date: !binary |-
MjAxMS0xMi0wMiAxMzoyNzozNSArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0wMiAxMjoyNzozNSArMDEwMA==
content: ! "\"Maybe instead of using an less intrusive Ad Network, one that shows
ads based on your content not the past visits of the user.\"\r\n\r\nshould be
read\r\n\r\nMaybe using an less intrusive Ad Network, one that shows ads based
on your content not the past visits of the user."
- id: 30
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMS0xMi0wMiAxMzo1Nzo0NSArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0wMiAxMjo1Nzo0NSArMDEwMA==
content: ! "Those ads on videos are the worst advertising method I've ever seen
actually :s .\r\nI simply hate those, as it forces you to lose time waiting for
your content. \r\n\r\nI stopped watching TV some years ago because of ads, I hope
I won't have to do the same with Youtube and co :s.\r\nWhat I can say for sure
however, is that it is pretty useful for people posting videos and having some
audience. I got friends almost living only by creating such videos."
- id: 31
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMS0xMi0wMiAxNDowMDoxNiArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0wMiAxMzowMDoxNiArMDEwMA==
content: ! "But somehow, don't you prefer being attacked with ads that suit your
needs? This can have some advantages. \r\n\r\nThose information about you people
are connecting (may/can) allow them to create better content for you, isn't it?
\r\nThe google reader is a good example, I do like the \"related\" feeds It gives
me."
- id: 32
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMS0xMi0wMiAxNDowNDo0NSArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0wMiAxMzowNDo0NSArMDEwMA==
content: ! "I don't really see your point : \"one that shows ads based on your content
not the past visits of the user.\"\r\n\r\nCould you develop this a little bit?"
- id: 33
author: 1Percenter
author_email: 1percenter@occupyeverything.com
author_url: ''
date: !binary |-
MjAxMS0xMi0wMiAxNDoyMjozOCArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0wMiAxMzoyMjozOCArMDEwMA==
content: ! "Ok, here's the truth. I use AdBlock, NoScript, and FlashBlock. Why?
\ Because there are enough lemmings out there to click on ads and allow the aggressive
pop-up ads show up on their screen. If marketers wouldn't be so damn aggressive
and have pop-ups every time you hover over a word or have those ads that take
up 1/4 of your screen and you have to search and search for the \"close\" or
\"x\" to get rid of it, and even then I'm scared that clicking \"close\" is going
to cause another pop-up to occur.\r\nAlso, I agree that the tracking features
these companies place in their ads does upset me. It's as though everything is
a default \"opt-out\" policy for just opening a web page. Unfortunately there
is no opt-out selection, so you have to perform your own and use tools such as
AdBlock, NoScript, etc...\r\nIn closing, like I stated at the beginning, there
are enough clickers out there that they'll allow these ads and pop-ups to occur
on their browser that my avoid them will most likely not have effect on that websites
bottom line. So, click away grandmas and non-educated webbies. I thank you"
- id: 34
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMS0xMi0wMiAxNDozMzo1MSArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0wMiAxMzozMzo1MSArMDEwMA==
content: ! "And don't you think that in some way this is especially thanks to guys
like you that ads take more and more place on our screens? \r\n\r\nThere are surely
lots of websites that use the data they can grab with absolutely no respect. A
good example? The growing number of websites with \"buzz\" videos with \"ROFL,
JustinBieber killed by a cat\" or \"OMFG! Spider in his head\" that will force
you to post on your Facebook wall. . .\r\nBut as I said, those websites are generally
low added value, so you'd be better avoiding them anyway."
- id: 35
author: 1Percenter
author_email: 1percenter@occupyeverything.com
author_url: ''
date: !binary |-
MjAxMS0xMi0wMiAxNDo0ODowOCArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0wMiAxMzo0ODowOCArMDEwMA==
content: ! "There's no proof one way or the other. So saying that \"dont you
think that in some way this is especially thanks to guys like you that ads take
more and more place on our screens\" is unsupported. I don't know and I doubt
you know, so right now you and I are assuming two different sides of the coin.\r\n\r\nI
would tend to slant to marketers being more aggressive than thinking they are
saying \"OMG, these guys are blocking ads, lets make them bigger and that will
get more attention and we'll make more money.\" It's not just the B-rated sites
that do the aggressive marketing. Techtarget sites and others use \"in your face\"
type ads, I see them when I use a non-FF browser and then I remember why I hate
ads. I don't click on ads, period. I'm a technical person, I just want the information,
period. I came there for an article and do not want to be assaulted with ads.
\ So for now it's a cat and mouse game. I for one welcome the challenge. \r\n\r\nQuestion
- what is the difference between a person that never clicks on links, therefore
doesn't \"support\" the site owner by giving them ad revenue and a person that
opts-out and uses blocking software? One seems automated and the other seems
to be more self-controlled."
- id: 36
author: commonsurfer
author_email: wahoo@gmail.com
author_url: ''
date: !binary |-
MjAxMS0xMi0wMiAxNzowODo0MyArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0wMiAxNjowODo0MyArMDEwMA==
content: It is trivial to add your favorite websites to the excluded list in most
adblockers. Why be tracked, risk exploitative ads, slow page loadings on pages
or sites you might stumble through? If you like a site, or want to support it,
add it to the excluded list. Ad blocking doesn't need to be all or nothing.
- id: 41
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMS0xMi0wNCAxOToyNDo1MSArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0wNCAxODoyNDo1MSArMDEwMA==
content: ! "Actually (shame on me), I had never thought about using an abblocker
this way.\r\n\r\nAnd the more I think about it, the more seducing it seems to
me. Because after all, Ads are still useful in a way, and the real problem is
\"ad abuse\".\r\nSo thanks for the idea ^^"
- id: 42
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMS0xMi0wNCAxOTozMDowNSArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0wNCAxODozMDowNSArMDEwMA==
content: ! "You came here for an article, and you have not been assaulted with any
ad ;).\r\n\r\nI agree with you about what you call \"in you face\" ads, and generally
I avoid websites using such methods. \r\nHopefully, some tech websites stay free
of ads (almost at least). And generally, those are the one in which you'll find
good (useful) information. This is one of the reason I love stack overflow or
hacker news for example. \r\n\r\nSorry, but both sides of your question seem alike
for me. That may come from my non-proficiency in English though. Would you develop
a bit more?"
- id: 1062
author: Jonathan
author_email: jayjayhales@gmail.com
author_url: ''
date: !binary |-
MjAxMi0wNS0yOSAxMjowNjozMSArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxMTowNjozMSArMDIwMA==
content: ! "I appreciate your intentions, but clicking on/looking at adds without
buying is not a long term solution. If the advertisers don't make money, they
will pay less and less and the pay walls will appear (assuming you don't buy the
advertised product as you are trying to establish a 'free' experience). \r\n\r\nI
also think you could make an argument *for* ad block once you start taking into
account the necessity of profits for the advertisers. If you know that you won't
be buying adds, then you can minimize the costs for the advertisers by not clicking
or viewing (depending on the pay system) their adds. \r\n\r\nAdvertiser profits
are important as if they feel they are getting low returns for adds on your favorite
site they will start to pay less and the site will be incentivized to increase
the # and/or aggressive nature of the ads to retain the revenue stream or put
up the hated paywalls."
- id: 1082
author: Hal
author_email: hal68000@gmail.com
author_url: ''
date: !binary |-
MjAxMi0wNS0yOSAyMjowNjo0NyArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAyMTowNjo0NyArMDIwMA==
content: I usually whitelist sites I enjoy and want to support, unless they start
using obnoxious advertisements, like ones that actually play audio when the page
first loads ("CONGRATULATIONS! YOU'RE A WINNER!"), or have porn in them (e.g.
banner ads on certain imageboards)
- id: 1092
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wNS0zMCAxMToyMDoxNCArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0zMCAxMDoyMDoxNCArMDIwMA==
content: Well, these websites are usually low quality anyway; aren't they ?
- id: 1093
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wNS0zMCAxMToyMTozMSArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0zMCAxMDoyMTozMSArMDIwMA==
content: I agree with you, and think this is becoming more and more true. Since
I wrote this article, I have seen the ad effect worsen (look at youtube); probably
especially because the CPC is dropping.
---
Like most of you I guess, I always got my browser opened on my desktop, the number of tabs depending on whether I am at home or at work.
Lots of people see my screen and say : OMG! What are all those ugly ads!? Install <strong><a title="AdBlocker" href="https://chrome.google.com/webstore/detail/gighmmpiobklfepjocnamgkkbiglidom" target="_blank">AdBlocker</a></strong> so you won't have to see them any more.
No, I won't use AdBlocker . . . and it's a <strong>CHOICE</strong>.
The reason? I don't want my favorites websites to swith to paid contents!
Anyone having a website (and some traffic :) ) knows that hosting costs<strong> lots of money</strong>! Data hosting, Electricity, Domain name . . . without including the hours of work in writing, reviewing, translating and updating articles that are mandatory to keep quality of content.
Advertisment is a simple (the simplest?) way for admins to reduce those costs.
If everybody blocks adverts on its browser, it is likely that brands finally tend to stop using this way of promotion.
So, several ways would be left for websites owners to get some cash back :
<ul>
<li><strong>Keep paying</strong> for the service, without any help (Ouch!)</li>
<li><strong>Ask for volontary support</strong>. <strong><a title="LegTux" href="http://www.legtux.org/" target="_blank">LegTux</a></strong> has chosen this type of solution for some time. And as perfect as the idea might be, the last time I heard about him he was still losing money with his service.</li>
<li><strong>Switch to paid contents</strong>. The worst solution in my opinion, as it closes the content to most of the web and lots of quality content would be lost. In addition, this solution might dramatically reduce the traffic of the website.</li>
<li>Using<strong> free hosting solutions</strong> and often loose flexibility, personal domain name, ergonomy that paid hosting offer. . .</li>
</ul>
The same idea could be applied to lost of <strong>smartphone games</strong> and applications. which display ads while you use them.
There is however a major difference, most of those applications offer to remove ads in supporting them. I love this kind of solutions as people get the choice to pay for an app they love, or not.
I wonder if this kind of solution could be used on websites. . .
Stays the problem of websites that completely abuse of ads. It happens to be attacked by 24 flashing pop ups and wins 3 golden ferraris whenever you connect yourself. The solution for them is quite simple, just avoid them. And don't come back ! Hopefully, the admin will quickly see the drop in its stats and think about it...
And for the most generous one, don't forget to click on some ads of your favorite website and enjoy supporting them this way :)
<strong>Would you personally be ready to pay</strong> some fees a month to get rid of ads on your favorite website?
I would really enjoy you personal mind on that !

View File

@@ -0,0 +1,48 @@
---
layout: post
status: publish
published: true
title: Keysonic keyboard and Linux problems
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 229
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=229
date: 2011-10-27 13:34:51.000000000 +02:00
categories:
- misc
tags:
- keysonic
- KSX-6001
- keyboard
- ubuntu
comments: []
---
After having moved to my new flat last year, I bought a new computer to replace the old laptop I kept during my studies. And to fit with my neon tubes I chose a blue backlight keybord from Keysonic, the <a href="http://www.maxpoint.de/de/products/keyboards.php?pid=1_3_7&amp;we_objectID=1219">KSX-6001</a> .
Running Windows, no problem. The keyboard is just what I wanted, allowing fast typing with its rough keys. I am really happy with it.
But running Linux, impossible to get the keyboard working. . . I could use it during the <strong>Grub</strong> and it was correctly detected by <strong>lsusb</strong>, but impossible to use it after loading the <strong>kernel</strong>.
I mailed the customer service from Keysonic and got an answer the very day after :
The keyboard embeds a "gaming mode" that is designed to forbid ghost keys. And this mode it not functional on UNIX systems, it has to be deactivated on startup.
<div id="post-body-7296359531860754180">
<ul>
<li>Deactivation : <strong>ctrl+alt+shift+n</strong></li>
<li>Activation : <strong>ctrl+alt+shift+g</strong></li>
</ul>
<h2>Conclusion :</h2>
<ul>
<li>This Keysonic keyboard is simply awesome. It allows fast typing while being quite cheap (less than 20 euros). Huge bonus : Customer service is nice and reactive.</li>
<li>I got a free bonus <strong>security mode</strong> for my computer :D. It was not expected, but strangers won't be able to use my keyboard without knowing the tip :D</li>
</ul>
This is really awesome :p
&nbsp;
See ya ;)
</div>

View File

@@ -0,0 +1,59 @@
---
layout: post
status: publish
published: true
title: ! 'OpenCV : ''rect'' expects four integers'
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 207
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=207
date: 2011-10-27 09:48:25.000000000 +02:00
categories:
- programming
- OpenCV
- Computer Vision
- Python
tags:
- windows
- image processing
comments: []
---
You may encounter this error when using <a title="opencv" href="http://opencv.willowgarage.com/wiki/" target="_blank">OpenCV</a> with <strong>Python bindings, </strong>while trying to use the rectangle structure.
Here is an example :
[python]
#!/usr/bin/env python
import cv
img = cv.LoadImage(&quot;test.jpg&quot;)
dims = cv.GetSize(img)
roi = [0, 0, dims[0] / 2, dims[1] / 2 ]
cv.SetImageROI(img, roi)
[/python]
You will get this result:
[python]
Traceback (most recent call last):
File &quot;newfile.py&quot;, line 8, in &lt;module&gt;
cv.SetImageROI(img, roi)
TypeError: CvRect argument 'rect' expects four integers
[/python]
The answer is pretty simple, you have to set rect as a <strong>tuple </strong>and not a list<strong>:</strong>
[python]
roi = (0, 0, dims[0] / 2, dims[1] / 2 )
[/python]
There it is, pretty simple, isn't?!
I still lost 15 minuts searching for it yesterday ^^, won't do it twice :D
A small <strong>warning</strong> however, the values of the tuple <strong>can't be changed</strong> once initialized !
See ya

View File

@@ -0,0 +1,28 @@
---
layout: post
status: publish
published: true
title: ! 'ARM optimized Computer Vision Library (Android) '
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 240
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=240
date: 2011-10-28 09:14:08.000000000 +02:00
categories:
- Computer Vision
tags:
- image processing
- ARM
- qualcomm
- android
comments: []
---
Qualcomm just released a SDK for Computer Vision development on Android platforms.
I'll definitely have to check this out!    <a title="http://goo.gl/WZEdL" href="http://t.co/cUuJH9vD" rel="nofollow" target="_blank" data-expanded-url="http://goo.gl/WZEdL" data-display-url="goo.gl/WZEdL">http://goo.gl/WZEdL</a>
Will it overcome OpenCV for the same job?
Let's see it :)

View File

@@ -0,0 +1,47 @@
---
layout: post
status: publish
published: true
title: ! 'Pombo : How to get your stolen computer back!'
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 231
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=231
date: 2011-10-28 13:16:33.000000000 +02:00
categories:
- tips
tags:
- windows
- mob
- pombo
- mobileme
- screeshare
- steal
- tracking
comments: []
---
Hi all,
A small article today to let you know about a <a href="http://sebsauvage.net/pombo/index.fr.html"><strong>Pombo</strong></a>, in case you wouldn't know about yet.
Pombo is a "magic app" ,that might be compared to the <strong>screenshare</strong> option of the mac <strong>mobileme</strong> service.
<h3></h3>
Basically, <a href="http://sebsauvage.net/pombo/index.fr.html"><strong>Pombo</strong></a> is a deamon that will be started automatically on your computer. It will automatically grab and store several data such as screenshots, gps track, IP addresses, ....
Then, it compresses and uploads them automatically to whatever <strong>web server</strong> you want.
In case your computer is <strong>stolen</strong>, it is then easy to get information back as soon as your stealer switch the computer on.
&nbsp;
Pretty handy for laptops, or computers containing critical informations!
The only con of this application in my mind is that you have to let a deamon run in background of your computer at startup.
Now, you only have to hope that the stealer will <strong>startup</strong> the computer at least once, and not directly erase the content of the disk :s.
&nbsp;
<strong><a title="pombo" href="http://sebsauvage.net/pombo/index.fr.html">Try it</a></strong> and let me know about your opinion!

View File

@@ -0,0 +1,92 @@
---
layout: post
status: publish
published: true
title: ! 'Classification : Hu and Zernike moments'
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 254
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=254
date: 2011-11-02 00:51:12.000000000 +01:00
categories:
- Computer Vision
- Matlab
tags:
- image processing
- hu
- zernike
- moments
- matlab
- classification
comments:
- id: 750
author: Deniz Cicek
author_email: zendeniz1@yahoo.com
author_url: ''
date: !binary |-
MjAxMi0wMy0zMSAxMjowNjo0NiArMDIwMA==
date_gmt: !binary |-
MjAxMi0wMy0zMSAxMTowNjo0NiArMDIwMA==
content: Thanks. The links those you shared, will help me very much. Have a nice
day.
- id: 755
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wNC0wMiAwODowNzowOCArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNC0wMiAwNzowNzowOCArMDIwMA==
content: ! "Hi Deniz, \r\n\r\nGlad it helped ;), I searched for them a long time
some years ago.\r\nFeel free to come back if you need some code using them :)."
- id: 974
author: Mohammad
author_email: bagheri@cs.dal.ca
author_url: ''
date: !binary |-
MjAxMi0wNS0xMyAxODo0NzoyNSArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0xMyAxNzo0NzoyNSArMDIwMA==
content: ! "First, thank you so much for your post... But, regarding the Zernike
code, I didn't understand how to get it, how to implement it ! \r\nDoes I need
to download Matlab and C++ files separately and put them in a folder and then
mex C files?\r\nThanks again"
- id: 1011
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wNS0yMSAxMzowNzoyNSArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yMSAxMjowNzoyNSArMDIwMA==
content: ! "Hi Mohammad, \r\n\r\nSorry for the delay, I was in vacation. Did you
succeed into using it ? \r\n\r\nI posted this code some time ago now, but I do
recall having to compile it. \r\nIt seems weird for me to download each file separately
though. \r\n\r\nLet me some time and I will try it and let you know :)"
---
Hi all,
I am currently working on a <strong>Computer Vision</strong> application which requires a step of <strong>shape recognition</strong>. And I have been searching for lots of different parameters allowing to precisely classify objects afterwards.
In a lot of applications, one need parameters that are invariant to <strong><a title="linear transformation" href="http://en.wikipedia.org/wiki/Linear_map" target="_blank">linear transformations</a></strong> (that is translation, rotation and scaling) to ease object <strong>classification</strong> in various conditions.
If you search for such parameters, you will quickly hear the name of <strong><a title="zernike moments" href="http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/SHUTLER3/node11.html" target="_blank">Zernicke</a></strong> and <strong><a title="hu" href="http://en.wikipedia.org/wiki/Image_moment" target="_blank">Hu</a> </strong>moments.  Here are links to a <strong>Matlab</strong> implementation of those descriptors:
<ul>
<li><strong><a href="http://murphylab.web.cmu.edu/publications/boland/thesis_all.html" target="_blank">Zernike</a></strong> applied to protein localization</li>
<li><strong><a href="http://www.cc.gatech.edu/~kwatra/computer_vision/ocr/OCR.html" target="_blank">Hu</a> </strong>applied to <a title="ocr" href="http://en.wikipedia.org/wiki/Optical_character_recognition" target="_blank">OCR</a></li>
</ul>
<div id="post-body-5906015610342128589">
Have fun using it, but don't forget to mention their previous authors ;).
And if you need more descriptors in your classification, <a title="visual descriptors" href="http://en.wikipedia.org/wiki/Visual_descriptors" target="_blank"><strong>here is a quite exhaustive list</strong> </a>(at least as much as it can be).
If I have some spare time, I might think of a Pythonic implementation one day ^^. I'll let you know.
Hope you'll enjoy ;)
See You
</div>

View File

@@ -0,0 +1,54 @@
---
layout: post
status: publish
published: true
title: Get the power of Matlab in command line
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 252
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=252
date: 2011-11-08 15:14:34.000000000 +01:00
categories:
- Matlab
tags:
- windows
- matlab
- command line
- bash
comments: []
---
Hi all,
I got a small hint for you if you use <strong><a title="matlab" href="http://www.mathworks.fr/" target="_blank">Matlab</a></strong> on a daily basis but still love your command line!
<h3></h3>
<div id="post-body-872517502060080737">
I am really not a <a title="IDE" href="http://en.wikipedia.org/wiki/Integrated_development_environment" target="_blank">IDE</a> kinda guy and always try to avoid using a huge interface when an editor is enough. Personally,  I haven't found a more powerful tool than the <strong>emacs/terminal</strong> combination yet.
In addition, the Matlab interface is fully coded in Java and is way too much ram-consuming imho. So I decided to get rid of it! Simply run
[matlab]
$ matlab -nojvm -r script //run without implying the jvm
[/matlab]
or
[matlab]
$ matlab -nodisplay -nosplash -nodesktop -r script
[/matlab]
The result is a Matlab command line interface. You will simply have to use your favourite editor to create your scripts, and then run them using the command line.
The plots and figures will be displayed without any problem.
There is a small drawback however for <strong>Windows users</strong> : The <strong>autocompletion</strong> won't be available as it is a <strong>Java feature</strong> under Windows.
No problem under <strong>Linux</strong> (once again :p)!
Here is a screenshot of the result, so that you get the idea :
<a title="Matlab in command line" href="http://www.lengrand.fr/wp-content/uploads/2011/11/matlab_cl.png"><img class="size-large wp-image-263 alignnone" title="matlab in command line" src="http://www.lengrand.fr/wp-content/uploads/2011/11/matlab_cl.png" alt="" /></a>
</div>

View File

@@ -0,0 +1,95 @@
---
layout: post
status: publish
published: true
title: Errors on Linux boot with a Radeon HD
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 274
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=274
date: 2011-11-09 12:29:24.000000000 +01:00
categories:
- misc
tags:
- radeon
- radeon hd
- gem object
- ati
- amd
- debian
- GEM
- GPU
comments:
- id: 102
author: The Don
author_email: lengrand.fr@dontheduck.co.uk
author_url: ''
date: !binary |-
MjAxMS0xMi0xOCAwNjowMDozMiArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0xOCAwNTowMDozMiArMDEwMA==
content: ! "Nice one, thankyou very much.\r\nMy problem was that after installing
CrunchBang, on first boot, I had the same situation, but it kept scrolling the
screen with the error message for more than 5 minutes before I reset the machine.\r\nBooted
in recovery and removed 'plymouth' and the machine then proceeded to the login
screen.\r\nMy card is a Radeon HD 5750\r\n\r\nDonald"
- id: 198
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wMS0zMCAxODoyODoxMCArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMS0zMCAxNzoyODoxMCArMDEwMA==
content: ! "Cool to see that the message helped someone else ;). \n\nStill couldn't
find a good way to get plymouth working though :s."
---
Hi all,
For the past months, I had a huge issue with My <strong>debian</strong> based system.
I got a  Radeon 5770 graphical card and here are some more information:
[bash]
[airballman@crunchbang:~]$ lspci | grep VGA
01:00.0 VGA compatible controller: ATI Technologies Inc Juniper [Radeon HD 5700 Series]
[/bash]
On startup, I would have 15/20 seconds of errors flooding my boot screen.
Here is the Error log, repeated again and again:
[bash]
[drm:radeon_ttm_backend_bind] *ERROR* failed to bind 1 pages at 0x0040F000
[TTM] Couldn't bind backend.
radeon 0000:01:00.0: object_init failed for (4096, 0x00000002)
[drm:radeon_gem_object_create] *ERROR* Failed to allocate GEM object (4096, 2, 4096, -22)
[/bash]
The problem as quite annoying, even causing<strong> graphical startup failures</strong>. . . I searched a lot for a solution and <a title="cr-fr" href="http://crunchbanglinux-fr.org/forum/viewtopic.php?id=1123" target="_blank">asked for some help</a>.
I tried lots of stuff, from installing new free drivers to the proprietary <strong>ati</strong> solution. The latter solved the problem, but caused<strong> mouse freezes</strong>. . .
After a lot of problems, <a title="darth" href="https://plus.google.com/109434034494027454595" target="_blank">DarthWound</a> finally gave my the good way to solve it !
The problem was coming from <strong><a title="plymouth" href="http://en.wikipedia.org/wiki/Plymouth_(software)" target="_blank">Plymouth</a></strong>, and removing it would remove the error :
[bash]
$ sudo apt-get remove plymouth
[/bash]
The con of this method is that you will lose your beautiful startup image. . .
Let me know if you find a better solution !
You may see the effect on my screen here :
<strong><a href="http://www.youtube.com/watch?v=btXGpa-pqGM">Gem Object problems on boot </a></strong>
<strong>C U </strong>

View File

@@ -0,0 +1,34 @@
---
layout: post
status: publish
published: true
title: ! 'Cool Computer Vision project : Shredded documents'
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 285
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=285
date: 2011-11-10 14:38:42.000000000 +01:00
categories:
- Computer Vision
tags:
- image processing
- darpa
- shredded documents
- challenge
comments: []
---
Hi all,
Today I just wanted you to know about the <strong><a href="http://www.shredderchallenge.com/">DARPA Shredder Challenge</a></strong>.
This challenge aims at <strong>reconstructing shredded documents</strong>, and the contest run till the 5th December.
You may use whatever technique you want to reconstruct the original message, but of course<strong> Image Processing algorithms</strong> are greatly favorized !
There are 5 levels in the challenge, growing more and more difficult. Unfortunately, the <strong>50,000$ price</strong> is only available to US citizens. . . But the real fuel is the challenge, isn't it?
And you, would you try to solve some of the puzzles? Let me know about your ideas !
I know this issue has already been investigated in the past for Stasi documents (see <a href="http://www.schneier.com/blog/archives/2008/01/unshredding_1.html">here</a> and <a href="http://www.iiconservation.org/news/?p=55">here</a>).

View File

@@ -0,0 +1,87 @@
---
layout: post
status: publish
published: true
title: Compiling OpenCV for Linux (Debian)
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 293
wordpress_url: http://wordpress.lengrandlambert.fr/?p=293
date: 2011-11-23 14:00:39.000000000 +01:00
categories:
- OpenCV
tags:
- image processing
- ubuntu
- debian
- compiling
comments: []
---
I am sure that most of you know <strong><a title="OpenCV" href="http://en.wikipedia.org/wiki/OpenCV" target="_blank">OpenCV</a></strong>, the open-source Computer Vision library initially developed by Intel.
Synaptic, the packages manager of all Debian based distributions  do contain opencv packages (namely libcv, libcvaux and libhighgui). But they are seriously outdated (2.1 in Ubuntu 11.10 when the last stable release <a title="opencv_sourceforge" href="http://sourceforge.net/projects/opencvlibrary/" target="_blank">on sourceforge </a>is the 2.3.1a).
If you want to use some new features (such as the new Python bindings in my case), you will have to compile OpenCV by yourself.
An excellent <strong>install guide for Debian</strong> is available on <a title="opencv_wiki" href="http://opencv.willowgarage.com/wiki/InstallGuide%20%3A%20Debian" target="_blank">the OpenCV Wiki</a>. Do not forget to install libgtk2.0 too if you want to use screen display functions later.
<div>[bash]
[jlengrand@ubuntu:~/downloads/OpenCV-2.3.1/release]$sudo apt-get install libgtk2.0-0 libgtk2.0-dev
[/bash]
</div>
But during the compilation, you might encounter the following <strong>error</strong> :
[bash]
...
/home/jlengrand/downloads/OpenCV-2.3.1/modules/highgui/src/cap_libv4l.cpp:1673: error: struct CvCaptureCAM_V4L has no member named memoryBuffer
make[2]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/src/cap_libv4l.o] Error 1
make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2
[/bash]
This error is due to libv4l, which causes problems to openCV. Here is a simple way to get rid of the error :
<ul>
<li><strong>Remove libv4l</strong> for your system.</li>
</ul>
<div><strong>WARNING</strong> : <em>Do not reboot before the end of the operations, or your display will fail to start!</em></div>
<div>[bash]
[jlengrand@ubuntu:~/downloads/OpenCV-2.3.1/release]$ sudo apt-get remove libv4l-dev libv4l-0
The following packages will be REMOVED:
gstreamer0.10-plugins-good libgstfarsight0.10-0 libpurple-bin libpurple0 libv4l-0 libv4l-dev pidgin vlc vlc-nox vlc-plugin-notify vlc-plugin-pulse
0 upgraded, 0 newly installed, 11 to remove and 37 not upgraded.
After this operation, 28.1 MB disk space will be freed.Do you want to continue [Y/n]? Y
[/bash]
</div>
<div>Keep trace of all packages noted for removal, to reinstall them in last step.</div>
<div>
<ul>
<li>Then <strong>finish OpenCV compilation</strong>:</li>
</ul>
<div>
<div>[bash]
[jlengrand@ubuntu:~/downloads/OpenCV-2.3.1/release]$ make
...
[jlengrand@ubuntu:~/downloads/OpenCV-2.3.1/release]$ sudo make install
[/bash]
</div>
</div>
<div>It should compile without error.</div>
<div>
<ul>
<li>Finally, you simply have to<strong> reinstall all previously removed packages</strong> (which depends on your system).</li>
</ul>
<div>
<div>[bash]
[jlengrand@ubuntu:~/downloads/OpenCV-2.3.1/release]$sudo apt-get install gstreamer0.10-plugins-good libgstfarsight0.10-0 libpurple-bin libpurple0 libv4l-0 libv4l-dev pidgin vlc vlc-nox vlc-plugin-notify vlc-plugin-pulse
[/bash]
</div>
</div>
</div>
</div>
<div>There it is, the library is successfully <strong>installed</strong>, you may use it as you wish ;).</div><!--:-->

View File

@@ -0,0 +1,334 @@
---
layout: post
status: publish
published: true
title: A simple region growing implementation in Python
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 318
wordpress_url: http://www.lengrand.fr/?p=318
date: 2011-11-28 13:51:14.000000000 +01:00
categories:
- OpenCV
- Python
- Tippy
tags:
- image processing
- tippy
- region growing
- prototyping
comments:
- id: 3155
author: dg
author_email: drgalindog@linuxmail.org
author_url: ''
date: !binary |-
MjAxMi0xMi0xNSAxMToxMDowMCArMDEwMA==
date_gmt: !binary |-
MjAxMi0xMi0xNSAxMDoxMDowMCArMDEwMA==
content: Hi! thank you very much for this work, it is pretty useful! I would like
to know if this is the last version of the function, I want to put more than one
seed....
- id: 3157
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0xMi0xNSAxMjoxNDo0OCArMDEwMA==
date_gmt: !binary |-
MjAxMi0xMi0xNSAxMToxNDo0OCArMDEwMA==
content: ! "Hey ! \n\nReally glad it has been useful for you. \nI haven't touched
the code for some time now, but I can think about updating it if you need :).
\n\nLet me think about it"
- id: 3203
author: dg
author_email: drgalindog@linuxmail.org
author_url: ''
date: !binary |-
MjAxMi0xMi0xNyAyMTozMToyOCArMDEwMA==
date_gmt: !binary |-
MjAxMi0xMi0xNyAyMDozMToyOCArMDEwMA==
content: ! "Thank you!! :) I'm running the function for different seeds and obtaining
individual images, but still I need to have just one single final output ... \r\n\r\nbest!"
- id: 3212
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0xMi0xOCAwOTo0ODozOCArMDEwMA==
date_gmt: !binary |-
MjAxMi0xMi0xOCAwODo0ODozOCArMDEwMA==
content: ! "I will have a look at it during the holidays. \r\n\r\nIn the meantime,
can't you apply the same algorithm multiple times on your image, and then perform
a binary operation? \r\n\r\nCheck it out <a href=\"http://stackoverflow.com/questions/11262312/opencv-intersection-between-two-binary-images\"
title=\"SO intersection images\" target=\"_blank\">here</a>, I think that using
either an <strong>and</strong> or an <strong>or</strong> operation between your
two output images ' will do what you want : merge the results. \r\n\r\nLet me
know ;)"
- id: 3214
author: dg
author_email: drgalindog@linuxmail.org
author_url: ''
date: !binary |-
MjAxMi0xMi0xOCAxMzoxOTowOSArMDEwMA==
date_gmt: !binary |-
MjAxMi0xMi0xOCAxMjoxOTowOSArMDEwMA==
content: Thaaanks!!! I will let you know :)
- id: 3536
author: dg
author_email: drgalindog@linuxmail.org
author_url: ''
date: !binary |-
MjAxMy0wMS0wOSAxNjozNjowMiArMDEwMA==
date_gmt: !binary |-
MjAxMy0wMS0wOSAxNTozNjowMiArMDEwMA==
content: ! "Hi! Happy 2013!\r\n\r\nSince I'm not an expert in opencv and python
I couldn't achieve it...these functions requires arrays instead iplimages.....
but so far still your library works for my purpose! thank you very much\r\n\r\nSorry
for late reply.. I was also working on my input image :S\r\n\r\nThanks again!"
- id: 3539
author: jll
author_email: jlengrand@gmail.com
author_url: ''
date: !binary |-
MjAxMy0wMS0wOSAxNjo0OToyNyArMDEwMA==
date_gmt: !binary |-
MjAxMy0wMS0wOSAxNTo0OToyNyArMDEwMA==
content: ! "Hey, t thanks! Best wishes to you too:)\r\n\r\nmy holidays were busier
than expected finally:)\r\nWhat do you want to do exactly!? Do you still need
help!?\r\n\r\nSend me a mail if you need more, I'll answer you:)"
- id: 3671
author: dg
author_email: drgalindog@linuxmail.org
author_url: ''
date: !binary |-
MjAxMy0wMS0xNiAxMDo0NDoyNiArMDEwMA==
date_gmt: !binary |-
MjAxMy0wMS0xNiAwOTo0NDoyNiArMDEwMA==
content: ! "Thank you very much for your kindness... :O I didn't find your e-mail
address :(... Basically I need to put several seeds in one input image (this is
a matrix transformed to image) and obtain a single output image with regions..
the idea is to not have overlapping regions.. \r\n\r\nSo far Im using several
seeds using for loop in the part of your code calling the function and obtaining
independant outputs, but this is giving me overlapping regions and it would really
really useful if I don't have to join output images to a single one manually.
\r\n\r\nIf you wish I can write you an email!\r\n\r\nThanks again"
- id: 3928
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0wMS0yNSAxMToxNDozMCArMDEwMA==
date_gmt: !binary |-
MjAxMy0wMS0yNSAxMDoxNDozMCArMDEwMA==
content: ! "Hey, \n\nIt would help a lot if you could send me a \"ready to go\"
script of what you want to do so that I can see and try to upgrade my script.
\n\nSomething with the upload of the image, and the positions of the seeds you
want.\n\nPut it on git somewhere and I'll look into it."
- id: 4004
author: Diana
author_email: drgalindog@linuxmail.org
author_url: ''
date: !binary |-
MjAxMy0wMS0yOCAxMzoyMjowOCArMDEwMA==
date_gmt: !binary |-
MjAxMy0wMS0yOCAxMjoyMjowOCArMDEwMA==
content: Now it is already solved! thank you very much again. :)
- id: 4014
author: Margarita Gonzalez Ramirez
author_email: margy9003@hotmail.com
author_url: ''
date: !binary |-
MjAxMy0wMS0yOSAwMjowNDowNiArMDEwMA==
date_gmt: !binary |-
MjAxMy0wMS0yOSAwMTowNDowNiArMDEwMA==
content: ! "Hi, I saw your program and I said that is the program that I need. I
compiled in linux (terminal) and I showed those mistakes. Can u help me to solve
them?\r\n\r\n./testrg.py: line 1: import: command not found\r\nfrom: can't read
/var/mail/opencv.cv\r\n./testrg.py: line 4: import: command not found\r\n./testrg.py:
line 5: import: command not found\r\n./testrg.py: line 6: import: command not
found\r\n./testrg.py: line 8: user_input: command not found\r\n./testrg.py: line
10: img_name: command not found\r\n./testrg.py: line 11: threshold: command not
found\r\n./testrg.py: line 12: syntax error near unexpected token `('\r\n./testrg.py:
line 12: `img = cv.LoadImage(img_name, cv.CV_LOAD_IMAGE_GRAYSCALE);'\r\n\r\nThanks"
- id: 4019
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0wMS0yOSAwOTo0ODo0NCArMDEwMA==
date_gmt: !binary |-
MjAxMy0wMS0yOSAwODo0ODo0NCArMDEwMA==
content: ! "Hi, \n\nI am not sure what you mean. \nThis code is Python, so you should
not have to compile it but run it with python. \n\nthat means do something like
: \n\n<code>\npython testrg.py\n</code>\n\nIf you want to be able to use ./testrg.py
directly, you need to append a <a href=\"http://en.wikipedia.org/wiki/Shebang_(Unix)\"
title=\"shebang wikipedia\" target=\"_blank\">shebang</a> at the beginning of
the file: \n\n<code>\n#!/usr/bin/python\n</code>\n\nHope this helps !"
- id: 19038
author: Pascal
author_email: hmarois21@hotmail.com
author_url: http://priveyes.craym.eu
date: !binary |-
MjAxMy0xMC0yOCAxNTowMTo1MCArMDEwMA==
date_gmt: !binary |-
MjAxMy0xMC0yOCAxNDowMTo1MCArMDEwMA==
content: ! "Hi !\r\nI'm not understand this part : (the first dist value does nothing
?) TY\r\n\r\n#add the nearest pixel of the contour in it\r\n dist = abs(int(numpy.mean(contour_val))
- mean_reg)\r\n \r\n dist_list = [abs(i - mean_reg) for i in contour_val
]\r\n dist = min(dist_list) #get min distance"
---
Hi all,
Here is a simple example of (simple) <strong><a title="region growing" href="http://en.wikipedia.org/wiki/Region_growing" target="_blank">Region Growing algorithm</a></strong> in <strong>Python</strong>.
It is part of my<a title="github_tippy" href="https://github.com/jlengrand/Tippy" target="_blank"> current project</a>, called <strong>Tippy</strong>.
<strong>Tippy</strong> tries to implement use the power of <strong><a title="opencv" href="http://opencv.willowgarage.com/wiki/" target="_blank">OpenCV</a></strong> and Python to fasten <a title="computer_vision" href="http://en.wikipedia.org/wiki/Computer_vision" target="_blank">Computer Vision</a> prototyping.
The idea is to get as much result as possible with a minimum of code.
A word about <a title="REGION_GROWING" href="http://en.wikipedia.org/wiki/Region_growing" target="_blank">region growing</a> , and this implementation :
This approach to segmentation examines neighboring pixels of initial “seed points” and determines whether the pixel neighbors should be added to the region. The process is iterated on, in the same manner as general data clustering algorithms"
Basically, region growing is an<strong> iterative method used to extract similar parts of an image</strong>. One or several points are chosen as a start. The region then grows until it is finally blocked by the<strong> stop criteria</strong>. This criteria is generally an inside/outside region comparison (energy, size, . . .).
Region growing is massively used in medical imaging, and object detection. <a title="mine_hunting ECUA" href="http://dl.dropbox.com/u/4286043/00_Website/01_Publis/ATR_TNO_ECUA.pdf" target="_blank">Here is an example of application in automatic <strong>Mine Hunting</strong></a>, which I worked with last year at <a title="TNO" href="http://www.tno.nl/" target="_blank">TNO</a>.
The following method uses one seed point, defined by the user. The region grows by comparing with its neighbourhood. The chosen criteria is in this case a difference between outside pixel's intensity value and the region's mean.
The pixel with minimum intensity in the region neighbouhood is chosen to be included. The growing stops as soon as the difference is larger than a threshold.
In this implementation, a 4-connectivity has been chosen. The 8-connectivity should be included soon.
Due to the method itself, <strong>only grayscale images</strong> may be processed for now. So color images should be converted first.
<div class="mceTemp" style="text-align: center;"><dl id="attachment_320" class="wp-caption alignnone" style="width: 639px;"><dt class="wp-caption-dt"><a href="http://www.lengrand.fr/wp-content/uploads/2011/11/region_growing.jpg"><img class="size-full wp-image-320" title="region growing tests with a gnu" src="http://www.lengrand.fr/wp-content/uploads/2011/11/region_growing.jpg" alt="region growing tests with a gnu" width="629" height="285" /></a></dt><dd class="wp-caption-dd">Here is the input image, the image with the seed point placed, and the final result!</dd></dl></div>
Here is the region growing function implemented in Tippy:
[python]
import sys
import cv
import numpy
def simple_region_growing(img, seed, threshold=1):
&quot;&quot;&quot;
A (very) simple implementation of region growing.
Extracts a region of the input image depending on a start position and a stop condition.
The input should be a single channel 8 bits image and the seed a pixel position (x, y).
The threshold corresponds to the difference between outside pixel intensity and mean intensity of region.
In case no new pixel is found, the growing stops.
Outputs a single channel 8 bits binary (0 or 255) image. Extracted region is highlighted in white.
&quot;&quot;&quot;
try:
dims = cv.GetSize(img)
except TypeError:
raise TypeError(&quot;(%s) img : IplImage expected!&quot; % (sys._getframe().f_code.co_name))
# img test
if not(img.depth == cv.IPL_DEPTH_8U):
raise TypeError(&quot;(%s) 8U image expected!&quot; % (sys._getframe().f_code.co_name))
elif not(img.nChannels is 1):
raise TypeError(&quot;(%s) 1C image expected!&quot; % (sys._getframe().f_code.co_name))
# threshold tests
if (not isinstance(threshold, int)) :
raise TypeError(&quot;(%s) Int expected!&quot; % (sys._getframe().f_code.co_name))
elif threshold &lt; 0:
raise ValueError(&quot;(%s) Positive value expected!&quot; % (sys._getframe().f_code.co_name))
# seed tests
if not((isinstance(seed, tuple)) and (len(seed) is 2) ) :
raise TypeError(&quot;(%s) (x, y) variable expected!&quot; % (sys._getframe().f_code.co_name))
if (seed[0] or seed[1] ) &lt; 0 :
raise ValueError(&quot;(%s) Seed should have positive values!&quot; % (sys._getframe().f_code.co_name))
elif ((seed[0] &gt; dims[0]) or (seed[1] &gt; dims[1])):
raise ValueError(&quot;(%s) Seed values greater than img size!&quot; % (sys._getframe().f_code.co_name))
reg = cv.CreateImage( dims, cv.IPL_DEPTH_8U, 1)
cv.Zero(reg)
#parameters
mean_reg = float(img[seed[1], seed[0]])
size = 1
pix_area = dims[0]*dims[1]
contour = [] # will be [ [[x1, y1], val1],..., [[xn, yn], valn] ]
contour_val = []
dist = 0
# TODO: may be enhanced later with 8th connectivity
orient = [(1, 0), (0, 1), (-1, 0), (0, -1)] # 4 connectivity
cur_pix = [seed[0], seed[1]]
#Spreading
while(dist&lt;threshold and size&lt;pix_area):
#adding pixels
for j in range(4):
#select new candidate
temp_pix = [cur_pix[0] +orient[j][0], cur_pix[1] +orient[j][1]]
#check if it belongs to the image
is_in_img = dims[0]&gt;temp_pix[0]&gt;0 and dims[1]&gt;temp_pix[1]&gt;0 #returns boolean
#candidate is taken if not already selected before
if (is_in_img and (reg[temp_pix[1], temp_pix[0]]==0)):
contour.append(temp_pix)
contour_val.append(img[temp_pix[1], temp_pix[0]] )
reg[temp_pix[1], temp_pix[0]] = 150
#add the nearest pixel of the contour in it
dist = abs(int(numpy.mean(contour_val)) - mean_reg)
dist_list = [abs(i - mean_reg) for i in contour_val ]
dist = min(dist_list) #get min distance
index = dist_list.index(min(dist_list)) #mean distance index
size += 1 # updating region size
reg[cur_pix[1], cur_pix[0]] = 255
#updating mean MUST BE FLOAT
mean_reg = (mean_reg*size + float(contour_val[index]))/(size+1)
#updating seed
cur_pix = contour[index]
#removing pixel from neigborhood
del contour[index]
del contour_val[index]
return reg
[/python]
Here is a <strong>simple test</strong> of the function, using Tippy functions. If you only want to use the function, juste remove the tippy stuff and copy the function in your source.
Please note than <strong><a title="Compiling OpenCV for Linux (Debian)" href="http://www.lengrand.fr/2011/11/compiling-opencv-for-linux-debian/" target="_blank">OpenCV</a></strong> is needed for the function to work ;)
[python]
import cv
import tippy.segmentations as se
import tippy.basic_operations as bo
import tippy.display_operations as do
user_input = 0
img_name = &quot;tippy/data/gnu.jpg&quot;
threshold = 20
img = cv.LoadImage(img_name, cv.CV_LOAD_IMAGE_GRAYSCALE)
if user_input:
seed = bo.mouse_point(img, mode=&quot;S&quot;) # waits for user click to get seed
else:
seed = (70, 106)
out_img = se.simple_region_growing(img, seed, threshold)
do.display_single_image(out_img, &quot;Region Growing result&quot;)
[/python]
As you can see, the implementation is rather short in code.
An option has been included to let user interactively choose their seed.
<strong><a title="github_tippy" href="https://github.com/jlengrand/Tippy" target="_blank">Tippy is available here</a></strong>
As the project is in its very beginning, only a few functions are implemented for now.
But I have a lot more coming for you :).
As you can see in the source, tests are included with each function. Applications notes and examples will shortly be available too.
Finally, there is now proper installer for now. <strong>Simply add the tippy folder in your sources and include the files you need.</strong>
I would be very pleased to find some co-workers. It would allow the library to grow much faster :). So feel free to <a title="github_tippy" href="https://github.com/jlengrand/Tippy" target="_blank">fork the project</a> ;)
And (constructive) comments are of course encouraged too !
See you soon
Julien

View File

@@ -0,0 +1,140 @@
---
layout: post
status: publish
published: true
title: ! 'Python/Unittest : assertRaises raises Error'
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 327
wordpress_url: http://www.lengrand.fr/?p=327
date: 2011-12-02 13:49:49.000000000 +01:00
categories:
- Python
tags:
- tippy
- unittest
- unit tests
- agile
- TDD
- test driven development
comments:
- id: 828
author: md
author_email: md@pmcd-cons.com
author_url: ''
date: !binary |-
MjAxMi0wNC0xOSAyMTo1MzowNSArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNC0xOSAyMDo1MzowNSArMDIwMA==
content: ! "test_square_vlaue gives an eroror because assertRaises wants for 2nd
arg a callable not a function call.\r\nthis should do:\r\nself.assertRaises(TypeError,
df.square_value, 'A')"
- id: 873
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wNC0yNCAxMjo0MToyNCArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNC0yNCAxMTo0MToyNCArMDIwMA==
content: ! "Thanks for the info, I'll try this way of doing next time. \r\nIt is
prettier than my current solution :)"
---
Hi all,
Today, a small hint about <strong>unit tests</strong> in Python I discovered while working on <strong><a title="tippy on github" href="https://github.com/jlengrand/Tippy" target="_blank">Tippy</a></strong>.
In order to get as reliable code as possible, I am currently experiencing <strong><a title="agile" href="http://en.wikipedia.org/wiki/Agile_software_development" target="_blank">Agile</a></strong> techniques, and especially <strong><a title="TDD" href="http://fr.wikipedia.org/wiki/Test_Driven_Development" target="_blank">TDD</a></strong>. I develop <strong>Tippy</strong> in Python, and test methods with the excellent <a title="unittest framework" href="http://docs.python.org/library/unittest.html" target="_blank">unittest</a> framework.One of (in my mind at least) the most important tips Agile provides is the "<a title="fail fast" href="http://en.wikipedia.org/wiki/Fail-fast" target="_blank">fail fast</a>" rule. And to fit with this rule, all my methods check their inputs before performing anything else.
It implies a lot of <strong>assertRaises</strong> assertions in my tests. Here is an example of how it could be used :
Let's say I want to create a (dum) function calculating the square value of a number. I will have to test that the input can really be multiplied.
<ul>
<li>First, here is the corresponding (still dum :p) function in file dum_function.py :</li>
</ul>
[python]
def square_value(a):
&quot;&quot;&quot;
Returns the square value of a.
&quot;&quot;&quot;
try:
out = a*a
except TypeError:
raise TypeError(&quot;Input should be a string:&quot;)
return out
[/python]
<ul>
<li>Here is the test to be performed (only this test is inserted):</li>
</ul>
[python]
import dum_function as df # import function module
import unittest
class Test(unittest.TestCase):
&quot;&quot;&quot;
The class inherits from unittest
&quot;&quot;&quot;
def setUp(self):
&quot;&quot;&quot;
This method is called before each test
&quot;&quot;&quot;
self.false_int = &quot;A&quot;
def tearDown(self):
&quot;&quot;&quot;
This method is called after each test
&quot;&quot;&quot;
pass
#---
## TESTS
def test_square_value(self):
# assertRaises(excClass, callableObj) prototype
self.assertRaises(TypeError, df.square_value(self.false_int))
if __name__ == &quot;__main__&quot;:
unittest.main()
[/python]
<ul>
<li>We are now ready to test our function! Here is what happens when trying to run the test :</li>
</ul>
[python]
======================================================================
ERROR: test_square_value (__main__.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File &quot;test_dum_function.py&quot;, line 22, in test_square_value
self.assertRaises(TypeError, df.square_value(self.false_int))
File &quot;/home/jlengrand/Desktop/function.py&quot;, line 8, in square_value
raise TypeError(&quot;Input should be a string:&quot;)
TypeError: Input should be a string:
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (errors=1)
[/python]
The <strong>TypeError</strong> is actullay raised, and generates a test failure. The problem is that this is <strong>exactly the behavior</strong> we wanted :s.
To avoid this error, simply run the function using lambda in the test call :
[python]
self.assertRaises(TypeError, lambda: df.square_value(self.false_int))
[/python]
The final output :
[python]
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
[/python]
Perfect !
<em><strong>Note :</strong> For the purpose of this article, I did not work "backwards" (created test before the function). I think this would have been counter productive for the effect I wanted to highlight.</em>

View File

@@ -0,0 +1,34 @@
---
layout: post
status: publish
published: true
title: Syntax Highlighting issue
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 359
wordpress_url: http://www.lengrand.fr/?p=359
date: 2011-12-08 13:43:40.000000000 +01:00
categories:
- misc
tags: []
comments: []
---
Hi all,
Sorry but all the syntax highlighting of my blog seems to be broken.
I think it comes from my plugin, <strong>SyntaxHighlighter Evolved, </strong>and I'm working to find the issue.
Sorry for the inconvenience, I hope to find a solution soon !
&nbsp;
EDIT : Problem is (half) solved.
I found the root cause : another plugin I installed yesterday : Jetpack with a misplaced tag.
&nbsp;
Now I'll need some more time to fix the issue :)

View File

@@ -0,0 +1,168 @@
---
layout: post
status: publish
published: true
title: A simple way to get a multilingual blog
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 366
wordpress_url: http://www.lengrand.fr/?p=366
date: 2011-12-12 13:55:52.000000000 +01:00
categories:
- tips
tags:
- pluxml
- javascript
- website
- language
- multiingual
- html
comments:
- id: 87
author: Mike
author_email: mike@mike.cim
author_url: ''
date: !binary |-
MjAxMS0xMi0xMiAyMDo0Njo1OCArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0xMiAxOTo0Njo1OCArMDEwMA==
content: Ugh JavaScript, that is a terrible solution. Use JS to add interaction,
don't use it to show/hide information. Use separate pages, with their own language
tag and their own URL. The internet will thank you, and so will people using screen
readers!
- id: 88
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMS0xMi0xMiAyMTo0ODowNiArMDEwMA==
date_gmt: !binary |-
MjAxMS0xMi0xMiAyMDo0ODowNiArMDEwMA==
content: ! "I agree on the fact that this is not the best trick ever used. As you
say, javascript should not be used to hide information. \r\n\r\nThere are some
pros though. My first idea in creating the blog was to have two templates and
separate pages. The thing is that it is the same as creating two different blogs.
You have twice as much updates to perform, with half references. . . \r\n\r\nI
think Javascript might be used in case you have a \"prefered\" language, and make
another available \"as a gift\" for people."
---
<!--:en-->Hi all,
Some time ago, I searched for a way to have a blog as simple as possible (and avoid <strong>wordpress</strong> or <strong>joomla</strong> monsters). I ended up using <strong><a title="pluxml" href="http://www.pluxml.org/">Pluxml</a></strong> for a while, and you can find<a title="pluxml here" href="http://www.lengrand.fr/pluxml/513/"> the result here</a><a title="pluxml here" href="http://www.lengrand.fr/pluxml/513/">.</a>
One of the things I wanted absolutely was to <strong>write my blogs in several languages</strong> (french and english). After some time, I finally found a way to do it with a bit of <strong>javascript</strong>.
The main idea is simple : You get one <a title="div" href="http://www.w3schools.com/tags/tag_div.asp" target="_blank">div</a> by language. On startup, only one div is shown, and a click on a "switch language" link shows the other div while making the first disappear.
You can see an <a title="result multilingual" href="http://lengrand.fr/pluxml/513/index.php?article2/new-article" target="_blank">example of the result </a><strong><a title="result multilingual" href="http://lengrand.fr/pluxml/513/index.php?article2/new-article" target="_blank">here</a>.</strong>
To do this, you need two things :
<ul>
<li>Insert some <strong>javascript</strong> functions in your webpage. You can do this by importing a file, or simply copying the following code in your template:</li>
</ul>
<div>[javascript]
&lt;!-- Script créé par KevBrok ;-) --&gt;
&lt;script type=&quot;text/javascript&quot;&gt;// &lt;![CDATA[
/*
* Montre / Cache un div
*/
function DivStatus( nom, numero )
{
var divID = nom + numero;
if ( document.getElementById &amp;&amp; document.getElementById( divID ) ) // Pour les navigateurs récents
{
Pdiv = document.getElementById( divID );
PcH = true;
}
else if ( document.all &amp;&amp; document.all[ divID ] ) // Pour les veilles versions
{
Pdiv = document.all[ divID ];
PcH = true;
}
else if ( document.layers &amp;&amp; document.layers[ divID ] ) // Pour les très veilles versions
{
Pdiv = document.layers[ divID ];
PcH = true;
}
else
{
PcH = false;
}
if ( PcH )
{
Pdiv.className = ( Pdiv.className == 'cachediv' ) ? '' : 'cachediv';
}
}
/*
* Inverse les divs: Cache les divs visible et montre le divs cachés :)
*/
function InverseTout( nom )
{
var NumDiv = 1;
if ( document.getElementById ) // Pour les navigateurs récents
{
while ( document.getElementById( nom + NumDiv ) )
{
SetDiv = document.getElementById( nom + NumDiv );
DivStatus( nom, NumDiv );
NumDiv++;
}
}
else if ( document.all ) // Pour les veilles versions
{
while ( document.all[ nom + NumDiv ] )
{
SetDiv = document.all[ nom + NumDiv ];
DivStatus( nom, NumDiv );
NumDiv++;
}
}
else if ( document.layers ) // Pour les très veilles versions
{
while ( document.layers[ nom + NumDiv ] )
{
SetDiv = document.layers[ nom + NumDiv ];
DivStatus( nom, NumDiv );
NumDiv++;
}
}
}
// ]]&gt;&lt;/script&gt;
[/javascript]
</div>
<ul>
<li>Then, <strong>Write down your article in both languages</strong>, one after the other in you editor. Each language should be placed in a separate div; and a button placed to switch from one language to the other. Here is an example :</li>
</ul>
<div>[javascript]
&lt;a href=&quot;javascript:InverseTout( 'mondiv' )&quot;&gt;Français / English&lt;/a&gt;&lt;/pre&gt;
&lt;div id=&quot;mondiv1&quot; class=&quot;cachediv&quot;&gt;
&lt;div style=&quot;border: 1px solid black; background-color: whitesmoke; margin-bottom: 2px;&quot;&gt;My article in english&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;mondiv2&quot;&gt;
&lt;div style=&quot;border: 1px solid black; background-color: whitesmoke; margin-bottom: 2px;&quot;&gt;Mon article en français&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;
[/javascript]
</div>
<div>
There you are ! The<strong> "class = cachediv"</strong> is used to hide the on load.
</div>
All you have to do now is to "beautify" the code by changing the link into a flag, and enhance the way div are displayed.The bad thing is you will have some javascript code in your articles, and both languages are present on the same page.
Hope this help ;)
<div>
<strong>And if you have a better idea, please let me know !</strong>
</div>
<div>[<a title="source" href="http://www.editeurjavascript.com/scripts/scripts_navigation_3_182.php" target="_blank">source</a>]</div>
<div><em>NOTE : Sorry for the code being in french (its not mine). I could take some time to translate it if you want :) </em></div><!--:-->

View File

@@ -0,0 +1,62 @@
---
layout: post
status: publish
published: true
title: A simple way to watermark a batch of images
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 422
wordpress_url: http://www.lengrand.fr/?p=422
date: 2011-12-20 17:35:10.000000000 +01:00
categories:
- programming
tags:
- photo
- bash
- watermark
- batch
- image magick
- github
comments: []
---
Hi all,
Some time ago, I was searching for a way to simply watermark images to put them on my <strong><a title="my flickr" href="http://www.flickr.com/photos/49365498@N03/">gallery</a></strong>.
I knew <strong><a title="digikam" href="http://www.digikam.org/">digikam</a></strong> could do this, but the package in debian was an old version and the feature was not inserted yet. In addition, I have never found a photo management software that would fit my needs yet . . .
I finally developed my own function with some bash and<strong> <a title="image magick" href="http://www.imagemagick.org/script/index.php">image magick</a>. </strong>I created it to be as simple to use as possible. It needs:
<ul>
<li>an input folder</li>
<li>an output folder</li>
<li>a watermark image</li>
</ul>
When run, the script inserts the watermark in all images of the input folder and save them in the output folder.
[bash]
$ waterMark in_folder out_folder watermark_image
[/bash]
As a bonus, the script automatically detects whether an image is in landscape or portrait mode before inserting the watermark, so that it is always in the right side.
Here is an example of the result :
[caption id="attachment_424" align="aligncenter" width="200" caption="picture of the &quot;jardin des plantes&quot; in Nantes"]<a href="http://www.lengrand.fr/wp-content/uploads/2011/12/pourquoi_le_bitume__by_jlengrand-d4dp4ha.jpg"><img class="size-medium wp-image-424" title="Pourquoi le bitume?" src="http://www.lengrand.fr/wp-content/uploads/2011/12/pourquoi_le_bitume__by_jlengrand-d4dp4ha-200x300.jpg" alt="picture of the &quot;jardin des plantes&quot; in Nantes" width="200" height="300" /></a>[/caption]
This script is in an early stage for now, and should be upgraded with time. You can check out the <strong><a title="TODO list" href="https://github.com/jlengrand/batchWaterMarking">TODO list here. </a></strong>
You can download the script <strong><a title="my github" href="https://github.com/jlengrand/batchWaterMarking">on my gitHub</a>, </strong>or more simply download the project using git
[bash]
$ git clone git://github.com/jlengrand/batchWaterMarking.git
[/bash]
Feel free to fork the project or let me know about what would be useful for you.
Hope this will help some of you !
See ya ;)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,51 @@
---
layout: post
status: publish
published: true
title: ! 'Simply print current function name '
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 476
wordpress_url: http://www.lengrand.fr/?p=476
date: 2011-12-28 16:55:21.000000000 +01:00
categories:
- Python
tags:
- function name
- print
- debug
comments: []
---
Hi all,
When developing, I hate having to search in which portion of my code I am. For Tippy, I searched for a way to always display the function name in case of an error.
Hopefully, Python offers a simple (but curious) way to perform this.
Here is how to <strong>print your function name as a string</strong> in Python :
[python]
import sys
def tutut():
&quot;&quot;&quot;
Dum function displaying its name!
&quot;&quot;&quot;
print sys._getframe().f_code.co_name
if __name__ == '__main__':
tutut()
[/python]
And here is the result
[bash]
[airballman@ubuntu:~]$ python tutut.py
tutut
[/bash]
There it is !
You can also find this tip in my Programming Tips page, in the <strong><a href="http://www.lengrand.fr/programming-tips-2/#python">Python section</a>.</strong>

View File

@@ -0,0 +1,32 @@
---
layout: post
status: publish
published: true
title: The Programming Tips page is back
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 460
wordpress_url: http://www.lengrand.fr/?p=460
date: 2011-12-28 14:51:13.000000000 +01:00
categories:
- misc
tags: []
comments: []
---
Hi all,
I am currently working on reducing the number of technologies used on my website. After having removed loads of plugins ( I just kept the essential database backup and cache enhancement), I also chose to switch to a full english blog.
The next step is the removal of the old <strong>programming tips</strong> page using <a title="tiddly" href="http://www.tiddlywiki.fr/">tiddlywiki</a>. You can find the new one <strong><a title="Programming Tips" href="http://www.lengrand.fr/programming-tips-2/">here</a></strong>.
The only language for now is <strong>Bash</strong>, but more should come soon.
Hope this can help some of you.
C ya, and enjoy your holidays (for the lucky guys :s).
&nbsp;
EDIT : There it is, all sections are back up. Check it out <strong><a title="Programming Tips" href="http://www.lengrand.fr/programming-tips-2/">here</a></strong> !

View File

@@ -0,0 +1,127 @@
---
layout: post
status: publish
published: true
title: Multiprocessing using Python
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 480
wordpress_url: http://www.lengrand.fr/?p=480
date: 2011-12-29 14:07:46.000000000 +01:00
categories:
- Python
tags:
- multiprocessing
- thread
- process
- speed
- sonar
- UUV
comments:
- id: 225
author: Chris
author_email: Cwilkes@ladro.com
author_url: ''
date: !binary |-
MjAxMi0wMi0wOCAxNTo1NjowNCArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMi0wOCAxNDo1NjowNCArMDEwMA==
content: ! "Look at the Pool class, it will by default create a queue of all your
submitted jobs and run up to your number of cores at the same time. \r\nHaving
come from java I was really impressed with how easy it was to start working with
Process."
- id: 226
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wMi0wOCAxNjowOTozNiArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMi0wOCAxNTowOTozNiArMDEwMA==
content: ! "Hi Chris, \r\n\r\nYou are right indeed. I coded this on my first time
playing with Processes. For more elaborate code, Pools would be the best solution,
but require some more work (and comprehension) from the user. \r\n\r\nBut I have
an idea of where I could use these Pools and post some samples here soon :)."
- id: 269
author: Twiggy
author_email: rabikm@rediffmail.com
author_url: http://www.yahoo.com/
date: !binary |-
MjAxMi0wMi0xNCAxOToyNToxNCArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMi0xNCAxODoyNToxNCArMDEwMA==
content: This is the peerfct post for me to find at this time
- id: 282
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wMi0xNSAwOTo0OToyMiArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMi0xNSAwODo0OToyMiArMDEwMA==
content: Well, Glad it helped ;)
---
Some time ago, I worked with real time processing of sonar images. My job was to detect mines on both sides of an <strong><a title="UUV" href="http://www.globalsecurity.org/intell/systems/uuv.htm">UUV</a></strong> equipped with <strong><a title="side scan sonar" href="http://en.wikipedia.org/wiki/Side-scan_sonar">Side-Scan sonars</a></strong>.
My algorithm had to run as fast as possible and I naturally ended up thinking about parallel processing. My application was kind of designed to be paralleled as at each instant I had two images coming (left and right side of my vehicle).
Most of computes now have at least 2 processors. Multiprocessing was then the best way to simply minimize computation time! In addition, as no data had to be passed from one application to the other (left and right images are totally unrelated) threads were obviously not the most interesting solution for me.
Basically, the following example will be perfect for applications in which<strong> the exact same task has to be performed several times on unrelated data :</strong>
Here is a simple multiprocessing example, coming from the <a title="python doc" href="http://www.python.org/doc/">Python documentation</a>:
[python]
from multiprocessing import Process
def f(name):
print 'hello', name
if __name__ == '__main__':
p = Process(target=f, args=('bob',))
p.start()
p.join()
[/python]
This example creates a <strong>process</strong>, performing the <strong>f</strong> function. The first line indicates the function to be run and its arguments. The second line (<strong>start) </strong>starts the processus.
Finally, the <strong>join</strong> keyword waits for the function to finish properly and exits.
Creating two processes now appears to be pretty simple :
[python]
from multiprocessing import Process
def f(name):
print 'hello', name
if __name__ == '__main__':
p1 = Process(target=f, args=('la meute',))
p2 = Process(target=f, args=('tout le monde',))
p1.start()
p2.start()
p1.join()
p2.join()
print('Exiting!)
[/python]
In  this second example, the <strong>print </strong>will be performed only when <strong>p1</strong> and <strong>p2</strong> have been killed.
In order to enhance you productivity, a simple idea is to create as much processes as the <strong>number of cores in your computer</strong>. Once again, Python has already made the work for you.
[python]
nb_processes = multiprocessing.cpu_count()
[/python]
Here it is, Your application should now run slightly faster !
In case you <strong>don't know the difference between process and thread</strong>,<a title="diff process thread" href="http://stackoverflow.com/questions/200469/what-is-the-difference-between-a-process-and-a-thread"> you should have a look here</a> .

View File

@@ -0,0 +1,23 @@
---
layout: post
status: publish
published: true
title: ! 'Programming tips : New Wordpress section'
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 490
wordpress_url: http://www.lengrand.fr/?p=490
date: 2012-01-03 13:34:33.000000000 +01:00
categories:
- tips
tags: []
comments: []
---
Hi all,
I updated my page dedicated to programming tips.
A new section is now available which will give some information about wordpress post edition
<a title="prog tips wordpress" href="http://www.lengrand.fr/programming-tips-2/#word">You will find the content here</a>

View File

@@ -0,0 +1,107 @@
---
layout: post
status: publish
published: true
title: A lightweight dynamic CMS, database free!
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 494
wordpress_url: http://www.lengrand.fr/?p=494
date: 2012-01-09 13:42:28.000000000 +01:00
categories:
- misc
tags:
- pluxml
- website
- CMS
- database
- lightweight
- dynamic
- xml
- wordpress
comments:
- id: 144
author: My minimalist dark Pluxml theme | loup2fu
author_email: ''
author_url: http://www.lengrand.fr/2012/01/my-minimalist-dark-pluxml-theme/
date: !binary |-
MjAxMi0wMS0xMCAxMzoyOToxOCArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMS0xMCAxMjoyOToxOCArMDEwMA==
content: ! '[...] Post navigation &larr; Previous [...]'
- id: 21593
author: Thomas
author_email: kriuks1@hotmail.com
author_url: ''
date: !binary |-
MjAxMy0xMi0wOCAyMDo1NToxMCArMDEwMA==
date_gmt: !binary |-
MjAxMy0xMi0wOCAxOTo1NToxMCArMDEwMA==
content: ! "Hello,\r\n\r\nThis platform is quite nice, but there are some questions
that bother me. Is Pluxml good for websites with lots of traffic, say 1000 unique
IP in a day? MySQL is a database, it's designed for vast database IO requests,
what about XML? Do you have any opinion about using pluxml for websites which
have huge traffic or lots of content which is searched by lots of users daily?
Thanks for the answer."
- id: 24348
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxNC0wMi0wNSAxNToyOTo0NiArMDEwMA==
date_gmt: !binary |-
MjAxNC0wMi0wNSAxNDoyOTo0NiArMDEwMA==
content: ! "Hey, \r\n\r\nSorry for the late reply. Your comment ended in the spam
box, for some strange reason . . .\r\n\r\nPluxml has been built mostly for small
websites, to help deploy simply and rapidly without a database. So nothing is
really made by pluxml itself to handle large loads.\r\nThat being said, I would
say that the impact will mainly depend on your hardware. The bandwidth should
probably be roughly the same as for say Wordpress (and probably even smaller).
But your server will have to fetch more xml files on your fileserver.\r\n\r\nSo
I'd say that for a pluxml website with a large traffic, you should probably look
at SSDs more than anything else, and add a caching layer."
---
Before choosing <strong><a title="wordpress" href="http://wordpress.org/" target="_blank">Wordpress</a></strong> as a <strong><a title="CMS wiki" href="http://en.wikipedia.org/wiki/Content_management_system" target="_blank">CMS</a></strong>, I searched for a minimalist way to both learn web development and get a nice looking blog.
My choice went To <strong><a title="pluxml" href="http://www.pluxml.org/" target="_blank">Pluxml</a></strong>, which is a french initiative to run websites <strong>without databases</strong>. This way, you can freely use it on a portable USB key. Everything is based on the XML format.
<strong>PluXml</strong> is a full CMS developed in php which contains lots of tools, from editors to admin menus or comments handling. It supports multiple users with different credentials.
I think this is a perfect choice for people that search for a<strong> lightweight solution</strong> and know a bit of programming languages.
In fact, I switched to <strong>Wordpress</strong> only because I wanted to have a multilingual blog, but still use PluXml for personal use.
The only drawback of <strong>Pluxml</strong> would be its <strong>french roots</strong>. Almost all the documentation, forums and support that can be found is in french and so are the comments of the php files ! But as its success grows, there should be more english language coming I think . . .
The installation is way simple :
<ul>
<li><a title="pluxml latest" href="http://www.pluxml.org/" target="_blank">Simply download the last version of Pluxml here</a>, and unzip it in the desired folder of your server.</li>
</ul>
<div>
[caption id="attachment_495" align="aligncenter" width="584" caption="main install page of pluxml"]<a href="http://www.lengrand.fr/wp-content/uploads/2012/01/install.jpeg"><img class="size-large wp-image-495" title="install of pluxml" src="http://www.lengrand.fr/wp-content/uploads/2012/01/install-1024x616.jpg" alt="main install page of pluxml" width="584" height="351" /></a>[/caption]
</div>
<div></div>
<ul>
<li>Connect to the main page of your website. You will be answered to set up the CMS.</li>
<li>Simply click on install if all dependencies you need are installed. Note that you can choose the language you want to use. Immediately, you will be redirected to the main page of your website.</li>
<li>Finally, <strong>remove the install.php</strong> file that can be found in the sources of pluxml to avoid any security breach.</li>
</ul>
<strong>Your website is now ready for use !</strong>
You can change most of the settings, write articles and handle comments in the admin menu :
[caption id="attachment_496" align="aligncenter" width="584" caption="some admin settings of Pluxml"]<a href="http://www.lengrand.fr/wp-content/uploads/2012/01/admin_settings.jpeg"><img class="size-large wp-image-496" title="admin settings of Pluxml" src="http://www.lengrand.fr/wp-content/uploads/2012/01/admin_settings-1024x618.jpg" alt="some admin settings of Pluxml" width="584" height="352" /></a>[/caption]
The system to add <strong>plugins</strong> is similar to most of CMS, <a title="plugins page pluxml" href="http://www.pluxml.org/?static7/download " target="_blank">download it on the dedicated page</a>, dowload it in the plugin folder of pluxml and enable it in the admin menu :
[caption id="attachment_497" align="aligncenter" width="584" caption="plugin activation in pluxml"]<a href="http://www.lengrand.fr/wp-content/uploads/2012/01/admin_plugins.jpeg"><img class="size-large wp-image-497" title="plugin activation in pluxml" src="http://www.lengrand.fr/wp-content/uploads/2012/01/admin_plugins-1024x612.jpg" alt="plugin activation in pluxml" width="584" height="349" /></a>[/caption]
&nbsp;
&nbsp;
Lots of <strong>themes</strong> have been created by the community. <strong><a title="pluxml themes" href="http://ressources.pluxml.org/" target="_blank">They can be downlodaded here</a></strong>. To install a theme, dowload the source, unzip it and dowload it to the themes folder of pluxml's root. Finally, choose it in the admin menu (section "display settings").
<em>Final tip :</em> Most of your information are stored in the parametres.xml file available in the data/configuration folder.
You can have an idea of what pluxml can give <a title="pluxml test" href="http://www.lengrand.fr/pluxml/513/" target="_blank">here ( on my sample server)</a> or in <a title="websites powered by pluxml" href="http://wiki.pluxml.org/index.php?page=Sites+r%C3%A9alis%C3%A9s+avec+PluXml " target="_blank">the list of websites powered by Pluxml</a>!
Enjoy, and let me know if you need any french translation!

View File

@@ -0,0 +1,52 @@
---
layout: post
status: publish
published: true
title: My minimalist dark Pluxml theme
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 501
wordpress_url: http://www.lengrand.fr/?p=501
date: 2012-01-10 13:29:01.000000000 +01:00
categories:
- misc
tags:
- pluxml
- github
- database
- lightweight
- design
- theme
- css
- dark
- minimalism
comments: []
---
Not so long ago, this blog was powered by <strong><a title="pluxml" href="http://www.pluxml.org/">PluXml</a></strong>, a complete CMS that has the great advantage of running without any database.
You can learn a bit more about my experience of Pluxml in one of<strong><a title="pluxml post" href="http://www.lengrand.fr/2012/01/a-lightweight-dynamic-cms-database-free/" target="_blank"> my last posts.</a></strong>
My design was based on two main objectives : <strong>dark colors</strong> and <strong>minimalism</strong>.
I never really liked fancy colors and hate to find them in websites. I think I succeded, and you can find the result on <a title="pluxml test platform" href="http://www.lengrand.fr/pluxml/513/" target="_blank">this test platform</a>.
Here is a screenshots of of the main page :
[caption id="attachment_502" align="aligncenter" width="584" caption="my dark pluxml theme"]<a href="http://www.lengrand.fr/wp-content/uploads/2012/01/pluxml_theme.jpeg"><img class="size-large wp-image-502" title="pluxml_theme" src="http://www.lengrand.fr/wp-content/uploads/2012/01/pluxml_theme-1024x617.jpg" alt="my dark pluxml theme" width="584" height="351" /></a>[/caption]
&nbsp;
The theme is based on two main colors : dark gray/black for the background and light grey for the foreground part. Web links are in colors in order to give some highlighting on the page.
The structure is divided into three main parts:
<ul>
<li>The header section, which is dedicated to present the different parts of my work. This can be my pictures collection, my programming tips or my github repository.</li>
<li>The sidebar section on the right, where are listed the ways you can use to find me on the web and some more information about the blog. This means the n last published articles and a list of my social network profiles.</li>
<li>Finally, the central part contains static pages and articles.</li>
</ul>
This theme is strict XHTML 1.0 compliant as it passes the W3C validator without error neither warnings.
Feel free to use it, the last version can be downlodaed on <strong><a title="github theme" href="https://github.com/jlengrand/pluxml_theme_darkFuture" target="_blank">my github</a></strong> or in <a title="pluxml theme ressources" href="http://ressources.pluxml.org/?theme126/theme-dark-future" target="_blank">pluxml ressources</a>. You will find more information about how to use it in the <a title="README theme" href="https://github.com/jlengrand/pluxml_theme_darkFuture/blob/master/README.markdown" target="_blank">README</a>.
Just let me know if you like it ;), and feel free to ask for help !
&nbsp;
&nbsp;

View File

@@ -0,0 +1,68 @@
---
layout: post
status: publish
published: true
title: Relocating to the Netherlands
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 509
wordpress_url: http://www.lengrand.fr/?p=509
date: 2012-01-30 18:08:04.000000000 +01:00
categories:
- misc
tags:
- netherlands
- dutch
- edito
- GAE
- Job
comments:
- id: 199
author: Anne
author_email: am.ruittonallinieu@gmail.com
author_url: ''
date: !binary |-
MjAxMi0wMS0zMCAyMjoxODowNyArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMS0zMCAyMToxODowNyArMDEwMA==
content: ! "OMG!!!! \r\nI've just discovered your website a few minutes ago and
I wish I had a long time before!!!\r\nCongratulations! I love every piece of it:
the minimalist theme, the tips... and basically how you managed to blend professional
tools and more personal touches in such a pleasant website...\r\nGood luck with
your TODO tasks ;)\r\nTot ziens..."
- id: 200
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wMS0zMSAwMDowMTowOSArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMS0zMCAyMzowMTowOSArMDEwMA==
content: ! "Hey, thanks for the kind message :).\r\nThe theme is basically the wordpress
default, plus an image I took in Finland.\r\n\r\nTODO tasks are on their way :).
Today was devoted to GAE. More to come soon :). \r\n\r\nAnd good luck with your
rum ; )"
---
Hi all,
<strong>Long time no see !</strong>
I stayed silent those last days for the simple reason that I relocated to the Netherlands.
Two years ago, I spent some months working at <strong><a title="TNO website" href="http://www.tno.nl/index.cfm?Taal=2" target="_blank">TNO </a></strong>in underwater mine recognition. The internship took place in <a title="The Hague wiki" href="http://en.wikipedia.org/wiki/The_Hague" target="_blank">The Hague</a> and I discovered how fascinating life could be outside of your native country.I should write more soon about<a title="ECUA ATR" href="http://dl.dropbox.com/u/4286043/215.pdf" target="_blank"> the results of this project</a>:).
Back in France, I realized that each day I was missing international life more and more and my girlfriend and me finally took the decision to relocate abroad as soon as possible
It appears that the first opportunity we got was (once again) in the Netherlands. How small the world can be ^^!So I quit my Job and left France 8 days ago to 's-HertogenBosch where my GF found her job.
Now that I 'm somehow installed and currently searching for a new Position in the Netherlands; you should see more posts coming :).
Those days without official job is an excellent oportunity to finally get on with some of the items that lie on my TODO list for months :). Here are some new goals for the coming weeks :
<ul>
<li>Start a project using<a title="Google App Engine" href="http://code.google.com/appengine/" target="_blank"> Google App Engine</a> (Python side, of course). My idea is to create a Job Dashboard using the power of Google's tools.</li>
<li>Set up a complete productive environment. I kept reading about <a title="agile development" href="http://en.wikipedia.org/wiki/Agile_software_development" target="_blank">productivity in software </a>those months, and I have some posts to write about :).</li>
<li>Contribute to the Open Source software in pushing<strong> at least one patch.</strong></li>
<li>Get back to jogging and push ups , and start learning dutch . . .</li>
</ul>
I will come back to you as soon as I achieve some of those objectives :).
Now, <strong>back to work</strong>. Seems like there is much to be done !

View File

@@ -0,0 +1,46 @@
---
layout: post
status: publish
published: true
title: How to spend nights on the computer
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 517
wordpress_url: http://www.lengrand.fr/?p=517
date: 2012-02-09 15:45:23.000000000 +01:00
categories:
- misc
- Python
tags:
- github
- project euler
- git
comments: []
---
Hi everyone,
As you may already know, I love solving problems. And what I love most is to use <strong><a title="kiss principle " href="http://en.wikipedia.org/wiki/KISS_principle" target="_blank">KISS principle</a></strong>, and reduce those problems into items so small that they all seem trivial.
Some time ago, as I was searching for a way to improve my programming skills, I fell on the<strong><a title="project Euler" href="http://projecteuler.net/" target="_blank"> Project Euler</a></strong>.
And since my life has never been the same :p.
The principle of Project Euler is simple : Solve a problem that takes <strong>only a few lines to explain</strong> in <strong>less than one minute</strong> using <strong>any tool</strong> you want (understand any programming language :p).
The first problems are trivial, but as you may expect get more and more complicated over time.
This is <strong>one of the best tools</strong> to be used if you want to<strong> learn about tricks for a given language</strong>. As you solve problems, you will find more and more difficult to pass the one minut limit. You will finally be forced to search for <strong>clever ways to solve your problems</strong> and this should lead you to beautiful code.
You will have to search for tricks such as <a title="generators python" href="http://wiki.python.org/moin/Generators" target="_blank">generators</a>, <a title="memoization" href="http://en.wikipedia.org/wiki/Memoization" target="_blank">memoization</a>, sieves, . . . which will surely lead you to be a better coder every day !
What I really love in Project Euler is how their problems are simple to understand, but challenging to be solved efficiently. Usually, the best solution is not the one you would have thought about :).
I decided to solve all my problems in <strong>Python</strong>, because it is simple and powerful. I felt in love with Python some time ago, and always feel like magic is going on when using it :).
As a motivation, and to share my achievements I keep <strong><a title="github pe" href="https://github.com/jlengrand/project_euler" target="_blank">sharing my solutions on github</a></strong> and try to document them as much as possible.
By now, I solved my <strong>36th problem</strong> yesterday and never spend a day without hacking for an hour or two :).
Try it, and let me know if you spend some nights solving problems too !
BTW, be careful because there are plenty of solutions on the web (including my github). I use others code only afterwards to check if they have popped out with a more elegant solution than mine.
(Ok, I cheated for the Dijkstra's algorithm; knowing that I had to use it but too lazy to implement it by myself. . . )
Enjoy ;)

View File

@@ -0,0 +1,112 @@
---
layout: post
status: publish
published: true
title: Run for your life fellow developers
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 521
wordpress_url: http://www.lengrand.fr/?p=521
date: 2012-02-10 10:22:04.000000000 +01:00
categories:
- misc
- tips
tags:
- running
- software
- pomodoro
comments:
- id: 239
author: Michał
author_email: michal.chmielarz@gmail.com
author_url: ''
date: !binary |-
MjAxMi0wMi0xMiAxODo1ODozNyArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMi0xMiAxNzo1ODozNyArMDEwMA==
content: Well, it sounds good but I think this problem solving technique doesn't
applies when you are working for company and have to sit in the front of your
desk. On the other hand for a home base working it is quite interesting.
- id: 240
author: Fab
author_email: freiabc@gmail.com
author_url: ''
date: !binary |-
MjAxMi0wMi0xMyAwMToyNjoxOCArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMi0xMyAwMDoyNjoxOCArMDEwMA==
content: That surely is a good advice and I follow it whenever I can along the
shores of Cannes ;) Thanks too for the link on Euler project It's good to see
that you're fit in your head and on your feet ! See ya :)
- id: 242
author: Fadi
author_email: fe@itoctopus.com
author_url: http://www.itoctopus.com
date: !binary |-
MjAxMi0wMi0xMyAxNTowNDo0MSArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMi0xMyAxNDowNDo0MSArMDEwMA==
content: I use Pomodoro as well. Running is an excellent thing to do every day,
provided you are blessed with the right weather. Here in Canada we don't have
this luxury for about 6 months of the year...
- id: 243
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wMi0xMyAxNToxNzoyNiArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMi0xMyAxNDoxNzoyNiArMDEwMA==
content: ! "Well, you are hugely right. But it still applies in some companies in
which the code of conduct is more relaxed. I have always been amazed of the number
of people going for a run during the day when I worked in The Netherlands. \r\nBut
even without running, I would advise having a break outside your office instead
of checking personal websites.\r\nFresh air is a rare commodity in cubicles !"
- id: 244
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wMi0xMyAxNToxODozNSArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMi0xMyAxNDoxODozNSArMDEwMA==
content: Trying to at least ^^. I spend most of my time sending CVs and learning
web development with GAE those times. I keep Project Euler for night hours :p
- id: 245
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wMi0xMyAxNToyMDo0OSArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMi0xMyAxNDoyMDo0OSArMDEwMA==
content: ! "You may not be motivated enough :p.\r\nDon't you have subsititutes?
I know running on a treadmill in not fantastic compared to a proper footing, but
it is far better than nothing ! \r\nbtw, where are you working in Canada ?"
---
... till the inspiration comes !
If you stare at your computer screen for the last two hours, trying to figure out a software issue. If you keep swapping between Facebook, G+ and Stack Overflow waiting for the solution to comu up; then put your sport shoes on and have a run for half an hour!
<strong>Why?</strong>
Well, I won't make another discussion about the <a title="benefits of running" href="http://www.vanderbilt.edu/ans/psychology/health_psychology/running.html">benefits of running</a>, I'm sure you've had enough already. But while running, you can focus on your problem and get fully concentrating without being disturbed.
You won't be able to check FB, nor your mails. . .
But most of all, you will get even <strong>more concentrated</strong> than while resting. Your brain will enjoy focusing on something else than pain, and you will have it <strong>fully dedicated to solve your problem</strong>.
When you get back home, take a short shower, a drink, and get back to work <strong>immediately</strong>! Let things come, and use what you thought about during the foooting. This could become the most efficient hour of your day :p.
I started this back some weeks ago and is has almost become a necessity since then. I go for a run a soon as I get stuck for more than<strong> two <a title="pomodoro" href="http://en.wikipedia.org/wiki/Pomodoro_Technique">pomodoro </a>sandglasses</strong> (aka 50 min). And I can count on my hand the number of times I didn't come home with a solution, or at least a clue of where to look for :).
You can use this for anything you want. When younger, I used this to search for dissertation plans. Now, I sometimes use it to find motivation and write articles on my blog (can you imagine when this one came up? ).
And believe me, it's <strong>far more efficient</strong> than having another mug of coffee :D.
Finally, write down the date and how much time you ran. It's always good for your mind to keep track of your performance :).
Oh, and don't take your phone! ;)
&nbsp;
<strong>UPDATE</strong> : Some days ago, I found this interesting article related to my post :).
<strong><a title="courir c bon!" href="http://well.blogs.nytimes.com/2012/02/22/how-exercise-fuels-the-brain/" target="_blank">Here it is!</a></strong>

View File

@@ -0,0 +1,49 @@
---
layout: post
status: publish
published: true
title: Execute a function given its name as a string!
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 526
wordpress_url: http://www.lengrand.fr/?p=526
date: 2012-02-16 22:30:25.000000000 +01:00
categories:
- programming
- Lua
tags:
- web
- html
- software
- lua
- string
- function
comments: []
---
Well, interesting problem. . . if you are not working with Lua.
Some time ago, I developed a web interface that would interface with <a title="mipsee" href="http://www.advansee.com/mipsee.html">the camera I was working with</a>.
Being a fully autonomous system, <strong>Mipsee</strong> has limited ressources and<strong> PHP and databases</strong> were surely not the good solution for an embedded interface. I finally ended up with a<strong> Lua + HTML combo</strong>.
The idea was to be able to start a computer vision application (face detection, blob tracking, . . .) and see the results in real time directly from the web interface.
I searched for a simple way to detect and integrate new applications as they would be developed, <strong>without modifying the interface layer</strong>. In addition, those application would have <strong>variable inputs and outputs</strong>.
My solution was to bind any new binary with an interface file that would define inputs and outputs for the given application.
And here came the issue : I would have <strong>the name of the binary as a string value</strong>. <strong>How to launch it</strong> when needed?
Well, this could be a problem in C; but I was in Lua . . . Magic trick !
Problem solved in 3 simple lines of code :
[php]
post_func = loadstring(&quot;param = printf(\&quot;Hello ! \&quot;)&quot;)
post_func()
appli_repo = os.execute(param)
[/php]
if I want to execute param.
At first glance, I hated working with <a title="lua" href="http://www.lua.org/"><strong>Lua</strong> </a>which was way<strong> too messy and undocumented</strong> for me. But I'm still impressed by the capabilities of the language when correctly used.
For those who don't know Lua, this is a (portguese) language particularly used in video games. The user interface of WOW is for example fully developed in Lua  (and I still wonder why . . .).
So, if some of you know any other advantage of working with Lua, let me know ;).

View File

@@ -0,0 +1,49 @@
---
layout: post
status: publish
published: true
title: A (small but growing) list of computer vision companies
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 534
wordpress_url: http://www.lengrand.fr/?p=534
date: 2012-02-22 23:23:39.000000000 +01:00
categories:
- misc
- Computer Vision
tags: []
comments:
- id: 14061
author: Mehran
author_email: ghainian@gmail.com
author_url: ''
date: !binary |-
MjAxMy0wNy0wNiAxMTo1ODoxMyArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNy0wNiAxMDo1ODoxMyArMDIwMA==
content: ! "Hi Dear \r\ni am Mehran Ghainian . i have a master of software engineering
and 8 years of working experience in enterprise software development.i have worked
on one small sized Image Processing projects and my BS and MS thesis are both
in this era.\r\n\r\nnow i want work toward a PHD in computer vision. and i want
to know that how is the job market for a PHD of computer vision? which skills
are required?\r\nand is it easy to find a job with a PHD of Computer vision?\r\nthanks"
---
Hi,
Here is something I wanted to do for a long time.
Some time ago, I left France to go international. Since my 6 internship in The Hague, English had become a need and I absolutely wanted to work abroad.
As a computer vision engineer, find a job is both really difficult and very easy. Basically, it is quite easy to get hired, as you are in a specialized field and usually your resume don't get lost around thousands of others.
On the other hand, it can be very difficult to actually find the computer vision related companies. There are loads of them, but mostly small sized.
I started to write the name of each company I could find during my researches, with its main country and its broad specialty (medical, sattelites,  .  . .).
<strong><a title="Computer Vision companies" href="http://www.lengrand.fr/computer-vision-companies/" target="_blank">You will find it here</a></strong>, and It should be updated regularly !
Hope this can help some of you !
By the way, my vision is very small; so feel free to enlight me and help me fill this list ! Let me know if you are aware of companies not listed!

View File

@@ -0,0 +1,317 @@
---
layout: page
status: publish
published: true
title: Computer Vision companies
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 536
wordpress_url: http://www.lengrand.fr/?page_id=536
date: 2012-02-22 23:23:16.000000000 +01:00
categories: []
tags: []
comments:
- id: 359
author: A (small but growing) list of computer vision companies | loup2fu
author_email: ''
author_url: http://www.lengrand.fr/2012/02/a-small-but-growing-list-of-computer-vision-companies/
date: !binary |-
MjAxMi0wMi0yMiAyMzoyMzo1MSArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMi0yMiAyMjoyMzo1MSArMDEwMA==
content: ! '[...] You will find it here, and It should be updated regularly ! [...]'
- id: 4410
author: pradeep
author_email: pradeep.kambhampati@gmail.com
author_url: ''
date: !binary |-
MjAxMy0wMi0xNCAxNzowMzowNiArMDEwMA==
date_gmt: !binary |-
MjAxMy0wMi0xNCAxNjowMzowNiArMDEwMA==
content: ! "Thank you very much for image processing compnies. I found very useful
information.\r\n/Pradeep\r\nImage Analyst"
- id: 4411
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0wMi0xNCAxODowNDoxOCArMDEwMA==
date_gmt: !binary |-
MjAxMy0wMi0xNCAxNzowNDoxOCArMDEwMA==
content: Happy to see that it was useful for you !
- id: 5582
author: Krishna
author_email: Krishna@comp.leeds.ac.uk
author_url: ''
date: !binary |-
MjAxMy0wMy0xNiAxODoxNjozNCArMDEwMA==
date_gmt: !binary |-
MjAxMy0wMy0xNiAxNzoxNjozNCArMDEwMA==
content: ! "Dear julien\r\nYour website is really helpful. I am particulalrly looking
for vision research companies who would find the modelling of interactions between
people/objects useful. Also i am working on synergistic interactions between low
level (object detection/ tracking) and high level (event detection). Would you
be knowing any companies that may find this kind of expertise useful ? \r\nMany
thanks \r\nKrishna"
- id: 8424
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0wNC0xMSAwOTozMDozMyArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNC0xMSAwODozMDozMyArMDIwMA==
content: ! "Hi Krishna, \r\n\r\nThe only company I worked with in this field was
VTT, a finnish research center that was doing pretty much what you are talking
about. \r\n\r\nYou might want to try there :) http://www.vtt.fi/.\r\n\r\nRegards,"
- id: 13969
author: Rakshit
author_email: rak108@gmail.com
author_url: http://wwww.processingpixels.blogspot.com
date: !binary |-
MjAxMy0wNy0wNCAxNToxNzo0NiArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNy0wNCAxNDoxNzo0NiArMDIwMA==
content: ! "Hi Julien,\r\n\r\nIndeed, a very informative list. This shall come in
handy once I am ready to come out of the academic world! Thank you, and I hope
to see your updates very soon\r\n\r\nregards\r\nRakshit"
- id: 18193
author: Esha
author_email: ESHA@OPTRASYSTEMS.COM
author_url: http://www.optrascan.com/
date: !binary |-
MjAxMy0xMC0wNCAwOToxMjoyNCArMDIwMA==
date_gmt: !binary |-
MjAxMy0xMC0wNCAwODoxMjoyNCArMDIwMA==
content: ! "Hi Julien \r\n\r\nYou page is very useful . I was Lookin for Inspection
solutions . Got info from here . \r\n\r\nAlso with this i`d also like you to add
Our Company`s website - www.optrascan.com - we deal on digital pathology scanner
,medical Image Analysis, LIMS &amp; Lab informatics Solutions .\r\n\r\nBest Regrads
\r\nEsha"
- id: 18245
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0xMC0wNSAxMzoxODoyNyArMDIwMA==
date_gmt: !binary |-
MjAxMy0xMC0wNSAxMjoxODoyNyArMDIwMA==
content: ! "Hey Esha, \r\n\r\nHappy the list helped you out!\r\nI added OptraScan
to the list. Let me know if the 3 words summary suits you.\r\n\r\nRegards, \r\nJulien"
- id: 18377
author: wajih ullah baig
author_email: wajihullahbaig@gmail.com
author_url: ''
date: !binary |-
MjAxMy0xMC0wOCAxMzo0OToxNiArMDIwMA==
date_gmt: !binary |-
MjAxMy0xMC0wOCAxMjo0OToxNiArMDIwMA==
content: Wonderful. I was looking for such a list!
- id: 18446
author: Esha
author_email: ESHA@OPTRASYSTEMS.COM
author_url: http://www.optrascan.com/
date: !binary |-
MjAxMy0xMC0xMCAwNzoxNTozNyArMDIwMA==
date_gmt: !binary |-
MjAxMy0xMC0xMCAwNjoxNTozNyArMDIwMA==
content: Great .. Its perfect ! Thanks a lot
- id: 20967
author: nkanu nkanu isong
author_email: isongnkanunkanu@yahoo.com
author_url: ''
date: !binary |-
MjAxMy0xMS0yOCAxMDozMDo0MyArMDEwMA==
date_gmt: !binary |-
MjAxMy0xMS0yOCAwOTozMDo0MyArMDEwMA==
content: please i need information on companies were i undergo training on image
analysis.please somebody help me out,thks,from nkanu
---
Here is a (humble) list of Image Processing / Computer Vision based companies around the world.
Even though image processing is a field in rampant development, I recently struggled to locate such companies when searching for a new job. The problem was in fact not to get hired but to find companies that would match my centre of interests !
Thus, I started to keep track of every firm I would hear about and may be interested in my profile. I hope this can help some of you !
The companies below are listed by  country. For each of them, you will find the main website and a quick summary of the field of expertise (keywords). Once my list is populated enough, I might think about a more evoluated system :).
<strong>CANADA</strong>
<ul>
<li><a title="clmtec" href="http://www.cimtec-canada.ca" target="_blank">ClmTec</a> - medical Image Analysis, digital pathology</li>
<li><a title="ikomed" href="http://www.ikomed.com/careers/" target="_blank">Ikomed </a>- medical Image Analysis</li>
</ul>
<strong>FRANCE</strong>
<ul>
<li><a title="pleiades tech" href="http://www.pleiades-technologies.com/" target="_blank">Pleiades techs</a> - contract company</li>
<li><a title="dxo labs" href="http://www.dxo.com/us/photo" target="_blank">DxO Labs</a> - image enhancement technologies</li>
<li><a title="geosys" href="http://www.geosys.com/" target="_blank">GeoSys</a> - agriculture performance</li>
<li><a title="exelis vis" href="http://www.exelisvis.com/" target="_blank">Exelis VIS</a> - visual information solutions</li>
<li><a title="vidatis" href="http://www.vidatis.fr/" target="_blank">Vidatis </a>- video processing</li>
<li><a title="moodstocks" href="http://www.moodstocks.com/" target="_blank">Moodstocks </a>- mobile image recognition</li>
<li><a title="diotasoft" href="http://www.diotasoft.com/spip.php?article3" target="_blank">Diotasoft </a>- 3D virtual reality</li>
<li><a title="pimaia" href="http://pimaia.com/" target="_blank">Pimaia</a> - Picture &amp; Illustration Modeling Automatism</li>
</ul>
<strong>UNITED STATES</strong>
<ul>
<li><a title="gentex corporation" href="http://www.gentex.com/" target="_blank">Gentex corporation</a> - smart driving systems</li>
<li><a title="a9" href="http://a9.com/" target="_blank">A9 </a>- visual search solutions</li>
<li><a title="COGNEX" href="http://www.cognex.com/main.aspx?langtype=1033&amp;locale=us">COGNEX</a> - industrial applications</li>
<li><a title="hp labs" href="http://www.hpl.hp.com/" target="_blank">HP Labs</a> - machine learning</li>
<li><a title="philips healthcare" href="http://www.healthcare.philips.com/" target="_blank">Philips Healthcare</a> - medical imagery</li>
<li><a title="interphase" href="http://www.iphase.com" target="_blank">Interphase</a> - desktop virtualization solutions</li>
<li><a title="Nokia" href="www.nokia.com/global/about-nokia/careers/" target="_blank">NOKIA</a> - 3D mapping technology</li>
<li><a title="Kla Tencor" href="http://www.kla-tencor.com" target="_blank">KLA-Tencor</a> - metrology, optics, inspection platforms</li>
<li><a title="immersive labs" href="http://immersivelabs.com/" target="_blank">Immersive Labs</a> - computer vision based advertising technology</li>
<li><a title="intuitive surgical" href="http://intuitivesurgical.hodesiq.com/job_detail.asp?JobID=2900801" target="_blank">Intuitive Surgical</a> - robot-assisted surgery</li>
<li><a title="igbweb" href="http://www.ibgweb.com/about/company" target="_blank">IBG </a>- biometric systems</li>
<li><a title="imimtek" href="http://imimtek.com/" target="_blank">Imimtek </a>- user interfaces</li>
<li><a title="ppt vision" href="http://www.pptvision.com/index.html" target="_blank">PPT Vision</a> -  automated inspection systems</li>
<li><a title="HHMI" href="http://www.hhmi.org/janelia/" target="_blank">HHMI</a> - medical imagery</li>
<li><a title="occipital" href="http://occipital.com/jobs" target="_blank">Occipital</a> - natural user interfaces</li>
<li><a title="ng" href="http://careers.northropgrumman.com/career_areas.html" target="_blank">Northrop Grumman</a> - security, defence</li>
<li><a title="justin.tv" href="http://jobs.justin.tv/index.html" target="_blank">Justin.tv</a> - live video platform</li>
<li><a title="incogna" href="http://www.incogna.com/?p=careers" target="_blank">Incogna </a>- image search engine</li>
<li><a title="video surf" href="http://www.videosurf.com/jobs" target="_blank">Video Surf</a> - video search engine</li>
<li><a title="tyzx" href="http://www.tyzx.com/careers/index.html" target="_blank">tyzx </a>- 3D sensors</li>
<li><a title="object video" href="http://www.objectvideo.com/" target="_blank">Object Video</a> - video processing algorithms</li>
<li><a title="honeywell" href="http://honeywell.com/Solutions-Technologies/Pages/security.aspx" target="_blank">Honeywell </a>- Video Analytics</li>
<li><a title="skybox" href="http://skyboximaging.com/careers/culture" target="_blank">SkyBox </a>- Satellite Imagery</li>
<li><a title="park assist" href="www.parkassist.com" target="_blank">Park Assist</a> - parking lot space monitoring</li>
<li><a title="ailive" href="http://www.ailive.net/careers.html" target="_blank">AiLive</a> - Motion recognition and tracking</li>
<li><a title="hover" href="http://www.hoverinc.com/hover-jobs.php" target="_blank">Hover</a> - 3D Mapping</li>
<li><a title="aptina" href="http://www.aptina.com/careers/" target="_blank">Aptina</a> - CMOS Technology</li>
<li><a title="OptraScan website" href="http://www.optrascan.com/" target="_blank">OptraScan</a> - Digital Pathology Solutions</li>
<li><a title="Honda Research" href="http://www.hondaresearch.com/" target="_blank">Honda Research</a> - Scene Understanding and Risk Assessment</li>
<li><a title="Image Metrics main page" href="http://www.image-metrics.com/" target="_blank">Image Metrics</a> - Facial analysis</li>
<li><a title="Pelican Imaging Main PAge" href="http://www.pelicanimaging.com/" target="_blank">Pelican Imaging</a> - 3D photography</li>
</ul>
<strong>INDIA </strong>
<ul>
<li><a title="GE Global Research" href="http://ge.geglobalresearch.com/" target="_blank">GE Global Research</a> - medical image analysis</li>
<li><a title="Yahoo!" href="http://labs.yahoo.com/" target="_blank">Yahoo!</a> - machine learning, data mining, information retrieval</li>
<li><a title="optra systems" href="http://www.optrasystems.com/" target="_blank">Optra Systems</a> - algorithm development</li>
<li><a title="vizzitec" href="http://vizzitec.com/" target="_blank">Vizzitec </a>- Visual Inspection Solutions</li>
</ul>
<div><strong>SPAIN</strong></div>
<div></div>
<div>
<ul>
<li><a title="ARLab" href="http://www.arlab.com/">ARLab</a> - augmented reality for desktops and smartphones</li>
<li><a title="ElipseAR " href="http://elipsear.com/contact" target="_blank">EllipseAR</a> - mobile real-time tracking</li>
<li><a title="visiza" href="http://www.visiza.com/en/" target="_blank">VISIZA</a> - object recognition and people recognition</li>
<li><a title="Samsamia website" href="http://www.samsamia.com/" target="_blank">Samsamia </a>- machine learning apps to the fashion market</li>
</ul>
</div>
<div>
<strong>GERMANY </strong>
<ul>
<li><a title="carl zeiss" href="http://www.zeiss.de/C12567A100537AB9?Open" target="_blank">Carl Zeiss</a> - medical industry, optics</li>
<li><a title="atlas elektronik" href="http://www.atlas-elektronik.com/en/company/" target="_blank">Atlas Elektronik</a> - Naval electronics</li>
</ul>
</div>
<div>
<strong>NORWAY </strong>
<ul>
<li><a title="tordivel" href="http://www.scorpionvision.com/31.html" target="_blank">Tordivel</a> - industrial machine vision, 3D modeling</li>
</ul>
</div>
<div>
<div>
<strong>SWEDEN</strong>
<ul>
<li><a title="spacemetric" href="http://www.spacemetric.com/about" target="_blank">Spacemetric</a>- geospatial imagery management</li>
<li><a title="smarteye" href="http://www.smarteye.se/" target="_blank">Smarteye</a> - eye tracking technology</li>
<li><a title="axis communications" href="http://www.axis.com/" target="_blank">Axis Communications</a> - IP video solutions</li>
<li><a title="Cella Vision" href="http://www.cellavision.com/" target="_blank">Cella Vision</a>- body fluids analysis</li>
<li><a title="scalado" href="http://www.scalado.com/display/en/Home" target="_blank">Scalado</a> - mobile imagery solutions</li>
<li><a title="anoto" href="http://www.anoto.com/" target="_blank">Anoto </a>- digital pen technology</li>
<li><a title="tobii" href="http://www.tobii.com/" target="_blank">Tobii</a> - gaze tracking technology</li>
<li><a title="oculus" href="http://www.oculusai.com/index.html" target="_blank">Oculus </a>- image recognition technology</li>
<li><a title="flir" href="http://www.flir.com/NL/" target="_blank">Flir </a>- thermal imaging</li>
</ul>
</div>
</div>
<div>
<strong>UK</strong>
<ul>
<li><a title="image metrics" href="http://www.image-metrics.com/Company/About" target="_blank">Image Metrics</a> - 3D facial animation</li>
<li><a title="Nine Point Medical" href="http://www.ninepointmedical.com/#/company" target="_blank">Nine Point Medical</a> - optical systems for in vivo diagnosis</li>
<li><a title="Sony " href="http://www.playstationjobs.co.uk/vacancy/437-Computer-Vision-Researcher-%28Gaming-interfaces%29&amp;page=1" target="_blank">Sony </a>- gaming interface</li>
</ul>
</div>
<div>
<strong>NORWAY</strong>
<ul>
<li><a title="CMR" href="http://www.cmr.no/" target="_blank" rel="nofollow">Christian Michelsen Research</a> - visualization, data analysis</li>
</ul>
</div>
<div>
<strong>TURKEY</strong>
<ul>
<li><a title="Kade Vision" href="http://www.linkedin.com/company/kade-vision" target="_blank">Kade Vision</a> - video analytics</li>
</ul>
<div>
<strong>NETHERLANDS</strong>
<ul>
<li><a title="third sight" href="http://thirdsight.co/" target="_blank">ThirdSight</a> - Emotion and Face recognition</li>
<li><a title="philips" href="http://jobs.philips.com/" target="_blank">Philips </a>- medical imagery</li>
<li><a title="virtual proteins" href="http://www.virtualproteins.com/" target="_blank">Virtual Proteins</a> - 3D medical imagery</li>
<li><a title="layar" href="http://www.layar.com/company/jobs/" target="_blank">Layar </a>- mobile augmented reality</li>
<li><a title="ps-tech" href="http://ps-tech.com/tracking/pst-55/" target="_blank">Ps-tech</a> - optical tracking device</li>
<li><a title="`TNO" href="http://www.tno.nl/werkenbij/" target="_blank">TNO </a>- All kind of Image Processing</li>
<li><a title="SightCorp's website" href="http://sightcorp.com/" target="_blank">SightCorp</a><a title="`TNO" href="http://www.tno.nl/werkenbij/" target="_blank"> </a>- Face Analysis Technologies</li>
</ul>
</div>
</div>
<div>
<strong>BELGIUM</strong>
<ul>
<li><a title="traficon" href="http://www.traficon.com/index.jsp" target="_blank">Traficon </a>- traffic video analytics</li>
</ul>
</div>
<div>
<strong>JAPAN</strong>
<ul>
<li><a title="ayonix" href="http://ayonix.com/" target="_blank">Ayonix</a> - facial recognition</li>
</ul>
</div>
<div>
<strong>SWITZERLAND</strong>
<ul>
<li><a title="crisalix home" href="http://www.crisalix.com/en" target="_blank">Crisalix</a> - aesthetic and plastic surgery</li>
</ul>
</div>
<div>
<strong>ISRAEL</strong>
<ul>
<li><a title="picscout website" href="http://www.picscout.com/">PicScout </a>- Track, license and monetize imagery</li>
</ul>
</div>
<div><strong>LINKS</strong></div>
<div></div>
<div>Here are some places I found on the web that also aim at listing image processing related companies. They might help you too !</div>
<div>
<ul>
<li><a title="cs.ubc.ca" href="http://www.cs.ubc.ca/~lowe/vision.html" target="_blank">A list of companies developing industrial products </a></li>
<li><a title="UK companies" href="http://www.bmva.org/w/visioncompanies" target="_blank">A list focusing on UK based companies</a></li>
<li><a title="CV startups " href="http://www.shawnlankton.com/2007/10/computer-vision-startups/" target="_blank">A website focusing on start ups</a></li>
<li><a title="search engine" href="http://www.imageprocessingjobs.com/a/jbb/find-jobs" target="_blank">A search engine for image processing jobs</a></li>
</ul>
</div>
<div></div>
<div>I update this list as soon as I find new materials. If you know about companies that are not listed yet, send me a message and I'll be glad to add it here!</div>
<div></div>
<div><em>Last update : 5th February 2014</em></div>

View File

@@ -0,0 +1,64 @@
---
layout: post
status: publish
published: true
title: Profiling a Python Script
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 546
wordpress_url: http://www.lengrand.fr/?p=546
date: 2012-02-29 11:43:08.000000000 +01:00
categories:
- Python
tags:
- project euler
- profile
- profiler
- module
- stack overflow
comments: []
---
Here are some simple ways to profile Python scripts.I heavily use this to check my <strong><a title="PE solutions" href="https://github.com/jlengrand/project_euler" target="_blank">Project Euler solutions</a></strong>.
<h1></h1>
<h1><strong>SOLUTION 1:</strong></h1>
The main common option would be to use the <a title="profile" href="http://docs.python.org/library/profile.html?highlight=profile#cProfile" target="_blank"><strong>profile</strong> </a>(or <strong><a title="cprofile" href="http://docs.python.org/library/profile.html?highlight=profile#cProfile" target="_blank">cprofile</a></strong>) module.There are two different ways of using it :
<ul>
<li>As a module, by directly running</li>
</ul>
<div>[python]
python -m cProfile script.py
[/python]
</div>
<div></div>
<div>
<ul>
<li>In your code, by importing the utilities</li>
</ul>
<div>[python]
import cProfile
cProfile.run('function()') # in your __main__
[/python]
<em>Bonus : You can use several options for sorting results using the -s switch (cumulative/name/time/file sorting are available).</em>
<h1><strong>SOLUTION 2:</strong></h1>
If you want to avoid using a command line, or you don't have the profile module installed; here os another possibility. There is also the <strong><a title="timeit module" href="http://docs.python.org/library/timeit.html" target="_blank">timeit </a></strong>module available.
[python]
import timeit
t1 = timeit.Timer(&quot;function()&quot;, &quot;from __main__ import function&quot;)
print t1.timeit(1)
[/python]
I use this option on Eclipse because I didn't want to install the profile module on Windows.
This is however less clear, and way less detailed while still useful :).
Choose you profiler option and get on <a title="PE" href="http://projecteuler.net/" target="_blank"><strong>Project Euler</strong> </a>!
[<a title="SO" href="http://stackoverflow.com/questions/582336/how-can-you-profile-a-python-script" target="_blank">Stack Overflow</a>]
</div>
</div>

View File

@@ -0,0 +1,17 @@
---
layout: nav_menu_item
status: publish
published: true
title: Computer Vision Jobs
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 558
wordpress_url: http://www.lengrand.fr/?p=558
date: 2012-03-05 22:55:46.000000000 +01:00
categories: []
tags: []
comments: []
---

View File

@@ -0,0 +1,193 @@
---
layout: post
status: publish
published: true
title: Efficiently handle knowledge as a Computer Scientist
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 559
wordpress_url: http://www.lengrand.fr/?p=559
date: 2012-03-09 10:49:51.000000000 +01:00
categories:
- misc
- tips
tags:
- agile
- knowledge
- memory
- mendeley
- calibre
- management
- tool
comments:
- id: 536
author: Sam
author_email: only1lif3@gmail.com
author_url: ''
date: !binary |-
MjAxMi0wMy0xMCAxNzozNzo0OSArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMy0xMCAxNjozNzo0OSArMDEwMA==
content: Please don't buy into the lie that you have a bad memory. Read http://goo.gl/zHFm4
- id: 537
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wMy0xMCAxNzo1MToxMCArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMy0xMCAxNjo1MToxMCArMDEwMA==
content: ! "Well, I really do actually. \r\nThat's why learning stuff by heart to
pass school exams has always been awful.\r\nBut I think this is not actually a
real problem as soon as you find a way to counter this. I try to replace memory
by efficiency :). \r\n\r\nBut I'll definitely have a look to your book, thanks
!"
- id: 538
author: Efficiently handle knowledge as a Computer Scientist &laquo; Secret Blog
author_email: ''
author_url: http://eminter25391.wordpress.com/2012/03/10/efficiently-handle-knowledge-as-a-computer-scientist/
date: !binary |-
MjAxMi0wMy0xMCAxODozNDozMCArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMy0xMCAxNzozNDozMCArMDEwMA==
content: ! '[...] http://www.lengrand.fr/2012/03/efficiently-handle-knowledge-as-a-computer-scientist/
Like this:LikeBe the first to like this post. &nbsp;March 10, 2012 &nbsp;eminter25391 [...]'
- id: 539
author: alx
author_email: aaa@gaa.com
author_url: ''
date: !binary |-
MjAxMi0wMy0xMCAxOTo0NDoxOSArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMy0xMCAxODo0NDoxOSArMDEwMA==
content: ! "Very useful mendeley, thanks a lot, i have the same memory problem and
the information management is not easy haha, this cloud-app looks awesome... \r\n\r\nI
just registered :) Can i see your library? I'm an spanish researcher interested
in all related to computer science :) \r\n\r\nThanks a lot!!!"
- id: 540
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wMy0xMCAxOTo1MTo0MiArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMy0xMCAxODo1MTo0MiArMDEwMA==
content: ! "Glad it helped :). \r\nI think you might be able to think what I put
online. But I shared nothing yet. \r\nLet me check and see if I can sort something
out :)."
- id: 541
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wMy0xMCAxOTo1MzoxOCArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMy0xMCAxODo1MzoxOCArMDEwMA==
content: Hum. Apparently I have to add you as a friend so that you can see my publications.
You can find me as jlengrand, or julien lengrand-lambert ;)
- id: 542
author: alx
author_email: aaa@gaa.com
author_url: ''
date: !binary |-
MjAxMi0wMy0xMCAxOTo1NzoyNCArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMy0xMCAxODo1NzoyNCArMDEwMA==
content: ! "I added you :) It seems that you have 2 accounts :\r\n\r\nhttp://www.mendeley.com/profiles/julien-lengrand-lambert\r\n\r\nand\r\n\r\nhttp://www.mendeley.com/profiles/julien-lengrand-lambert1/\r\n\r\nI
added you as a friend to the first one!"
- id: 544
author: Toby
author_email: dreynolds@gmail.com
author_url: ''
date: !binary |-
MjAxMi0wMy0xMSAwMTo0ODoyMSArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMy0xMSAwMDo0ODoyMSArMDEwMA==
content: ! "From the author of that book via your link: \"The techniques I learned,
and used in the memory contest, are great for remembering structured information
like shopping lists or phone numbers, but they don't improve any sort of underlying,
generalizable memory ability.\"\r\n\r\nIn other words, they don't help in this
scenario."
- id: 578
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wMy0xMSAwOToyNzoyNiArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMy0xMSAwODoyNzoyNiArMDEwMA==
content: It seems indeed :). I'll keep my notebook + pen in pocket as my main brain
for now :)
- id: 579
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wMy0xMSAwOToyOTozNCArMDEwMA==
date_gmt: !binary |-
MjAxMi0wMy0xMSAwODoyOTozNCArMDEwMA==
content: ! "I have two accounts. One I used at work, and the other at home. \nHopefully
you chose the good one :). \n\nI should remove the other one soon ."
- id: 8991
author: Let&#8217;s scratch those itches! | loup2fu
author_email: ''
author_url: http://www.lengrand.fr/2013/04/lets-scratch-those-itches/
date: !binary |-
MjAxMy0wNC0xNyAxNDoyODoyOCArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNC0xNyAxMzoyODoyOCArMDIwMA==
content: ! '[...] habit has been here as long as I can remember. I know I have a
really bad memory. I always had. So noting down stuff is the best way for me to
cope with this brain full of holes. [...]'
---
<strong>I love to learn</strong>. Each day. A bit more of what the world has to offer. I <strong>read a lot</strong> of technical stuff. I spend a lot of time reading about all kind of subjects, most of it being computer science / computer vision related.
I also have a <strong>really bad memory</strong>. If I rarely forget a face, I must say I have already forgotten 80% of the programming languages and libraries I haven't been working with for more than 10 days. I spent years with<strong> hundreds of bookmarks in my browser</strong>, classified into folders that would also contain other folders. . .
But if this could be a problem, my experience in research centers helped me find a nice workaround to highly increase my efficiency. Having no memory is no great deal, as soon as you are able to quickly process and find information. And a weak my long-term memory, as strong my need for organization.
As a researcher, part of your job consists in being an expert in your field and "keep both eyes open". Some of your time should be spent reading publications related (or not) to your curent projects. And most researchers I know have their own way to handle this big piece of "paper knowledge" they process. While being in <strong><a title="TNO" href="http://www.tno.nl/" target="_blank">TNO</a></strong>, I found one piece of tool that I never stopped using : <strong><a title="mendeley" href="http://www.mendeley.com/" target="_blank">Mendeley Desktop</a></strong>.
Basically speaking, <strong><a title="mendeley" href="http://www.mendeley.com/" target="_blank">Mendeley</a></strong> is a publication management tool. It would help you keep track of your publications by extracting meda-data from the pdfs, and sort them out for you. For each document, you can access its authors, abstract, . . . And you can also set these meta-data and add keywords or tags.
While keywords are often already filled by the authors of the pdfs, <strong>tags have become my very scret weapon</strong>.
[caption id="" align="alignnone" width="552" caption="main window of Mendeley Desktop"]<a href="http://dl.dropbox.com/u/4286043/mendeley.jpg"><img class=" " title="mendeley desktop" src="http://dl.dropbox.com/u/4286043/mendeley.jpg" alt="mendeley desktop" width="552" height="301" /></a>[/caption]
There are<strong> 3 major things</strong> I want to show you here that can help you efficiently handle tons of information.
First of all, the center part of the screen is dedicated to the list of pdfs you have in your library. And what I love is the <strong>small green circle</strong> you can find on the left part of the list. It shows whether you have already read the paper or not. This is very useful if you have to store a lot of papers in the same place (like me).
Then, the right part of the screen. It shows all the meta-data available for each pdf. Once I have finished to read a paper, I switch the green circle to grey to show that this information has been processed and I add some tags.
Here are the tags hierarchy I would always fill in :
<ul>
<li><strong>Name of the project</strong> for which this piece of information has been useful.</li>
<li><strong>Programming language</strong> used in the paper</li>
<li>General information about the <strong>field of the article</strong> (web development, marketing, agile, . . .)</li>
<li><strong>Precise name</strong> of the module/library/tip (pickle, coding style, opencv, . . .)</li>
<li><strong>read tag</strong>, double check of the green circle (in case I want to access this piece of information using scripts).</li>
</ul>
Last but not least, the bottom right part of the screen is dedicated to document filtering.
This is the tool I use to quickly find back some information that are already part of my "knowledge".
While working, I eventually have to search for some tips or module. Most of the time, I already know some of what I search, but need precisions (ex : I want to use memoization, but am not sure whether to use a dict or a list . . . ). I quickly jump to<strong> my second brain</strong>, ie. Mendeley and type the memoization keyword.
I would get the answer I search for immediately. Less than 1 minut later, my code is usually ready to go.
With time, I <strong>got rid of 95% of my web bookmarks</strong>. When I find some useful information on the web, <strong>I simply print the article as a pdf and store it into my knowledge database</strong>. Having Mendeley always open next to my code, this way of searching is way faster than finding a bookmark back in a browser :).
And as a bonus, your knowledge is also available offline, and you don't need your<strong> <a title="hyperion" href="http://en.wikipedia.org/wiki/Hyperion_(Simmons_novel)" target="_blank">chrome persoc</a></strong> anymore :).
<h2>Some more information (BONUS part) :</h2>
As I code at work, in the train and also at home, my knowledge database has to be available in at least 3 different computers.
Best of luck, Mendeley is pretty efficient and well developed, and as long as you don't use special characters <strong>you can use the software on different OSes without messing everything up</strong> (I tried Windows and Linux versions).
What you have to do is to install the piece of software on each computer, and give Mendeley a folder to watch.
I tried using a <strong>portable USB key</strong> to keep all my papers on the same place for some time, but it appear that it is greatly<strong> human-failure dependant</strong> (I kept forgettin' the damn key).
What I use now for a complete real-time synchronization is simply a <strong><a title="dropbox referral" href="http://db.tt/pdGVlyW" target="_blank">Dropbox</a></strong> folder. This way, everything is updated real-time (assuming you won't update the same file on different computers at the same time. . . ) on all your computers.
Another "similar" tool is <strong><a title="calibre" href="http://calibre-ebook.com/" target="_blank">Calibre</a></strong>, a pretty efficient library management tool. But I prefer using it <strong>only for ebooks</strong>, while using <strong>Mendeley</strong> for small ( not more than 100 pages) documents. Basically if it has a cover page, I'll put it in my Calibre database :).
<em>Note : Mendeley has a lot more capabilities (publication sharing, friends wish list, . . . ) and what I present here is only a tiny part of the software. I don't use them though, and I think they a</em><em>re not into the frame of this article.</em>
Your turn now, let me know about your own way of handling the huge quantity of information we have to deal with every day in CS !
Julien
<strong>UPDATE : You can join the group contaning my list of publication related to computer vision <a title="computer vision papers" href="http://www.mendeley.com/groups/1982081/look-up-to-the-future/">here</a>!</strong>

View File

@@ -0,0 +1,63 @@
---
layout: post
status: publish
published: true
title: Sonar images segmentation and classification fusion
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 250
wordpress_url: http://www.lengrandlambert.fr/wordpress/?p=250
date: 2012-05-13 13:54:30.000000000 +02:00
categories:
- Computer Vision
- Matlab
tags:
- image processing
- matlab
- classification
- sonar
- segmetnation
- level sets
- publication
- ecua
- egc
comments: []
---
Today's article will present one of my former experience that led to two publications in european conventions.
It dealt with automatic <a title="segmentation wikipedia" href="http://en.wikipedia.org/wiki/Segmentation_(image_processing)" target="_blank">segmentation </a>and <a title="classification wikipedia" href="http://en.wikipedia.org/wiki/Classification_in_machine_learning" target="_blank">classification </a>of sonar images.
It has become really easily nowadays to precisely <strong>keep track of a precise position on a map</strong>; using satellite or aerial images and ground control points that are known to stay still over time.
This is <strong>completely different underwater</strong>, where the<strong> environment constantly changes</strong>, and the number of ground control points is dramatically reduced (wrecks, huge rocks, . . . ). In addition, the bottom of the sea tend to be very uniform compared to ground surface.
In order to solve this issue,<strong> scientists tend to focus on edges between surfaces</strong>, limits between sand zones and pebbles for example.
And the ideal would be to be able to accurately and fully automatically find those edges, together with the type of each surface. Using such a method would allow to create precise maps of the sea floor at reduced costs.
But this problem is way more complex that it seems, especially if you consider that<strong> the edges between surfaces change with time</strong> !
In fact, even humans struggle to get the same results whith manual classification.
If have been working on this subject for a bit less than 6 months, which means that this publication is<strong> a preleminary study</strong> aiming at helping further development.
In this paper, I present a new method that merge a  <strong>feature based classification</strong> which involves a training with <strong>an edge focused method</strong>.
As a basis for the region based algorithm, I used the<a title="level sets wikipedia" href="http://en.wikipedia.org/wiki/Level_set_method" target="_blank"> level-sets method</a>.
With one part of the algorithm searching for homogen zones and the other searching for limits, one can hope to get nice results once merged !
<strong><a title="GESMA_EGC" href="http://dl.dropbox.com/u/4286043/00_Website/01_Publis/Fusion_GESMA_EGC.pdf" target="_blank">Here is a link</a></strong> to the french version of the paper, presented at the <a title="EGC2010" href="http://www.projets.rnu.tn/egc2010/" target="_blank">"10ème Conférence Internationale Francophone sur l'Extraction et la Gestion des Connaissances (EGC)"</a>
<strong><a title="GESMA_ECUA" href="http://dl.dropbox.com/u/4286043/00_Website/01_Publis/Fusion_GESMA_ECUA.pdf" target="_blank">The english version</a></strong> was presented one year later at<a title="ECUA 2010" href="http://www.eaa-fenestra.org/event-calendar/list_of_events/2010/event.2009-06-30" target="_blank"> "10th European Conference on Underwater Acoustics (ECUA) 2010"</a>.
Just for the beauty of it, I want to quickly present some results :
Here is an example of sonar image manually segmented by two different experts. Observe how the results are similar, but also different at the same time.
<a href="http://dl.dropbox.com/u/4286043/expert.png"><img class="aligncenter" src="http://dl.dropbox.com/u/4286043/expert.png" alt="" border="0" /></a>
Here is the results I got using my fully automated method :
<a href="http://dl.dropbox.com/u/4286043/algo.png"><img class="aligncenter" src="http://dl.dropbox.com/u/4286043/algo.png" alt="" border="0" /></a>
Results are actually<strong> quite promising</strong>, given the amount of time I have been working on the subject! (You can have some precise results in the paper)
I just hope that this work will be used later and lead to even more interesting results !
I plan on releasing the code I developed for this project on GitHub. I'll have to clean it up first, though :)
Hope some of you will be interested
See you soon !
Thanks to <strong><a title="arnaud martin" href="http://www.arnaud.martin.free.fr/" target="_blank">Arnaud Martin</a></strong>, <a title="ensta bretagne" href="http://www.ensta-bretagne.fr/" target="_blank">ENSTA Bretagne</a> for having been a helpful teacher; and to <strong>Romain Courtis</strong>, <a title="gesma" href="http://www.defense.gouv.fr/dga/la-dga2/expertise-et-essais/gesma" target="_blank">GESMA </a>for his support.

View File

@@ -0,0 +1,47 @@
---
layout: post
status: publish
published: true
title: Easily change file separator
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 592
wordpress_url: http://www.lengrand.fr/?p=592
date: 2012-05-17 15:37:56.000000000 +02:00
categories:
- tips
- programming
tags:
- bash
- sed
- separator
- file
- csv
- awk
comments: []
---
You may already have found yourself in front of a huge csv file to be processed. Five minutes after having started working, you realize that you want spaces instead of commas in your file. Only problem, the file is 500 megabytes big.
Do you run Linux ? In this case, your case will be solved in 10 seconds (who said as usual ? :p).
Simply open a console and run this line
[bash]
sed -e $&quot;s/,/\ /g&quot; myfile &gt; newfile
[/bash]
or more generally,
[bash]
sed -e $&quot;s/old_separator/new_separator/g&quot; myfile &gt; newfile
[/bash]
If not, well <a title="why linux is better" href="http://www.whylinuxisbetter.net/" target="_blank">you may want to think about switching</a> then :)
Thanks to <a title="frafra" href="http://liveusb.info/dotclear/" target="_blank">Frafra</a> for the tip ;)

View File

@@ -0,0 +1,52 @@
---
layout: post
status: publish
published: true
title: Insert urls into a Latex document
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 598
wordpress_url: http://www.lengrand.fr/?p=598
date: 2012-05-21 13:18:59.000000000 +02:00
categories:
- tips
tags:
- latex
- url
- document
- texmaker
comments: []
---
A really simple tip today, that helped me a lot some time ago.
If you use <a title="latex" href="http://fr.wikipedia.org/wiki/LaTeX" target="_blank">LaTeX</a> to create your reports, you may want to include weblinks or urls.
The process is quite simple, simply include the url package in the header of your document
[bash]
\usepackage{url}
[/bash]
and then insert your desired url :
[bash]
\url{http://www.lengrand.fr}
[/bash]
You may want to play a bit, a there are different url styles. Here is a simple example
[bash]
\urlstyle{rm}
[/bash]
Of course, all those links are still active after your pdf conversion!
Long time I haven't used Latex, I tend to write everything with <a title="GDocs" href="https://docs.google.com/a/spacemetric.com/#home" target="_blank">GDocs </a>now :)

View File

@@ -0,0 +1,39 @@
---
layout: post
status: publish
published: true
title: Count the number of lines of code of your projects
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 605
wordpress_url: http://www.lengrand.fr/?p=605
date: 2012-05-22 12:40:04.000000000 +02:00
categories:
- tips
tags:
- bash
- software
- development
- command
- lines
comments: []
---
After having finished a project, I always like to know its actual size. It does not give any value to my work, but it is always fun to see :)
I found this simple command that will pop out the number of lines of code for a given file extension.
[bash]
cat `find . -name &quot;*.py&quot;` | wc -l
[/bash]
You can also do it for a whole folder
[bash]
find . -name &quot;*.py&quot; | xargs wc -l
[/bash]

View File

@@ -0,0 +1,273 @@
---
layout: post
status: publish
published: true
title: Design, Innovation and Hacking in a couch
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 608
wordpress_url: http://www.lengrand.fr/?p=608
date: 2012-05-29 09:23:30.000000000 +02:00
categories:
- misc
tags:
- design
- ikea
- manstad
- hacking
- cool stuff
comments:
- id: 1059
author: Rich Jones - Gun.io
author_email: rich@gun.io
author_url: http://gun.io
date: !binary |-
MjAxMi0wNS0yOSAxMDoyMjoxOCArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAwOToyMjoxOCArMDIwMA==
content: ! "Love the post!\r\n\r\nMaaaaan, I know about the 'Lack'. I know _allllllll_
about the 'Lack.' Great shitty table."
- id: 1061
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wNS0yOSAxMjowMzowMiArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxMTowMzowMiArMDIwMA==
content: Shitty materials perhaps, but I still have had dozens of them without even
breaking one. If you use it as a table, it won't let you down :)
- id: 1064
author: Edwin Martin
author_email: edwin@bitstorm.org
author_url: http://www.bitstorm.org/
date: !binary |-
MjAxMi0wNS0yOSAxMjo1NDoyMSArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxMTo1NDoyMSArMDIwMA==
content: ! "\"lets say 10 if you have guys with a bier in the hand already sitting
there\"\r\n\r\nBier? That's a Dutch word. You're French, writing English and use
a Dutch word? Later is see you now live in the Netherlands. That explains :-)\r\n\r\nBy
the way, I still use furniture from Ikea I bought when I was a student, more than
twenty years ago. Who said Ikea furniture is low-quality?"
- id: 1065
author: mike
author_email: mike@cyberstalk.me
author_url: ''
date: !binary |-
MjAxMi0wNS0yOSAxMzowOTowMiArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxMjowOTowMiArMDIwMA==
content: I live on my MÅNSTAD couch. My single complaint is the strength of the
connection that holds the arms on. If the shorter arm/side becomes loose, the
pullout extension's anchor fails, leading to it rolling away.
- id: 1066
author: Eax
author_email: eax.exe+lengrand@gmail.com
author_url: http://eax.dk
date: !binary |-
MjAxMi0wNS0yOSAxMzoyNjoxNSArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxMjoyNjoxNSArMDIwMA==
content: ! "My girlfriend and I have no slept on our Månstad couch for nearly a
year, and we are absolutely not as satisfied as you are, unfortunately.\r\nAfter
about 2 months we both had back-pains and had to add an extra 10cm mattress on
top :(\r\n\r\nIt also collects dust like crazy."
- id: 1067
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wNS0yOSAxMzozMzo1OSArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxMjozMzo1OSArMDIwMA==
content: ! "Sorry to hear that :S. \r\nIf you read the instructions though, you'll
specifically see written that it should not be used as an everyday bed. \r\nIkea
(ans dozens of furniture sellers) have plenty of other solutions for that. \r\nIn
your case, I indeed agree that the mattress is mandatory. \r\n\r\nAs for dust,
can't say because it is covered with sheets because of the cat :)"
- id: 1068
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wNS0yOSAxMzozNzowMCArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxMjozNzowMCArMDIwMA==
content: ! "My dutch is way to limited for now; I wouldn't dare writing a blog post
in dutch ^^.\r\nBier is a dutch word? I thought an appropriate translation was
Grolsch . . . (or is it Amstel ? :) )"
- id: 1070
author: Per Persson
author_email: md2perpe@gmail.com
author_url: http://facebook.com/md2perpe
date: !binary |-
MjAxMi0wNS0yOSAxMzo0MjoxNCArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxMjo0MjoxNCArMDIwMA==
content: Do you know who this man is? http://goo.gl/9H7vL
- id: 1071
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wNS0yOSAxMzo0NTowMCArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxMjo0NTowMCArMDIwMA==
content: ! "Well, Wikipedia told it to me\r\nhttp://en.wikipedia.org/wiki/Ingvar_Kamprad\r\n\r\nAnd
?"
- id: 1072
author: Philibert Perusse
author_email: philibertperusse@hotmail.com
author_url: ''
date: !binary |-
MjAxMi0wNS0yOSAxNDo1NDowNSArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxMzo1NDowNSArMDIwMA==
content: ! "Regarding the LACK table, I must point out that there is not actual
wood on its exterior. If you look carefully, you will find that the finishing
is made with a very thin piece of paper/film printed with the pattern/color (Birch,
Red, Brown-Black). It can be seen more easily on the legs of the table where you
can see the seem where the film wraps over on on of the four edges of the leg.\r\n\r\nWhich
is one of the many reason it is so cheap (I actually own two of them + a few EXPEDIT
items which are made with a similar technique). Tough, the finishing is less though
than actual wood and cannot be repaired if scratched or if film peels-off.\r\n\r\nWhile
on the interior, not only is it paper (or more accurately I think a kind of thin
MDF substrate). But it is made in a honeycomb-like pattern. Which makes the pieces
very stiff while having a lot of empty space inside, thus lighter, saving both
on material and shipping. And the pieces do not bend like wood could."
- id: 1073
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wNS0yOSAxNToxMTowMSArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxNDoxMTowMSArMDIwMA==
content: ! "Thanks Philibert. \r\n\r\nI did not extend on the LACK table because
it was not the point point of the article, but you did it for me :)\r\n\r\nApparently,
I am not the only one to have tore down a LACK table :)"
- id: 1074
author: Per Persson
author_email: md2perpe@gmail.com
author_url: http://facebook.com/md2perpe
date: !binary |-
MjAxMi0wNS0yOSAxNToxMToyNiArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxNDoxMToyNiArMDIwMA==
content: ! "Thank him for IKEA! He's the founder.\r\n\r\nIKEA is an acronym standing
for Ingvar Kamprad Elmtaryd Agunnaryd, where the last to names are the place where
he grew up."
- id: 1075
author: Sameer Alibhai
author_email: abdullah.adam@gmail.com
author_url: http://www.agilechai.com
date: !binary |-
MjAxMi0wNS0yOSAxNToxNzo1NyArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxNDoxNzo1NyArMDIwMA==
content: ! "I dont know why but I really enjoy having real wood. Something about
it feels good.\r\nEven if it costs more."
- id: 1076
author: Joe
author_email: josgraha@gmail.com
author_url: ''
date: !binary |-
MjAxMi0wNS0yOSAxNToyNToxOSArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxNDoyNToxOSArMDIwMA==
content: That's one _uncomfortable_ couch. (just sayin)
- id: 1077
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wNS0yOSAxNToyNzo0NyArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxNDoyNzo0NyArMDIwMA==
content: ! "In some years, I guess I'll want too :).\r\nI was a bit tired after
having spent two months eating on the floor ;)"
- id: 1078
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0wNS0yOSAxNToyODozMyArMDIwMA==
date_gmt: !binary |-
MjAxMi0wNS0yOSAxNDoyODozMyArMDIwMA==
content: ! "Cool Stuff, actually I learnt a lot by reading the article :). \r\n\r\nThanks
!"
---
As a 'starter in life', I have always been grateful to <a title="ikea" href="http://www.ikea.com/" target="_blank"><strong>Ikea</strong> </a>for providing classy, cozy and functional furnitures at low prices.
I am a <strong>huge</strong> fan, at a point that most of the times I need anything I turn myself towards Ikea even before checking what else there can be out there.
<div>Dropping <a title="about me" href="http://www.lengrand.fr/welcome-in-my-world/" target="_blank">out of school</a> in late 2010, I had only a few days to find a flat and get furnitures in Nantes before starting working at Advansee.</div>
<div>I went to Ikea, rented a small truck and ten hours later I had a <strong>full Ikea house</strong> (from the very fork and spoon to the bed/matress). As fool as it may sound, I had spared money for the three last years in order to have a 'proper' house when starting in life. The main reason is that I am kind of a 'home' guy, but this is another story. . .</div>
<div></div>
<div></div>
<div>In the middle of the huge list of items, there was <strong><a title="manstad" href="http://www.ikea.com/ca/fr/catalog/products/90198978/?query=manstad" target="_blank">this corner couch</a>.</strong></div>
<div>
[caption id="" align="aligncenter" width="500" caption="Awesome Ikea couch"]<img title="Manstad Couch" src="http://www.ikea.com/ca/fr/images/products/manstad-canape-lit-dangle-avec-rangement__75652_PE194140_S4.jpg" alt="the perfect ikea couch" width="500" height="500" />[/caption]
</div>
<div></div>
<div>Even though the price is 100 $ cheaper in France; it can sound quite expensive for a couch, especially for a freshly graduated student.</div>
<div></div>
<div>But look a bit closer, and be amazed:</div>
<div>
<ul>
<li><strong>The chaise contains a huge trunk</strong>, where I can fit all my bed sheets, duvet and pillows and even my bath towels (and occasionally some Christmas presents).</li>
<li>The couch itself can be transformed into a<strong> 2 people (160x200) bed</strong> in less than 5 seconds (let's say 10 if you have guys with a bier in the hand already sitting there).</li>
<li>It ships into 3 packages, each <strong>exactly fitting into a 4 people (french) car</strong>. No need to be delivered if you are a bit patient and agree to do it in three rows.</li>
</ul>
</div>
<div></div>
<div></div>
<div>
[caption id="attachment_609" align="aligncenter" width="640" caption="My ikea couch in a normal state"]<a href="http://www.lengrand.fr/wp-content/uploads/2012/05/2012-05-28-21.00.31.jpg"><img class="size-full wp-image-609" title="My Manstad " src="http://www.lengrand.fr/wp-content/uploads/2012/05/2012-05-28-21.00.31.jpg" alt="my ikea couch" width="640" height="480" /></a>[/caption]
</div>
<div></div>
<div>
[caption id="attachment_610" align="aligncenter" width="640" caption="Same Ikea couch, ready to receive!"]<a href="http://www.lengrand.fr/wp-content/uploads/2012/05/2012-05-28-21.01.17.jpg"><img class="size-full wp-image-610" title="Ikea couch, deployed" src="http://www.lengrand.fr/wp-content/uploads/2012/05/2012-05-28-21.01.17.jpg" alt="Ikea couch deployed" width="640" height="480" /></a>[/caption]
</div>
<div>The couch is really smooth, the trunk really huge and the bed awesome (no "ouch my back hurts like hell!" when getting up in the morning). I even had my 70 year old grand-parents and then slept like babies.</div>
<div></div>
<div><strong>So when summarizing, for the price of a couch I get a couch, a guest bed and a chest.</strong> Who still says it is expensive ?</div>
<div><strong>But the story does not end there !</strong></div>
<div></div>
<div>After one year and a half  in France, my girlfriend and me<a title="job space" href="http://www.lengrand.fr/job-space/" target="_blank"> decided to leave the country </a>(working abroad gets really addictive once you tried it :) ) So we found a job in <a title="my linkedin" href="http://nl.linkedin.com/pub/julien-lengrand-lambert/14/660/551/en" target="_blank">the Netherlands</a>. We left in such a rush due to several reason I had to sell all my furnitures in one month. . . and even my lovely couch. It was by far the item I loved most in my flat (even before my computer).</div>
<div>Several months later, finally both having a job and settled in a proper flat; we could think about getting new furniture. I was decided to look<em> everywhere but Ikea</em> for my new stuff this time (never good to always stick to the same habits). So I searched on the web and in stores for several weeks, but still having my old lovely couch in mind. . . I finally went to the Ikea's website . . . to learn that <strong>the price of my couch had dropped by 130 $ !</strong></div>
<div>When looking closer, I realized that there was some differences :</div>
<div>Where in the first version of the couch you had to choose where you want your chaise, everything is now symmetrical, and you choose where to place it <strong>as you build the furniture</strong>.</div>
<div>
[caption id="attachment_611" align="aligncenter" width="537" caption="Each page of the manual shows both chaise positions"]<a href="http://www.lengrand.fr/wp-content/uploads/2012/05/symetrical.png"><img class="size-full wp-image-611" title="Ikea Manstad is now symmetrical" src="http://www.lengrand.fr/wp-content/uploads/2012/05/symetrical.png" alt="picture of the couch manual" width="537" height="755" /></a>[/caption]
</div>
<div><strong> What does it mean for Ikea ?</strong></div>
<div>
<ul>
<li>Ikea now has<strong> only one product to store instead of 2</strong>. Storage space is saved, and  I guess several errors from customers avoided.</li>
<li>Ikea obviously saves money by <strong>reducing the number of elements to manufacture</strong>. Instead of two sets of couches, it is now only one with twice the production volume. I expect the manufacturing costs to drop dramatically.</li>
</ul>
</div>
<div><strong>What does it mean for me? </strong></div>
<div>
<ul>
<li>I saved 100 Euro.</li>
<li>If I change flat (or mood), I can also change my couch's layout</li>
</ul>
</div>
<div>Well, they got me there I must say. There was only one thing left to do :<strong> buy the couch (and change color this time :)). </strong></div>
<div>Ikea always impressed me by the cleverness they use to reduce their prices (like creating the <a title="lack table Ikea" href="http://www.ikea.com/us/en/catalog/products/40104270/" target="_blank">cheapest table ever</a>. The table is in fact <strong>filled with paper</strong> and wood is used only for the external part); but what amazes is that <strong>they actually echo these price cuts to their customers</strong> !</div>
<div><strong>Ikea, you have all my respect (and my love).</strong></div>
<div></div>
<div></div>
<div><em>Special kudos for <a title="julien" href=" http://www.linkedin.com/pub/julien-deparday/18/5aa/948" target="_blank">Julien </a>and <a title="Gaelle" href="http://www.linkedin.com/pub/ga%C3%ABlle-le-texier/22/423/209" target="_blank">Gaelle </a>for helping out so much with the couch.</em></div>

View File

@@ -0,0 +1,81 @@
---
layout: post
status: publish
published: true
title: ! 'Is Descartes the father of Agile development? '
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 633
wordpress_url: http://www.lengrand.fr/?p=633
date: 2012-06-04 10:05:19.000000000 +02:00
categories:
- misc
- tips
- programming
tags:
- TDD
- descartes
- gtd
- methodology
- mathematics
- computer science
comments: []
---
<strong>Methodology coming from Elders : Descartes's advice</strong>
As a <a title="job space" href="http://www.lengrand.fr/job-space/" target="_blank">scientist</a>, I love reading <a title="the art of war" href="http://www.amazon.com/The-Art-War-Sun-Tzu/dp/0385292163?tag=duckduckgo-d-20" target="_blank">old books</a> about ways to<strong> improve my workflow</strong> and <a title="GTD" href="http://www.davidco.com/" target="_blank">get things done</a>. As a <a title="aboutme" href="http://www.lengrand.fr/welcome-in-my-world/" target="_blank">french guy</a>, I am especially glad when what I read come from <a title="descartes wikipedia" href="https://en.wikipedia.org/wiki/Descartes" target="_blank">Descartes</a>.
[caption id="" align="aligncenter" width="213" caption="Portrait of one of the father&#39;s of Mathematics"]<img title="Descartes" src="http://media.web.britannica.com/eb-media/33/8433-004-8E2D30AB.jpg" alt="portrait of Descartes" width="213" height="250" />[/caption]
&nbsp;
Here is a small part of what Wikipedia says about Descartes.
<blockquote><a title="wikipedia Descartes" href="https://en.wikipedia.org/wiki/Descartes" target="_blank"><strong>WIKIPEDIA</strong>
</a>René Descartes was a French philosopher, mathematician, and writer.
He is credited as the father of analytical geometry, the bridge between algebra and geometry, crucial to the discovery of infinitesimal calculus and analysis.
As an example, the <a title="Cartesian coordinate system" href="https://en.wikipedia.org/wiki/Cartesian_coordinate_system">Cartesian coordinate system</a> — allowing algebraic equations to be expressed as geometric shapes in a two-dimensional coordinate system — was named after him.</blockquote>
&nbsp;
In <em><a title="Le discours de la méthode" href="https://fr.wikipedia.org/wiki/Discours_de_la_m%C3%A9thode" target="_blank">Le discours de la méthode</a></em>  , Descartes describes 4 principles that (in his mind) people should follow to eventually find a solution to their (scientific) problems.
[caption id="" align="aligncenter" width="250" caption="Cover of Le discours de la méthode"]<img title="Le discours de la méthode" src="https://dl.dropbox.com/u/4286043/00_Website/03_Images/Descartes_Discours_de_la_Methode.jpg" alt="Cover of le discours de la Méthode" width="250" height="340" />[/caption]
&nbsp;
Here is the <strong>original (and french) version</strong> of those principles:
<blockquote>
Et comme la multitude des lois fournit souvent des excuses aux vices, en sorte quun état est bien mieux réglé lorsque, nayant que fort peu, elles y sont fort étroitement observées; ainsi, au lieu de ce grand nombre de précepte dont la logique est composée, je crus que jaurai assez des quatre suivants, pourvu que je prise une ferme et constante résolution de ne manquer pas une seule fois de les observer.
<ul>
<li>Le premier était de ne recevoir jamais une chose pour vraie, que je ne la connusse évidemment telle : cest à dire déviter soigneusement la précipitation et la prévention [au sens poids de nos préjugés]; et de ne comprendre rien de plus en mes jugements, que ce qui se présenterait si clairement et si distinctement à mon esprit, que je neusse aucune occasion de le mettre en doute.</li>
<li>Le second, de diviser chacune des difficultés que jexaminerais en autant de parcelles quil se pourrait et quil serait requis pour les mieux résoudre.</li>
<li>Le troisième, de conduire par ordre mes pensées, en commençant par les objets les plus simples et les plus aisés à connaître, pour monter peu à peu, comme par degrés, jusques à la connaissance des plus composés; et supposant même de lordre entre ceux qui ne se précèdent point naturellement les uns les autres.</li>
<li>Et le dernier, de faire partout des dénombrements si entiers, et des revues si générales*, (tantôt en cherchant les intermédiaires, tantôt en parcourant les parties des difficultés), que je fusse assuré de ne rien omettre.</li>
</ul>
&nbsp;
René Descartes Le Discours de la Méthode Seconde Partie 1637
&nbsp;
&nbsp;</blockquote>
And here is an english summary of those 4 principles (excuse my non-fluency in english):
<ul>
<li><strong>Never assume something to be true</strong> until proven. <strong>Be doubtful</strong> and avoid using expectations.</li>
<li><strong>Tear your problem</strong> down into smaller parts,<strong> until each piece becomes trivial</strong>.</li>
<li>Start solving simple things, and <strong>gradually increase difficulty</strong>.</li>
<li><strong>Keep reviewing your work</strong>, so that you are sure not to forget anything.</li>
</ul>
&nbsp;
Those 4 principles seem <strong>so essential and indivisible</strong> to me that I keep them written right in front of my eyes while coding :).
So whenever you feel on the edge of performing a dirty ALT-F4 in your unsaved 2000 python lines vim tab, stare at those four guys for a minut and wait. I assure you <strong>they'll eventually help you out</strong> !
Going further, I really feel like 350 years of experience did not bring that much innovation in problem solving methodologies. Or did they ? Small increments, TDD, GTG, . . . <strong>Aren't all those methods/concepts developments of Descartes's principles?</strong>
When I see what he has done for geometry; I would <strong>really have loved</strong> to know what Descartes would have been able to achieve <strong>with a computer in the hands</strong>; aren't you?
<strong>And you,</strong> which dead genius do you love to get knowledge from?
[<a title="source for principles" href="http://www.philolog.fr/les-regles-de-la-methode-descartes/" target="_blank">source for principles</a>]

View File

@@ -0,0 +1,44 @@
---
layout: post
status: publish
published: true
title: Remove all your Thumbs files
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 646
wordpress_url: http://www.lengrand.fr/?p=646
date: 2012-06-11 11:27:30.000000000 +02:00
categories:
- tips
tags:
- windows
- ubuntu
- thmbs
- thumbmails
- unix
- linux
- remove
- clean
comments: []
---
You too may have enjoyed Windows and its tendency to hide <a title="thumbs files" href="http://en.wikipedia.org/wiki/Windows_thumbnail_cache" target="_blank">Thumbs files</a> in any folder containing media files.
Basically, Windows creates those files to let you see <a title="thumbnail" href="https://en.wikipedia.org/wiki/Thumbnail" target="_blank">thumbnails </a>when you browse from file to file (or folder to folder . . . ).
And<strong><a title="why Linux is better" href="http://www.whylinuxisbetter.net/" target="_blank"> as you now run Linux,</a></strong> those files are completely useless for you !
So here is the magic solution to get rid of those parasites :
[bash]
$ sudo find any_folder -name &quot;Thumbs.db&quot; -exec rm {} \;
[/bash]
<em>any_folder</em> being of course the location you want to sanitize.
&nbsp;
You can now enjoy a world (slighlty) cleaner :).

View File

@@ -0,0 +1,39 @@
---
layout: post
status: publish
published: true
title: ! 'Llama : Profile activation problems'
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 668
wordpress_url: http://www.lengrand.fr/?p=668
date: 2012-06-13 12:49:49.000000000 +02:00
categories:
- misc
tags:
- android
- profile
- llama
- location
- settings
comments: []
---
A really quick tip today : I am completely fond of <strong><a title="Llama" href="http://www.appbrain.com/app/llama-location-profiles/com.kebab.Llama" target="_blank">Llama </a></strong>on my Android phone.
[caption id="" align="aligncenter" width="705"]<img title="Llama application" src="https://dl.dropbox.com/u/4286043/00_Website/03_Images/llama.png" alt="Llama application icon " width="705" height="345" /> My beloved Llama[/caption]
Actually, it the very first application I would install on a new device.
Taken from the Android market, Here is Llama description :
<blockquote>Phone going off at night? Annoying your colleagues at work? Get Llama!
Tired of your phone buzzing in the middle of the night? Annoying your colleagues by having your phone blast out your ringtone at work? You need Llama!</blockquote>
Basically, Llama detects where you are (home, work, whatever) and automatically changes your current phone settings. As an example, I use it a lot to move to plane mode at night, or activate wifi to save data while <a title="Job Space" href="http://www.lengrand.fr/job-space/" target="_blank">at work</a>.
For some time, I was having a lot of problems with my Llama profiles.It would change me to home while on my way to work, or keep the wifi off even at night, . . .I was about to drop the app and search for an alternative when I finally found the solution.
In the <a title="event tab" href="http://www.google.com/imgres?um=1&amp;hl=en&amp;sa=N&amp;authuser=0&amp;biw=1920&amp;bih=995&amp;tbm=isch&amp;tbnid=LgoY7Jb_yjZrLM:&amp;imgrefurl=http://howto.cnet.com/8301-11310_39-20065425-285/how-to-automate-android-volume-settings-based-on-location/&amp;docid=PhQJ8J1sGQSyjM&amp;imgurl=http://i.i.com.com/cnwk.1d/i/tim/2011/05/23/Llama_standard_Events_tab_270x450.png&amp;w=270&amp;h=450&amp;ei=4HzYT-fEI8_m8QOXw8iqCg&amp;zoom=1&amp;iact=rc&amp;dur=593&amp;sig=103926703585630384990&amp;page=1&amp;tbnh=153&amp;tbnw=90&amp;start=0&amp;ndsp=53&amp;ved=1t:429,r:0,s:0,i:75&amp;tx=34&amp;ty=59" target="_blank">Events tab</a>, I added a new condition to my important profile (Labelled as <strong>At. . .</strong> ).In <strong>Advanced options </strong>of the selected <strong>Event</strong>, select <strong>Repeat Event</strong> and <strong>choose an interval of time</strong>.
That's it. Solved all my problems. Hope some will find this useful!

View File

@@ -0,0 +1,131 @@
---
layout: post
status: publish
published: true
title: How working as a cook helped me be a better developer
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 674
wordpress_url: http://www.lengrand.fr/?p=674
date: 2012-06-14 13:22:48.000000000 +02:00
categories:
- misc
tags:
- software
- development
- methodology
- cooking
- cook
- developer
- productivity
comments:
- id: 19024
author: opposed
author_email: blondellyounger@gmail.com
author_url: http://community.wholeliving.com/profile/BrettRooney
date: !binary |-
MjAxMy0xMC0yOCAwNDo0NjowMiArMDEwMA==
date_gmt: !binary |-
MjAxMy0xMC0yOCAwMzo0NjowMiArMDEwMA==
content: ! "Nice work, pleased to have found this blog on blogs list.\r\nThis is
the kind of content that should be distriuted around the net.\r\nYou should seriously
look at writing more things \r\nlike this on webb 2.0 list. Shame on the search
engines for not sertting this \r\nblog higher. If you're interested, please come
and \r\nconsult my web site. Thank you"
---
When I was younger, I searched (as 99% of teenagers I guess) for a summer job to get some money. I ended up <strong>working as a cook</strong> in a retirement house, in <strong>one of the best</strong> work experience I ever had.
What started as a way to get money became a hobby, and I would put my toque on each time vacations would come (even on New Year's Eve :)) for three years.
I keep this experience in mind even years later, and I can't spend a week without mentioning it as an example. In fact, It even helped me <a title="Job Space" href="http://www.lengrand.fr/job-space/" target="_blank">get my new Job</a>!
Here are some points I'd like to share with you :
<div></div>
<div></div>
<h2>Intense focus</h2>
<div></div>
I love the <strong>worflow</strong> you can find in kitchens. You always find yourself<strong> either working like crazy or in a 'cool' state</strong>. I have never seen any other environment with such peaks and variations in the daily workflow. This make hours fly, and you feel like you can work for days before feeling tired.
I got addicted to this way of working and think it really efficient as a developer. I always try to <strong>switch</strong> between states where I can <strong>burst hundreds of lines of simple code</strong> (like preparing the architecture for my core code, or designing a quick proof script for a method) and others where I can stay <strong><a title="100 lines a day" href="https://codefornothing.wordpress.com/2009/06/14/the-mythical-one-hundred-lines-of-code-per-day/" target="_blank">one hour without commiting</a></strong> any line of code (like searching for a better architecture, of enhancing my methods capabilities).
These alternate circles have to be made up (as you have to think which tasks to do beforehand), but they are awesome because they avoid bareness and keep you focused.
Writing a lot of code is no hard task for a developer, while searching a proper solution may be. <strong>Switching between low and high complexity tasks permit to <a title="keep focus" href="http://www.fierysource.com/how-to-keep-focus-for-longer-period-of-time%C2%A0/" target="_blank">keep your brains at its top</a> level all day. </strong>
<div></div>
<div></div>
<h2>Workflow optimization, tasks switching</h2>
In a factory restaurant, most of the tasks are highly repetitive. My typical work day would start with something like cutting 60 kgs of tomatoes into pieces, or peal 45 kgs or potatoes. 200 cups of marmelade would also have to be prepared, together with 35 plates full of cheese.
Believe me or not, after several days <strong>you learn what optimization means</strong> ! Morning after morning, I would search for ways to save some time and perform those tasks a bit faster. As your hand becomes surer, you also learn that<strong> it is possible to perform several tasks at the same time as long as you do not need to OPERATE them at the same time. </strong>
Converted to the dev world, my question is :<a title="compilation time" href="http://stackoverflow.com/questions/55922/how-to-keep-concentrated-and-focused-while-waiting-for-your-compiler" target="_blank"> What do you do during compilation time? </a>Where is your ant script?
<strong>If you find yourself waiting for something in front of your screen, you're doing it wrong !</strong><a title="sublime shortcuts" href="http://whiletruecode.com/post/7-handy-text-manipulation-tricks-sublime-text-2" target="_blank"> There must be something somewhere that you can be doing. </a>
<div></div>
<h2>Clean up you mess, real time !</h2>
This is one of the first things my chef teached me when I started working in his kitchen. <strong>Whatever is used to prepare food should be cleaned right away.</strong> This seems easy, but can be really life saving when cooking. While in the rush, cleaning should NEVER be considered as optional and the "I'll do it afterwards" idea must be seen as really dangerous.
A kitchen can become a huge mess in 20 minutes and you will soon find yourself surrounded by trash and dirty plates (if you are lucky enough not to slip on the tomato that was lying there, just waiting for your feet!).
You find yourself with 2 minuts free to help your collegue in the kitchen? <strong>Wash his dishes</strong>, you'll definitely save him some time!
The same rule applies for software development : Let's write some dirty code, I'll clean it afterwards . . . Bad idea! When I write dirty code <a title="good developers bad code" href="http://taylonr.com/only-good-developers-write-bad-code" target="_blank">(everyone does, isn't it?)</a>, I always constraint it in a method and don't let it spread everywhere ! And <strong>if my collegue is struggling with deadlines, I try to help him by cleaning up</strong> all those elements that he hasn't time enough to perfect. Doesn't take much time to get into it (as it is constraint), and it will definitely help him work faster.
&nbsp;
<div>
[caption id="attachment_675" align="alignleft" width="600" caption="Which one . . ."]<a href="http://www.lengrand.fr/wp-content/uploads/2012/06/Kitchen-mess.jpg"><img class=" wp-image-675 " title="Kitchen-mess" src="http://www.lengrand.fr/wp-content/uploads/2012/06/Kitchen-mess.jpg" alt="mess in the kitchen" width="600" height="448" /></a>[/caption]
</div>
<div>
[caption id="attachment_676" align="alignright" width="600" caption=". . . do I prefer ?"]<a href="http://www.lengrand.fr/wp-content/uploads/2012/06/clean-kitchen.jpg"><img class=" wp-image-676 " title="clean kitchen" src="http://www.lengrand.fr/wp-content/uploads/2012/06/clean-kitchen.jpg" alt="clean kitchen" width="600" height="448" /></a>[/caption]
</div>
<div></div>
<h1>From a more social point of view :</h1>
<h2>Customer contact</h2>
As a cook, part of my job was to operate a factory restaurant. I would be alone in a remote location, preparing lunch and serving 30 to 60 people.<strong> I will never forget what direct customer contact is. If you feel yourself bored in your dev job, find a way to see your final users</strong> and discuss with them.
Customer contact is a fuel that keeps you motivated, and make you give the best of yourself every day. What reward is better than a smile on someone's face after you spent the whole morning preparing him lunch ?
Of course, with cooking even more than with software customer contact also means that if you screw up there is nowhere to hide (especially when you have a plate in your hand :)). I had forgotten about that feeling until some days ago, when<strong><a title="facemovie" href="http://jlengrand.github.com/FaceMovie/" target="_blank"> Ignacio contacted me about FaceMovie</a>.</strong> It gave me a great push of motivation. <strong><a title="first customers" href="http://leostartsup.com/2012/06/the-first-people-using-your-product-are-an-amazing-breed/" target="_blank">Customer contact is really the best fuel on Earth !</a></strong>
<em>One last thing though</em> : As cool as customers can be, never forget that you have to make money from them! At the very beginning, I had a tendancy to please them as much as possible, reducing my margin as a side-effect. . . Not a really good idea in the long run.
<div></div>
<h2>Not everyone uses a computer 8 hours a day</h2>
This is more a side note compared to the rest of the article, but still worth mentioning. I really think spending as much time as we do on the computer tend to bias us. While working in the kitchen, I met people for who computer was a strange and frightening beast.
They would not know how to copy-paste, would fill up an excel sheet while doing all the costs calculations by hand, and so on.
I think this effect tends to disappear (in fact my boss was pretty good at creating macros), but it still true though.
This can be a good point for you, as long as you take this into account when talking to your customers. And this also means that user experience is really the main key to enter those niches.
<div></div>
<div></div>
<h1><strong>Bonus :</strong></h1>
As I said, being a cook also helped me get my last Job. <strong>More people that you think are really into food</strong>, and this is one of the reasons I like to keep this experience in my resume.
At the end of my interview process, I met my big boss for the first time. The interview went pretty well, and the cook experience went on the table after some time.
We discussed about food for almost 40 minutes, and <strong>he explained me that he was actually using cooking as a 'psychological' tool for years</strong>.
When meeting big clients, he would rent a house instead of simply choosing an hotel. Everybody would work there for several days, but also live . . . and cook together.
Cooking is a social experience that definitely tie relationships; and it also shows what kind of person people are . . .
<strong>Who tends to manage, follow orders or simply fit at its place naturally? Cooking is both pleasant an reveals a lot about people.</strong>
I found the idea excellent, clever and elegant at the same time. It amazed me !
&nbsp;
<strong>Needless to say today won't be the day where I remove the word cook<a title="resume advices" href="http://lbrandy.com/blog/2009/01/resume-advice-for-software-engineering-new-grads-interns/" target="_blank"> from my CV</a> !</strong>
<em>And you, what past experience makes you a better developer ? </em><em>Do you love cooking, how do you feel yourself in a kitchen ? </em>
<em>I'd love to know more about your opinion and experience !</em>
<strong>[<a title="clean kitchen" href="http://www.lisburncity.gov.uk" target="_blank">source </a>for <a title="mess kitchen" href="http://dailypicksandflicks.com/2011/03/02/daily-picdump-50/kitchen-mess/" target="_blank">images</a>]</strong>

View File

@@ -0,0 +1,67 @@
---
layout: post
status: publish
published: true
title: ! 'My very first Python script : DocFinder'
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 652
wordpress_url: http://www.lengrand.fr/?p=652
date: 2012-06-17 11:32:37.000000000 +02:00
categories:
- misc
- programming
- Python
tags:
- bash
- programmer
- first code
- code
- docfinder
- opensource
comments: []
---
As you may <a title="python articles" href="http://www.lengrand.fr/category/programmaing/python-2/" target="_blank">already have noticed</a>, I am quite found of Python as a programming language.
I fell in love with Python some years ago, but you should know more about this soon :).
As many of Python users, I started with<strong> <a href="http://diveintopython.org/">Dive into Python</a> </strong>(moreover its <a title="plongez au coeur de python" href="http://diveintopython.adrahon.org/" target="_blank">french translation</a>).
Some days ago, I found myself into the very first Python script I ever written (but still use some times :)). I found it funny (even more when you think that It can be reduced to a<a title="one liners bash" href="http://www.bashoneliners.com/" target="_blank"> one-liner</a>), and thought I would share it.
It aims at listing all documents from a given extension in a folder. To use it, simply run
[bash]
$ docfinder folder extension
[/bash]
So here is the code :
[python]
#!/usr/bin/python
#_*_ coding: ISO-8859-15 _*_
import os
import sys
def scan_rep(repertoir, extension):
&quot;&quot;&quot;scanne le rep courant pour trouver des tex&quot;&quot;&quot;
for racine, reps, fichiers in os.walk(repertoir, topdown=True):
for fichier in fichiers:
if fichier.endswith('.%s' % extension):
nom_complet=os.path.join(racine, fichier)
print '%s '%\(nom_complet)
if __name__=='__main__':
scan_rep(sys.argv[1],sys.argv[2])
[/python]
Pretty lame, isn't it ? :)
When you find yourself a<strong> <a title="bad programmer" href="https://sites.google.com/site/yacoset/Home/signs-that-you-re-a-bad-programmer" target="_blank">bad programmer</a></strong>, it is always good to look at the past and see that you actually made some progress :).
You might want to check my<strong><a title="facemovie" href="http://jlengrand.github.com/FaceMovie/" target="_blank"> current pet project</a></strong>, it is also all Python :)
Julien

View File

@@ -0,0 +1,74 @@
---
layout: post
status: publish
published: true
title: ! 'Ivolution: Your personal timelapse'
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 689
wordpress_url: http://www.lengrand.fr/?p=689
date: 2012-08-21 13:33:59.000000000 +02:00
categories:
- OpenCV
- Computer Vision
- Python
- Ivolution
tags:
- image processing
- git
- ivolution
- face recognition
- timelapse
- video
- everyday
- time lapse
comments: []
---
Here comes a new blog post, after almost two months of silence.
I was in holidays for the last two weeks, and decided not to touch the computer for all that time. And I must admit that with the combination of my friends coming from France and the perfect weather here, it was no that difficult. In fact, I even switched my phone off for a week (well ok, I had forgotten my pin code ^^).
<div></div>
But lately, I spent most of my free time working on <strong><a title="Ivolution" href="http://jlengrand.github.com/FaceMovie/" target="_blank">Ivolution</a></strong>, and this is what I want to present you today !
Basically, it is an application that aims at helping you create videos of yourself over time. <strong>Simply take a picture of your face every now and then for some time, and Ivolution will generate a timelapse with it. </strong>I use <strong>face recognition</strong> so that your face overlaps on all pictures.
<div></div>
But as Napoleon once said :
<blockquote>Un petit dessin vaut mieux qu'un long discours</blockquote>
here is a demonstration of Ivolution capabilities.
http://www.youtube.com/watch?v=9ZpKnSjvmXo
I have been working on it for dozens of hours now, and slowly see it taking shape. If I had a functional core for some weeks now, it is far from enough to get a nice product and much is still missing (nice interface, performance, documentation, easy installation, . . . ). And <a title="Job Space" href="http://www.lengrand.fr/job-space/" target="_blank">as a computer vision engineer</a>, it takes me a lot of time to implement all those elements !
<div></div>
But some time ago my very first early user,<a title="G+ Ignacio" href="https://plus.google.com/100142585105145842914/posts" target="_blank"> Ignacio Martinez</a> (Kudos to him!) lately informed me about the <a title="Ubuntu App Showdown" href="http://developer.ubuntu.com/showdown/" target="_blank">Ubuntu App Showdown</a> and I decided to give it a shot. I had three weeks to transform my bunch of classes into a proper product . In fact, I lost countless hours trying to package my projects into a proper deb file, and could not make it to the deadline.
<div></div>
Hopefully, all this work is not lost! The perspective of a contest gave me a big motivation push,  and <strong>I now have a first beta version for Ubuntu users</strong> including a User Interface! Here is what it looks like (yes, I would benefit from more designer skills) :
<div></div>
<div></div>
<div>
[caption id="" align="aligncenter" width="294"]<a href="https://dl.dropbox.com/u/4286043/ivolution_gtk.png"><img title="Ivolution interface" src="https://dl.dropbox.com/u/4286043/ivolution_gtk.png" alt="" width="294" height="547" /></a> Ivolution interface[/caption]
</div>
<div></div>
<strong><a title="ivolution git" href="http://jlengrand.github.com/FaceMovie/" target="_blank">You can find it here</a></strong>, and you need only one minute to install it (just follow the <a title="README Ivolution" href="https://github.com/jlengrand/FaceMovie/blob/master/README.markdown" target="_blank">README</a>, and everything should be fine).As I said, there is still a lot to be done to transform it into a nice application, but I think the project has <strong>met his first milestone</strong>.
<div></div>
Just getting out of holidays, my batteries are full up and I have a lot of ideas to implement.Here are some of my next objectives for the coming weeks :
<ul>
<li>Redesign the GUI so that the application <strong>can be used by Windows and Mac users</strong>.</li>
<li><strong>Create proper installers</strong>, to ease installation.</li>
<li><strong>Implement a save/load project capability</strong>. For now, users always have to start from scratch. I want to change that</li>
<li><strong>Increase performance</strong>. Face recognition is complex, and the processing can be long depending on the size of the images.</li>
</ul>
<div></div>
If you like the idea, <strong>give it a shot and let me know if you like it</strong> ! <a title="issues ivolution" href="https://github.com/jlengrand/FaceMovie/issues?state=open" target="_blank">Feel free to post bugs here</a>, any comment is appreciated.
Starting now, I'll write a <strong>weekly update</strong> about the status of the project to keep you informed.Hope some of you will like it ! And if you want to support the project, feel free to <a title="flattr" href="https://flattr.com/thing/712398" target="_blank">Flattr</a> or <a title="gittip me" href="https://www.gittip.com/jlengrand/" target="_blank">Gittip</a> me ;)
<div>
<strong>P.S:</strong> A last thing about the project name. You might see both <strong>Ivolution</strong> and <strong>Facemovie</strong> as a name for the project. The difference is subtle, and is going to disappear in the future. Facemovie refers to the core application, while Ivolution is the whole project, that uses Facemovie's API.
</div>
<div></div>

View File

@@ -0,0 +1,57 @@
---
layout: post
status: publish
published: true
title: The Pirate Patch, Python Flavored
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 723
wordpress_url: http://www.lengrand.fr/?p=723
date: 2012-08-30 12:54:19.000000000 +02:00
categories:
- tips
- Python
tags:
- software
- development
- pirate bay
- piratebay
- os
comments:
- id: 1986
author: Ivolution &#8211; Development status 35 | loup2fu
author_email: ''
author_url: http://www.lengrand.fr/2012/08/ivolution-development-status-35/
date: !binary |-
MjAxMi0wOC0zMSAxMjo1OTowOCArMDIwMA==
date_gmt: !binary |-
MjAxMi0wOC0zMSAxMTo1OTowOCArMDIwMA==
content: ! '[...] Post navigation &larr; Previous [...]'
- id: 18724
author: http://okaysorry.tumblr.com/
author_email: solomon.farncomb@hotmail.de
author_url: http://okaysorry.tumblr.com/post/61581328505/plants-against-zombies-2-cheats-most-important-tips
date: !binary |-
MjAxMy0xMC0xOCAyMjoxMjoyNCArMDIwMA==
date_gmt: !binary |-
MjAxMy0xMC0xOCAyMToxMjoyNCArMDIwMA==
content: ! "Have you ever considered creating an ebook or guest authoring on other
blogs?\r\nI have a blog based on the same ideas you discuss and would love to
\r\nhave you share some stories/information. I know my \r\nreaders would value
your work. If you are even remotely interested, feel free to send me an e mail."
---
Some of you might already have heard about <strong><a title="the pirate patch" href="http://elite.so/tpp/" target="_blank">The Pirate Patch</a></strong> (at least those who read <strong><a title="korben" href="http://korben.info/le-pirate-patch.html" target="_blank">Korben</a></strong>).
For several months now, the pirate bay is <a title="piratebay blocked" href="http://www.t-mobile.nl/sorry" target="_blank">blocked in several countries such as Belgium or the Netherlands</a>.
<strong>Qarizma</strong>, a member of the <strong><a title="elite.so" href="http://elite.so/" target="_blank">elite.so</a></strong> website has developed a small utility to get around this problem. The script uses reverse-proxy on some of the mirrors of the pirate bay that are not blocked. Basically, it simply modified your host file.
I downloaded the patch and wanted to give it a try. But it is developed in <a title="windows shell" href="https://en.wikipedia.org/wiki/Shell_(computing)" target="_blank">windows shell</a> and thus is <strong>only Windows compatible.</strong>
So last night, I simply looked at the source and developed <strong><a title="piratepatch in Python" href="https://gist.github.com/334576c898c0cd727075" target="_blank">a Python equivalent</a></strong>. This way everybody with a Python interpreter should be able to use it.
I packaged it into an executable and tried it successfully on Windows and Linux. I wait this week-end to get access to a Mac and be sure it works on all OSes.
If so, you may find it soon next to the windows version, on the <a title="elite.so" href="http://elite.so/" target="_blank">elite.so</a> website.
Hope this will help some of you :)

View File

@@ -0,0 +1,76 @@
---
layout: post
status: publish
published: true
title: Ivolution - Development status 35
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 730
wordpress_url: http://www.lengrand.fr/?p=730
date: 2012-08-31 12:59:41.000000000 +02:00
categories:
- Python
- Ivolution
tags:
- github
- development
- face recognition
- timelapse
- everyday
- wxpython
comments: []
---
Here is my weekly post about the status of the <strong><a title="ivolution" href="http://jlengrand.github.com/FaceMovie/" target="_blank">Ivolution</a></strong>.
During these last days, I have mostly been working on<a title="The Pirate Patch, Python Flavored" href="http://www.lengrand.fr/2012/08/the-pirate-patch-python-flavored/" target="_blank"> another project</a>. But at the same time, I also progressed like crazy on Ivolution !
So here are the news :
<ul>
<li>
<h2><strong>Windows portability.</strong></h2>
</li>
</ul>
I have switched my main dev environement<strong> from Linux to Windows.</strong> This to ensure that my codebase is <strong>OS independant</strong> and to try to find new bugs. Up to know, everything went fine and I must say I am surprised things are going so well.
<ul>
<li>
<h2><strong>New user interface.</strong></h2>
</li>
</ul>
Originally, I developed my GUI in pyGTK and was running it under Linux. But the framework is not windows compatible yet, and I want my application to run on everything. Plus I was not happy with the style of the GUI, and wanted something more interacting with the user.
<strong>So I redeveloped a new interface from scratch, this time using wxPython.</strong> Here is what it looks like right now :
[caption id="attachment_731" align="aligncenter" width="337"]<a href="http://www.lengrand.fr/wp-content/uploads/2012/08/ivolution_29_08.png"><img class=" wp-image-731 " title="ivolution_29_08" src="http://www.lengrand.fr/wp-content/uploads/2012/08/ivolution_29_08.png" alt="New gui of ivolution" width="337" height="391" /></a> New version of ivolution interface[/caption]
It is still really raw, and some of the menus are not implemented yet. But I find it <strong>way simpler and catchy</strong> than the old one.
<ul>
<li>
<h2><strong>Real-time notifications on the interface</strong>.</h2>
</li>
</ul>
The most time consuming part of the Ivolution is definitely the <strong>face detection part</strong>. One must expect a 1 to 4 secondes processing time for each image, depending on its size. I wanted the user to be aware of that, while showing him that progress were made when he waits.
The last feature I developed is the centre panel of the application. When the algorithm runs, a list of al the images found is displayed. As they are processed, their color change:
a green font if the image contains faces, and a red font otherwise.
I am really happy of this, because now <strong>the user knows in real-time how the agorithm performs</strong>, and does not only wait for the end of the processing.
<ul>
<li>
<h2><strong>Multi-OS parameters.</strong></h2>
</li>
</ul>
I also added an <strong>OS detection feature</strong>, to give correct default parameters. On startup, the Ivolution will detect the OS you are running and present you correct options accordingly.
<h3><strong>My objectives for next week:</strong></h3>
<ul>
<li><strong>Implement the settings frame.</strong> It will contain optional parameters, llike the type of face or the output location.</li>
<li><strong>Implement the about frame.</strong> This one will give information about the license and version, . .. of the software.</li>
<li><strong>Work on packaging.</strong> When the two first objectives will be done, I plan on spending some time on the setup.py file. I have to add dependencies to wxpython to it.</li>
</ul>
<h3><strong>On a longer term:</strong></h3>
<ul>
<li>Have a nice looking interface.</li>
<li>Package the application for Windows and Linux (Ubuntu for now). I want the simplest possible installation for users.</li>
<li>Update the documentation and web page</li>
<li>Allow the user to create/save/load projects.</li>
</ul>
<strong>To get the last version of the Ivolution,<a title="ivolution last" href="https://github.com/jlengrand/FaceMovie/tree/gui_v2" target="_blank"> clone the gui_v2 branch on github.</a></strong>

View File

@@ -0,0 +1,78 @@
---
layout: post
status: publish
published: true
title: Ivolution Development status 36
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 746
wordpress_url: http://www.lengrand.fr/?p=746
date: 2012-09-07 08:23:33.000000000 +02:00
categories:
- Python
- Ivolution
tags:
- github
- development
- face recognition
- timelapse
- everyday
- wxpython
comments: []
---
Below is an update of my progress on the <strong><a title="ivolution" href="https://github.com/jlengrand/FaceMovie" target="_blank">Ivolution</a> </strong>! As you can see, the software has never been so close to be released :)
<ul>
<li>
<h2>Hunt for bugs and crashes</h2>
</li>
</ul>
I spent a lot of time the last week pushing buttons like crazy, having incoherent behaviour and testing whatever could crash the software.
It allowed me to find several ugly things, like a random crash on exit !
There is not much to say about it, but that the software is now more reliable and stable. Not sexy to say, but I'm sure users will be happy !
<ul>
<li>
<h2>Add new notifications to the interface</h2>
</li>
</ul>
Test the software made me realize that some of the unexpected events where not reported to the user.<strong> There was nothing warning if the input folder was empty</strong> for example.
To solve that, I simply added new notifications to the interface. This way, the user can now that the software has not actually crashed !
<div></div>
<div></div>
<ul>
<li>
<h2>Create a compressed installer for Windows</h2>
</li>
</ul>
<strong>My biggest achievement of this week has been to create a full installer for Windows. </strong>
Windows users now a once click install solution to use the <strong>Ivolution</strong>. It was more challenging than expected, as (of course) the installer behavior is different depending on the Windows version of the user. But the opposite would not be fun, would it ?  ;)
I especially struggled finding solutions for the uninstall script to be reliable, and also give access to the icons to the software.
But I am proud to say that the Ivolution now can be properly installed on a Windows machine, and the user is even given pretty shortcuts ! To create this installer I used <strong><a title="NSIS" href="http://www.winamp.com/" target="_blank">NSIS</a></strong>, a tool created by the developers of <strong><a title="winamp" href="http://www.winamp.com/" target="_blank">Winamp</a> </strong>(amongst other great software). And I must say I was impressed how simple it was to get a simple working example. I definitely recommend using it !
[caption id="attachment_748" align="aligncenter" width="763"]<a href="http://www.lengrand.fr/wp-content/uploads/2012/09/00_ivolution_installer.png"><img class="size-full wp-image-748" title="00_ivolution_installer" src="http://www.lengrand.fr/wp-content/uploads/2012/09/00_ivolution_installer.png" alt="Ivolution windows installer" width="763" height="543" /></a> Ivolution windows installer, and desktop icon as a bonus ![/caption]
<h3>My objectives for next week:</h3>
<ul>
<li><strong>Write a proper documentation/manual.</strong></li>
</ul>
<div>I can now say that I have a <a title="MVP" href="https://en.wikipedia.org/wiki/Minimum_viable_product" target="_blank"><strong>minimum viable product</strong></a>. The software runs and gives expected results, and It can be installed on both Windows and Linux.</div>
Now I need users !
But for that, I have to spend some time working <strong>on the documentation</strong> and present it nicely. I also need a homepage for the project. I think about registering to <a title="sourceforge" href="http://sourceforge.net/" target="_blank">SourceForge</a>.
<ul>
<li><strong>Warn early users, get the product tested.</strong></li>
</ul>
<div></div>
Even though the interface is still not perfect, I think it is time for the product to be shipped. There is nothing better than users to kepp you motivated.
I don't present any other objectives today. My whole mind is turned towards product release.
So let's write this documentation !
<strong>To get the last version of the Ivolution,<a title="ivolution last" href="https://github.com/jlengrand/FaceMovie/tree/gui_v2" target="_blank"> </a><a title="Ivolution" href="https://github.com/jlengrand/FaceMovie" target="_blank">clone the github project</a>.</strong>

View File

@@ -0,0 +1,88 @@
---
layout: post
status: publish
published: true
title: First alpha of the Ivolution Project is out !
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 756
wordpress_url: http://www.lengrand.fr/?p=756
date: 2012-09-25 08:09:54.000000000 +02:00
categories:
- Python
- Ivolution
tags:
- github
- development
- face recognition
- timelapse
- everyday
- wxpython
comments: []
---
It's been two weeks I haven't blogged about Ivolution. . . and there's a good reason for that:
<a title="website" href="http://jlengrand.github.com/Ivolution" target="_blank"><strong>The first alpha of the project is out . . .  </strong>and I definitely need some alpha testers !</a>
<div></div>
<div></div>
The software is fully free and open-source, and <a title="downloads" href="http://jlengrand.github.com/Ivolution/pages/Downloads.html"><strong>available for both Linux and Windows</strong></a> environments. I even have some <a title="samples" href="http://sourceforge.net/projects/ivolutioner/files/other%20downloads/Ivolution_samples.zip/download">samples</a> for you to test, so why not give it a try ?!
I completely focused those two last weeks on shipping the first version of the product. So here is a short list of what I have done :
<div></div>
<ul>
<li>
<h2>Write an illustrated user's documentation</h2>
</li>
</ul>
<div></div>
Commenting the code is one thing, but it doesn't really help the end user. I have thus created a<a title="manual" href="http://jlengrand.github.com/Ivolution/pages/Ivolution.html" target="_blank"> user's manual</a>,  full of images to be sure that people are not lost when they start using Ivolution. I tried to describe features in the simplest possible way, and even created some <a title="example" href="http://www.youtube.com/watch?v=yBnsqYn9Vgg&amp;feature=player_embedded" target="_blank">example videos</a>.
Additionally, it helped me find some new bugs (mostly typos) that I corrected.
<h2></h2>
<div>
<ul>
<li>
<h2>Ship a project website.</h2>
</li>
</ul>
</div>
<div></div>
A project definitely needs a website so that people can find it. I have tried to create <a title="ivolution website" href="http://jlengrand.github.com/Ivolution/pages/Ivolution.html" target="_blank"><strong>the website</strong></a> as light as possible, and remove any unnecessary information.
The website contains the online version of the documentation, together with the executables, the FAQ and so on.
Here is the set of tools I have chosen for the website :
<ul>
<li><a title="github pages" href="http://pages.github.com/" target="_blank"><strong>Github pages</strong></a>, to simply host the project. As a bonus It is also versioned, and any new push is automagically shipped :)</li>
<li><a title="sourceforge" href="http://sourceforge.net/projects/ivolutioner/?source=directory" target="_blank"><strong>Sourceforge</strong> </a>(do I really need to present it? ). It allows me to host all the archives and executables, for free.</li>
<li><a title="Pelican" href="http://docs.getpelican.com/en/latest/index.html" target="_blank"><strong>Pelican</strong></a>. The little brother or <a title="octopress" href="http://octopress.org/" target="_blank">Octopress</a>, but in Python. I wanted something really simple for the website (understand static); and Pelican allowed me to keep using Python.</li>
</ul>
It has a lot of really useful plugins (analytics, themes). . . I'll definitely use it again for my next projects.
<div></div>
<div>
<ul>
<li>
<h2>Get users on rails !</h2>
</li>
</ul>
</div>
<div></div>
I want users to start using the software as fast as possible.
In this way, there is a <a title="1 minute tutorial" href="http://jlengrand.github.com/Ivolution/pages/OneMinuteTutorial.html" target="_blank">1 minute tutorial</a> for Windows users; and a <a title="install ubuntu" href="http://jlengrand.github.com/Ivolution/pages/Installation.html" target="_blank">three steps only installation</a> for Ubunteros ! I also compiled a set of samples so that you can generate your first movie in seconds.
The creation of the website has been quite long, but also really light compared to what I expected.<strong> <a title="pelican" href="http://docs.getpelican.com/en/latest/index.html" target="_blank">Pelican</a> really helped me being productive</strong> while having a set of nice themes to use. Being a complete newbie in web development,<strong> I am thankful for that</strong> !
I found on the other hand<strong> Sourceforge surprisingly complex</strong> compared to what I expected. The platform definitely has tons of capabilities, but I had to fight my way through the menus to do what I wanted to.
<div></div>
<div></div>
<strong>That's all folks!</strong>
Now that the website is out, <strong>I need to find some testers</strong> for the product.
My next week objective for the project is to post messages on the internet about the Ivolution project. It is still really young and need more work; but I'm sure It can help some people !
And don't forget, if you want to be part of it;<a title="fork me" href="https://github.com/jlengrand/Ivolution" target="_blank"> feel free to join me on the project</a> !
<div></div>

View File

@@ -0,0 +1,45 @@
---
layout: post
status: publish
published: true
title: Petit guide de l'expatriation. . .
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 765
wordpress_url: http://www.lengrand.fr/?p=765
date: 2012-09-26 12:32:24.000000000 +02:00
categories:
- Expatriation
tags:
- netherlands
- expatriate
- travel
- abroad
- guide
comments: []
---
<div><strong>ou comment partir travailler hors de France !</strong></div>
<div></div>
Si certains d'entre vous lisent régulièrement ce que j'écris, vous devez savoir que <a title="Job Space" href="http://www.lengrand.fr/job-space/">je vis</a> <a title="Job Space" href="http://www.lengrand.fr/job-space/">aux Pays-Bas</a> depuis plus de 6 mois maintenant, et que j'ai envie de passer une grande partie de ma carrière/vie à l'étranger.
<div>
Cette envie n'est pas nouvelle chez moi. Aussi loin que je me souvienne, j'ai toujours aimé rencontrer des gens de tous horizons et cherché à parler anglais. J'aime être en dehors de ma<a title="comfort zone" href="https://en.wikipedia.org/wiki/Comfort_zone" target="_blank"><strong> "zone de confort"</strong></a>. Et vivre à l'étranger est pour moi la meilleure manière de garder une ouverture d'esprit; simplement par ce qu'on se situe constamment dans un environnement différent de celui auquel vous êtes habitués.
<div></div>
Je ne suis pas très porté vers les voyages; passer 2 semaines en australie ne suffit à mon avis pas à s'imprégner du mode de vie des gens qui y vivent.<strong> La seule manière de pleinement découvrir une culture est d'y être complètement immergé</strong>, et pour une durée suffisante ! C'est pour cette raison que mon amie et moi avons décidé de sauter le pas en fin d'année dernière et avons cherché du travail hors de France. Les résultats ne se sont pas fait attendre, et <strong>en janvier nous avons finalement pris un aller simple pour les Pays-Bas.</strong>
<div></div>
Ce pays a l'avantage d'être proche de la France (3 heures de Thalys entre Amsterdam et Paris); tout en étant non francophone. C'est donc un premier pas vers des destinations plus lointaines :). Mais aussi géographiquement accessibles les Pays-Bas peuvent sembler, il n'en reste pas moins que <strong>la façon d'y vivre est largement différente</strong> de celle qu'on peut avoir en France.
<div></div>
<strong>Cette série de posts sur mon blog a pour objectif de parler de toutes ces choses qui nous ont semblé acquises venant de France, mais pour lesquelles nous avons des suprises (bonnes ou mauvaises, selon les cas).</strong> Ce que j'écrirais ici sera directement tiré de notre expérience aux Pays-Bas, mais pourra dans la majorité des cas être extrapolé aux autres pays du Globe.
J'espère ainsi pouvoir aider certains qui sont dans la même situation que nous à faire de meilleurs choix, où du moins éviter de se faire surprendre. Et si je pouvais en inciter certains à sauter le pas également, ma mission sera remplie !
<div> Vous pourrez trouver tous ces posts dans la catégorie <a title="expatriation category" href="http://www.lengrand.fr/category/expatriation" target="_blank"><strong>expatriation</strong></a>.</div>
<strong>N'hésitez pas à également me faire part de vos expériences, interrogations ou encore questions. Je me ferais un plaisir d'y répondre !</strong>
<div></div>
<div></div>
<div></div>
<div></div>
<div>À bientôt, où plutôt Tot Ziens! ;)</div>
<div>Julien</div>
</div>

View File

@@ -0,0 +1,170 @@
---
layout: post
status: publish
published: true
title: ! 'Stack Overflow: a hate/love story'
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 772
wordpress_url: http://www.lengrand.fr/?p=772
date: 2012-10-01 12:39:05.000000000 +02:00
categories:
- programming
tags:
- stack overflow
- developer
- programming
- google
- SEO
comments:
- id: 2394
author: My (almost) perfect setup to stay focused | loup2fu
author_email: ''
author_url: http://www.lengrand.fr/2012/10/my-almost-perfect-setup-to-stay-focused/
date: !binary |-
MjAxMi0xMC0yNiAxMjo0NDoyOCArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAxMTo0NDoyOCArMDIwMA==
content: ! '[...] my last post, I explained why I hate Stack Overflow, so I won&#8217;t
explain it again. Let&#8217;s just say that I try to avoid searching for answers
[...]'
- id: 2404
author: Tristan
author_email: trisweb@gmail.com
author_url: http://www.trisweb.com
date: !binary |-
MjAxMi0xMC0yNiAxNzozMzowOSArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAxNjozMzowOSArMDIwMA==
content: So you hate it because it's *too good*? That's an interesting reason. You
can easily choose to balance good resources, and to form a good knowledge based
on official documentation before going to other sources like SO, but I don't know
why this should foster dislike!
- id: 2409
author: Scott Schulthess
author_email: scottschulthess@gmail.com
author_url: ''
date: !binary |-
MjAxMi0xMC0yNiAxOTo0NTowOCArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAxODo0NTowOCArMDIwMA==
content: Post came off a bit linkbaity to me :)
- id: 2454
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0xMC0yNyAxMjo0MDozOCArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNyAxMTo0MDozOCArMDIwMA==
content: ! "This is exactly the reason why I mentioned both hate and love :). \r\n\r\nSO
is one of the most powerful tools I have seen those last years. It is basically
like having dozens of more experienced developers than you around, ready to help
you if needed.\r\n\r\nThat without mentioning the rubber duck effect (http://www.codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html)\r\n\r\nWhat
I tried to highlight here is that it tends to make me become lazy. And I think
I am not the only one in that situation, just look at the main page of SO and
you'll see plenty of question posted from people that obviously haven't given
a thought in what they do. \r\n\r\nAnd this becomes more and more true as SO questions
make it to the top of Google. \r\n\r\nChoosing between a code snippet directly
digested, or an ugly doc page; what would you take ? :)"
- id: 2455
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0xMC0yNyAxMjo0MTozNiArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNyAxMTo0MTozNiArMDIwMA==
content: ! "Mentioning SO, hate and love in the same sentence ? \r\nThe title is
indeed a bit catchy :).\r\n\r\nBut the content of the post is a real concern of
mine ;)"
- id: 3590
author: Bob
author_email: bloggerbob91@yahoo.com
author_url: ''
date: !binary |-
MjAxMy0wMS0xMSAxNzoxMDo1MCArMDEwMA==
date_gmt: !binary |-
MjAxMy0wMS0xMSAxNjoxMDo1MCArMDEwMA==
content: ! "Stack Overflow represents everything I hate about programming in general
... mainly the people itself. \r\n\r\nGood helpful answers can be 'not' upvoted,
down voted, or even criticized by overly-anal programmers that think they know
everything in the world. \r\n\r\nIt's the only place I know where trying to be
helpful and sharing your knowledge (which I consider to be valuable) can go punished.
\ Why should I share my expertise with ungrateful little twits and at the same
time engage p-iss-n contests with other programmers when I could just keep it
to myself?\r\n\r\nPeople go to Stack Overflow only because they have done a great
job of getting their posted answers to be in the top 5 of google searches."
- id: 3591
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0wMS0xMSAxNzoyOToyOSArMDEwMA==
date_gmt: !binary |-
MjAxMy0wMS0xMSAxNjoyOToyOSArMDEwMA==
content: ! "I think I understand what you mean. And I kinda agree with you, but
in a less extreme way :). \r\n\r\nGood answers ARE usually upvoted, and if there
actually is a whole bunch of morrons on SO they don't have the majority yet .\r\nWhat
pisses me off of bit more is the tendency that people have to upvote the answer
from the guy having the biggest number of points instead of the one that took
more time to answer. \r\n\r\nI go to SO because it is the only place indeed where
i can get the EXACT answer to my question quickly (and also because I know it
is only one click away).\r\n\r\nBut I disagree with the fact that SO is the only
place where sharing knowledge is punished. Have you ever subscribed to Linux forums,
hardware forums, or even tried to help one of your collegues at work? \r\nI mean,
depending on the guy you will get ungrateful feedback. SO just makes it more public
and direct.\r\n\r\nI use SO as a way to quickly get answers on simple question
that you don't really need to have expertise in :\r\n- parse stuff\r\n- eclipse
error \r\n\r\nThis kind of things you would spend some time searching in the docs.\r\n\r\nFor
more complex stuff (architecture, project feddback, . . . ) well there are other
places that are way more focused on that (like hackerbuddy : http://hackerbuddy.com/).\r\nI
never got any bad feedback here :)."
- id: 21502
author: Ellipsis
author_email: kellmoony@yahoo.com
author_url: ''
date: !binary |-
MjAxMy0xMi0wNiAyMDoyNTo1NCArMDEwMA==
date_gmt: !binary |-
MjAxMy0xMi0wNiAxOToyNTo1NCArMDEwMA==
content: Naileddd ittttt ^ ^ ^ !!
- id: 21503
author: Ellipsis
author_email: kellmoony@yahoo.com
author_url: ''
date: !binary |-
MjAxMy0xMi0wNiAyMDoyNjo0MSArMDEwMA==
date_gmt: !binary |-
MjAxMy0xMi0wNiAxOToyNjo0MSArMDEwMA==
content: Nailed ittttt ^ ^ ^
---
<p style="text-align: justify;"><a title="stack overflow" href="http://www.codinghorror.com/blog/2011/10/the-gamification.html" target="_blank">A lot of great people already blogged</a> <a title="jeff atwood anti social" href="http://www.codinghorror.com/blog/2011/12/building-social-software-for-the-anti-social.html" target="_blank">about the reasons why they loved SO</a>.<a title="love stack overflow" href="http://www.littlehart.net/atthekeyboard/2009/11/03/why-i-love-stack-overflow/" target="_blank"> All of this is true</a>. <a title="hate SO" href="http://mikeongis.wordpress.com/2011/10/09/things-i-hate-about-stackoverflow/" target="_blank">Definitely true</a>.</p>
<h1 style="text-align: justify;"><strong>But I want to share something else</strong></h1>
<span style="text-align: justify;">The number of people posting on </span><a style="text-align: justify;" title="Stack Overflow" href="stackoverflow.com" target="_blank">StackOverflow</a><span style="text-align: justify;"> has greatly increased over the last years. It is in fact so crowded that it is not rare to have 4 or 5 answers posted just in the time needed to read a question. It has even become really hard to be the first to answer a question now, and </span><strong style="text-align: justify;">I love that</strong><span style="text-align: justify;">!</span>
<p style="text-align: justify;">Users got used to the rating system, and most of the questions I see now end up with a validated answer. Those answer (and the corresponding questions) will usually later be upvoted over time as people with the same issue find the solution to their problem. This is the very system of Stack Overflow,<strong> trust users with giving answers and sharing knowledge. And it works like hell. </strong></p>
<p style="text-align: justify;"><strong></strong>Another thing is that lately, I have seen more and more people completing others answers instead of posting theirs; or editing the question to remove context dependent information so that it can later be useful to more people. <strong>The desire for points is overcome by the desire of giving a precise and complete answer, and this is a sign that the platform answers a deep need</strong>.</p>
<h1 style="text-align: justify;"><strong>SO is now such an important service that it definitely plays the role of a huge SEO platform for good answers</strong>.</h1>
<p style="text-align: justify;">Those last months, it became more and more rare that I query Google for an issue without having a really close match on SO, upvoted by so much people that the question is in the <strong>top 5 results from Google ! </strong></p>
<p style="text-align: justify;"><strong></strong>With the number of specialized Stack Overflow "themes" growing every day this also becomes true not only for programming but <a title="cooking overflow" href="http://cooking.stackexchange.com/" target="_blank">cooking</a>, <a title="gaming exchange" href="http://gaming.stackexchange.com/" target="_blank">gaming</a>, <a title="math exchange" href="http://math.stackexchange.com/" target="_blank">mathematics</a> and even <a title="scifi exchange" href="http://scifi.stackexchange.com/" target="_blank">sci-fi</a>!</p>
[caption id="attachment_777" align="aligncenter" width="290"]<a href="http://www.lengrand.fr/wp-content/uploads/2012/10/StackOverflow.jpg"><img class="size-full wp-image-777" title="Stack Overflow" src="http://www.lengrand.fr/wp-content/uploads/2012/10/StackOverflow.jpg" alt="in Windows . ." width="290" height="150" /></a> A lovely Stack Overflow window[/caption]
<h1 style="text-align: justify;"><strong>And this is the very reason I also hate Stack Overflow</strong></h1>
<p style="text-align: justify;"><strong></strong>SO is so efficient that it slowly became <strong>my first source of information</strong>. If you use <a title="ddg" href="https://duckduckgo.com" target="_blank">DuckDuckGo</a> like me (<a title="you should use DDG" href="http://blog.clifreeder.com/blog/2012/02/12/why-i-use-duckduckgo-and-you-should-too/" target="_blank">and you should</a>) you know that it comes first in the results;<strong> even before the official documentation</strong> of the project.</p>
<p style="text-align: justify;">It is now very rare for me to have to read the API or the manual of a framework any more, simply because I know I'll directly find the answer somewhere on SO.</p>
<p style="text-align: justify;">This has very tricky effects:</p>
<ul style="text-align: justify;">
<li><strong>I don't even have to remember the answers I find</strong> (even if I should), because I know I can search for it again whenever I need it and find the answer ready to be ingested.<strong> </strong></li>
<li><strong>I lost the habit to search for solutions</strong> to problems by myself, and spend sometimes even more time searching for a match on SO than trying to solve my problem by myself.</li>
<li>My tendancy to search for answers this way came slowly as SO became more and more successful, and I recently realized how dependent I am. I'd even say that if <strong>I had to choose between Google and SO today, I'd go for SO!</strong></li>
</ul>
<p style="text-align: justify;">You might say I am <a title="programmers before were better" href="http://www.jeremymorgan.com/blog/programming/the-programmers-before-us-were-better/" target="_blank">a bad programmer</a>. Perhaps. Or I just choose to follow the easy way and <a title="programmers before us were better" href="http://www.jeremymorgan.com/blog/programming/the-programmers-before-us-were-better/" target="_blank">take the low hanging fruit</a>. This is why I'll stop using it for a month. I want to keep my ability to think. <a title="please don't learn to code" href="http://www.codinghorror.com/blog/2012/05/please-dont-learn-to-code.html" target="_blank">I don't want to be a code monkey. </a></p>
<p style="text-align: justify;">I'll keep posting answers on the platform, but from today I'll always got for the documentation first. <a title="SO" href="http://stackoverflow.com/" target="_blank">Stack Overflow</a>, I love you. . . but I want a divorce.</p>
<p style="text-align: justify;">[<a title="stack overflow image source" href="http://edn.embarcadero.com/article/29631" target="_blank">image</a>]</p>
<p style="text-align: justify;"></p>

View File

@@ -0,0 +1,20 @@
---
layout: post
status: publish
published: true
title: Automatic tweeting using ifttt
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 804
wordpress_url: http://www.lengrand.fr/?p=804
date: 2012-10-24 15:46:03.000000000 +02:00
categories:
- OpenCV
tags: []
comments: []
---
Test for automatic tweeting of Computer Vision articles on planet using <a title="ifttt" href="https://ifttt.com/dashboard" target="_blank">ifttt</a> !
This should be tweeted soon on the<a title="opencv planet twitter" href="https://twitter.com/OpenCVPlanet" target="_blank"> OpenCV Planet</a> !

View File

@@ -0,0 +1,350 @@
---
layout: post
status: publish
published: true
title: My (almost) perfect setup to stay focused
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 802
wordpress_url: http://www.lengrand.fr/?p=802
date: 2012-10-26 12:44:16.000000000 +02:00
categories:
- tips
tags:
- git
- pomodoro
- gtd
- productivity
- stayfocused
- focus
- work
- versioning
- getting things done
- rescuetime
- freemind
- duckduckgo
- stack overlfow
- branching
- focused
- rescue time
comments:
- id: 2395
author: mhm
author_email: brukaliui@gmail.com
author_url: ''
date: !binary |-
MjAxMi0xMC0yNiAxNDoyOTowMyArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAxMzoyOTowMyArMDIwMA==
content: perfect setup to end up in madhouse one day
- id: 2396
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0xMC0yNiAxNDo0Mzo0MSArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAxMzo0Mzo0MSArMDIwMA==
content: ! "Most likely than by spending half my day on Youtube? Not sure about
that :). \r\n\r\nProductivity is not about doing more, it's about doing the same,
with the same quality but in less time. \r\nThe main issue I have is in fact that
I commute 3 hours a day; which reduces the time I can spend at home relaxing without
eating up on my sleep time."
- id: 2397
author: Kerridge0
author_email: kleernrgyrand.fr@altfa.com
author_url: ''
date: !binary |-
MjAxMi0xMC0yNiAxNDo0NDoyNCArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAxMzo0NDoyNCArMDIwMA==
content: You could try freeplane too, a worthy fork of freemind
- id: 2400
author: Ted
author_email: tedx@live.com
author_url: ''
date: !binary |-
MjAxMi0xMC0yNiAxNTo0MzoyOCArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAxNDo0MzoyOCArMDIwMA==
content: Something which turned out very effective for me was to simply block timesinks
in the hosts file.
- id: 2401
author: Andrei Oprisan
author_email: andrei@taskup.com
author_url: https://taskup.com
date: !binary |-
MjAxMi0xMC0yNiAxNTo1ODoyOSArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAxNDo1ODoyOSArMDIwMA==
content: Check out TaskUp, a cloud task list with notifications, reporting, tags,
filters and many more!
- id: 2402
author: razi
author_email: razi@razi.si
author_url: ''
date: !binary |-
MjAxMi0xMC0yNiAxNjoyNTo1NCArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAxNToyNTo1NCArMDIwMA==
content: ! "Nice post! \r\nI have been thinking about Pomodoro as well, but i always
refrain myself from ordering it, as i want to learn to control myself without
a device. (It works great in theory!) \r\nAnd another problem is, the repetitive
music makes me wanna play games, as i have spent years farming with trance and
dnb, still getting used to it with programming :D\r\nWill try the RescueTime,
just so i can see in numbers, how much i am really slacking off."
- id: 2403
author: Tom
author_email: kinnth@gmail.com
author_url: ''
date: !binary |-
MjAxMi0xMC0yNiAxNjozMDoyMCArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAxNTozMDoyMCArMDIwMA==
content: ! "I really liked your comments. Im going to check out rescuetime it seems
really interesting, but rather than use it to actually tell me my efficiency I
am just going to view my usage. I like to think I can get more work done than
the average person given the time, so time is not the critical factor it's results.\r\n\r\nWhat's
interesting to me is actually my work paterns and if I can enhance my enjoyment
by restricting or encouraging certain actions."
- id: 2405
author: JC
author_email: Nothx@no.spam
author_url: ''
date: !binary |-
MjAxMi0xMC0yNiAxNzozMzo1MSArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAxNjozMzo1MSArMDIwMA==
content: ! 'Hi - re: getting enough sleep, i have struggled with this for years.
The only thing which consistetly works for me is to have ~25min nap around mid-day.
I find that any less than 25min doesn''t help, and any more makes me sleep for
a few hours (which then disrupts the night time "proper" sleep). it might seem
like you''re losing those 25min out of your busy day but i find it really does
make you more productive. Hope that helps!'
- id: 2406
author: jon
author_email: jon@dayrep.com
author_url: ''
date: !binary |-
MjAxMi0xMC0yNiAxODowMDozNyArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAxNzowMDozNyArMDIwMA==
content: Thanks for posting the getworkdonemusic.com - great site
- id: 2408
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0xMC0yNiAxOToxMToxMCArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAxODoxMToxMCArMDIwMA==
content: ! "No problem, I use it like crazy :). \r\nI really think this was a great
idea for a week-end project!"
- id: 2410
author: Gareth Elms
author_email: garethmarkelms@gmail.com
author_url: http://www.garethelms.org
date: !binary |-
MjAxMi0xMC0yNiAyMDowMjoxNCArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAxOTowMjoxNCArMDIwMA==
content: Agreed got it on now, thinking about programming (it *is* friday night
so thinking about programming is still a good effort)
- id: 2421
author: Anthon Berg
author_email: kristleifur@gmail.com
author_url: ''
date: !binary |-
MjAxMi0xMC0yNyAwMDozNjozOSArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAyMzozNjozOSArMDIwMA==
content: I think exercise needs to be on that list.
- id: 2422
author: Anthon Berg
author_email: kristleifur@gmail.com
author_url: ''
date: !binary |-
MjAxMi0xMC0yNyAwMDozNzowOSArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNiAyMzozNzowOSArMDIwMA==
content: Great stuff by the way! Thanks!
- id: 2429
author: carolyn
author_email: carolj@microsoft.com
author_url: ''
date: !binary |-
MjAxMi0xMC0yNyAwMjo1NToyMiArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNyAwMTo1NToyMiArMDIwMA==
content: I would like to know more about how you use git on top of SVN!
- id: 2445
author: Antiacid
author_email: Info@bordev.nl
author_url: ''
date: !binary |-
MjAxMi0xMC0yNyAxMTo1ODo0NiArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNyAxMDo1ODo0NiArMDIwMA==
content: 25 minutes of zen meditation could yield even better results
- id: 2446
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0xMC0yNyAxMjoxOTo1OSArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNyAxMToxOTo1OSArMDIwMA==
content: Yep, several comments of HN said that Freeplan was actually even more updated.
Thanks for the info !
- id: 2447
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0xMC0yNyAxMjoyMTo0NCArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNyAxMToyMTo0NCArMDIwMA==
content: ! "That's pretty much what stayfocusd is doing, while still giving you
a 10 minutes time frame a day. \r\nI used to change ly hosts file in the past
also :)."
- id: 2448
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0xMC0yNyAxMjoyMzowMCArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNyAxMToyMzowMCArMDIwMA==
content: ! "Just try to use those numbers as a positive evaluation more than some
kind of punition.\r\nI think it is always more beneficial to use joy more than
frustration as a motivator :)"
- id: 2450
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0xMC0yNyAxMjoyNDoxOCArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNyAxMToyNDoxOCArMDIwMA==
content: ! "Time is nothing more than a unit. It doesn't even really exist if you
thik about it :). \r\n\r\nI understand what you mean, and definitely think this
is the right way to go ;)"
- id: 2451
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0xMC0yNyAxMjoyNjozNyArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNyAxMToyNjozNyArMDIwMA==
content: ! "I think you're definitely right.\r\n\r\nI used to live in south america,
where the 1pm nap was the norm, mainly as a way to fight against heat. \r\nIt
is a bit more difficult to do in a work environment without looking like a weirdo
:s. Especially in Europe.\r\n\r\nBut I'll think about it, simply because going
to bed earlier is not really an option for me."
- id: 2452
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0xMC0yNyAxMjoyODoxMCArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNyAxMToyODoxMCArMDIwMA==
content: ! "I couldn't agree more :). \r\n\r\nI already dropped a few lines about
that in the past ;)\r\nhttp://www.lengrand.fr/2012/02/run-for-your-life-fellow-programmers/"
- id: 2453
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMi0xMC0yNyAxMjozMzoyMSArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNyAxMTozMzoyMSArMDIwMA==
content: ! "Quite simple in fact.\r\nGit uses only one folder on top of your repository,
called .git. \r\nIt makes it really non-intrusive.\r\n\r\nWork using git, and
add the .git folder to the ignore list of subversion so that it won't be versioned.
\r\n\r\nBasically, I use git for commiting small tasks, like several times an
hour. I use svn as checkpoints. \r\n\r\nThe cool thing is that using git, you
don't have to be connected on the network to commit for example. \r\n\r\nBut there
are much more powerful tools out there :)\r\nhttp://viget.com/extend/effectively-using-git-with-subversion\r\n\r\nHope
this helped ;)"
- id: 2469
author: My (Almost) Perfect Setup To Stay Focused &laquo; Polarbear
author_email: ''
author_url: http://polarbearapp.wordpress.com/2012/10/27/my-almost-perfect-setup-to-stay-focused/
date: !binary |-
MjAxMi0xMC0yNyAxNTo1MDowMSArMDIwMA==
date_gmt: !binary |-
MjAxMi0xMC0yNyAxNDo1MDowMSArMDIwMA==
content: ! '[...] (almost) perfect setup to stay focused: — http://www.lengrand.fr/2012/10/my-almost-perfect-setup-to-stay-focused/
Share this:TwitterFacebookLike this:LikeBe the first to like this. Categories
[...]'
---
Here is a pattern I recognized for some time now, and that I'd like to share.
I keep trying to be <a title="be awesome" href="http://lifehacker.com/5658800/dont-be-efficient--just-be-awesome" target="_blank">as efficient as possible</a> in my daily working environment. <strong>Productivity</strong> is really important for me, as it is the root which allows you to acquire you <strong>tiny slice of knowledge of the day</strong>.
I use several tools to help be stay productive, among which :
<div></div>
<h2><strong><a title="pomodoro" href="https://en.wikipedia.org/wiki/Pomodoro_Technique" target="_blank">Pomodoro</a></strong></h2>
A technique that consists in using a timer to switch between work and breaks. As it is really difficult (yeah, impossible) to stay focused for hours; Pomodoro trains you to work in bursts of 25 minutes.
<div></div>
<h2><strong><a title="GTD" href="https://en.wikipedia.org/wiki/Getting_Things_Done" target="_blank">GTD</a> (aka Getting Things Done)</strong></h2>
I use a light, personal version of it but the idea stays the same. The first thing I do at work is to set up a list of<strong> 3 things to do for the day</strong>. On Mondays  I set 3 bigger objectives for the week. I never spend much time doing that, as I had loads of time to thing about it since the last time.
When working, I also usually always spend some time setting up a set of simple objectives in order <strong>to avoid diverging from my final aim</strong>.
The drawback of this method is that you have to set objectives that are<strong> precise enough to be doable in a week/day, </strong>but<strong> complex enough so that you don't have only a few hours of work. </strong>Coupled with <strong>Pomodoro</strong>, this technique is highly powerful as you can make you tasks fit into 25 minutes time frames.
<div></div>
<h2><strong><a title="stayfocused" href="http://www.stayfocusd.com/" target="_blank">StayFocused</a></strong></h2>
A chrome extension that blocks a list of defined websites once you spent more than 10 minutes on them during the day.
<h2><strong><a title="rescue time" href="http://www.rescuetime.com/" target="_blank">RescueTime</a></strong></h2>
A piece of software that you install on your computer and keeps track of the application you have in foreground. Applications are divided into categories, depending on how effective they are for your productivity. As an example, I am (assumed to be) really efficient where I use Eclipse, but really distracted when I am on youtube.
At the end of the day (month, year,  . . .) you get statistics; and a percentage of global productivity.
You can set objectives, <strong>compare yourself with </strong><a title="hanselman rescuetime" href="http://www.hanselman.com/blog/ProductivityAndContinuousImprovementMeasurementAndRescueTimeMakesItHappenBothPersonallyAndAtWork.aspx" target="_blank"><strong>the best</strong> or the average of people</a> using RescueTime, . . .  I love this tool because<strong> it shows you how much time you can lose</strong> if you are not careful about what you do. And when you end up you day with a global productivity of ~30% you know you screwed up somewhere !
<h2><strong><a title="GetWorkDoneMusic" href="http://www.getworkdonemusic.com/#" target="_blank">Headsets and music</a></strong></h2>
Whenever I want to be 100% into a task, I put my headset on. This has become some sort of habit, and cuts me from the outside world. This effect is some <strong>kind of a <a title="pavlov" href="http://en.wikipedia.org/wiki/Classical_conditioning" target="_blank">pavlovian </a><a title="pavlov" href="http://en.wikipedia.org/wiki/Classical_conditioning" target="_blank">conditioning</a>.</strong> Listening to repetitive music <a title="GWD music" href="http://www.getworkdonemusic.com/#" target="_blank">(trance, drums and bass, . . .)</a> helps me stay into the flow.
<h2><strong>Versioning</strong> : daily branches</h2>
<div></div>
I usually use as much branches as I can in my daily developments. Those branches are fully temporary, and it happens that a branch stays alive for only one commit. :)
The thing I like is that I can make my branches and commits match the objectives I set in my Pomodoro bursts. And this synchronization is just awesome; as any commit is just like a crossed line in my TODO list.
In order to keep this as light as possible, I use git on top of SVN (the version control we use in Spacemetric.).
<div></div>
<h2><strong>Avoid Stack Overflow</strong> and use <a title="DDG" href="https://duckduckgo.com/" target="_blank">DuckDuckGo</a>.</h2>
In my last post, I explained why <a title="Stack Overflow: a hate/love story" href="http://www.lengrand.fr/2012/10/stack-overflow-a-hate-love-story/" target="_blank">I hate Stack Overflow</a>, so I won't explain it again. Let's just say that I try to avoid searching for answers in there.
The best way I found to avoid Stack Overflow posts is to use DuckDuckGo. The reason is that SO posts are usually less present than in Google.
In addition, DuckDuckGo is literally a command line for the web, and I can usually access the documentation  search for using shortcuts and without even having to touch my mouse :). How efficient is that !
<h2><strong>Avoid the web</strong>, use <strong><a title="FreeMind" href="http://freemind.sourceforge.net/wiki/index.php/Main_Page" target="_blank">FreeMind</a></strong></h2>
<div></div>
Lastly, the best way I found to stay focused is usually to stay away from my browser. Any web search can turn into a 5 minutes break in my mailbox, or worst. . .
A way I found to reduce the number of searches I perform is to log them. Let's say I want to find a way to serialize an Object in Java. The first time I perform this search, I put a new entry in my FreeMind map. Next time I have to do it, I'll look at my map first before opening my browser.
The nice thing is that <strong>FreeMind is designed to help you save time.</strong>
<a title="freemind screenshot" href="http://freemind.sourceforge.net/wiki/index.php/File:FreeMind-computer-knowledge-080.png" target="_blank">Just look at this screenshot, and I'm sure you'll be convinced :).</a>
<div><a title="freemind screenshot" href="http://freemind.sourceforge.net/wiki/index.php/File:FreeMind-computer-knowledge-080.png" target="_blank"> </a></div>
In summary, this set of tools highly help my mind stay focused. By <strong>setting a list of objectives</strong> in advance, and <strong>having a timer</strong> to refer to I relieve my brain from having to think about anything else but the task I intend to do.And each of those tools tackles of different issue from fine to low granularity :
<div>
<ul>
<li>Pomodoro, versioning and GTD help me to <strong>always know what I am doing</strong>.</li>
<li>stayfocusd prevents me from switching to youtube of blogs during breaks (especially after lunch).</li>
<li>The music offers an environment to my brain that. <strong>Now whenever I hear this kind of songs, I feel like putting my hands on the keyboard !</strong></li>
<li>Finally, <strong>RescueTime is sort of an evaluation</strong>. A good way to know how well I performed the last week (and optionally to feel bad about it). Each week becomes a new challenge where I want to do better than the week before.</li>
</ul>
</div>
<div></div>
I usually finish the week with an average<strong> 70% productivity</strong>, which I am moderately happy about. The major issue I have is that trying to stay as focused as possible is really exhausting. When coming back home, I feel psychologically tired of the day and I want to breathe out; usually by watching a movie or gaming an hour or two. I feel like I need those hours ; but as a consequence I end up not sleeping enough and it is harder and harder to stay focused the day after.<strong>So, problem not fully solved yet!</strong>
<div></div>
<div></div>
<div><strong>I'd love to hear about the tools you use to stay focused. Especially how you force yourself into having enough sleep. I must say this is the part is still struggle with :). </strong></div>
<div></div>
<div><a title="stay focused sand" href="http://www.asla-socal.org/2012/02/stay-focused%E2%80%94the-more-successful-you-become-the-more-distractions-will-appear/" target="_blank">[source language="image"][/source]</a></div>

View File

@@ -0,0 +1,17 @@
---
layout: nav_menu_item
status: publish
published: true
title: Planet OpenCV
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 818
wordpress_url: http://www.lengrand.fr/?p=818
date: 2012-10-29 13:59:29.000000000 +01:00
categories: []
tags: []
comments: []
---

View File

@@ -0,0 +1,221 @@
---
layout: post
status: publish
published: true
title: How we won our first startup weekend!
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 820
wordpress_url: http://www.lengrand.fr/?p=820
date: 2012-12-14 14:12:02.000000000 +01:00
categories:
- misc
- tips
tags:
- startup
- startupweekend
- startup weekend
- utrecht
- hackathon
- greengame
- entrepreneur
- innovation
- energy
comments:
- id: 3130
author: ! 'Reblog: How we won our first Startup Weekend! | Startup Juncture'
author_email: ''
author_url: http://startupjuncture.com/2012/12/14/reblog-how-we-won-our-first-startup-weekend/
date: !binary |-
MjAxMi0xMi0xNCAxNjozNDoxMCArMDEwMA==
date_gmt: !binary |-
MjAxMi0xMi0xNCAxNTozNDoxMCArMDEwMA==
content: ! '[...] Continue reading → [...]'
- id: 8832
author: tworzenie stron internetowych
author_email: hungdaigle@gmail.com
author_url: http://tworzenieiprojektowaniestroninternetowychh.pl
date: !binary |-
MjAxMy0wNC0xNSAwMzozMTowOSArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNC0xNSAwMjozMTowOSArMDIwMA==
content: ! "Very nice post. I just stumbled upon your weblog and wanted to say that
I \r\nhave truly enjoyed browsing your blog posts. In any case I will \r\nbe subscribing
to your rss feed and I hope you write again soon!"
- id: 8988
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0wNC0xNyAxNDoxMjo1NyArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNC0xNyAxMzoxMjo1NyArMDIwMA==
content: ! "Well, thank you very much for the kind words!\r\n\r\nIt is always nice
to have some feedback from time to time. Be careful with the rss feed, don't forget
that google is closing reader soon!\r\n\r\nAll the best,"
- id: 9912
author: cheap nfl jerseys
author_email: brendan_pipkin@aol.com
author_url: http://%URL%
date: !binary |-
MjAxMy0wNS0wMyAwMjozNzo1NiArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNS0wMyAwMTozNzo1NiArMDIwMA==
content: ! "Fabulous, what a web site it is! This webpage gives helpful data to
us,\r\nkeep it up."
- id: 9913
author: Page 28Franck PARIENTIImmobilier neuf
author_email: fredericklively@gmail.com
author_url: http://%URL%
date: !binary |-
MjAxMy0wNS0wMyAwMzowMjowMSArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNS0wMyAwMjowMjowMSArMDIwMA==
content: ! '&#1053;&#1077;y ther&#1077;! I''m at work surfing around your blog from
my new iphone! Just wanted to say I love reading your blog and look forward to
all your posts! Carry on the great work!'
- id: 10128
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0wNS0wNiAxMToyNDo0NiArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNS0wNiAxMDoyNDo0NiArMDIwMA==
content: Well, Thanks :)
- id: 10129
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0wNS0wNiAxMToyNTozOCArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNS0wNiAxMDoyNTozOCArMDIwMA==
content: Thanks!
- id: 11062
author: Alyssa Mompoint (@AlyssaMompoint)
author_email: alyssa@beforewedo.com
author_url: http://www.beforewedo.com
date: !binary |-
MjAxMy0wNS0yMCAyMDowNjo1OSArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNS0yMCAxOTowNjo1OSArMDIwMA==
content: Thank you for writing this post! I recently just did startup weekend...and
one as a first timer. I definitely agree that it is a great way to validate your
idea and to perhaps pivot your idea into something you may not have otherwise!
If you have a team where they align with your vision and truly want to help you
execute it than you can see what you can really accomplish. I would say its all
in the pitch and customer validation because you have to present it in an engaging
way where there's a sense of urgency. I LOVED that you uses twitter contest to
further validate your idea. Learn more on how you can win startup weekend for
the first time! http://bit.ly/14JBPqF
- id: 11641
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0wNS0yOSAwNzoxNTozNCArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNS0yOSAwNjoxNTozNCArMDIwMA==
content: ! "Hi! \n\nThanks for the kind words.\nI finally had some time to go through
your post. Congratulations!\nAre you going further with your project, or was it
more just a week-end idea? \n\nI think you are really lucky to live in the US,
where you can test your idea right away :). To try the same thing in Europe, you
would first need to register your own company even before starting selling :).\n\nLet
me know of your progress!"
- id: 22937
author: gibertie159pfujblog.webnode.ro
author_email: jamal-belbin@cluemail.com
author_url: http://gibertie159pfujblog.webnode.ro
date: !binary |-
MjAxNC0wMS0wNSAxMzo0NzozMiArMDEwMA==
date_gmt: !binary |-
MjAxNC0wMS0wNSAxMjo0NzozMiArMDEwMA==
content: ! "I'm not sure why but this website is loading extremely slow for me.\r\nIs
anyone else having this problem or is it a problem on my end?\r\n\r\nI'll check
back later and see if the problem still exists."
- id: 22939
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxNC0wMS0wNSAxNDoyNjoxMiArMDEwMA==
date_gmt: !binary |-
MjAxNC0wMS0wNSAxMzoyNjoxMiArMDEwMA==
content: ! "Hey, \n\nThanks for the info. \nI had some loading problems in the past,
related to caching. \nI´ll check if the issue did not come back during a Wordpress
update :)."
- id: 22940
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxNC0wMS0wNSAxNDozMzo1MCArMDEwMA==
date_gmt: !binary |-
MjAxNC0wMS0wNSAxMzozMzo1MCArMDEwMA==
content: ! "I just tried several tools to check the loading speed of the page. You
can see the results here :\n\nhttp://tools.pingdom.com/fpt/#!/eleGzC/www.lengrand.fr\nhttp://gtmetrix.com/reports/www.lengrand.fr/w33VVlji\n\nI
think it can be improved, but is not too bad. \nIf you got more info, I can try
to see what is the problem for you :)."
---
<p style="text-align: left;"><a href="http://www.lengrand.fr/wp-content/uploads/2012/12/header.png"><img class="size-full wp-image-823" title="GreenGame" src="http://www.lengrand.fr/wp-content/uploads/2012/12/header.png" alt="GreenGame Logo" width="1191" height="225" /></a></p>
<p style="text-align: justify;">Three weks ago, I attended my very first <a title="SW utrecht" href="http://utrecht.startupweekend.org/"><strong>startup weekend in Utrecht</strong></a>. I not only met a whole bunch of great guys, but also <strong>won</strong> together <a title="Greengame" href="http://www.greengame.co/" target="_blank">with my team</a> !</p>
<p style="text-align: justify;">I would like to share some of the excitement I had, together with some tips that might be worth for those who plan to also take the challenge !</p>
<h1 style="text-align: justify;">1 - Go Pitch !</h1>
<p style="text-align: justify;"><strong>Seriously</strong>. You may think that your idea is worth nothing, and that people will not be interested in it. <strong>So what ?</strong></p>
<p style="text-align: justify;">I participated the event as a developer, without any plan. My idea was just to "see what it was like".After a few minutes listening to all those nice guys, I decided to pitch. Guess what? I was the only person finally voting for my idea.
But that is not important. What matters is that <strong>I took the opportunity to speak in front of 100 people</strong>, and can think what I did wrong to improve next time !
Oh, and another thing. The pitcher in our team was one of the last ones to present his idea.<strong> It was not prepared, and he got his idea only a few minutes before going on stage.</strong> And we ended up winning the competition.</p>
<p style="text-align: justify;">There is no way to read people's mind yet. If you don't throw yourself in the arena, you'll never get feedback. It takes only one minute, but the lessons you get can last a lifetime!</p>
<h1 style="text-align: justify;">2 - Meet people, discuss, share</h1>
<p style="text-align: justify;"><a title="SW" href="http://startupweekend.org/" target="_blank"><strong>Startup Weekend</strong></a> is <strong>not</strong> about winning a competition. It's about <strong>meeting people</strong>. <strong>Discussing</strong> with great guys you probably would never have met otherwise. <strong>Being amazed</strong> by people's creativity, by the strength of their mind. Realizing that you spend a whole week-end working like crazy, but that <strong>everyone loved that</strong> !
On top of that, a team of mentors are here to help you. A team of people that <strong>already made their dream come true</strong>. That own a company and rely only on themselves to pay the bills. How not to be amazed by people like that ?!
Tchat with as much people as you can. You can bring them something, and you'll get out of the weekend thousands of times richer; the head full of new ideas and motivation.</p>
<h1 style="text-align: justify;">3 - Validate your idea</h1>
<p style="text-align: justify;">I was not expecting from the staff to focus so much on that. If I think back,<strong> more than half our time was spent on validating our idea</strong>. Going out, talking to people, listen to people that like your idea; and listen even more to those that don't.
The first day of the event, we rushed into creating a product that would help people save the world together. What's more powerful than the wish to make the world better? Well, money is. . .
<strong>Our first idea was completely wrong</strong>, and this is only when we discussed people that we realized that they wouldn't use our product to reduce global warming. . . <strong>but to cut their bills</strong> ! We had to start over from the beginning, more than half way through the competition!</p>
<p style="text-align: justify;">Think about it, it might lead you to the victory :).</p>
<h1 style="text-align: justify;">4 - Think Business Model</h1>
<p style="text-align: justify;">Startup Weekend is <strong>NOT</strong> about creating start-ups. The staff will keep telling you that. It is about meeting awesome people, from different landscapes, all motivated by the idea of creating something with their hands. During the startup weekend, you'll be in the middle of dozens of people who decided to spend their whole week-end building stuff. What better place to meet great guys?
Thing is, this is <strong>ALSO</strong> a competition. A competition in which you'll have to be pitched. And be judged. On your start-up idea. The jury will be composed of entrepreneurs, if not business angels.
This means that <strong>you should spend a whole lot of time finding how to make money out of your idea</strong>. Think different. Find several channels. Explore and think beyond the "I'll put ads" or "This will be a paid app". How is your business scalable? What is the competition?
This won't be enough for the jury. And this shouldn't be enough for you either.</p>
<p style="text-align: justify;">Let's take an example : Our whole aim is to help people reduce their energy consumption through a game.
With <a title="GreenGame" href="http://greengame.co/" target="_blank"><strong>GreenGame</strong></a>, you would monitor your energy consumption while playing. You'll earn rewards. But you'll not be alone. You will be able to compare yourself with friends, and group together to achieve greater goals.</p>
<p style="text-align: justify;">If we take it simple,<strong> this is a phone app</strong>. So let's make it paid, and we have a business model, right? <strong>Wrong</strong>.
<strong></strong></p>
<p style="text-align: justify;"><strong>This. is. not. enough.</strong></p>
<p style="text-align: justify;"><strong></strong>
In which other way could we make money out of <strong>GreenGame</strong>? We had two other ideas :</p>
<ul style="text-align: justify;">
<li>Our game will be played by people that want to reduce their energy consumption. <strong>Why not offer them new ways to do so?</strong> An idea could be to have <strong>affiliates</strong> in our game. For example, a user could buy new LED bulbs with a discount, while we also take a small percentage.</li>
</ul>
<ul style="text-align: justify;">
<li>Another idea came up while searching for competition. <strong>Who are the biggest entities concerned by energy control?</strong> Energy companies. By offering big rewards to users that reduce their energy during given time slots, we could transform our app into a <strong>peak shaving tool</strong>! The money could then directly come from energy companies, and the app could be offered for free.</li>
</ul>
<p style="text-align: justify;">Those are just ideas, but the point is to show you that you should dig your concept enough!</p>
<h1 style="text-align: justify;">5 - Startup Weekend is not a hackathon.</h1>
<p style="text-align: justify;">This one is a short one, but still meaningful. I told you that our concept is an app, right? What do you think we developed during the week-end then ? A landing page, and a leaderboard for a twitter hashtag contest.</p>
<p style="text-align: justify;">
<strong>Total amount of code ? Less than 50 lines.</strong></p>
<p style="text-align: justify;"></p>
<p style="text-align: justify;">Our whole idea during the week-end was to <strong>VALIDATE</strong> the concept. No need for an app that no one wants. We first had to find potential customers!</p>
<p style="text-align: justify;">As a further validation, we created a twitter contest where people could tweet about their today's action for environment. In less than 48 hours, on a week end, we got more than 100 tweets :). You can <a title="landing page GG.co" href="http://greengame.co/" target="_blank"><strong>Check it out here !</strong></a></p>
<p style="text-align: justify;"><strong>Keep in mind that software/hacking is not an end, but only a tool.</strong> And as the <a title="Lean Startup Amazon" href="http://www.amazon.com/Lean-Startup-Entrepreneurs-Continuous-Innovation/dp/0307887898" target="_blank">Lean Startup book</a> states, you <strong>MVP</strong> is always smaller than you think :).</p>
<h1 style="text-align: justify;">6 - Keep being awesome</h1>
<p style="text-align: justify;">I'll end by saying that if you attend such an event, <strong>you are already a winner</strong>. And <a title="Clogish tweet" href="https://twitter.com/Clogish/status/270270286291681280" target="_blank">I am not the only one to say that</a> ! Startup weekend brings you so much in a few hours that you won't believe it.
I met awesome guys that believe in their dreams more than nothing else, worked for the first time of my life with a designer (<strong>best feeling ever</strong>), and shared a lot of emotions with my team during this week-end. Joy, Stress, Focus, all in the same package !
And if you consider that <strong>I registered only 2 hours before the event, think about what I could have missed !</strong></p>
<p style="text-align: justify;">In the end, it's all about getting out of your comfort zone.<strong> Get out, do crazy stuff, meet people and keep your flame alive</strong>. You know, that small thing that makes you awesome. :)</p>
<p style="text-align: justify;"><a title="GG" href="http://greengame.co/" target="_blank">Check here</a> to know more about our project. We already have a lot of people interested in the project, so take the challenge and<a title="Twitter GreenGame" href="https://twitter.com/GreenGameSW" target="_blank"><strong> join us</strong></a> !</p>
<p style="text-align: justify;">And of course, let me know about your own experience in the comments. I'd love to hear about it !</p>

View File

@@ -0,0 +1,48 @@
---
layout: post
status: publish
published: true
title: XBMC won't leave me ever again
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 834
wordpress_url: http://www.lengrand.fr/?p=834
date: 2013-02-20 14:26:45.000000000 +01:00
categories:
- misc
tags:
- xbmc
- xbmcbuntu
- media server
- samsung
- media
- media library
comments:
- id: 4808
author: ! 'XBMC: Share your external drive to your other computers | loup2fu'
author_email: ''
author_url: http://www.lengrand.fr/2013/02/xbmc-share-your-external-drive-to-your-other-computers/
date: !binary |-
MjAxMy0wMi0yNyAxMDo1Nzo1MSArMDEwMA==
date_gmt: !binary |-
MjAxMy0wMi0yNyAwOTo1Nzo1MSArMDEwMA==
content: ! '[...] &larr; Previous [...]'
---
<p style="text-align: justify;">After almost ten years without a TV, I finally bought a <a title="my TV on amazon" href="http://www.amazon.co.uk/Samsung-UE40EH5000-40-inch-Widescreen-Freeview/dp/B007IHYP5Y" target="_blank">101cm Samsung</a> last week-end.</p>
<p style="text-align: justify;">Not that I feel the need for it that much, but being in the process of learning dutch I thought it might be a valuable tool.
See, there are not that many dutch movies out there, so the best way to listen to some nederlands at home is probably national TV :).</p>
<p style="text-align: justify;">I bought the simplest TV I could find, without<a title="smart tv wikipedia" href="http://en.wikipedia.org/wiki/Smart_TV" target="_blank"> Smart TV</a> or any tuner in it. But with such a screen, installing some kind of media server was now mandatory :D.
So I installed the last version of <a title="xbmcbuntu" href="http://wiki.xbmc.org/index.php?title=XBMCbuntu" target="_blank"><strong>Xbmcbuntu</strong> </a>on an old laptop that was sleeping on a shelf for a year and connected it on my screen through HDMI.
Within 30 minutes, the distribution was installed and running fine. Ten minutes more and I had the <strong>remote control</strong> installed and set up on my android and could throw the mouse away.
Next step was to get an<strong> add-on to use Spotify</strong>, which was also really simple to find. My choice went to <strong><a title="spotimc" href="https://github.com/mazkolain/spotimc" target="_blank">Spotimc</a>. </strong>Just download the zip, put it on your media server and you're basically done.</p>
<p style="text-align: justify;">I had no experience at all with media server in the past, and I must say that<strong> I am really impressed</strong> how well thought the whole thing can be.
When adding movies to the library, <strong>xbmc</strong> will automatically download the subtitles and covers for it. Better than that, it will display them nicely in the background as you browse through your library!</p>
<p style="text-align: justify;">I already know which project I'll donate to next month :).</p>
<p style="text-align: justify;">And as a bonus, here are some pictures to convert you too :)</p>
[caption id="attachment_835" align="aligncenter" width="584"]<a href="http://www.lengrand.fr/wp-content/uploads/2013/02/2013-02-20-14.16.28.jpg"><img class="size-large wp-image-835" alt="XBMC movie library" src="http://www.lengrand.fr/wp-content/uploads/2013/02/2013-02-20-14.16.28-1024x768.jpg" width="584" height="438" /></a> XBMC movie library, all pictures downloaded automatically[/caption]
[caption id="attachment_836" align="aligncenter" width="584"]<a href="http://www.lengrand.fr/wp-content/uploads/2013/02/2013-02-20-14.17.21.jpg"><img class="size-large wp-image-836" alt="XBMC main screen" src="http://www.lengrand.fr/wp-content/uploads/2013/02/2013-02-20-14.17.21-1024x768.jpg" width="584" height="438" /></a> XBMC main screen, awesome isn't it?[/caption]

View File

@@ -0,0 +1,76 @@
---
layout: post
status: publish
published: true
title: ! 'XBMC: Share your external drive to your other computers'
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 842
wordpress_url: http://www.lengrand.fr/?p=842
date: 2013-02-27 10:56:50.000000000 +01:00
categories:
- misc
tags:
- xbmc
- xbmcbuntu
- media server
- sharing
- network
- samba
comments: []
---
As already said <a title="XBMC wont leave me ever again" href="http://www.lengrand.fr/2013/02/xbmc-wont-leave-me-ever-again/" target="_blank">in my last post</a>, I gave my first try to <a title="xbmc website" href="http://xbmc.org/" target="_blank"><strong>xbmc</strong> </a>last week. The basic setup was almost fully automatic.
There was one thing I had to do manually though, and I want to share it here because I didn't find the solution anywhere on XBMC forums.
My idea is simple : <strong>attached to my xbmc laptop</strong> is a 2To external hard drive that will contain all my movies, pictures, . . .
Those things used to be on my other computers, and I don't want to duplicate content so<strong> I wanted this drive to be accessible to all the other computers on my network.</strong>
The way to do it is quite simple in the end, if you know where to search :
By default, xbmc already shares its libraries on the network (Movies, Music, ...). All of this is defined in<strong><em> /etc/samba/smb.conf</em></strong>.
So the solution is to add another section to this file. That will share it on the network too.
By default, your external hard drives should be mounted in <strong><em>/media</em></strong>.
So if I want to share my external hard drive (called Elements) on the network, I'd do something like that:
[bash]
[Elements]
path = /media/Elements
comment = data drive
writable = yes
browsable = yes
guest ok = yes
[/bash]
The <strong>guest ok </strong>option will allow anyone on your local network to access the drive without having to authenticate, so be careful.
Now check that the other users will be able to read/write on the device
[bash]
$ ll /media/Elements
[/bash]
and if not, run
[bash]
$ chmod -R 755 /media/Elements
[/bash]
and restart samba (or the whole computer if you have a doubt :))
[bash]
$ /etc/init.d/sbmd restart
[/bash]
Now check on your other computers, you should be able to access your new folder without troubles :).
On my Win7, that simply means going to my file explorer and double clicking on the Xbmcbuntu icon that appears.
Hope this can help someone!

View File

@@ -0,0 +1,59 @@
---
layout: post
status: publish
published: true
title: About Time to market
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 851
wordpress_url: http://www.lengrand.fr/?p=851
date: 2013-04-11 09:44:16.000000000 +02:00
categories:
- Projects
tags:
- android
- time to market
- side project
- developement
- lean
comments:
- id: 8539
author: Axel
author_email: axxcat@gmail.com
author_url: ''
date: !binary |-
MjAxMy0wNC0xMiAwOToyNDo0NSArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNC0xMiAwODoyNDo0NSArMDIwMA==
content: ! "Dommage mais bravo d'avoir réussi. \r\nOn finira par la trouver notre
app qui nous rendra riche !"
- id: 8842
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0wNC0xNSAxMDo0MjowMSArMDIwMA==
date_gmt: !binary |-
MjAxMy0wNC0xNSAwOTo0MjowMSArMDIwMA==
content: ! ";). \r\nDidn't even know you were reading the blog. \r\n\r\nI'm not
finished with it...yet. \r\nThe market is still here, I now have better of a challenge
to make my app the default move for the crowd .\r\n\r\nHopefully, you'll have
a sneak peek soon !"
---
<p style="text-align: justify;">As a lot of people, I have pages full of cool ideas I'd like to implement.</p>
<p style="text-align: justify;">I <a title="github" href="https://github.com/jlengrand">start to work on some of them</a>, <a title="blog posts on projects" href="http://www.lengrand.fr/category/projects/" target="_blank">write about a few of those</a>, and to this day am happy about none. The huge majority about what I do doesn't even have a README. I know I am not the only one. I know<a title="google how to finish" href="https://www.google.com/search?q=side+project+softwasre&amp;aq=f&amp;oq=side+project+softwasre&amp;sourceid=chrome&amp;ie=UTF-8#sclient=psy-ab&amp;q=how+to+finish+side+project+successfully&amp;oq=how+to+finish+side+project+successfully&amp;gs_l=serp.3..0i7i30.3373.9554.2.10100.15.14.1.0.0.0.72.678.14.14.0...0.0...1c.1.8.psy-ab.I6jwDdXb4mA&amp;pbx=1&amp;bav=on.2,or.r_cp.r_qf.&amp;bvm=bv.45107431,d.d2k&amp;fp=c69888fd6da4729c&amp;biw=1920&amp;bih=954" target="_blank"> lots of developers</a> are like me.</p>
<p style="text-align: justify;">I stop working about most of my ideas because<strong> no one uses them</strong>. Because most of the ideas I got in the end <strong>come from me</strong>. And I don't find much motivation solving my own problems.</p>
<p style="text-align: justify;">Last week, for <strong>the very first time,</strong> a friend of mine came with a request. For the very first time, someone asked me to implement something to make their life easier.
The real-time schedule of the bus network of the city they live in is only available on a <a title="bibus widget" href="http://www.bibus.fr/pivk/relais.html.php" target="_blank"><strong>WINDOWS WIDGET</strong></a>.
<strong>Think about it:</strong> you can know when your bus will arrive at your stop using your computer.
Well, pretty useful when you sit next to the bus stop itself, waiting RIGHT NOW for the bus to come.</p>
<p style="text-align: justify;">So <strong>they asked me to make and android app out of the widget,</strong> so that they could use it with their mobile. And then I realized how big of a market it could be.<a title="brest wikipedia" href="http://en.wikipedia.org/wiki/Brest,_France" target="_blank"> A whole city</a> of<strong> 150k people</strong>, taking the public transports, with no app to warn them about the next bus coming.
<strong>I worked my arse off, and within 2 days had reverse engineered the widget and developed a really simple android MVP.</strong></p>
<p style="text-align: justify;">The whole thing was simply based on POST request, so it was just a matter of getting the right parameters to make it work. <strong>I have rarely been so productive</strong>, driven by the idea that I was sitting on a potential 10k downloads.</p>
<p style="text-align: justify;">And as I was working, I looked at the public transportation website once again, searching for some information.</p>
<p style="text-align: justify;">Their index page had changed,<strong> proudly showing that they were releasing their mobile app the coming week</strong>! A really cool app, where you could. . . see the bus schedule in real-time on your phone. Not only that, but <strong>they also started sticking QR-codes</strong> in all bus stops. By simply taking a picture of the bus stop, their phone would redirect them to the app, giving them the next coming bus arrival time.</p>
<p style="text-align: justify;">Well, what to say to conclude this.
Most of the time, the barriers come from you. You fail at workring hard enough, or finding enough motivation to conclude that project. <strong>But if you don't fail, well, you still haven't won yet.</strong> And it's not because you don't see any potential threat today that it won't suddenly appear tomorrow morning.</p>
<p style="text-align: justify;">I'll take this as a lesson to myself. Stop putting stuff to the following day. Because in the end,<strong> you only have control on part of the game.</strong></p>

View File

@@ -0,0 +1,51 @@
---
layout: post
status: publish
published: true
title: Let's scratch those itches!
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 856
wordpress_url: http://www.lengrand.fr/?p=856
date: 2013-04-17 14:27:53.000000000 +02:00
categories:
- misc
- Projects
tags:
- startup
- lean
- busniess ideas
- blogging
comments: []
---
<p style="text-align: justify;">It's been a long time since I have written stuff regularly on this blog. But it doesn't mean nothing happened; <a title="my github" href="https://github.com/jlengrand?tab=repositories" target="_blank">far from that in fact!</a></p>
<p style="text-align: justify;">For some strange reason, blogging is just like sport : <strong>the less you practice the less you want to get back in</strong>.
Put some holidays in the middle and you quickly end up in a situation where your blog lies dead for weeks even though you have plenty of ideas of articles.
And after some time, you don't even have ideas any more; which makes it even more difficult to get back on rails.</p>
<p style="text-align: justify;">I don't know about you, but thinking about it I can often see a relation between the number of blog posts I write and the progress I make in my pet projects. <strong>Just like if blogging was some kind of motivator to work harder</strong>, or somehow linked to my productivity as a developer.</p>
<p style="text-align: justify;">
Blog posts are difficult for me to write. As a<a title="bad developer" href="http://www.guynirpaz.com/2012/06/11/good-developer-bad-developer/" target="_blank"> (bad)</a> developer, I love to directly jump into the technical stuff. And I really have to force myself to take a step back and spend an hour or two writing about something I have already done. In the end,<strong> most of the blog post ideas I got</strong> end up in the trash bin and<strong> never get published.</strong></p>
<p style="text-align: justify;">But thinking about this, I realized that I actually write a lot. Only of all this is never actually goes on the internet.
For years, there are two things I always have on me :</p>
<ul>
<li>My glasses, just because otherwise I couldn't see anything (don't try to make a link with the post, there's none)</li>
<li>And <strong>a notebook with a pen</strong>, in which I write everyday.</li>
</ul>
<p style="text-align: justify;">This habit has been here as long as I can remember.
<a title="handle knowledge" href="http://www.lengrand.fr/2012/03/efficiently-handle-knowledge-as-a-computer-scientist/" target="_blank"><strong>I know I have a really bad memory</strong></a>. I always had. So noting down stuff is the best way for me to cope with this brain full of holes.
Those last years, I started also writing down everything that could piss me off. Things that would take me a long time to do while I could avoid it. Or things that I would see people do that I sound could be done better (at least in my opinion).
Those are just dummy statements on my notebook, but I usually put them somewhere else afterwards and sometimes give more thoughts about it.
And when I started reading <a title="HN" href="https://news.ycombinator.com/" target="_blank">Hacker News</a> and <a title="life hacker" href="http://lifehacker.com/recommended" target="_blank">LifeHacker </a>a few months ago, I actually realized that <strong>some of these dummy ideas have actually been transformed into sustainable businesses by clever people.</strong></p>
<p style="text-align: justify;">So instead of writing them to myself, I think I will start putting them out on this blog. Let's not call them business ideas (most are likely not to be) but simply itch scratchers, or life facilitators :).</p>
<p style="text-align: justify;">In the end, I think I should have done this long in the past :</p>
<ul>
<li>If anyone has the same ideas than me and read them here, Fine! That can be seen as some kinf of validation for him :)</li>
<li>It will force me to develop those ideas a bit more, to make them understandable by everyone.</li>
<li>It will allow me to post on this blog without more work than usual, as I already write those for myself usually.</li>
<li><strong><em id="__mceDel" style="text-align: justify;"><em id="__mceDel"><em id="__mceDel">And who knows, maybe will someone fall in love with one these ideas and contact me to make it happen!.</em></em></em></strong></li>
</ul>
<p style="text-align: justify;">So now, let's make this happen!</p>

View File

@@ -0,0 +1,38 @@
---
layout: post
status: publish
published: true
title: I feel fat
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 864
wordpress_url: http://www.lengrand.fr/?p=864
date: 2013-05-26 17:40:11.000000000 +02:00
categories:
- misc
tags:
- fat
- will power
- runt
- ego
comments: []
---
Or let me rephrase this : <strong>I AM fat</strong>.
I am fat of all the junk food I eat way too often.
I am fat of all the biers I have where I should drink water instead.
I feel fat sitting in front of the computer all day, when I should exercise.
But I am also fat of all the technical articles I read when I should actually be writing them.
I am fat of all the tweets I read and realize I have no achievement to write about.
I spend my time contemplating the 9 more users a day I get on my android app, where I should be working on acquiring more by making my app better.
I look at my blog stats everyday when I should be writing new articles.
To make it simple, <strong>I spend way too much time ingesting things, when I should be instead building them</strong>.
I hate myself right now, and I am tired of this. I fell like society is all about getting lazier and lazier, and I hate the fact that I'm biting on it.
So let's start this information diet now. And to make it even more caricatural, end with this quote from <a title="vince lombardi wikipedia" href="http://en.wikipedia.org/wiki/Vince_Lombardi" target="_blank">Vince Lombardi</a> :
<blockquote>The difference between a successful person and others is not a lack of strength, not a lack of knowledge, but rather a lack of will.</blockquote>
So may this be a wake-up call, and a reminder that <strong>what really counts is not what you have done in the past, but all the things you have not achieved yet and that you should be working on.</strong>

View File

@@ -0,0 +1,28 @@
---
layout: post
status: publish
published: true
title: Personal rant
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 869
wordpress_url: http://www.lengrand.fr/?p=869
date: 2013-06-21 08:13:53.000000000 +02:00
categories:
- misc
tags: []
comments: []
---
Once again, I have been way too much silent in here.
There must be a reason why I find writing posts so difficult.
Or maybe it's just because I'm lazy. Probably in fact.
I did reduce my twitter, facebook and Hacker News consumption lately, as I said I would in my last blog post. Sadly, this didn't help much so far.
I still end my days wishing like I had done twice as much. And this is frustrating.
Well, I have developed my very first web app those last weeks, so not everything is black.
But I really got to find the reason why procrastinating is so tempting, where there is still so much to be done in this world. . .
The diet started, but there is still a lot more to be done.

View File

@@ -0,0 +1,63 @@
---
layout: post
status: publish
published: true
title: ! 'Spotify to Youtube converter : My first web app'
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 873
wordpress_url: http://www.lengrand.fr/?p=873
date: 2013-06-27 07:32:37.000000000 +02:00
categories:
- Uncategorized
- programming
tags:
- url
- programming
- spotify
- youtube
- converter
- web app
- spotify to youtube
- music
- node
comments: []
---
The past year, I have created <a title="ivolution" href="http://jlengrand.github.io/Ivolution/" target="_blank"><strong>my first piece of software</strong></a> from scratch. And I know that even though it is ugly and has no coverage at all (and doesn't deserve it) it works.
More lately, my<strong><a title="brestram" href="https://play.google.com/store/search?q=brestram&amp;c=apps" target="_blank"> first android application</a></strong> came out (it has reviews, but in french :)). I learnt a lot during this one, as it involved reverse engineering a POST Request based protocol and I had no knowledge about the Web concepts at all. In fact I didn't even know know what POST was :). And even though I have updated it only once since then, I have around <strong>270 active users</strong> and 2 to 8 more coming a day. (And people are really happy!)
Those last weeks, I have been working on <a title="spo2tu.be" href="http://spo2tu.be/" target="_blank"><strong>spo2tu.be</strong></a>, a simple <strong>spotify to youtube converter</strong> and could finally release it this week end. So I can officially say that I also created my first web app!
<h2>The concept is really simple:</h2>
<a title="spotify" href="spotify.com" target="_blank">Spotify </a>users can share songs via facebook. But I hate facebook, and I hate the facebook integration in other parties even more.
The other aternative is a http link. Thing is <strong>this link is only playable for spotify customers</strong>. And this is boring!
So comes<strong> spo2tu.be</strong>, that takes your spotify url and <strong>tranforms it into its best youtube equivalent</strong> so that you can share it with your friends without any problem!
I must say I am quite happy with the app, but it seems like I am the only one having this problem because<strong> the website had no traction at all</strong>, whether it be on<a title="hacker news" href="https://news.ycombinator.com" target="_blank"> hacker news</a> or <a title="reddit" href="reddit.com" target="_blank">reddit</a>.
What I am really thrilled about though, is that <strong>this was the first time I have scratched my own itch</strong>, and not someone else's. Since the app is up, I already used it 4 times a day to share songs.
As usual, I tried to do something I had no experience about at all, and it has been quite a mess.
<h2>But let's talk about the way the magic happens</h2>
Once you enter the spotify web url, spo2tu.be queries <a title="spotify's webplayer" href="open.spotify.com/track/6tY0fjwn04azpjHsQGbVtC" target="_blank">spotify's webplayer</a> and extracts the name of the song and the group from the page. I know I could have used the <a title="spotify API" href="https://developer.spotify.com/technologies/web-api/" target="_blank">api</a>, but I already had some experience of webscraping with <a title="Brestram" href="https://play.google.com/store/search?q=brestram&amp;c=apps" target="_blank">Brestram</a> and I didn't want to query the spotify api a lot with my own customer name.
Once the name of the song is known, I simply query the <a title="youtube API" href="https://developers.google.com/youtube/" target="_blank">youtube API</a> and retrieve the most likely candidate.
Finally, the server sends the results back to the client which display everything to the user.
This was the<strong> first client/server app</strong> I developed from scratch, so I spent quite some time trying to figure out how everything had to work :).
I wanted to get my hands of <strong><a title="node" href="http://nodejs.org/" target="_blank">node</a></strong> for a long time, so this was my requirements for this project (even though <a href="http://flask.pocoo.org/" target="_blank"><strong>Flask</strong></a> would have probably been simpler).
For the client side code, I decided to take <a href="http://backbonejs.org/" target="_blank"><strong>backbone</strong></a> as a basis. I wanted something low level, so that I could grasp as much concepts as possible. This is why I decided to avoid <a href="http://meteor.com/" target="_blank"><strong>meteor</strong></a>, for example.
I use <a href="http://twitter.github.io/bootstrap/" target="_blank"><strong>bootstrap</strong></a> for the rendering. I started with <a href="http://purecss.io/" target="_blank"><strong>purecss</strong></a>, but having no idea at all of what I was doing I backed up after a few hours to an easier choice.
I use <a href="http://www.mongodb.org/" target="_blank"><strong>mongodb</strong></a> in the server, which is really convenient because you can feed it with json objects directly.
<h2>I thing I said it all.</h2>
The first real difficulty for me was to understand the concepts behind node, and especially the <strong>asynchronous programming</strong> part. At the very beginning, it even made it difficult to understand the docs, because the prototypes of the methods looked strange!
But after a few hours everything started to feel easier. And I was more than happy to let go of the threads and other queues :).
I also had quite a lot of trouble setting up the server environment. I spent hours trying to understand ec2, to finally find my instances destroyed or my security groups lost for no reason (or at least I couldn't find them!). On top of that, I was quite scared about the whole automatic billing/scaling stuff so I decided to stop with that. I finally found <a title="digital ocean" href="https://www.digitalocean.com/" target="_blank"><strong>digitalocean</strong></a>, and everything became (way) easier!
Backbone and boostrap were <strong>easier to handle that I would have expected</strong>. Maybe it's not that difficult after all :).
If you put everything together, having to learn javascript, REST, css, backbone, node and hosting at the same time was quite challenging. <strong>I spent some time in front of a huge pile of knots</strong>, trying to understand which string to pull!
But the app is finally up, and I hope some people will find it and start using it. I don't plan on making anything special with it, but<strong> it is still cool when the stuff you build with your hands is useful to someone</strong> :).
<a title="spo2tube" href="http://spo2tu.be/" target="_blank"><strong>Now go and try it out :) </strong></a>

View File

@@ -0,0 +1,50 @@
---
layout: post
status: publish
published: true
title: Use a Xerox printer on Ubuntu
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 882
wordpress_url: http://www.lengrand.fr/?p=882
date: 2013-09-18 09:11:56.000000000 +02:00
categories:
- tips
tags:
- ubuntu
- linux
- xerox
- '13.04'
- printer
- phaser
- aptitude
comments: []
---
A quick and small post that could save some of you a few hours.
If you're like me, you may have a <strong><a title="Xerox website" href="http://www.office.xerox.com/">Xerox</a> printer</strong> of phazer in your work or home environmenent.
And your <strong>ubuntu</strong> is unable to print any document on this printer, displaying fancy errors like <a title="filter failed forum" href="http://ubuntuforums.org/showthread.php?t=2136163" target="_blank"><strong>"filter failed"</strong></a>.
Before going on the <a title="xerox support" href="http://www.support.xerox.com/support/enus.html" target="_blank">Xerox website</a> searching for ugly tar.gz files to install; and read dozens of forums and documentation pages to finally get the printer to work;
try to install <a title="foomatic website" href="http://www.linuxfoundation.org/collaborate/workgroups/openprinting/databasefoomatic" target="_blank"><strong>foomatic-db</strong></a>.
It is as simple as
[bash]
sudo apt-get install foomatic-db
[/bash]
on an ubuntu (13.04, in my case).
This worked like a charm for me.
The part is don't get is why this foomatic-db is so hard to find. I had to search for the package listing, making searches about xerox drivers to find it.
I found no reference about it on the internet what so ever with the "filter failed" keywords.
Hope this helps some of you.
Cheers

View File

@@ -0,0 +1,77 @@
---
layout: post
status: publish
published: true
title: Find whether a Windows dll is compiled for 32 or 64 bits on Linux
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 896
wordpress_url: http://www.lengrand.fr/?p=896
date: 2013-10-26 16:33:36.000000000 +02:00
categories:
- misc
- tips
- programming
tags:
- windows
- linux
- objdump
- dll
- dependency walker
comments: []
---
This morning, I stumbled upon an unexpected problem; and found myself not knowing what to do.
I had to compile the native part of a library on Linux, based on the existing Windows dlls.
<strong>Before compiling, I needed to know if the Windows dlls were compiled for 32 or 64 bits.</strong>
It is quite easy to do on Windows, with tools such as <a title="dependency walker page" href="http://www.dependencywalker.com/" target="_blank">dependency walker</a>, but on Linux!?
I knew that for native linux (.so) files, <strong>objdump</strong> would be my weapon of choice.
So I gave it a shot, and tried:
[bash]
$ objdump -x my_windows.dll | head -n 15 # returns the first 15 lines of the result
[/bash]
And here was the result :
[bash]
libxuggle-5.dll: file format pei-i386
libxuggle-5.dll
architecture: i386, flags 0x00000133:
HAS_RELOC, EXEC_P, HAS_SYMS, HAS_LOCALS, D_PAGED
start address 0x6e741058
&amp;nbsp;
Characteristics 0x2306
executable
line numbers stripped
32 bit words
debugging information removed
DLL
[/bash]
&nbsp;
Pretty neat, huh?
I was really not expecting objdump to be so efficient even on Windows stuff.
<strong>Well done, Linux. Well done.</strong>

View File

@@ -0,0 +1,132 @@
---
layout: post
status: publish
published: true
title: onLocationChanged is never called on Android
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 892
wordpress_url: http://www.lengrand.fr/?p=892
date: 2013-10-26 16:28:40.000000000 +02:00
categories:
- Uncategorized
- programming
tags:
- android
- programming
- brestram
- java
- gps
comments:
- id: 21831
author: Robert
author_email: robertbobrek@gmail.com
author_url: ''
date: !binary |-
MjAxMy0xMi0xMiAyMTo0NzozNyArMDEwMA==
date_gmt: !binary |-
MjAxMy0xMi0xMiAyMDo0NzozNyArMDEwMA==
content: ! "Hi,\r\n\r\nthanks for the code but it is not working...\r\n\tprivate
LocationInfo li;\r\n\r\ngives me: \"LocationInfo can not be resolved to a type\""
- id: 21886
author: Julien Lengrand-Lambert
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
date: !binary |-
MjAxMy0xMi0xNCAxMDo0OToyOSArMDEwMA==
date_gmt: !binary |-
MjAxMy0xMi0xNCAwOTo0OToyOSArMDEwMA==
content: ! "Hey, \r\n\r\nYou are totally right, sorry for that.\r\nLocationInfo
is a class I use internally. I removed the references to LocationInfo, so things
should be ok now :).\r\n\r\nThanks for noticing!"
---
I had problems with this while developing #<strong><a title="brestram play store page" href="https://play.google.com/store/apps/details?id=fr.lengrand.brestram" target="_blank">BresTram</a></strong>.
I was developing a new feature, allowing my users to find bus stops nearby using their GPS location.
But whatever I was trying, my location was never set, and <a title="java doc onlocationchanged" href="http://developer.android.com/reference/com/google/android/gms/location/LocationListener.html#onLocationChanged(android.location.Location)" target="_blank">onLocationChanged</a> was never called.
Here is what my Activity would look like :
[java]
public class DisplayGPSInfoActivity extends BaseActivity implements LocationListener {
private static final String TAG = &quot;DisplayGPSInfoActivity&quot;;
private ViewFlipper vf;
private LocationManager locationManager;
private String provider;
@SuppressLint(&quot;NewApi&quot;)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initiating ViewFlipper
setContentView(R.layout.activity_display_gpsinfo_request);
vf = (ViewFlipper) findViewById(R.id.viewFlipper);
this.locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
//Choosing the best criteria depending on what is available.
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
//provider = LocationManager.GPS_PROVIDER; // We want to use the GPS
// Initialize the location fields
Location location = locationManager.getLastKnownLocation(provider);
}
@Override
public void onLocationChanged(Location location) {
Log.d(TAG, &quot;GPS LocationChanged&quot;);
double lat = location.getLatitude();
double lng = location.getLongitude();
Log.d(TAG, &quot;Received GPS request for &quot; + String.valueOf(lat) + &quot;,&quot; + String.valueOf(lng) + &quot; , ready to rumble!&quot;);
// Do clever stuff here
}
}
[/java]
You can forget about the <a title="viewFlipper javadoc" href="http://developer.android.com/reference/android/widget/ViewFlipper.html" target="_blank">ViewFlipper</a>, that is here only to show something to the user.
Basically, I am letting android decide which provider he wants to use (GPS or Network), and request for the last known location.
Then, I want to do something clever each time onLocationChanged is called.
Problem is, it is not. never. Ever. . .
After having verified hundred times that I had
[xml]
&lt;uses-permission android:name=&quot;android.permission.ACCESS_COARSE_LOCATION&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.ACCESS_FINE_LOCATION&quot; /&gt;
[/xml]
correctly defined in my manifest, and that yes, other GPS based apps were working fine on my phone; I finally found the solution.
As stupid as it seems,<strong> I had forgotten to request the updates. . .</strong>
Something like that would do the job :
[java]
@Override
protected void onResume() {
super.onResume();
Log.v(TAG, &quot;Resuming&quot;);
locationManager.requestLocationUpdates(provider, 400, 1, this);
}
[/java]
I was somehow expecting that is was automatic, implied by the fact that my activity implements <a title="Location listener javadoc" href="http://developer.android.com/reference/android/location/LocationListener.html" target="_blank">LocationListener</a>.
<strong>Well it is not.</strong>
So, if any of you has the same problem, look whether you actually ask for something before getting angry because you don't receive it :D.
<strong>Have fun hacking around.</strong>
Oh, and if you leave in Brest, give a shot to #<strong><a title="Brestram play store" href="https://play.google.com/store/apps/details?id=fr.lengrand.brestram" target="_blank">BresTram</a></strong>; it is awesome!

View File

@@ -0,0 +1,124 @@
---
layout: post
status: publish
published: true
title: Integrate a twitter timeline in your android application.
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 899
wordpress_url: http://www.lengrand.fr/?p=899
date: 2013-10-30 18:10:55.000000000 +01:00
categories:
- Uncategorized
- programming
tags:
- android
- brestram
- java
- twitter
- timeline
- social
comments: []
---
Hey all,
This week-end, I worked on integrating a social feature in <a title="brestram google play" href="https://play.google.com/store/apps/details?id=fr.lengrand.brestram&amp;hl=en"><strong>BresTram</strong></a>.
I needed a way to let the users know when the bibus servers have a problem, and also let users send messages to each others if needed.
Finally,<strong> I didn't want to spend too much time developing</strong> it. I have more pressing features to implement, and the social integration is more of a "test".
I decided to go with <strong>Twitter</strong>. The message will generally be short (work on the rails, problems with the tram, ...), and everybody should be able to see them.
I started looking at the <a title="twitter streaming api" href="https://dev.twitter.com/docs/streaming-apis" target="_blank">Streaming API</a>, but then realized there was a much simpler way to do it : Simply integrate a web <a title="twitter timelines" href="https://dev.twitter.com/docs/embedded-timelines" target="_blank">timeline</a> into my app.
I started by creating a dedicated filter on the twitter account of BresTram.
This gives me two lines of code to integrate into the website of my choice :
[html]
&lt;a class=&quot;twitter-timeline&quot; href=&quot;https://twitter.com/search?q=%23BresTram&quot; data-widget-id=&quot;394415351972114432&quot;&gt;Tweets about &quot;#BresTram&quot;&lt;/a&gt;
&lt;script&gt;!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+&quot;://platform.twitter.com/widgets.js&quot;;fjs.parentNode.insertBefore(js,fjs);}}(document,&quot;script&quot;,&quot;twitter-wjs&quot;);&lt;/script&gt;
[/html]
Then, I simply created a new Activity in my Application, that contains a webview.
[java]
package fr.lengrand.brestram;
import fr.lengrand.brestram.activities.BaseActivity;
import android.os.Bundle;
import android.webkit.WebView;
public class TimeLineActivity extends BaseActivity {
public static final String TAG = &quot;TimeLineActivity&quot;;
private static final String baseURl = &quot;https://twitter.com&quot;;
private static final String widgetInfo = &quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/search?q=%23BresTram\&quot; data-widget-id=\&quot;394415351972114432\&quot;&gt;Tweets about \&quot;#BresTram\&quot;&lt;/a&gt; &quot; +
&quot;&lt;script&gt;!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+\&quot;://platform.twitter.com/widgets.js\&quot;;fjs.parentNode.insertBefore(js,fjs);}}(document,\&quot;script\&quot;,\&quot;twitter-wjs\&quot;);&lt;/script&gt;&quot;;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timeline);
load_background_color();
WebView webView = (WebView) findViewById(R.id.timeline_webview);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadDataWithBaseURL(baseURl, widgetInfo, &quot;text/html&quot;, &quot;UTF-8&quot;, null);
}
/**
* Needed because android:background does not work
* for WebViews
*/
private void load_background_color() {
WebView webView = (WebView) findViewById(R.id.timeline_webview);
//webView.setBackgroundColor(getResources().getColor(R.color.twitter_dark));
webView.setBackgroundColor(0); // transparent
}
}
[/java]
The background color method is needed to avoid the ugly white background behind the timeline. I use a transparent background in this case.
<strong>It is not possible to set the background directly in the xml layout for webviews; you will have to do it in the activity directly.</strong>
And here is the layout file :
[xml]
&lt;RelativeLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
xmlns:tools=&quot;http://schemas.android.com/tools&quot;
android:layout_width=&quot;match_parent&quot;
android:layout_height=&quot;match_parent&quot;
android:paddingBottom=&quot;@dimen/activity_vertical_margin&quot;
android:paddingLeft=&quot;@dimen/activity_horizontal_margin&quot;
android:paddingRight=&quot;@dimen/activity_horizontal_margin&quot;
android:paddingTop=&quot;@dimen/activity_vertical_margin&quot;
tools:context=&quot;.TimeLineActivity&quot; &gt;
&lt;WebView
android:id=&quot;@+id/timeline_webview&quot;
android:layout_width=&quot;fill_parent&quot;
android:layout_height=&quot;fill_parent&quot;/&gt;
&lt;/RelativeLayout&gt;
[/xml]
I used fill_parent because I wanted to give as much space as possible to the Webview.
The result is far from perfect, but it's not that bad for roughly 30 minutes of work :).
[caption id="attachment_900" align="aligncenter" width="480"]<a href="http://www.lengrand.fr/wp-content/uploads/2013/10/twitter_timeline.png"><img class="size-full wp-image-900" alt="twitter timeline embedded into an android application" src="http://www.lengrand.fr/wp-content/uploads/2013/10/twitter_timeline.png" width="480" height="800" /></a> twitter timeline embedded into an android application[/caption]
On top of that, It directly allows my users to post tweets from the application (using the timeline), and will let everybody know about the <a title="BresTram twitter account" href="https://twitter.com/BresTramApp" target="_blank">BresTram twitter account</a>.
Hopefully, this will help me get some useful feedback.
Now, back to more complex features :).
<strong>Oh, and if you leave near Brest, check out <a title="brestram google play" href="https://play.google.com/store/apps/details?id=fr.lengrand.brestram&amp;hl=en" target="_blank">BresTram</a>!</strong>
<em>P.S: This is not exactly how the actual source code look like. I changed several things to highlight the essentials in this post.</em>

View File

@@ -0,0 +1,151 @@
---
layout: post
status: publish
published: true
title: Strange bug with long XML files in android.
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 912
wordpress_url: http://www.lengrand.fr/?p=912
date: 2014-01-29 09:51:46.000000000 +01:00
categories:
- brestram
- android
tags:
- android
- xml
- brestram
- java
- update
comments: []
---
Lately I encountered a strange bug while developing my <a title="brestram main page" href="https://play.google.com/store/apps/details?id=fr.lengrand.brestram&amp;hl=en" target="_blank">android</a> application, and I think it is strange enough to share it in this blog post.
<strong><a title="brestram main page" href="https://play.google.com/store/apps/details?id=fr.lengrand.brestram&amp;hl=en" target="_blank">Brestram</a></strong> is an android application that aims at delivering real time bus schedule for the people living in <a title="google maps brest" href="https://maps.google.com/maps?hl=en&amp;q=maps+brest&amp;ie=UTF-8&amp;hq=&amp;hnear=0x4816bbe1d9925b93:0xc6488358179c30ab,Brest,+France&amp;ei=QqDmUrHnM8mm0AW274HQCQ&amp;ved=0CCoQ8gEwAA" target="_blank">Brest</a>.
For each new version,  I want to display a small message with the new features of the version.
I need to deliver the message both in English and in French, and I wanted to keep history of all the messages I have written in the past for reference.
On top of this, I wanted to be able to write that message in an understandable format (for me) to avoid formatting errors.
I decided to go for XML, for all the reasons above, and also because android supports it really well out of the box.
Here is how my update file would look like :
[xml]
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;resources&gt;
&lt;!-- This file contains all the update messages displayed to the user--&gt;
&lt;!-- To create a new update message:
- Create a new update array, with a incremented update number
- Add a reference to this new array in the updates array
--&gt;
&lt;!-- Template is : --&gt;
&lt;!--
&lt;array name=&quot;update0&quot;&gt;
&lt;item&gt;update title&lt;/item&gt;
&lt;item&gt;update message&lt;/item&gt;
&lt;/array&gt;
--&gt;
&lt;string-array name=&quot;update0&quot;&gt;
&lt;item&gt;
&quot;Mise à jour du site Bibus&quot;
&lt;/item&gt;
&lt;item&gt;
&quot;Bibus a récemment changé son protocole de communication pour les horaires temps réel.\n
Il est donc en ce moment impossible pour BresTram de fonctionner correctement.\n
(Merci Lucas de m'avoir prévenu!)\n
Ceci est totalement indépendant de BresTram, et je fais mon possible pour corriger ceci au plus vite!\n
En attendant, si vous trouvez l'application utile, aidez-moi en votant sur le play store!\n
Merci d'avance, et désolé pour le dérangement.&quot;
&lt;/item&gt;
&lt;/string-array&gt;
. . .
&lt;array name=&quot;update12&quot;&gt;
&lt;!-- French --&gt;
&lt;item&gt;
&quot;Mise à jour du 27 Janvier&quot;
&lt;/item&gt;
&lt;item&gt;
&quot;BresTram vient d'être mis à jour.\n\n&quot;
&quot;Un nouvel onglet a été ajouté pour vous permettre de faire des recherches par ligne de bus.\n&quot;
&quot;Il vous est maintenant possible de voir la liste de toutes les lignes possibles dans l'onglet lignes.\n\n&quot;
&quot;Cette nouvelle fonctionnalité est pour le moment encore en beta, il est donc possible que vous rencontriez des bugs.&quot;
&quot;Faites moi part de vos remarques sur le play store où sur le Twitter de l'application!&quot;
&lt;/item&gt;
&lt;!-- English --&gt;
&lt;item&gt;
&quot;BresTram was updated to version 1.5&quot;
&lt;/item&gt;
&lt;item&gt;
&quot;BresTram has been updated to the latest version.\n\n&quot;
&quot;A new tab has been added, that lists all bus lines and their associated bus stops.\n&quot;
&quot;This functionality is currently still in beta, and you might find bugs.\n\n&quot;
&quot;Let me know your suggestions on the playstore or the twitter of the application!&quot;
&lt;/item&gt;
&lt;/array&gt;
&lt;!-- Array containing a reference to all the messages --&gt;
&lt;array name=&quot;updates&quot;&gt;
&lt;item&gt;@array/update0&lt;/item&gt;
. . .
&lt;item&gt;@array/update12&lt;/item&gt;
&lt;/array&gt;
&lt;/resources&gt;
[/xml]
Basically, my update mechanism rely on two different things :
<ul>
<li>A large group of XML arrays</li>
</ul>
Each array describes one update. Each of those updates is divided into 4 items : a title and a content, in English and then in French.
<ul>
<li>Then, another array lists all the update messages.</li>
</ul>
Each item of the array contains a reference to an update, in ascending order.
To use this file, <strong>I wrote a small update functionality in Java</strong> (that may be the subject of a future blog post).
The updater <strong>compares the value of the latest update</strong> <strong>with the current version number in database</strong>, and displays the update message if needed.
But basically, the java code of interest can be summarized in the few following lines :
[java]
private Resources res;
// gets a reference to the array of updates
res = ctx.getResources();
private TypedArray update_messages = res.obtainTypedArray(R.array.updates);
// do useful stuff with the typed array. For example, get the total number of updates available :
/**
* Returns the latest version number of the application.
* This gives the number of update messages in the updates file
* @return the latest version number
*/
public int getLatestVersion(){
return update_messages.length();
}
[/java]
But for some strange reason, things started acted weird last month. <strong>My 11th update wouldn't show up. Instead, it was the 8th being displayed!</strong>
I checked the format of the xml times for a while, screening for a silly copy-pasting error or something alike. But I couldn't find anything.
After some time, I started checking my Java code. During the debugging,<strong> I realized that my update array was detected as 8 rows long, instead of 11.</strong>
At least I had found the reason why another update was showing up on screen instead of the one I was waiting for. <em>But why?!</em>
I kept searching for a while, realizing that <strong>everything was for example working fine if I was replacing the text of my 11th update by a copy of my 10th update message . . .</strong>
Tired of not being able to find the source of the problem, I started trying things that made no sense. And I finally realized that<strong> if I put the array containing the list of references to my updates BEFORE that actual updates, everything was fine.</strong>
I guess for some reasons the amount of data read by the xml parser is limited. When creating the typed array, only a fixed amount of data is grabbed from the xml resource file. When the number of updates grew, the xml file started being too long and I finally ended up grabbing only part of my array.
So basically, I am now 4 updates later, and things continue to behave normally, so I guess the problem is "fixed".
So far, I am still searching for a proof of these assumptions though. . .
In case you know the exact reason why this happened, feel free to drop me a line in the comments of reach me on <a title="my twitter" href="https://twitter.com/jlengrand" target="_blank"><strong>twitter</strong></a>.