<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title>Cambus.net</title>
  <link href="http://www.cambus.net/atom.xml" rel="self"/>
  <link href="http://www.cambus.net/"/>
  <updated>2012-02-09T10:58:31+01:00</updated>
  <id>http://www.cambus.net/</id>
  <author>
    <name>Frederic Cambus</name>
    
  </author>

  
  <entry>
    <title>Installing Go on Mac OS X</title>
    <link href="http://www.cambus.net/installing-go-on-mac-os-x/"/>
    <updated>2012-02-06T17:42:00+01:00</updated>
    <id>http://www.cambus.net/installing-go-on-mac-os-x</id>
    <content type="html">&lt;p&gt;Installing &lt;strong&gt;Go&lt;/strong&gt; on a &lt;strong&gt;Mac OS X&lt;/strong&gt; system is a pretty easy process. In order to do so, you will need to have &lt;strong&gt;Xcode&lt;/strong&gt; and &lt;strong&gt;Mercurial&lt;/strong&gt; installed; it is possible to download precompiled binary packages from the official Mercurial site, but as I have &lt;strong&gt;Homebrew&lt;/strong&gt; installed on this system, that&amp;#8217;s what I&amp;#8217;ve been using instead.&lt;/p&gt;

&lt;p&gt;In your home directory, type the following command to clone the Go repository :&lt;/p&gt;

&lt;pre&gt;
hg clone -u release https://go.googlecode.com/hg/ go
&lt;/pre&gt;


&lt;p&gt;We then compile everything by invoking the following commands :&lt;/p&gt;

&lt;pre&gt;
cd go/src
./all.bash
&lt;/pre&gt;


&lt;p&gt;On my system, the whole operation is quite fast and takes approximately three minutes to complete (compilation + all unit tests).&lt;/p&gt;

&lt;pre&gt;
real    3m10.309s
user    2m48.050s
sys     0m41.652s
&lt;/pre&gt;


&lt;p&gt;Finally, you need to set a few environment variables in your &lt;strong&gt;.bash_profile&lt;/strong&gt; file :&lt;/p&gt;

&lt;pre&gt;
export GOROOT=$HOME/go
export GOOS=darwin
export GOARCH=amd64
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
&lt;/pre&gt;


&lt;p&gt;Congratulations, Go is now installed on your system and you&amp;#8217;re ready to start working with it!&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>RIPE Atlas : an Internet measurement network</title>
    <link href="http://www.cambus.net/ripe-atlas-an-internet-measurement-network/"/>
    <updated>2012-02-02T17:34:00+01:00</updated>
    <id>http://www.cambus.net/ripe-atlas-an-internet-measurement-network</id>
    <content type="html">&lt;p&gt;I&amp;#8217;ve been taking part in the &lt;a href=&quot;http://atlas.ripe.net&quot;&gt;RIPE Atlas&lt;/a&gt; community since a few weeks already, a project which aims to build the biggest Internet measurement network ever.
By doing so, I&amp;#8217;m now hosting a small probe (built around a &lt;strong&gt;Lantronix XPort Pro&lt;/strong&gt; module) sent by the &lt;strong&gt;RIPE NCC&lt;/strong&gt; which is doing round-the-clock reporting.&lt;/p&gt;

&lt;p&gt;This is a picture of my setup, the probe is connected to an USB power adapter :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2012/01/ripe-atlas-setup.jpg&quot; title=&quot;RIPE Atlas Setup&quot; alt=&quot;RIPE Atlas Setup&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And here is a closer picture of the probe :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2012/01/ripe-atlas-probe.jpg&quot; title=&quot;RIPE Atlas Probe&quot; alt=&quot;RIPE Atlas Probe&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Basically, the probe is measuring round-trip time (RTT) to the each of the 13 root servers and also does &amp;#8221;&lt;strong&gt;anycast instance discovery&lt;/strong&gt;&amp;#8221; measurements, which is precisely why I find this project particularly interesting.
Put simply, it allows to know which instance of a given root server you end up querying; for example, when I query the K-root server, I end up connecting to the DENIC operated instance located in Frankfurt (Germany).
The RIPE NCC produce publicly available &lt;a href=&quot;https://atlas.ripe.net/contrib/maps_index.html&quot;&gt;maps&lt;/a&gt; using the collected metrics, which allow gravitational radius visualizations for each server instances.
For reference, &lt;a href=&quot;http://www.root-servers.org&quot;&gt;here&lt;/a&gt; is list of all root servers instances.&lt;/p&gt;

&lt;p&gt;Unexpectedly, the probe is also a nice way to monitor my Internet connection, which according to this graph is pretty stable :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2012/01/ripe-atlas-uptime.png&quot; title=&quot;RIPE Atlas Uptime&quot; alt=&quot;RIPE Atlas Uptime&quot; /&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>OpenDNS Stickers</title>
    <link href="http://www.cambus.net/opendns-stickers/"/>
    <updated>2012-01-30T21:29:00+01:00</updated>
    <id>http://www.cambus.net/opendns-stickers</id>
    <content type="html">&lt;p&gt;Earlier last week, I received the &lt;strong&gt;OpenDNS stickers&lt;/strong&gt; I requested through their dedicated e-mail account at the end of December. It was a nice suprise, as I was just coming back from work and had totally forgot about this. They are some nice pieces of DNS related collectables, and I couldn&amp;#8217;t resist posting a picture here :)&lt;/p&gt;

&lt;p&gt;Even if I&amp;#8217;m not using their &lt;a href=&quot;http://www.cambus.net/free-public-dns-servers-list/&quot;&gt;public DNS servers&lt;/a&gt; on a permanent basis, they sure proved useful along the years and saved me more than once in some desperate situations. I should mention that I also appreciate their efforts in raising DNS awareness to the general public. So thank you OpenDNS!&lt;/p&gt;

&lt;p&gt;PS : They now have a dedicated page for the stickers, and you can request some &lt;a href=&quot;http://www.opendns.com/forms/stickers&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2012/01/opendns-stickers.jpg&quot; title=&quot;OpenDNS Stickers&quot; alt=&quot;OpenDNS Stickers&quot; /&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Hurricane Electric IPv6 Certification</title>
    <link href="http://www.cambus.net/hurricane-electric-ipv6-certification/"/>
    <updated>2012-01-18T12:55:00+01:00</updated>
    <id>http://www.cambus.net/hurricane-electric-ipv6-certification</id>
    <content type="html">&lt;p&gt;I recently completed &lt;a href=&quot;http://ipv6.he.net/certification/&quot;&gt;Hurricane Electric IPv6 certification&lt;/a&gt; and reached the &amp;#8220;Sage&amp;#8221; level. This was a fun and educational process and I would recommend it to anyone interested about the topic, as it&amp;#8217;s a really nice way to start getting familiar with IPv6.&lt;/p&gt;

&lt;p&gt;Also, I should mention certified IPv6 Sages are entitled to receive a free IPv6 themed t-shirt :)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://ipv6.he.net/certification/scoresheet.php?pass_name=fcambus&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ipv6.he.net/certification/create_badge.php?pass_name=fcambus&amp;badge=3&quot; width=229 height=137 border=0 alt=&quot;IPv6 Certification Badge for fcambus&quot;&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>ANSi Web Browser concept</title>
    <link href="http://www.cambus.net/ansi-web-browser-concept/"/>
    <updated>2012-01-03T17:00:00+01:00</updated>
    <id>http://www.cambus.net/ansi-web-browser-concept</id>
    <content type="html">&lt;p&gt;This is an attempt at building a &lt;strong&gt;text mode Web browser&lt;/strong&gt; interface. It has built in tabs, back and forward buttons, an  home button, an address bar with favicon display, bookmark icon, and country flag. It also comes with a  few  default extensions : a pagerank plugin, a currency converter, a weather plugin, and a music player as well. What else could you ask for? The possibilities are infinite.&lt;/p&gt;

&lt;p&gt;By the way, in  case you wonder if such a  browser makes sense in the social media era, the answer is &lt;em&gt;YES&lt;/em&gt; : you can of course share the pages on various social media sites. The icons used come from the &lt;a href=&quot;http://www.cambus.net/ansi-social-media-icon-set/&quot;&gt;ANSi Social Media Icon Set&lt;/a&gt; (&lt;strong&gt;CC-BY-SA 3.0&lt;/strong&gt; licensed).&lt;/p&gt;

&lt;p&gt;The rationale behind this design is quite simple : text mode is  the undisputed best way to display  information on a computer screen. There is no other option.&lt;/p&gt;

&lt;p&gt;You can download this mockup as an &lt;a href=&quot;http://www.cambus.net/files/ansi-web-browser.ans&quot;&gt;ansi file&lt;/a&gt;, or converted in &lt;a href=&quot;http://www.cambus.net/files/ansi-web-browser.png&quot;&gt;PNG&lt;/a&gt; (with &lt;strong&gt;iCE colors&lt;/strong&gt; turned ON) for easier viewing.&lt;/p&gt;

&lt;p&gt;Happy New Year 2012!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/files/ansi-web-browser.png&quot; title=&quot;ANSi Web Browser&quot; alt=&quot;ANSi Web Browser&quot; /&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Compiling Apache 1.3.x on modern Linux distributions</title>
    <link href="http://www.cambus.net/compiling-apache-1.3.x-on-modern-linux-distributions/"/>
    <updated>2011-11-10T22:37:00+01:00</updated>
    <id>http://www.cambus.net/compiling-apache-1.3.x-on-modern-linux-distributions</id>
    <content type="html">&lt;p&gt;For a lot of reasons, some people still want to be able to run &lt;strong&gt;Apache 1.3&lt;/strong&gt; on modern Linux distributions, and unfortunately for them, it doesn&amp;#8217;t compile out of the box anymore. The encountered errors are, however, easy to fix and you will learn how to do so in this tutorial.&lt;/p&gt;

&lt;p&gt;We start by downloading and unpacking sources of the latest 1.3.x version, which happens to be 1.3.42 :&lt;/p&gt;

&lt;pre&gt;
wget http://archive.apache.org/dist/httpd/apache_1.3.42.tar.gz
tar xvfz apache_1.3.42.tar.gz
&lt;/pre&gt;


&lt;p&gt;We then run the &lt;strong&gt;configure script&lt;/strong&gt; :&lt;/p&gt;

&lt;pre&gt;
cd apache_1.3.42
./configure
&lt;/pre&gt;


&lt;p&gt;Most likely, this will fail and this error message will get displayed :&lt;/p&gt;

&lt;pre&gt;
+ Warning: Your &#8216;echo&#8217; command is slightly broken.
+ It interprets escape sequences per default. We already
+ tried &#8216;echo -E&#8217; but had no real success. If errors occur
+ please set the SEO variable in &#8216;configure&#8217; manually to
+ the required &#8216;echo&#8217; options, i.e. those which force your
+ &#8216;echo&#8217; to not interpret escape sequences per default.

+ NOTE: You may also need to edit the shell invoked by
+       &#8216;configure&#8217;. Some shells (e.g. dash) have a
+       faulty echo builtin.
+ using installation path layout: Apache (config.layout)
&lt;/pre&gt;


&lt;p&gt;This happens because in most modern distributions, &lt;strong&gt;sh&lt;/strong&gt; is just an alias to &lt;strong&gt;dash&lt;/strong&gt;, and dash interprets escape sequences which are therefore not echoed as they should.&lt;/p&gt;

&lt;p&gt;The workaround is to simply use &lt;strong&gt;bash&lt;/strong&gt; instead of &lt;strong&gt;sh&lt;/strong&gt; to run the script :&lt;/p&gt;

&lt;pre&gt;
bash ./configure
&lt;/pre&gt;


&lt;p&gt;Now, let&amp;#8217;s compile everything :&lt;/p&gt;

&lt;pre&gt;
make
&lt;/pre&gt;


&lt;p&gt;After compiling a few files, the process will halt with this error :&lt;/p&gt;

&lt;pre&gt;
gcc -c  -I../os/unix -I../include   -DLINUX=22 -DHAVE_SET_DUMPABLE -DUSE_HSREGEX -DNO_DL_NEEDED `../apaci` htpasswd.c
htpasswd.c:101:12: error: conflicting types for ‘getline’
/usr/include/stdio.h:671:20: note: previous declaration of ‘getline’ was here
make[2]: *** [htpasswd.o] Error 1
&lt;/pre&gt;


&lt;p&gt;The internal Apache &lt;strong&gt;getline&lt;/strong&gt; function is conflicting with the getline function from the standard I/O library. We can simply fix this by renaming the getline function, which is defined and called in &lt;strong&gt;htdigest.c&lt;/strong&gt;, &lt;strong&gt;htpasswd.c&lt;/strong&gt;, and &lt;strong&gt;logresolve.c&lt;/strong&gt; :&lt;/p&gt;

&lt;pre&gt;
sed -i &#8216;s/getline/apache_getline/&#8217; src/support/htdigest.c
sed -i &#8216;s/getline/apache_getline/&#8217; src/support/htpasswd.c
sed -i &#8216;s/getline/apache_getline/&#8217; src/support/logresolve.c
&lt;/pre&gt;


&lt;p&gt;Let&amp;#8217;s run make again, and everything should finally compile without problem :&lt;/p&gt;

&lt;pre&gt;
make
&lt;/pre&gt;


&lt;p&gt;Please note, however, that Apache 1.3 branch reached end of life and is therefore depreceated and not supported anymore. It means you will not be getting any bugfixes or security updates and should anything happen, you will have to patch the source files yourself.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Setting up a Node.js development environment with NPM and Cloud9 IDE installed locally</title>
    <link href="http://www.cambus.net/setting-up-a-node-js-development-environment-with-npm-and-cloud9-ide-installed-locally/"/>
    <updated>2011-11-05T17:45:00+01:00</updated>
    <id>http://www.cambus.net/setting-up-a-node-js-development-environment-with-npm-and-cloud9-ide-installed-locally</id>
    <content type="html">&lt;p&gt;In this tutorial, you will learn how to setup a complete &lt;strong&gt;Node.js&lt;/strong&gt; development environment, including &lt;strong&gt;NPM&lt;/strong&gt; (the Node Package Manager) and &lt;strong&gt;Cloud9 IDE&lt;/strong&gt; to edit, run, and debug Node programs. The following installation instructions have been sucessfully tested on &lt;strong&gt;Debian 6.0&lt;/strong&gt; &amp;#8220;Squeeze&amp;#8221; and on &lt;strong&gt;Ubuntu 11.10&lt;/strong&gt; &amp;#8220;Oneiric Ocelot&amp;#8221;, but they should also work properly on previous versions as well.&lt;/p&gt;

&lt;p&gt;We will install everything in the user&amp;#8217;s home directory : this way, there is no need for any root access to the machine (provided the required packages are, of course, already installed), and each user can manage its own version of Node.&lt;/p&gt;

&lt;p&gt;We start by installing (as root) required packages to build Node and later fetch NPM and Cloud9 :&lt;/p&gt;

&lt;pre&gt;
apt-get install build-essential g++ libssl-dev curl git
&lt;/pre&gt;


&lt;p&gt;We create a &amp;#8216;local&amp;#8217; directory within our home directory, and modify our .bashrc file to add it permanently to the $PATH variable :&lt;/p&gt;

&lt;pre&gt;
mkdir ~/local
echo &#8216;export PATH=$HOME/local/bin:$PATH&#8217; &gt;&gt; ~/.bashrc
source ~/.bashrc
&lt;/pre&gt;


&lt;p&gt;We fetch, unpack, configure, compile, and install Node. At the time of writing, the latest stable version is 0.4.12, so we simply set the temporary $NODE_VERSION variable accordingly :&lt;/p&gt;

&lt;pre&gt;
export NODE_VERSION=&#8217;0.4.12&#8217;
wget http://nodejs.org/dist/node-v$NODE_VERSION.tar.gz
tar xvfz node-v$NODE_VERSION.tar.gz
cd node-v$NODE_VERSION
./configure &#8211;prefix=~/local
make install
cd ~
&lt;/pre&gt;


&lt;p&gt;We then fetch and install NPM :&lt;/p&gt;

&lt;pre&gt;
curl http://npmjs.org/install.sh | sh
&lt;/pre&gt;


&lt;p&gt;And finally, we install Cloud9 IDE via git :&lt;/p&gt;

&lt;pre&gt;
git clone git://github.com/ajaxorg/cloud9.git
&lt;/pre&gt;


&lt;p&gt;If everything went fine, congratulations, you can now launch Cloud9 IDE and type your first program. First launch can take some time, as the shellscript will need to get some required dependencies prior to run the program.&lt;/p&gt;

&lt;pre&gt;
~/cloud9/bin/cloud9.sh
&lt;/pre&gt;


&lt;p&gt;Note that the Cloud9 launcher accepts parameters allowing to specify IP and port to listen on, workspace directory, and so on and so far. Below is a list of all available options :&lt;/p&gt;

&lt;pre&gt;
Show this help message
    &#8211;help
Load the configuration from a config file. Overrides command-line options. Default: &lt;null&gt;
    -c, &#8211;config &lt;value&gt;
Run child processes with a specific group. Default: &lt;false&gt;
    -g, &#8211;group &lt;value&gt;
Run child processes as a specific user. Default: &lt;false&gt;
    -u, &#8211;user &lt;value&gt;
Activate debug-mode. Default: &lt;false&gt;
    -d, &#8211;debug
Define an action to execute after the Cloud9 server is started. Default: &lt;null&gt;
    -a, &#8211;action &lt;value&gt;
IP address where Cloud9 will serve from. Default: &lt;127.0.0.1&gt;
    -l, &#8211;ip &lt;value&gt;
Port number where Cloud9 will serve from. Default: &lt;3000&gt;
    -p, &#8211;port &lt;value&gt;
Path to the workspace that will be loaded in Cloud9 (may be relative or absolute). Default: &lt;.&gt;
    -w, &#8211;workspace &lt;value&gt;
&lt;/pre&gt;


&lt;p&gt;Now, point your browser to the following URL : &lt;a href=&quot;http://127.0.0.1:3000&quot;&gt;http://127.0.0.1:3000&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/11/cloud9-ide.png&quot; title=&quot;Cloud9 IDE Screenshot&quot; alt=&quot;Cloud9 IDE Screenshot&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Create a new file (Select &lt;strong&gt;File&lt;/strong&gt;, &lt;strong&gt;New&lt;/strong&gt;, then &lt;strong&gt;JavaScript file&lt;/strong&gt;) and paste this code (this is the Hello World HTTP server example from the &lt;a href=&quot;http://nodejs.org&quot;&gt;Node.js&lt;/a&gt; website) :&lt;/p&gt;

&lt;figure class=&#8217;code&#8217;&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line-number&#8217;&gt;1&lt;/span&gt;
&lt;span class=&#8217;line-number&#8217;&gt;2&lt;/span&gt;
&lt;span class=&#8217;line-number&#8217;&gt;3&lt;/span&gt;
&lt;span class=&#8217;line-number&#8217;&gt;4&lt;/span&gt;
&lt;span class=&#8217;line-number&#8217;&gt;5&lt;/span&gt;
&lt;span class=&#8217;line-number&#8217;&gt;6&lt;/span&gt;
&lt;span class=&#8217;line-number&#8217;&gt;7&lt;/span&gt;
&lt;span class=&#8217;line-number&#8217;&gt;8&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217;&gt;&lt;pre&gt;&lt;code class=&#8217;javascript&#8217;&gt;&lt;span class=&#8217;line&#8217;&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;http&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;http&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class=&#8217;line&#8217;&gt;
&lt;/span&gt;&lt;span class=&#8217;line&#8217;&gt;&lt;span class=&quot;nx&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createServer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class=&#8217;line&#8217;&gt;  &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;writeHead&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;Content-Type&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;text/plain&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;span class=&#8217;line&#8217;&gt;  &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;Hello World\n&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class=&#8217;line&#8217;&gt;&lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listen&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1337&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class=&#8217;line&#8217;&gt;
&lt;/span&gt;&lt;span class=&#8217;line&#8217;&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;Server running at http://127.0.0.1:1337/&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Run it :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/11/cloud9-ide-running.png&quot; title=&quot;Cloud9 IDE Screenshot&quot; alt=&quot;Cloud9 IDE Screenshot&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And check the result in your Web browser :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/11/hello-world-server.png&quot; title=&quot;Hello World Server&quot; alt=&quot;Hello World Server&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, you just ran your first Node program : see how easy and straightforward it was?&lt;/p&gt;

&lt;p&gt;You now have everything ready in order to start developing &lt;strong&gt;Node.js applications&lt;/strong&gt;! Should you need any information or resources to get you started, you can find useful links in the &lt;a href=&quot;http://www.nodecloud.org&quot;&gt;NodeCloud&lt;/a&gt; directory.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>SciTE : a lightweight text and code editor</title>
    <link href="http://www.cambus.net/scite-a-lightweight-text-and-code-editor/"/>
    <updated>2011-09-18T20:30:00+02:00</updated>
    <id>http://www.cambus.net/scite-a-lightweight-text-and-code-editor</id>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.scintilla.org/SciTE.html&quot;&gt;SciTE&lt;/a&gt; is a &lt;strong&gt;lightweight&lt;/strong&gt;, fast, and crystal clear &lt;strong&gt;text and code editor&lt;/strong&gt; for those
who love minimalism and efficiency. It is, however, a fully featured and highly customizable
editor supporting tabbed files, code folding, and language specific syntax highlighting.
It is one of my editor of choice for small projects : actually, I&amp;#8217;m typing this
article using it.&lt;/p&gt;

&lt;p&gt;SciTE feels oldschool, a reminiscing gem from a software era when efficiency
prevailed over complexity and bloating : in fact it feels so good that I decided to
use FVWM (which is, for the record, the first Window Manager I ever used back
in early 1996) to take a screenshot.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/09/scite.png&quot; title=&quot;SciTE Screenshot&quot; alt=&quot;SciTE Screenshot&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Some interesting facts and features :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is built upon Scintilla (a source code editing component), and is extendable through Lua scripts.&lt;/li&gt;
&lt;li&gt;Cross-platform (Good to note : the Windows version is just one single .EXE file!).&lt;/li&gt;
&lt;li&gt;Interesting selection features : SciTE allows &lt;strong&gt;rectangular block selection&lt;/strong&gt; by holding the CTRL key (ALT key under Windows) while defining the selected area.&lt;/li&gt;
&lt;li&gt;Supports syntax highlighting and code folding for a large choice of languages.&lt;/li&gt;
&lt;li&gt;Fully customizable through a text based configuration file.&lt;/li&gt;
&lt;/ul&gt;

</content>
  </entry>
  
  <entry>
    <title>Teletext in Germany - Part III</title>
    <link href="http://www.cambus.net/teletext-in-germany-part-iii/"/>
    <updated>2011-08-17T14:17:00+02:00</updated>
    <id>http://www.cambus.net/teletext-in-germany-part-iii</id>
    <content type="html">&lt;p&gt;This is the third part of the teletext in Germany serie, containing screens from the following channels : rbb Fernsehen, RTL, RTL II, Sat. 1, Sport1, Super RTL, SWR Fernsehen, Tele 5, VIVA, VOX, WDR Fernsehen, and ZDF.&lt;/p&gt;

&lt;p&gt;First part : &lt;a href=&quot;http://www.cambus.net/teletext-in-germany-part-i/&quot;&gt;http://www.cambus.net/teletext-in-germany-part-i/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Second part : &lt;a href=&quot;http://www.cambus.net/teletext-in-germany-part-ii/&quot;&gt;http://www.cambus.net/teletext-in-germany-part-ii/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;rbb Fernsehen :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-rbb-fernsehen-01.jpg&quot; alt=&quot;Teletext rbb Fernsehen&quot; /&gt;&lt;/p&gt;

&lt;!&#8211;more&#8211;&gt;


&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-rbb-fernsehen-02.jpg&quot; alt=&quot;Teletext rbb Fernsehen&quot; /&gt;&lt;/p&gt;

&lt;p&gt;RTL :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-rtl-01.jpg&quot; alt=&quot;Teletext RTL&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-rtl-02.jpg&quot; alt=&quot;Teletext RTL&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-rtl-03.jpg&quot; alt=&quot;Teletext RTL&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-rtl-04.jpg&quot; alt=&quot;Teletext RTL&quot; /&gt;&lt;/p&gt;

&lt;p&gt;RTL II :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-rtl-ii-01.jpg&quot; alt=&quot;Teletext RTL II&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-rtl-ii-02.jpg&quot; alt=&quot;Teletext RTL II&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-rtl-ii-03.jpg&quot; alt=&quot;Teletext RTL II&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Sat. 1 :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-sat.1-01.jpg&quot; alt=&quot;Teletext Sat. 1&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-sat.1-02.jpg&quot; alt=&quot;Teletext Sat. 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Sport1 :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-sport1-01.jpg&quot; alt=&quot;Teletext Sport1&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-sport1-02.jpg&quot; alt=&quot;Teletext Sport1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Super RTL :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-super-rtl-01.jpg&quot; alt=&quot;Teletext Super RTL&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-super-rtl-02.jpg&quot; alt=&quot;Teletext Super RTL&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-super-rtl-03.jpg&quot; alt=&quot;Teletext Super RTL&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-super-rtl-04.jpg&quot; alt=&quot;Teletext Super RTL&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-super-rtl-05.jpg&quot; alt=&quot;Teletext Super RTL&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-super-rtl-06.jpg&quot; alt=&quot;Teletext Super RTL&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-super-rtl-07.jpg&quot; alt=&quot;Teletext Super RTL&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-super-rtl-08.jpg&quot; alt=&quot;Teletext Super RTL&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-super-rtl-09.jpg&quot; alt=&quot;Teletext Super RTL&quot; /&gt;&lt;/p&gt;

&lt;p&gt;SWR Fernsehen :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-swr-fernsehen-01.jpg&quot; alt=&quot;Teletext SWR Fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-swr-fernsehen-02.jpg&quot; alt=&quot;Teletext SWR Fernsehen&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Tele 5 :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-tele5-01.jpg&quot; alt=&quot;Teletext Tele 5&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-tele5-02.jpg&quot; alt=&quot;Teletext Tele 5&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-tele5-03.jpg&quot; alt=&quot;Teletext Tele 5&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-tele5-04.jpg&quot; alt=&quot;Teletext Tele 5&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-tele5-05.jpg&quot; alt=&quot;Teletext Tele 5&quot; /&gt;&lt;/p&gt;

&lt;p&gt;VIVA :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-viva-01.jpg&quot; alt=&quot;Teletext VIVA&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-viva-02.jpg&quot; alt=&quot;Teletext VIVA&quot; /&gt;&lt;/p&gt;

&lt;p&gt;VOX :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-vox-01.jpg&quot; alt=&quot;Teletext VOX&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-vox-02.jpg&quot; alt=&quot;Teletext VOX&quot; /&gt;&lt;/p&gt;

&lt;p&gt;WDR Fernsehen :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-wdr-fernsehen-01.jpg&quot; alt=&quot;Teletext WDR Fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-wdr-fernsehen-02.jpg&quot; alt=&quot;Teletext WDR Fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-wdr-fernsehen-03.jpg&quot; alt=&quot;Teletext WDR Fernsehen&quot; /&gt;&lt;/p&gt;

&lt;p&gt;ZDF :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-zdf-01.jpg&quot; alt=&quot;Teletext ZDF&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-zdf-02.jpg&quot; alt=&quot;Teletext ZDF&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-zdf-03.jpg&quot; alt=&quot;Teletext ZDF&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-zdf-04.jpg&quot; alt=&quot;Teletext ZDF&quot; /&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Teletext in Germany - Part II</title>
    <link href="http://www.cambus.net/teletext-in-germany-part-ii/"/>
    <updated>2011-08-17T14:17:00+02:00</updated>
    <id>http://www.cambus.net/teletext-in-germany-part-ii</id>
    <content type="html">&lt;p&gt;This is the second part of the teletext in Germany serie, containing screens from the following channels : Kabel eins, MDR Fernsehen, N24, NDR Fernsehen, Nickelodeon, n-tv, Phoenix, ProSieben, and QVC.&lt;/p&gt;

&lt;p&gt;First part : &lt;a href=&quot;http://www.cambus.net/teletext-in-germany-part-i/&quot;&gt;http://www.cambus.net/teletext-in-germany-part-i/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Third part : &lt;a href=&quot;http://www.cambus.net/teletext-in-germany-part-iii/&quot;&gt;http://www.cambus.net/teletext-in-germany-part-iii/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kabel eins :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-kabel-eins-01.jpg&quot; alt=&quot;Teletext Kabel eins&quot; /&gt;&lt;/p&gt;

&lt;!&#8211;more&#8211;&gt;


&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-kabel-eins-02.jpg&quot; alt=&quot;Teletext Kabel eins&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-kabel-eins-03.jpg&quot; alt=&quot;Teletext Kabel eins&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-kabel-eins-04.jpg&quot; alt=&quot;Teletext Kabel eins&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-kabel-eins-05.jpg&quot; alt=&quot;Teletext Kabel eins&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-kabel-eins-06.jpg&quot; alt=&quot;Teletext Kabel eins&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-kabel-eins-07.jpg&quot; alt=&quot;Teletext Kabel eins&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-kabel-eins-08.jpg&quot; alt=&quot;Teletext Kabel eins&quot; /&gt;&lt;/p&gt;

&lt;p&gt;MDR Fernsehen :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-mdr-fernsehen-01.jpg&quot; alt=&quot;Teletext MDR Fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-mdr-fernsehen-02.jpg&quot; alt=&quot;Teletext MDR Fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-mdr-fernsehen-03.jpg&quot; alt=&quot;Teletext MDR Fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-mdr-fernsehen-04.jpg&quot; alt=&quot;Teletext MDR Fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-mdr-fernsehen-05.jpg&quot; alt=&quot;Teletext MDR Fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-mdr-fernsehen-06.jpg&quot; alt=&quot;Teletext MDR Fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-mdr-fernsehen-07.jpg&quot; alt=&quot;Teletext MDR Fernsehen&quot; /&gt;&lt;/p&gt;

&lt;p&gt;N24 :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-n24-01.jpg&quot; alt=&quot;Teletext N24&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-n24-02.jpg&quot; alt=&quot;Teletext N24&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-n24-03.jpg&quot; alt=&quot;Teletext N24&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-n24-04.jpg&quot; alt=&quot;Teletext N24&quot; /&gt;&lt;/p&gt;

&lt;p&gt;NDR Fernsehen :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-ndr-fernsehen-01.jpg&quot; alt=&quot;Teletext NDR Fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-ndr-fernsehen-02.jpg&quot; alt=&quot;Teletext NDR Fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-ndr-fernsehen-03.jpg&quot; alt=&quot;Teletext NDR Fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-ndr-fernsehen-04.jpg&quot; alt=&quot;Teletext NDR Fernsehen&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Nickelodeon :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-nickelodeon-01.jpg&quot; alt=&quot;Teletext Nickelodeon&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-nickelodeon-02.jpg&quot; alt=&quot;Teletext Nickelodeon&quot; /&gt;&lt;/p&gt;

&lt;p&gt;n-tv :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-n-tv-01.jpg&quot; alt=&quot;Teletext n-tv&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-n-tv-02.jpg&quot; alt=&quot;Teletext n-tv&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-n-tv-03.jpg&quot; alt=&quot;Teletext n-tv&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-n-tv-04.jpg&quot; alt=&quot;Teletext n-tv&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-n-tv-05.jpg&quot; alt=&quot;Teletext n-tv&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Phoenix :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-phoenix-01.jpg&quot; alt=&quot;Teletext Phoenix&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-phoenix-02.jpg&quot; alt=&quot;Teletext Phoenix&quot; /&gt;&lt;/p&gt;

&lt;p&gt;ProSieben :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-prosieben-01.jpg&quot; alt=&quot;Teletext ProSieben&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-prosieben-02.jpg&quot; alt=&quot;Teletext ProSieben&quot; /&gt;&lt;/p&gt;

&lt;p&gt;QVC :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-qvc-01.jpg&quot; alt=&quot;Teletext QVC&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-qvc-02.jpg&quot; alt=&quot;Teletext QVC&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-qvc-03.jpg&quot; alt=&quot;Teletext QVC&quot; /&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Teletext in Germany - Part I</title>
    <link href="http://www.cambus.net/teletext-in-germany-part-i/"/>
    <updated>2011-08-17T14:17:00+02:00</updated>
    <id>http://www.cambus.net/teletext-in-germany-part-i</id>
    <content type="html">&lt;p&gt;Faster than expected, here comes the second article of my World of teletext serie : it is dedicated to german teletext this time, and contain 110 screens and one video.&lt;/p&gt;

&lt;p&gt;Unfortunately, I have no idea about the actual state of teletext in Germany, as the country totally switched to digital television through a process completed in 2009. However, analog cable and satellite broadcasts will remain available until 2012, and this is actually how I&amp;#8217;ve been able to capture these screens from France in June 2011 : using an analog satellite decoder with antenna pointed to Astra (19.2°E).&lt;/p&gt;

&lt;p&gt;This serie contains screens from the following channels : 3sat, ARTE, Bayerisches Fernsehen,  Channel 21, Comedy Central, Das Erste, DMAX, Eurosport, hr-fernsehen, Kabel eins, MDR Fernsehen, N24, NDR Fernsehen, Nickelodeon, n-tv, Phoenix, ProSieben, QVC, rbb Fernsehen, RTL, RTL II, Sat. 1, Sport1, Super RTL, SWR Fernsehen, Tele 5, VIVA, VOX, WDR Fernsehen, and ZDF.&lt;/p&gt;

&lt;p&gt;Overall, Germany was a very interesting country to cover, lots of lovely screens with nice pictures, and spotless design giving access to clear information. Don&amp;#8217;t miss the video at the end of this article featuring a skyline with a gorgeous blinking TV tower!&lt;/p&gt;

&lt;p&gt;Due to the huge number of pictures, I decided to split it in three parts to allow easier viewing, follow these links to reach the next parts :&lt;/p&gt;

&lt;p&gt;Second part : &lt;a href=&quot;http://www.cambus.net/teletext-in-germany-part-ii/&quot;&gt;http://www.cambus.net/teletext-in-germany-part-ii/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Third part : &lt;a href=&quot;http://www.cambus.net/teletext-in-germany-part-iii/&quot;&gt;http://www.cambus.net/teletext-in-germany-part-iii/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3sat :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-3sat-01.jpg&quot; alt=&quot;Teletext 3sat&quot; /&gt;&lt;/p&gt;

&lt;!&#8211;more&#8211;&gt;


&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-3sat-02.jpg&quot; alt=&quot;Teletext 3sat&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-3sat-03.jpg&quot; alt=&quot;Teletext 3sat&quot; /&gt;&lt;/p&gt;

&lt;p&gt;ARTE :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-arte-01.jpg&quot; alt=&quot;Teletext ARTE&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Bayerisches Fernsehen :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-bayerisches-fernsehen-01.jpg&quot; alt=&quot;Teletext Bayerisches Fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-bayerisches-fernsehen-02.jpg&quot; alt=&quot;Teletext Bayerisches Fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-bayerisches-fernsehen-03.jpg&quot; alt=&quot;Teletext Bayerisches Fernsehen&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Channel 21 :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-channel21-01.jpg&quot; alt=&quot;Teletext Channel 21&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-channel21-02.jpg&quot; alt=&quot;Teletext Channel 21&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-channel21-03.jpg&quot; alt=&quot;Teletext Channel 21&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-channel21-04.jpg&quot; alt=&quot;Teletext Channel 21&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Comedy Central :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-comedy-central-01.jpg&quot; alt=&quot;Teletext Comedy Central&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-comedy-central-02.jpg&quot; alt=&quot;Teletext Comedy Central&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-comedy-central-03.jpg&quot; alt=&quot;Teletext Comedy Central&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Das Erste :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-das-erste-01.jpg&quot; alt=&quot;Teletext Das Erste&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-das-erste-02.jpg&quot; alt=&quot;Teletext Das Erste&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-das-erste-03.jpg&quot; alt=&quot;Teletext Das Erste&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-das-erste-04.jpg&quot; alt=&quot;Teletext Das Erste&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-das-erste-05.jpg&quot; alt=&quot;Teletext Das Erste&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-das-erste-06.jpg&quot; alt=&quot;Teletext Das Erste&quot; /&gt;&lt;/p&gt;

&lt;p&gt;DMAX :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-dmax-01.jpg&quot; alt=&quot;Teletext DMAX&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-dmax-02.jpg&quot; alt=&quot;Teletext DMAX&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Eurosport :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-eurosport-01.jpg&quot; alt=&quot;Teletext Eurosport&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-eurosport-02.jpg&quot; alt=&quot;Teletext Eurosport&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-eurosport-03.jpg&quot; alt=&quot;Teletext Eurosport&quot; /&gt;&lt;/p&gt;

&lt;p&gt;hr-fernsehen :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-hr-fernsehen-01.jpg&quot; alt=&quot;Teletext hr-fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-hr-fernsehen-02.jpg&quot; alt=&quot;Teletext hr-fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-hr-fernsehen-03.jpg&quot; alt=&quot;Teletext hr-fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-hr-fernsehen-04.jpg&quot; alt=&quot;Teletext hr-fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-hr-fernsehen-05.jpg&quot; alt=&quot;Teletext hr-fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-hr-fernsehen-06.jpg&quot; alt=&quot;Teletext hr-fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-hr-fernsehen-07.jpg&quot; alt=&quot;Teletext hr-fernsehen&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-germany-hr-fernsehen-08.jpg&quot; alt=&quot;Teletext hr-fernsehen&quot; /&gt;&lt;/p&gt;

&lt;iframe width=&quot;640&quot; height=&quot;510&quot; src=&quot;http://www.youtube.com/embed/EAN1geLgEaQ?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;

</content>
  </entry>
  
  <entry>
    <title>Teletext in France</title>
    <link href="http://www.cambus.net/teletext-in-france/"/>
    <updated>2011-08-16T17:09:00+02:00</updated>
    <id>http://www.cambus.net/teletext-in-france</id>
    <content type="html">&lt;p&gt;Here is the first article of my (hopefully prosperous!) World of teletext serie! As a text mode lover,
I&amp;#8217;m very sad to see this service being shut down as we are going through &lt;strong&gt;digital television transition&lt;/strong&gt;, and therefore, wanted to keep track of this important part of text mode art history.&lt;/p&gt;

&lt;p&gt;In my native country, France, &lt;strong&gt;analog television broadcasting&lt;/strong&gt; is being gradually phased out : a process which
started in February 2010 and will be going on through the end of November 2011. Midi-Pyrénées (the region I was born
and where these pictures were taken during my last visit there), is one of the very last place to still have access to analog television and thus teletext, but transmission will unfortunately definitely cease on November 8th 2011).&lt;/p&gt;

&lt;p&gt;I managed to capture screens from the following channels : TF1, France 2, France 3, France 5, Arte, and M6. Unfortunately I couldn&amp;#8217;t capture anything from Canal+ as their teletext service is already totally shut down in the whole country since the end of 2010.
Please note that the France 5 serie was taken during daytime, as they share the 5th channel with Arte (broadcasting during nighttime).&lt;/p&gt;

&lt;p&gt;For those interested about technical details, and especially &lt;strong&gt;how to take pictures of a TV screen&lt;/strong&gt; without seeing the vertical blanking signal artefact (this will obviously only work with fixed images), here are some recommendations :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use a tripod : this is absolutely mandatory as it will not only allow you to get clear pictures, but also to maintain cohesion between all pictures in a serie.&lt;/li&gt;
&lt;li&gt;Take pictures at night in order to avoid light reflections on the screen.&lt;/li&gt;
&lt;li&gt;Enable &amp;#8220;Night Mode&amp;#8221; on your camera, and disable automatic flash.&lt;/li&gt;
&lt;li&gt;Use a very low ISO Speed, I used a value of 100 to take these pictures.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;That&amp;#8217;s all for now, expect a serie about teletext in Germany pretty soon as I just have to go through all the pictures I took, but I can already tell you : it&amp;#8217;s gonna be massive!&lt;/p&gt;

&lt;p&gt;TF1 :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-tf1-01.jpg&quot; alt=&quot;Teletext TF1&quot; /&gt;&lt;/p&gt;

&lt;!&#8211;more&#8211;&gt;


&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-tf1-02.jpg&quot; alt=&quot;Teletext TF1&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-tf1-03.jpg&quot; alt=&quot;Teletext TF1&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-tf1-04.jpg&quot; alt=&quot;Teletext TF1&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-tf1-05.jpg&quot; alt=&quot;Teletext TF1&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-tf1-06.jpg&quot; alt=&quot;Teletext TF1&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-tf1-07.jpg&quot; alt=&quot;Teletext TF1&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-tf1-08.jpg&quot; alt=&quot;Teletext TF1&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-tf1-09.jpg&quot; alt=&quot;Teletext TF1&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-tf1-10.jpg&quot; alt=&quot;Teletext TF1&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-tf1-11.jpg&quot; alt=&quot;Teletext TF1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;France 2 :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france2-01.jpg&quot; alt=&quot;Teletext France 2&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france2-02.jpg&quot; alt=&quot;Teletext France 2&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france2-03.jpg&quot; alt=&quot;Teletext France 2&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france2-04.jpg&quot; alt=&quot;Teletext France 2&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france2-05.jpg&quot; alt=&quot;Teletext France 2&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france2-06.jpg&quot; alt=&quot;Teletext France 2&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france2-07.jpg&quot; alt=&quot;Teletext France 2&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france2-08.jpg&quot; alt=&quot;Teletext France 2&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france2-09.jpg&quot; alt=&quot;Teletext France 2&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france2-10.jpg&quot; alt=&quot;Teletext France 2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;France 3 :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france3-01.jpg&quot; alt=&quot;Teletext France 3&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france3-02.jpg&quot; alt=&quot;Teletext France 3&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france3-03.jpg&quot; alt=&quot;Teletext France 3&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france3-04.jpg&quot; alt=&quot;Teletext France 3&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france3-05.jpg&quot; alt=&quot;Teletext France 3&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france3-06.jpg&quot; alt=&quot;Teletext France 3&quot; /&gt;&lt;/p&gt;

&lt;p&gt;France 5 :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france5-01.jpg&quot; alt=&quot;Teletext France 5&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france5-02.jpg&quot; alt=&quot;Teletext France 5&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france5-03.jpg&quot; alt=&quot;Teletext France 5&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-france5-04.jpg&quot; alt=&quot;Teletext France 5&quot; /&gt;&lt;/p&gt;

&lt;p&gt;ARTE :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-arte-01.jpg&quot; alt=&quot;Teletext ARTE&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-arte-02.jpg&quot; alt=&quot;Teletext ARTE&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-arte-03.jpg&quot; alt=&quot;Teletext ARTE&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-arte-04.jpg&quot; alt=&quot;Teletext ARTE&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-arte-05.jpg&quot; alt=&quot;Teletext ARTE&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-arte-06.jpg&quot; alt=&quot;Teletext ARTE&quot; /&gt;&lt;/p&gt;

&lt;p&gt;M6 :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-m6-01.jpg&quot; alt=&quot;Teletext M6&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-m6-02.jpg&quot; alt=&quot;Teletext M6&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2011/08/teletext-france-m6-03.jpg&quot; alt=&quot;Teletext M6&quot; /&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>From WordPress to Octopress</title>
    <link href="http://www.cambus.net/from-wordpress-to-octopress/"/>
    <updated>2011-08-11T17:09:00+02:00</updated>
    <id>http://www.cambus.net/from-wordpress-to-octopress</id>
    <content type="html">&lt;p&gt;As some of you may already have noticed, this site is now powered by Octopress. I made the switch from WordPress two weeks ago now and as I tweeted at that time, I couldn&amp;#8217;t be happier of my choice. I still totally agree with this statement : it makes perfect sense for slow paced blogs like this one, and clearly, I&amp;#8217;m not looking back.
Now that I&amp;#8217;m used to &lt;strong&gt;Markdown Syntax&lt;/strong&gt; I realize how painful it was to write articles in TinyMCE, as no matter how hard I tried, it always added some garbage into the markup : something detail oriented people like myself can hardly cope with. By the way, as a matter of fact, the whole WYSIWYG bullshit is one of the biggest lies in computer history.&lt;/p&gt;

&lt;p&gt;Also, thanks to &lt;strong&gt;Disqus&lt;/strong&gt;, the &lt;strong&gt;comment spam problem&lt;/strong&gt; inherent to WordPress totally disappeared : ever wondered why all huge WP sites like TechCrunch use an alternative comment system? Of course doing so alleviate database load and allows easier scaling, but moreover, it prevents comment spam to inflate tables and seriously damage query performance.&lt;/p&gt;

&lt;p&gt;Here are the key points about Octopress :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate static files : definitely lightweight and easy to host&lt;/li&gt;
&lt;li&gt;Built on top of &lt;strong&gt;Jekyll&lt;/strong&gt;, so easily extendable and customizable&lt;/li&gt;
&lt;li&gt;Integrated Twitter and Google+ sharing buttons, Twitter feed integration&lt;/li&gt;
&lt;li&gt;Integrated code embedding plugins supporting syntax highlighting&lt;/li&gt;
&lt;li&gt;Beautiful and modern looking out of the box, mobile friendly layout (see below!)&lt;/li&gt;
&lt;li&gt;Responsive layout : no need to resize images before posting!&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/octopress-mobile.jpg&quot; title=&quot;Octopress on mobile&quot; alt=&quot;Octopress on mobile&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So once again, thanks to Brandon Mathis for &lt;a href=&quot;http://www.octopress.org&quot;&gt;Octopress&lt;/a&gt;, it&amp;#8217;s exactly what I was looking for!&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>ANSi and ASCii themes for Chrome</title>
    <link href="http://www.cambus.net/ansi-and-ascii-themes-for-chrome/"/>
    <updated>2011-08-04T23:53:00+02:00</updated>
    <id>http://www.cambus.net/ansi-and-ascii-themes-for-chrome</id>
    <content type="html">&lt;p&gt;I&amp;#8217;m pleased to announce the release of my minimalist &lt;strong&gt;ANSi&lt;/strong&gt; and &lt;strong&gt;ASCii&lt;/strong&gt; based &lt;strong&gt;themes for Chrome and Chromium&lt;/strong&gt;. I kept everything simple on purpose, as the default theme is very clean, nice, and efficient : these two themes just aim to give a discreet text mode feeling to everyday life browsing, nothing more, nothing less.&lt;/p&gt;

&lt;p&gt;The color differences from the original theme can be seen in the status and download bars as well as in the detached bookmarks bar (where I used color #07 (light gray) from the ANSI / EGA palette) and in the text links where color #08 (dark gray) was used.&lt;/p&gt;

&lt;p&gt;ChromANSi screenshot :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/chromansi.png&quot; title=&quot;ChromANSi&quot; alt=&quot;ChromANSi&quot; /&gt;&lt;/p&gt;

&lt;p&gt;ChromASCii screenshot :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/08/chromascii.png&quot; title=&quot;ChromASCii&quot; alt=&quot;ChromASCii&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Downloads : &lt;a href=&quot;https://chrome.google.com/webstore/detail/ifaddecafhiaompmipnijgnopfhaafng&quot;&gt;ChromANSi&lt;/a&gt; and &lt;a href=&quot;https://chrome.google.com/webstore/detail/hcamkgglomakndeiachkjfhecpfbnogn&quot;&gt;ChromASCii&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>20 Years of Linux : From Typewriters to Computers</title>
    <link href="http://www.cambus.net/20-years-of-linux-from-typewriters-to-computers/"/>
    <updated>2011-07-08T12:56:00+02:00</updated>
    <id>http://www.cambus.net/20-years-of-linux-from-typewriters-to-computers</id>
    <content type="html">&lt;p&gt;This video is my contribution to the Linux Foundation 2011 video contest : Celebrating 20 years of Linux.&lt;/p&gt;

&lt;p&gt;It was created using &lt;strong&gt;stop motion&lt;/strong&gt; technique, and consists of 332 pictures taken with flash enabled in order to add some random artefacts and create grain. The typewriter being featured is an heavyweight &lt;strong&gt;Olympia Super Deluxe&lt;/strong&gt; manufactured in the late fifties, which belonged to my grandmother at the time she was teaching touch typing : amazingly, it still works almost perfectly after almost fifty years!&lt;/p&gt;

&lt;p&gt;Moreover, I only used open source software in order to render it, namely :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ImageMagick&lt;/strong&gt; : used to resize each frame to 1280x720 and convert it to grayscale&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eSpeak&lt;/strong&gt; : a text to speech synthetizer, used to render the soundtrack from a text file&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LAME&lt;/strong&gt; : used to convert the soundtrack to MP3 prior to encoding the video&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FFmpeg&lt;/strong&gt; : used to join everything together and encode the video&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;For those having troubles to decipher eSpeak output, the text reads as follow :&lt;/p&gt;

&lt;blockquote&gt;On August 26th 1991, nearly 20 years ago, a Computer Science student by the name of Linus Torvalds posted this message on Usenet. He was writing a new operating system from scratch, which would later become known as Linux. At the time, a lot of people did not own personal computers and typewriters were not yet uncommon. During the next 20 years, what started as a one man effort became a massive community project involving dozens of thousands people spread all across the globe. Linux has become a modern and robust operating system running on a wide range of hardware and architectures. It is ubiquitous and widely used on servers, clusters, embedded devices, smartphones, and tablets. 2011 marks the 20th anniversary of Linux, and given the fast pace of its development, the best is yet to come! Linux, from typewriters to computers, 1991 to 2011 and beyond!&lt;/blockquote&gt;


&lt;p&gt;That&amp;#8217;s it! So happy 20th birthday Linux, and to many more to come!&lt;/p&gt;

&lt;iframe width=&quot;640&quot; height=&quot;390&quot; src=&quot;http://www.youtube.com/embed/Pkz4QBaAK6Q?rel=0&amp;amp;hd=1&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;

</content>
  </entry>
  
  <entry>
    <title>ANSi Social Media Icon Set</title>
    <link href="http://www.cambus.net/ansi-social-media-icon-set/"/>
    <updated>2011-06-09T00:09:00+02:00</updated>
    <id>http://www.cambus.net/ansi-social-media-icon-set</id>
    <content type="html">&lt;p&gt;I&amp;#8217;m very happy to announce the release of my &lt;strong&gt;ANSi Social Media Icon Set&lt;/strong&gt;, licensed under the &lt;strong&gt;Creative Commons CC-BY-SA 3.0 license&lt;/strong&gt; and containing icons for the following services : Facebook, Twitter, LinkedIn, Google +1, Digg, Delicious, StumbleUpon, Reddit.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2011/06/ansi-social-media-icon-set-fullsize.png&quot; title=&quot;Node.js ANSI logo&quot; alt=&quot;ANSi Social Media Icon Set&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Each icon has been drawn in ANSi with a resolution of 3 lines by 6 columns : pixel equivalent would be 6x6 as even if they are only 3 lines high, I could of course take advantage of the &amp;#8220;Upper half block&amp;#8221; and &amp;#8220;Lower half block&amp;#8221; extended &lt;strong&gt;ASCii characters&lt;/strong&gt; (respectively chars #223 and #220, please refer to my &lt;a href=&quot;http://www.ascii-codes.com&quot;&gt;Ascii Table&lt;/a&gt; if you&amp;#8217;re unfamiliar with the ASCii charset). Once converted in PNG, each icon is rendered into a 48x48 bitmap file, which is quite a standard size for social icons nowadays. One interesting point to note is that given the minimalist range of colors used, file sizes are EXTREMELY small : as icons are saved in 1-bit, 2-bit or 4-bit colormaps, their sizes range from 156 to 206 bytes.&lt;/p&gt;

&lt;p&gt;Drawing in such a small resolution sure proved to be challenging, and I had to trade accuracy for aesthetics  (e.g. the StumbleUpon icon lacks the U of the original). Surpisingly, the &lt;strong&gt;16 colors (EGA palette)&lt;/strong&gt; limitation was not a problem at all (thanks to iCE colors, allowing to use 16 foreground colors instead of 8), which either means the palette had been really well chosen back in the days, or that icon designers tend to stick to similar colors.&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s it. Share and enjoy the set and if you use it somewhere I would love to hear about it, please leave a comment.&lt;/p&gt;

&lt;p&gt;Download links : &lt;a href=&quot;http://www.cambus.net/files/ansi-social-media-icon-set.tar.gz&quot;&gt;ansi-social-media-icon-set.tar.gz&lt;/a&gt; or &lt;a href=&quot;http://www.cambus.net/files/ansi-social-media-icon-set.zip&quot;&gt;ansi-social-media-icon-set.zip&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;P.S. : Google guys, if you read this, I would love to draw an ANSi doodle someday!&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Node.js ANSI Logo</title>
    <link href="http://www.cambus.net/node-js-ansi-logo/"/>
    <updated>2011-05-21T00:55:00+02:00</updated>
    <id>http://www.cambus.net/node-js-ansi-logo</id>
    <content type="html">&lt;p&gt;I&amp;#8217;ve been reading a lot of stuff about &lt;strong&gt;JavaScript&lt;/strong&gt; lately, and on &lt;a href=&quot;http://nodejs.org&quot;&gt;Node.js&lt;/a&gt; in particular, which is such a great project and on top of that, seems to fit all the requirements of an upcoming site I will start working on pretty soon. Meanwhile, it inspired me to draw a Node ANSI logo, which you can download as an &lt;a href=&quot;http://www.cambus.net/files/nodejs/cl!-node.ans&quot;&gt;ansi file&lt;/a&gt;, or converted in &lt;a href=&quot;http://www.cambus.net/files/nodejs/cl!-node.png&quot;&gt;PNG&lt;/a&gt; for easier viewing.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/files/nodejs/cl!-node.png&quot; title=&quot;Node.js ANSI logo&quot; alt=&quot;Node.js ANSI logo&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m also working on a small site gathering Node.js resources which I expect to launch during the following weeks.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>GoogleCL : Command Line Tools for Google Services</title>
    <link href="http://www.cambus.net/googlecl-command-line-tools-for-google-services/"/>
    <updated>2010-11-22T00:00:00+01:00</updated>
    <id>http://www.cambus.net/googlecl-command-line-tools-for-google-services</id>
    <content type="html">&lt;p&gt;&lt;strong&gt;GoogleCL&lt;/strong&gt;, which stands for &lt;strong&gt;Google Command Line&lt;/strong&gt;, is a collection of tools allowing users to access the &lt;strong&gt;Google Data APIs&lt;/strong&gt;. They are particularly useful for those who wish to accomplish automated tasks such as posting news articles on Blogger, scheduling appointments on Google Calendar, adding and editing documents on Google Docs, and so on and so far. On top of that, it also offer the ability to upload images and videos on Picasa and Youtube respectively.&lt;/p&gt;

&lt;p&gt;GoogleCL is written in Python (requires version 2.5 or superior) and depends on the &lt;strong&gt;gdata Python client library&lt;/strong&gt; (version 1.2.4 and up, preferably 2.0.x). At the time I&amp;#8217;m writing this article, the latest versions of these tools are &lt;em&gt;googlecl-0.9.11&lt;/em&gt; and &lt;em&gt;gdata-2.0.13&lt;/em&gt;, and you can follow these instructions in order to install them :&lt;/p&gt;

&lt;pre&gt;wget http://gdata-python-client.googlecode.com/files/gdata-2.0.13.tar.gz
tar xvfz gdata-2.0.13.tar.gz
cd gdata-2.0.13
sudo python setup.py install&lt;/pre&gt;


&lt;pre&gt;wget http://googlecl.googlecode.com/files/googlecl-0.9.11.tar.gz
tar xvfz googlecl-0.9.11.tar.gz
cd googlecl-0.9.11
sudo python setup.py install&lt;/pre&gt;


&lt;p&gt;Once everything is setup, you can use the tool to access the following &lt;strong&gt;Google services&lt;/strong&gt; : Blogger, Calendar, Contacts, Docs, Picasa and Youtube.&lt;/p&gt;

&lt;p&gt;Here are some examples showing how to achieve some basic tasks :&lt;/p&gt;

&lt;pre&gt;google blogger post &#8211;title &quot;GoogleCL&quot; &quot;GoogleCL is a fantastic tool!&quot;
google calendar add &quot;Job interview for the COBOL programmer position!&quot;
google contacts add &quot;Bobby, bobby@example.com&quot;
google docs edit &quot;Todo List&quot;
google picasa create &quot;Travel Pictures&quot; ~/pictures/sealand/*.jpg
google youtube post &#8211;category Education googlecl.avi&lt;/pre&gt;


&lt;p&gt;However, you might get this error message when trying to perform some of the tasks mentioned above :&lt;/p&gt;

&lt;pre&gt;Traceback (most recent call last):
File &quot;/usr/bin/google&quot;, line 812, in
main()
File &quot;/usr/bin/google&quot;, line 798, in main
run_once(options, args)
File &quot;/usr/bin/google&quot;, line 542, in run_once
googlecl.write_devkey(options.devkey)
File &quot;/usr/lib/python2.5/site-packages/googlecl/__init__.py&quot;, line 546, in write_devkey
with open(key_path, &#8216;w&#8217;) as key_file:
IOError: [Errno 2] No such file or directory: &#8216;/home/foo/.local/share/googlecl/yt_devkey&#8217;&lt;/pre&gt;


&lt;p&gt;In order to fix that, one needs to create the directory in which GoogleCL can store the autorization credentials :&lt;/p&gt;

&lt;pre&gt;mkdir -p ~/.local/share/googlecl&lt;/pre&gt;


&lt;p&gt;And voilà, you&amp;#8217;re now able to use GoogleCL : pretty straightforward, isn&amp;#8217;t it? Personally, I mainly use it for uploading video content on YouTube, as it allows me to do so using a VPS providing far better uplink speed than my home connection : definitely a great time saving tool I&amp;#8217;m glad I came across.&lt;/p&gt;

&lt;p&gt;GoogleCL project page : &lt;a href=&quot;http://code.google.com/p/googlecl/&quot;&gt;http://code.google.com/p/googlecl/&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Decoding Youtube HTTP Error 500 Message</title>
    <link href="http://www.cambus.net/decoding-youtube-http-error-500-message/"/>
    <updated>2010-10-26T17:29:00+02:00</updated>
    <id>http://www.cambus.net/decoding-youtube-http-error-500-message</id>
    <content type="html">&lt;p&gt;I was quite delighted this morning when I discovered &lt;strong&gt;Youtube&lt;/strong&gt;&amp;#8217;s custom HTTP 500 server error message for the first time :&lt;/p&gt;

&lt;blockquote&gt;**500 Internal Server Error**

Sorry, something went wrong.

A team of highly trained monkeys has been dispatched to deal with this situation.

If you see them, show them this information :&lt;/blockquote&gt;


&lt;p&gt;This message was followed by informations encoded in modified &lt;strong&gt;base64 for URL applications&lt;/strong&gt; (base64url encoding), which differs from original base64 by the fact that the padding character &amp;#8216;=&amp;#8217; is dismissed and the &amp;#8216;+&amp;#8217; and &amp;#8216;/&amp;#8217; characters gets respectively replaced by &amp;#8216;-&amp;#8217; and &amp;#8216;_&amp;#8217; characters. Assuming the given information data has been saved in a file called &lt;em&gt;error.txt&lt;/em&gt;, using &lt;strong&gt;sed&lt;/strong&gt;, it is easy to convert the &lt;strong&gt;base64url&lt;/strong&gt; encoded data into &lt;strong&gt;original base64&lt;/strong&gt; :&lt;/p&gt;

&lt;pre&gt;sed &#8216;s/&#45;/\+/g;s/\_/\//g&#8217; &amp;lt; error.txt &amp;gt; error-base64.txt&lt;/pre&gt;


&lt;p&gt;Then we can decode the base64 error message :&lt;/p&gt;

&lt;pre&gt;base64 -d error-base64.txt &amp;gt; result.txt&lt;/pre&gt;


&lt;p&gt;Now, what&amp;#8217;s contained in &lt;em&gt;result.txt&lt;/em&gt; you may wonder? Sadly, it just looks like random data, and using the &lt;strong&gt;file&lt;/strong&gt; command to try to &lt;strong&gt;determine the file type&lt;/strong&gt; seems to confirm this statement :&lt;/p&gt;

&lt;pre&gt;file result.txt
result.txt: data&lt;/pre&gt;


&lt;p&gt;Sadly, contrary to my expectations, there doesn&amp;#8217;t seem to be any hidden message&amp;#8230; Screw you, highly trained monkeys!&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Zotonic : The Erlang CMS</title>
    <link href="http://www.cambus.net/zotonic-the-erlang-cms/"/>
    <updated>2010-09-22T01:08:00+02:00</updated>
    <id>http://www.cambus.net/zotonic-the-erlang-cms</id>
    <content type="html">&lt;p&gt;Nowadays, a PHP based CMS is the de-facto standard if you want to publish online content, and it&amp;#8217;s easy to understand why when one checks &lt;strong&gt;web hosting&lt;/strong&gt; offers around : it&amp;#8217;s the most widely available option and the easiest way to deploy web solutions. However, when site performance becomes a crucial issue, one might want to explore alternative options. Lately, I&amp;#8217;ve been starting looking towards Python web frameworks (and more specifically Django), but there are of course plenty of others options as well.&lt;/p&gt;

&lt;p&gt;Why not give a try to &lt;strong&gt;Zotonic&lt;/strong&gt;, an open source &lt;strong&gt;CMS&lt;/strong&gt; written in &lt;strong&gt;Erlang&lt;/strong&gt;? Erlang you say? Yes, Erlang, a programming langage created by &lt;strong&gt;Ericsson&lt;/strong&gt; (they make mobile phones as well) and designed to create distributed, fault-tolerant, and real-time applications. It means that of course, Zotonic benefits from the langage features mentioned above, making it a very interesting solution for &lt;strong&gt;high-load websites&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here are the keys features :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Speed : up to 10 times faster than a PHP based CMS&lt;/li&gt;
&lt;li&gt;Template language : based on Django templating system&lt;/li&gt;
&lt;li&gt;User interface : clean, easy to use, and powerful back-end&lt;/li&gt;
&lt;li&gt;Built upon proven technologies : PostgreSQL database and jQuery JavaScript Library&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Some screenshots of the front-end and a screencast showing the administration interface :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cambus.net/content/2010/09/zotonic-home-page.png&quot; title=&quot;Zotonic - Home Page&quot; alt=&quot;Zotonic - Home Page&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2010/09/zotonic-single-post.png&quot; title=&quot;Zotonic - Single Post&quot; alt=&quot;Zotonic - Single Post&quot; /&gt;
&lt;img src=&quot;http://www.cambus.net/content/2010/09/zotonic-contact-form.png&quot; title=&quot;Zotonic - Contact Form&quot; alt=&quot;Zotonic - Contact Form&quot; /&gt;&lt;/p&gt;

&lt;iframe src=&quot;http://player.vimeo.com/video/7630916?byline=0&amp;amp;portrait=0&quot; width=&quot;640&quot; height=&quot;360&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;


&lt;p&gt;In conclusion, Zotonic is a very promising CMS even if it is still a young project and as such, lacks maturity and a wide user community. However, I encourage you to give it a try, just for the sake of experimenting with new solutions : I&amp;#8217;m convinced Zotonic popularity will rise over time.&lt;/p&gt;

&lt;p&gt;Project site : &lt;a href=&quot;http://zotonic.com&quot;&gt;http://zotonic.com&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  
</feed>

