Florent Clairambault

Valgrind might be wrong

Sometimes valgrind can report the right problem with the wrong stack trace: make && sudo valgrind --db-attach=yes --leak-check=full --track-origins=yes --show-reachable=yes ./dist/Debug/cbadaemon ==4423== Memcheck, a memory error detector ==4423== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al. ==4423== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info ==4423== Command: ./dist/Debug/cbadaemon ==4423== ==4423== Conditional jump or move depends on uninitialised value(s) ==4423== at 0x4922C47: __pthread_mutex_unlock_usercnt (pthread_mutex_unlock.c:38) ==4423== by 0x804E91A: ServerContext::ServerContext() (ServerContext.

SFR fibre

Latencies are really good :) --- www.google.fr ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 9013ms rtt min/avg/max/mdev = 2.185/2.799/3.635/0.456 ms But I received an hadopi later. And still wish I knew why (there could be so many reasons).


Plex is great piece of software. It’s a “complete media solution”. I installed it on my laptop (free) without editing a single file, I tested it on my iPad (it’s a paid app) and it was just working instantly. Then I also tested it on my Nexus 7 (paid app on play store as well) and it’s also working perfectly. Then I discovered it can also do streaming through it’s web based interface, so it can stream to anything it doesn’t yet support.

Some good reasons for learning python

President Obama thinks required programming language learning in high school is a great idea. So do I, and I think we should all start with python. Writing code with it is very fast. When software engineers tell you “I can do it in 10 minutes”, in C/C++ they mean 4h, in java they mean 2h and in python they mean it. You can really do anything. I’ve done some serial communication, bit level manipulation, network level event-based servers, multithreading, webservice providing and consuming, SQL and cassandra client faster than what I’ve been doing in any other language.

Linux: restart when hung

When a Linux system crashes (usually because of a driver issue), you should make sure at least it restarts. These are the lines you should add to /etc/sysctl.conf: # Reboot time(s) after panic kernel.panic = 20 # Panic if a hung task was found kernel.hung_task_panic = 1 # Setup timeout for hung tasks to 30 seconds kernel.hung_task_timeout_secs = 30

Opensourcing the content of this blog

Hi everyone, During the last years, I launched the javacint google group which now has grown out to be a good community of professionnals working around the Cinterion (java enabled) chips. I also created a TC65 development document. And all the questions and feedbacks you gave me on the development around these chips helped me a lot to improve (what was) my document and (what was) my FAQ. You helped me so much indeed that I believe this content should know be open to everyone to modify.

xrdp and the ulimits / nofile issue

You might have noticed for xrdp on Debian (but quite possibly with a lot of other Linux tools and other Linux distributions) the user limits (described in /etc/security/limits.conf) are not enforced. Which meant in my case that any session open with xrdp was opened with a max number of open files (nofile) set to 1024. To fix this, edit the file /etc/pam.d/common-session and add the following line: session required pam_limits.so

Limiting number of connections per IP with ufw

This is a personal reminder post. The easiest attack one can perform on a web server is opening all the connections and do nothing with it. iptables fortunately has a “connlimit” module to avoid this. If you’re using ufw like me you will want to keep your good integration with it. In the `/etc/ufw/before.rules file, after these lines: # Don't delete these required lines, otherwise there will be errors *filter :ufw-before-input - [:] :ufw-before-output - [:] :ufw-before-forward - [:] :ufw-not-local - [:] # End of required lines You can add this to limit the number of concurrent connections:

Cassandra as registry

One of the biggest issue with distributed database is to find the right model to store your data. On a recent project, I decided to use a registry model. The registry idea The idea behind writing a registry is to have an easy way to both store and view data. For a given device that has a {UUID} id: I will access “/device/{UUID}/”. Any properties will be stored in “/device/{UUID}/properties/”.

TC65i development on Mac Os X (or Linux)

This is now on the wiki.