Trucs de geek

Erlang : le hasard fait bien les choses

Posted on août 23, 2007

Aujourd’hui, je voulais réaliser un prototype de serveur TCP en Erlang/OTP.

Le bouquin de Joe Armstrong contient plusieurs serveurs TCP. Un serveur de chat, un serveur SHOUTcast entre autres, et le code de la librarie lib_chan, mais rien qui utilise les principes OTP.

Et voilà qu’en arrivant sur la home de TrapExit (la ressource indispensable en erlang), je tombe sur ça :

Building a Non-blocking TCP server using OTP principles sorti le 16 août

La vie est bien faite. (Merci Serge Aleynikov ;)

UPDATE : et j’ai aussi découvert appmon:start(). Very nice.

Encoder des films pour le P990i et le P1i sur Mac

Posted on août 23, 2007

Ayant une carte de 1 Go sur mon P990i, il me fallait la remplir … avec de la vidéo !

Les AVI ne passent pas nativement sur le téléphone, et nécessite de les convertir vers un format reconnu. Soit le 3gp, soit le mp4.

Il faut aussi un outil. ffmpeg est le couteau suisse ultime de la conversion vidéo. Toutefois dans un accès de flemmardise, je suis passé par le front-end ffmpegX, dont j’ai sauvé quelques réglages.

En voici deux :

L’opération :

  1. Drag and drop du fichier à convertir

  2. Fichier -> Charger pré-réglage

  3. Encoder !

UPDATE : L’ajout de sous-titre se fait avec l’onglet “Filtre” de ffmpegX. On importe les sous-titres, et ils sont incrustés directement. Nice (mais je ne m’en sers pas).

Retour sur l'Ile de France

Posted on août 22, 2007

trajet.jpg Depuis la mi-avril, la famille était à Bonny/Loire, joyeuse bourgade du Loiret.

En effet, Hélène était en congé maternité, et je n’ai besoin que d’une connexion internet pour travailler, alors pourquoi rester en région parisienne ?

Mais c’est fini, tout ça. La rentrée d’Hélène c’est le 3 septembre, Martin va devoir s’acclimater avec sa nounou, et je donne une formation la semaine prochaine chez, ironie du sort, un des fournisseurs d’Ohm Force, Atos Origin, (ils hébergent notre solution de paiement par carte de crédit SIPS, fournie en marque blanche à la plupart des banques française).

PICT0054.jpg

Le bilan de Boulette :

  • 3 oiseaux

  • 3 mulots

  • 4 kilos de croquettes

  • les chats du voisinage n’osent plus venir dans le jardin

Sam Ruby on Erlang

Posted on août 13, 2007

Sam Ruby a posté un long tutorial sur erlang.

Dans les commentaires, il ajoute : “A platform designed from the ground up to support a “distributed DataBase Management System, appropriate for telecommunications applications and other … applications with need of continuous operation and soft real-time properties” is of interest to me.”

Pareil !

La meilleure maniere de lire un PDF

Posted on août 10, 2007

C’est facile, on ouvre le PDF avec Aperçu sur Mac OS X, puis Présentation -> Diaporama.

On passe en plein écran, et un clic sur le PDF pour faire disparaître la barre de navigation. Le fond est noir, et on navigue en page par page avec les flèches.

Erlang : De l'infrastructure d'internet

Posted on août 10, 2007

Si vous suivez ce blog, ces derniers temps vous aurez vu quelques posts sur Erlang, le langage utilisé par Ericsson pour son matériel téléphonique et utilisé pour l’implémentation la plus performante du protocole de messagerie XMPP.

L’idée de ce post m’est tombée dessus assez rapidement, et ces derniers temps, j’ai l’impression de voir beaucoup de problématiques exposées dans d’autres langages qui sont résolue de facto par l’architecture du langage.

Deux exemples de ce mois-ci :

Adéquation avec l’orientation du hardware

Jusqu’à récemment les développeurs pouvaient se cacher derrière la loi de Moore pour garantir que leur application fonctionnerait toujours mieux. Si elle est un peu lente à sa sortie, dans 1 an, elle ira beaucoup plus vite, parce que le hardware aura (presque) doublé au niveau des performances. Mais c’est fini. La course à la puissance a lieu en multipliant le nombre de coeurs sur un processeur. Puissance qu’on ne peut récupérer que si on développe en parallélisant notre code. Ce qui pose des problèmes dans tous les domaines de l’informatique. En particulier les jeux. Comme le dit Tim Sweeney, le lead developer d’Unreal :

“Implementing a multithreaded system requires two to three times the development and testing effort of implementing a comparable non-multithreaded system, so it’s vital that developers focus on self-contained systems that offer the highest effort-to-reward ratio.”

Pour ceux qui ne lisent pas l’anglais, il faut 2 à 3 fois plus d’efforts pour mettre en place un système multithread. Les jeux ne sont pas réellement le point de ce post, mais je veux mettre le doigt sur la difficulté de maximiser l’utilisation de la puissance des processeurs actuels (dual-core ou plus).

A un niveau plus élevé, l’approche utilisée par Google et par tous les autres depuis 2000 n’est plus d’acheter un serveur incroyablement puissant (et cher), mais plutôt de prendre des serveurs peu chers (relativement peu puissants). Si j’ai besoin de plus de puissance, j’ajoute des serveurs. On peut même virtualiser complètement les serveurs en allant chez Amazon avec leur service Elastic Computing Cloud (EC2), qui permet d’obtenir une puissance de calcul virtuellement illimitée en parallélisant un grand nombre d’instance.

La grande orientation !

La solution proposée dans les deux articles précédent est toujours la même :

  • On arrête avec les threads et la mémoire partagée. Du coup si les unités de traitement ne partagent rien, on est plus obligé de synchroniser l’accès.

  • La transmission d’information se fait par passage de message, IPC-style.

C’est très exactement le schéma proposé par l’article que je citait plus haut : Nouveau patterns et middleware pour une scalabilité linéaire.

Les avantages de cette approche sont bien détaillées dans l’article de Joe Armstrong l’architecte et concepteur d’Erlang.

La scalabilité par les applications Erlang est quasiment linéaire (J’ai un CPU, la puissance totale vaut 1, j’ajoute un autre CPU la puissance totale vaut presque 2, et non pas 1,66 avec d’autres architectures qui perdent de temps en synchronisation)

L’exemple donné ici, une simulation de colonie de fourmis, le montre plutôt bien. On note que les performances d’Erlang sont largement inférieures à Haskell, mais lorsque l’application passe d’un simple core à un dual core, le temps d’exécution est divisé par deux.

Le langage est facile

Le langage est facile, oui, une fois qu’on saisi les grands concepts du langage, on comprend rapidement le code source. J’ai passé quelques temps à parcourir le code source d’ejabberd, et on rentre dedans très facilement, malgré le peu de commentaires dans le code. Evidemment, le seul mérite ne revient pas uniquement au langage, mais évidemment aux développeurs d’ejabberd, qui ont une base de code très claire et dont le style m’apprend beaucoup sur le langage.

Je remarquai la dernière fois que le code d’ejabberd est 3 fois plus compact que le code d’OpenFire. Il faut remarquer toutefois que le code d’OpenFire est bien mieux documenté :)

Mais le langage n’est pas orienté objet ?

Bien que Joe Armstrong s’en défende, il est orienté objet, en utilisant le modèle de l’Acteur, avec des objets (les processus) qui s’envoient des messages.

Certes, il n’y a pas d’héritage de classe et autres habitudes architecturales de l’orienté objet, mais c’est de l’objet. Le post de Ralph E. Johnson (oui, l’un des quatre du Gang of Four) l’explique avec beaucoup de détails.

Au passage, Johnson fait le calcul de la fiabilité des neuf 9 (99,999999% d’uptime) obtenu par le AXD 301 d’Ericsson (celui aux 1,7 millions de ligne de code d’erlang). C’est 1 seconde de downtime tous les 30 ans !

Et de toute manière, le faisait remarquer A. Zaidi sur son blog, faire de l’objet à tout prix, en particulier dans le développement d’application web (ou plus généralement de serveurs basé sur des protocoles texte, comme tous les protocoles internet), est-ce tellement pertinent ? Finalement on récupère du texte, qu’on case dans des objets, et qu’on stocke ensuite dans une base de donnée relationnel, il faut donc re-marshaller les données pour qu’elles puissent rentrer. Typiquement le genre de truc qui contribue au réchauffement planétaire.

NB : Ok, c’est un peu extrême. J’apprécie certes le modèle objet, mais lisez le post de A. Zaidi : Zen and the Art of Functional Programming.

Best Kept Secret ?

Erlang n’a pas le mindshare de Java et de Ruby et de leurs frameworks phare respectif.

Toutefois, ce langage a résolu dans son coin, là-bas, dans le nord, il y a dix ans, les problèmes de montée en charge qu’affronte les grandes applications d’aujourd’hui.

La publication de Programming Erlang chez Pragmatic Programmer semble être un succès. Et PragDave fait des tutoriaux sur son blog.

Il faut donc s’attendre à un accroissement du nombre de développements dans ce langage. Il y a déjà une première application publique développée avec le framework ErlyWeb dont je parlais ici : http://beerriot.com/ qui fonctionne aussi en application sur FaceBook.

Le blog de ce dernier est intéressant, en particulier Erlang Observations et FaceBook Development (in Erlang) sur le sujet.

J'annule l'annulation

Posted on août 08, 2007

Aujourd’hui un rant comme disent les anglo-saxons, ou un coup de gueule, comme disent les auditeurs de Fun Radio – amicalement suggéré par Franck, mon sympathique chef de projet à Ohm Force.

L’annulation

L’humain est faillible. Et va s’en rendre compte, et va tenter de corriger son erreur. Le logiciel, bête comme il est, va faire ce qu’on lui dit, même si c’est une connerie, et permet, c’est bien urbain d’annuler la ou les dernières actions qu’il a effectué.

Un article récent sur A List Apart par Aza Raskin nous explique que du point de vue interface, c’est largement supérieur de proposer d’annuler que de demander une confirmation.

Je vous laisse lire l’article, tant que vous revenez ici ensuite. Et abonnez vous au flux RSS de ce site, qui se range dans les lectures indispensables pour le développeur web (et les autres aussi, finalement).

Bref, beaucoup d’applications proposent l’annulation, et c’est tant mieux.

Je viens de cliquer 12 fois sur le bouton !

Mais parfois, l’implémentation est vraiment foireuse, et on se dit que le bouton est vraiment là pour la décoration.

2 exemples parmi d’autres :

  • Le Finder : j’envoie un fichier relativement volumineux sur un partage WebDAV. Pas dans le bon répertoire. Y a une jolie petite croix à côté de la barre de transfert de fichier. Je clique sur la croix ; rien ne se passe. Ah si, le Finder freeze. Le Dock aussi. Je tente toutes les combos pour décoincer ça (“Forcer à quitter”, kill du Finder dans un terminal) rien à faire. Au final le fichier a été transféré, malgré tout mes récriminations.

  • Le plugin SVN sous Eclipse : Je fais un commit malheureux, vite, je clique sur Annuler. Le bouton se grise (“Ah il a pris en compte mon action”), l’interface se bloque. 3 minutes plus tard, il prend enfin en compte mon annulation. Ben tiens, justement, je voulais économiser ce temps … sinon j’aurais fait un commit correctif ensuite, ça m’aurait pris moins de temps. Les gens vont dire : “oui, mais SVN c’est transactionnel, atomique, il faut qu’il nettoie gna gna …”. Ben non. Quand je fais Ctrl-C dans le terminal, le commit est annulé tout de suite.

Bon. Ca va mieux.

Subtlety : flux RSS du SVN

Posted on août 07, 2007

Subtlety est une application web toute simple, et très pratique pour suivre des projets.

On donne l’url du repository subversion, et le site nous prépare un lien vers un flux RSS, qui poste les messages de commit et les fichiers modifiés par le commit.

Calendriers partages

Posted on août 06, 2007

Dans une organisation relativement décentralisée, l’utilisation de calendriers partagés permet un suivi, et une organisation facilitée.

Un échec, pour commencer

L’année dernière, j’ai déployé à Ohm Force un intranet sous Plone. Avec, entre autres, une solution de calendrier partagé basée sur Calendaring.

Sauf que ça n’a jamais marché, en particulier avec une gestion des fuseaux horaire, et Calendaring pétait les calendriers locaux, en décalant les événements d’une heure à chaque mise à jour sur le calendrier local. Suffisant pour énerver n’importe quel utilisateur, et être sûr qu’il n’utiliserait jamais l’outil.

Personne du coup n’a utilisé l’outil, et le suivi est parti dans les limbes.

Take two

Franck, le bien aimé chef de projet à Ohm Force, m’a demandé si je pouvais remettre en place une solution.

J’ai regardé Google Calendars, qui est sympathique, et tout et tout, mais pas hébergé chez nous. Et nous, on aime pas trop les trucs pas hébergés chez nous.

J’ai repris le cahier des charges à la base. Et finalement, tout ce qu’il faut, c’est un serveur WebDAV.

Et un serveur WebDAV, sur un serveur qui fait déjà tourner Subversion et un serveur LDAP, ça s’installe en quelques lignes :


<Directory /var/www/dav>
    Dav On
    #Options Indexes FollowSymLinks
    AllowOverride None
    order allow,deny
    allow from all
    AuthName "LDAP"
    AuthType Basic

    <Limit GET PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>

    Require valid-user
        <IfModule mod_auth_ldap.c>
         AuthLDAPURL ldap://localhost/ou=unit,dc=domain,dc=top
        </IfModule>
    </Limit>
</Directory>

Donc mon serveur webdav est accessible à sur l’url https://server/dav/. Oui, c’est du https, on est jamais trop prudent.

Les clients

Ils y a deux clients principaux utilisés à Ohm Force :

  • Sunbird : le client de la mozilla foundation, qui s’améliore toujours.

  • iCal : le client de Mac OS X. Limité, mais l’interface utilisateur est sympa, (et je l’utilise depuis qu’il est sorti, je n’ai pas prévu d’en changer :)

  • un truc sous Linux dont le nom m’échappe.

Le cas iCal est intéressant car il ne fonctionne pas sur https.

De plus, iCal, dans sa version actuelle, (Leopard change apparamment tout ça), considère que le monde des calendriers est séparé en deux groupes :

  • Ceux qu’on publie (et à chaque modification, on écrase la version sur le webdav)

  • Ceux auxquels on est abonnés (ils sont en lecture seule sur le client).

Utiliser iCal sur un serveur https

La solution est stunnel, qui permet d’encrypter/décrypter des flux SSL.

Pour PPC

Vous pouvez utiliser ces instructions de configuration, la partie “Access with login, Tiger (10.4)”

Il faut éditer le fichier /etc/stunnel.rulink.conf, en changeant l’url sécurisée vers le site de Rutgers U vers votre partage WebDAV.

Toutefois, la dernière fois que j’avais utilisé le binaire, il n’était pas compilé pour Intel, uniquement pour PPC. Ca tourne, mais c’est pas optimal.

Pour Intel

J’ai crée un petit installeur qui permet d’installer le binaire. Le truc, c’est que le dev Mac n’est pas mon truc, et qu’il faut bricoler dans le terminal pour finaliser l’installation.

J’ai réalisé l’installeur pour Ohm Force, ce qui était facile, car le serveur de calendrier est le même pour tout le monde ; l’adresse du serveur est donc en dur.

Dans celui-ci, il faut modifier le fichier de conf après l’installation /etc/stunnel.ohmforce.com pour mettre la bonne URL, puis redémarrer le service avec sudo launchctl stop com.ohmforce.stunnel ; sudo launchctl start com.ohmforce.stunnel

Voilà l’image : HTTPS iCal.dmg.zip.

Indispensables softs pour le P990i et autres smartphones sous Symbian

Posted on août 01, 2007

p990.jpg Pour la deuxième fois, je fais les poubelles d’Olivier Felten et j’y trouve mon bonheur. Cette fois, j’y ai trouvé un P990i. Moins d’un an de travail. Ca me change de mon Veau800, tout en utilisant les même batteries. (et le V800 est livré avec deux batteries).

J’ai bien joué avec, il se synchronise avec iSync (les étapes marchent aussi avec le P990i, avec l’étape 0 : mise à jour du firmware – sous Parallels, parce c’est que sous windows).

Les 3 applis !

  1. Fring

    Skype, SIP, Twitter dans une même appli (+ d’autres trucs inutiles comme MSN et GoogleTalk). La qualité avec Skype peut être excellente (ou moins bonne).

    J’ai passé un coup de fil déplorable via le SIP de Freephonie vers un téléphone fixe. A la décharge de Free, je suis actuellement à la campagne sur une LiveBox en 1Mbps, et je téléphonais depuis le jardin.

    Twitter fonctionne pas trop mal, même si j’ai reçu à l’occasion des tweets en double.

    Mon seul souci, c’est pourquoi limiter le client Jabber à GoogleTalk … Hein ? Pourquoi ? Je vais aller me plaindre sur leur forum, après ce post.

  2. Putty

    L’outil du geek … Un client SSH natif UIQ. Plutôt bien conçu. Evidemment, c’est pour les urgences de chez urgences (celles où, en déplacement, on cherche un MacDo pour se connecter et relancer le serveur qui vient de crasher), parce que le clavier du p990i a beau être un azerty, il lui manque une touche TAB [Ed: en fait, si c’est ALT-Espace]. Mais c’est très nerdy, y a pas à dire.

[UPDATE : putty est mieux que MIDPssh, parce qu’il tourne en natif, et putty on connait bien, si on est sous windows]

  1. GoogleMaps

    La version mobile de GoogleMaps, c’est tout.

  2. Salling Clicker

je l’avais oublié celui-là. Je l’avais acheté y a très très longtemps, pour me servir de télécommande à slide pendant mes cours/formations. Mais le MacBook étant livré avec une télécommande, l’intérêt était retombé …

Toutefois la version 3.5 est sortie, et le client UIQ est vraiment sympa : affichage de la pochette de l’album sur la commande iTunes. Et surtout, l’interface est VRAIMENT pratique. De gros boutons pour manipuler avec le pouce, bon support de la molette etc. Si toutes les applis UIQ (voire le système lui-même) pouvait s’en inspirer …

A noter qu’on peut se connecter via BlueTooth, ou directement en Wifi sur le/les ordinateurs.

Parmi les fonctionnalités fun : iTunes s’arrête lorsque le téléphone sonne, ou lorsque le téléphone s’éloigne trop de l’ordinateur – on peut même demander un verrouillage automatique de la session.

On peut ajouter ses propres scripts pour piloter la machine, il s’agit simplement d’AppleScripts à installer.

Ce soft est payant, $24 (profitez-en le dollar ne vaut pas grand chose)