Catégories
Developpement Open-source Planet-libre Web

Une introduction à node.js

Node.js est un framework implémentant, coté serveur, la version 8 du moteur Javascript de Google (pour une présentation rapide, je vous conseille de parcourir ces quelques slides).

L’objectif de ce billet est d’installer Node.js sur votre machine GNU/Linux et d’exécuter votre premier programme (hello.js).

Installation de Node.js depuis les sources

Il n’existe pas, à l’heure à laquelle je rédige ce billet, de « package » officiel de Node.js pour Debian/Ubuntu (voir le chapitre suivant pour une installation depuis un PPA). L’installation est cependant assez simple. Pour installer la dernière version (stable) depuis le dépôt officiel GIT, il suffit de saisir les commandes suivantes:

mkdir ~/src
cd ~/src
git clone https://github.com/joyent/node.git
cd ~/src/node
git checkout v0.8.0
sudo mkdir /opt/node
./configure --prefix=/opt/node
make
sudo make install
echo 'export PATH=$PATH:/opt/node/bin' >> ~/.profile
echo 'export NODE_PATH=/opt/node:/opt/node/lib/node_modules' >> ~/.profile
source ~/.profile

L’installation va se faire dans le répertoire /opt/node.

Pour vérifier que Node.js est bien installé sur votre machine:

# node -v
v0.8.0

Les modules avec NPM

Pour étendre les fonctions de bases de Node.js, il faut utiliser l’utilitaire NPM (Node Package Manager). Grâce à lui il est possible d’ajouter des packages à Node.js.

Pour installer Node.js depuis les sources (voir le chapitre suivant pour une installation depuis un PPA):

curl http://npmjs.org/install.sh | sudo sh -c 'export PATH=$PATH:/opt/node/bin ; export NODE_PATH=/opt/node:/opt/node/lib/node_modules ; sh'

Je vous laisse ensuite regarder la documentation puis la liste des packages disponibles.

Installation depuis un PPA

Si vous êtes sous Ubuntu, il existe un PPA maintenant les dernières versions de Nodejs et de NPM. Pour installer le PPA sur votre système:

sudo add-apt-repository ppa:chris-lea/node.js

Puis l’installation de Nodejs et NPM:

sudo apt-get update && sudo apt-get install nodejs npm

Un premier exemple, ou le fameux « Hello world ! »

On commence par éditer un fichier ‘hello.js‘ contenant le code suivant:

//
// A JavaScript based on Node.js
//
// Nicolas Hennion (aka) Nicolargo
//
// GPL v3.0
//

var http = require('http');
var url = require('url');
var spawn = require ('child_process').spawn;

//**********
// Variables
//**********

var listenport = 1337;

//**********
// Functions
//**********

// Chomp function (delete the \n)
String.prototype.chomp = function () {
return this.replace(/(\n|\r)+$/, '');
};

// HTTP request
function onRequest(req, res) {
console.log("New request: "+req.url);
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('Hello World');
res.end();
};

//*************
// Main program
//*************

// Create the HTTP server
http.createServer(onRequest).listen(listenport);

// Get the hostname (FQDN)
var listenaddress = spawn('hostname', ['-f']);
listenaddress.stdout.on('data', function (data) {
var fqdn = new String(data);
console.log('Server running listenning http://'+fqdn.chomp()+':'+listenport+'/');
});

Puis on lance le noeud (node) avec la commande:

# node ./hello.js
Server running listenning http://VotreMachine:1337/

Il ne reste plus (après avoir autorisé les requêtes vers le port TCP 1337 si vous avez un Firewall sur votre machine de test) qu’à pointer une navigateu Web vers l’URL donnée par la commande pour voir affiché le résultat:

Détail du code

On commence par initialiser les fonctions de Node.js dont on a besoin (voir la liste dans la documentation officielle). Pour notre exemple, nous avons besoin de générer un serveur HTTP (http) et de lancer une commande système (spawn) récupérant le nom FQDN de la machine.

[cc lang= »javascript »]

var http = require(‘http’);

var spawn = require (‘child_process’).spawn;

[/cc]

Après la définition d’une variable globale (contenant le numéro TCP du port d’écoute du serveur) ainsi que d’une fonction enlevant le caractère de retour à la ligne du chaine (chomp), on passe au vif du sujet en générant un serveur HTTP:

[cc lang= »javascript »]

// Create the HTTP server

http.createServer(function (req, res) {

res.writeHead(200, {‘Content-Type’: ‘text/plain’});

res.end(‘Hello World\n’);

}).listen(listenport);

[/cc]

Cette commande est « forké » (elle génère donc un daemon HTTP écoutant sur le port ‘listenport’ et renvoyant le message texte ‘Hello World’). Enfin on affiche dans la console l’URL du serveur:

[cc lang= »javascript »]

// Get the hostname (FQDN)

var listenaddress = spawn(‘hostname’, [‘-f’]);

listenaddress.stdout.on(‘data’, function (data) {

var fqdn = new String(data);

console.log(‘Server running listenning http://’+fqdn.chomp()+’:’+listenport+’/’);

});

[/cc]

Aller plus loin

Bien évidement, ce billet n’est qu’une simple introduction à ce framework (d’ou le titre :)). Le code donnée en exemple est sûrement « optimisable » mais à un objectif pédagogique.  Je reviendrai rapidement sur ce sujet en proposant des développement basée sur Node.js pour la supervision de nos belles machines. Stay tuned

Sources ayant inspirées ce billet:

Catégories
Developpement Open-source Web

Localisation de logiciels : astuces culturelles

Cet article a été rédigé par Dan Aldulescu, chargé marketing l’agence de traduction Lingo24. Crée en 2001, Lingo24 compte aujourd’hui plus de 160 employés sur quatre continents et des clients dans plus soixante pays.

En tant que programmeur, lorsque vous développez une application destinée aux utilisateurs français et constatez qu’elle est appréciée, vous pouvez supposer que les utilisateurs d’autres pays, d’Allemagne ou de Suède par exemple, peuvent aussi la trouver intéressante et conforme à leurs besoins. Alors pourquoi ne leur donner l’opportunité d’en bénéficier ? La première étape à franchir en vue de localiser votre application pour le public étranger est la traduction du texte, mais parfois, la simple traduction ne suffit pas.

Pourquoi localiser les logiciels ?

Le marché des logiciels et des applications Web a été pendant longtemps un terrain miné pour les PME du domaine informatique qui étaient contraintes à agir uniquement sur leurs marchés locaux. Aujourd’hui, la globalisation et le besoin, en plein essor, des services informatiques donnent une très bonne opportunité aux PME du domaine de s’ouvrir à un nouveau public. Mais pour une meilleure adaptation des applications au public cible étranger, elles doivent être soumises au processus délocalisation.

La localisation des logiciels peut devenir une démarche assez onéreuse et, avant de vous lancer,vous devez connaitre en détail le marché cible pour avoir les données nécessaires à une évaluation de vos chances d’obtenir un retour sur investissement optimal. Aussi, pour rendre tout ce processus de localisation plus facile et rapide, il est recommandé d’envisager, dès les premières étapes du développement du logiciel, des versions pour d’autres langues et de les inclure dans les codes de programmation.

Traduction et contrôle du contenu

Le traducteur doit être très familier avec la terminologie spécifique du domaine informatique de la langue cible. Par exemple, si on traduit un logiciel de l’anglais vers le français et que l’on a le mot « thumbnail », dont la traduction littérale française n’a rien à voir avec les logiciels, il faut trouver le mot dont le sens en est un aperçu en français pour bien localiser le texte de l’application à l’intention des prospects français.
Dans la localisation des logiciels, l’espace destiné au texte constitue un problème récurent. Prenons de nouveau l’exemple de la traduction de l’anglais vers le français. Si on a, en anglais, un bouton intitulé « try again », on observe que le texte se compose de neuf caractères, espace inclus. En français,on peut avoir « essayez de nouveau », qui compte 18 caractères, espaces inclus. Si, à cette échelle, le problème n’est pas très difficile à résoudre, en cas de fragments plus longs, l’espace devient un véritable problème. Il faudra donc trouver une alternative à la traduction d'origine.

Pour surmonter ce dernier, vous pouvez soit vous montrer généreux en ce qui concerne l’espace pour chaque fragment de texte, si on ne connait pas encore les langues cibles de la localisation, soit demander au traducteur d’adapter le texte dans la langue cible de telle manière qu’il ne dépasse pas une certaine limite de caractères, même si cela implique de s’éloigner légèrement de la source mais en en gardant le sens.
Un autre élément très important, qui peut être source de confusions pour l’utilisateur final du logiciel, est le format de la date et l’heure ainsi que des unités de mesure spécifiques pour chaque région géographique.

Dans le cas de la localisation, il faut aussi adapter les éléments visuels à la culture cible. Les symboles, les photos et les couleurs utilisés peuvent avoir des connotations négatives pour les utilisateurs étrangers. La perception de ces éléments visuels est influencée par les spécificités culturelles. Il faut accorder une attention particulière au projet en cas de localisation pour le marché asiatique, où les gens vivent avec des normes sociales traditionalistes et respectent strictement leurs valeurs culturelles et nationales. Pour réussir à gagner leur confiance, il faut leur offrir un produit qui s’adapte à leurs valeurset besoins. Si vous utilisez les couleurs pour véhiculer du sens, vérifiez que cela sera bien compris dans le monde entier. Le rouge peut symboliser la guerre, mais il peut aussi signifier l’amour et la passion.

Localisation des logiciels libres : CMS WordPress

La nécessité mondiale d’un contenu très dynamique sur un site Web a déterminé le besoin d’outils de gestion de contenu simples à utiliser, évitant de devoir parcourir des manuels de 500 pages, et à adapter à un public mondial en tenant compte de ses spécificités linguistiques et culturelles. L’un desplus célèbres outils de CMS (système de gestion de contenu) est celui de WordPress mis en place pour l’anglais américain, mais son utilisation mondiale a nécessité sa localisation.

Le processus de localisation de WordPress se déroule en deux étapes. La première appartient aux programmeurs, qui bâtissent les mécanismes simplifiant la traduction et la localisation ultérieure dans différentes langues. La deuxième étape est la localisation proprement dite, processus se focalisant sur le contenu texte et les différents paramètres et options pour que l’interface soit adaptée à un groupe culturel spécifique basé dans une aire géographique définie.

Pour obtenir les meilleurs résultats d’un processus de localisation, WordPress se concentre sur l’adaptation aux dialectes locaux. Parce qu’il y a des différences entre le portugais du Portugal et le portugais parlé au Brésil, les traducteurs choisis doivent être natifs du pays cible. La participationest ouverte à tous, il vous suffit de vous présenter sur WP Polyglots Blog et d’énoncer la (ou les)langue(s) vers laquelle (ou lesquelles) vous souhaitez traduire. Généralement, une assistance techniqueest proposée par les équipes techniques de WordPress, mais il est préférable que les traducteursconnaissent les notions de base du PHP, car il faut parfois savoir lire le code de programmation pourarriver à une meilleure retransmission de sens entre l’anglais et la langue cible.

Catégories
Blog Developpement Open-source Web

L’application iPad du Blog de Nicolargo est disponible

Inlassable développeur de l’ombre, Nicolas Richasse (alias Ritchy) vient de mettre à jour l’application iPhone/iPod du blog de Nicolargo pour la rendre compatible avec le dernier joujou des geek: la tablette iPad.

Pour la télécharger, rendez-vous sur l’AppStore:

Plus qu’un simple portage, il en a profité pour changer l’interface utilisateur. Voici quelques screenshots pour vous donner l’eau à la bouche:

Ou encore…

Merci encore à lui !

Catégories
Developpement Open-source Planet-libre Reseau Web

Installation et test de NGinx sous Ubuntu

NGinx est une des alternative au serveur Web Apache (il est actuellement utilisé par plus de 6% des serveurs Web). Il se targue d’être plus rapide, plus léger et facile à configurer.

Nous allons vérifier tout cela dans ce billet en détaillant une installation de NGinx 0.8.54 (Stable) sur une machine GNU/Linux (Ubuntu Desktop 10.10) avec en bonus le support FastCGI de PHP et de Perl !

Installation de NGinx

On commence par ajouter le dépôt officiel pour la version stable:

sudo add-apt-repository ppa:nginx/stable

sudo aptitude update

Puis on installe la bête (facile non ?):

sudo aptitude install nginx

Remarque: si un serveur Web (Apache ou autre) tourne déjà sur votre machine, l’installation de NGinx se passera normalement, par contre il n’arrivera pas à se lancer car le port HTTP par défaut (TCP/80) sera déjà occupé. La solution la plus propre est de configurer NGinx pour qu’il écoute sur un autre port (TCP/81 par exemple) puis faire vos tests en forcant l’utilisation de ce port dans votre navigateur Internet (en ajoutant :81 aux URL). Une fois Nginx validé, il suffira de supprimer l’autre serveur Web de votre machine, puis de reconfigurer Nginx sur le port par défaut (TCP/80).

Premier contact avec NGinx

Un script de démarrage nommé nginx a été installé dans le répertoire /etc/init.d. On peut voir la liste des commandes accepté par ce script en saisissant la ligne de commande suivante:

sudo service nginx

Usage: nginx {start|stop|restart|reload|force-reload|status|configtest}

On va donc activer la configuration de test:

sudo service nginx configtest

Testing nginx configuration: nginx.

Puis lancer le serveur:

sudo service nginx start

Starting nginx: nginx.

On ouvre un navigateur sur la même machine puis on entre l’UTL suivante: http://localhost/

La page suivante devrait s’afficher:

On peut ensuite arrêter le serveur:

sudo service nginx stop

Stopping nginx: nginx.

Puis passer à l’étape suivante…

Configuration du serveur NGinx

Les fichiers de configuration se trouvent dans le répertoire /etc/nginx. Les habitués d’Apache ne seront pas trop perturbés par la structure de l’arborescence de ce répertoire:

 

drwxr-xr-x 2 root root 4096 2011-01-05 08:26 conf.d/

-rw-r–r– 1 root root 884 2011-01-05 08:04 fastcgi_params

-rw-r–r– 1 root root 2258 2011-01-05 08:04 koi-utf

-rw-r–r– 1 root root 1805 2011-01-05 08:04 koi-win

-rw-r–r– 1 root root 2066 2011-01-05 08:04 mime.types

-rw-r–r– 1 root root 1340 2011-01-05 08:04 nginx.conf

-rw-r–r– 1 root root 465 2011-01-05 08:04 scgi_params

drwxr-xr-x 2 root root 4096 2011-01-05 10:36 sites-available/

drwxr-xr-x 2 root root 4096 2011-01-05 10:36 sites-enabled/

-rw-r–r– 1 root root 497 2011-01-05 08:04 uwsgi_params

-rw-r–r– 1 root root 3071 2011-01-05 08:04 win-utf

On y retrouve (entre autres):

  • nginx.conf: le fichier de configuration central
  • conf.d/: un répertoire contenant des fichiers de configuration additionnels
  • sites-available/: répertoire contenant la liste des fichier de configuration des sites disponibles
  • sites-enabled/: répertoire contenant la liste des fichiers de configuration des sites actifs (liens symboliques vers le répertoire site-availables)

On commence par jeter un coups d’oeil au fichier nginx.conf…. Quel bonheur par rapport à celui d’Apache :).

On passe ensuite au fichier du site par défaut /etc/nginx/sites-available/default (que l’on a activé tout à l’heure par la commande ‘sudo service nginx configtest’):

server {

listen 80

 

root /usr/share/nginx/www;

index index.html index.htm;

 

server_name localhost;

 

location / {

try_files $uri $uri/ /index.html;

}

 

location /doc {

root /usr/share;

autoindex on;

allow 127.0.0.1;

deny all;

}

 

location /images {

root /usr/share;

autoindex off;

}

 

}

On peut donc voir que l’on a un site qui écoute sur le port TCP/80 (listen   80) et sert les pages se trouvant dans le répertoire /usr/share/nginx/www (root /usr/share/nginx/www) à partir de l’URL http://localhost/ (server_name localhost).

Nous allons nous baser sur cet exemple pour construire un nouveau fichier de configuration propre à nos besoins.

On commence par créer l’arborescence qui va héberger nos pages (par exemple /home/labo/www). Si le répertoire n’existe pas il faut le créer et lui donner les bons droits:

mkdir /home/labo/www

Enfin on édite une page de test:

# vi /home/labo/www/index.html

<html><body>Ma page</body></html>

Ensuite on passe à la création du fichier de configuration du site.

sudo vi /etc/nginx/sites-available/monsite

Avec le contenu suivant (à adapter à votre configuration):

# Mon site a moi

 

server {

listen 80;

 

root /home/labo/www;

index index.html index.htm;

 

server_name localhost;

 

location / {

# First attempt to serve request as file, then

# as directory, then fall back to index.html

try_files $uri $uri/ /index.html;

}

 

}

On supprime le site par defaut et on active le notre:

cd /etc/nginx/sites-enabled

sudo rm default

sudo ln -s ../sites-available/monsite

On redémarre le serveur Nginx:

sudo service nginx restart

Restarting nginx: nginx.

Puis  on teste la page: http://localhost/

Pour rendre le site « visible depuis l’extérieur », il faut changer la ligne:

server_name localhost;

Puis la remplacer par:

server_name www.mondomaine.com;

Il faut bien sur que le nom www.mondomaine.com pointe sur l’adresse IP de votre serveur Nginx…

Test des performances

Pour voir ce qu’il a dans le ventre, j’ai installé en Nginx et Apache sur ma machine. Nginx écoutant sur le port TCP/81 et Apache sur le port TCP/80.

J’ai ensuite utilisé le logiciel httperf (disponible dans les dépôts Ubuntu) pour simuler des requêtes sur le serveur.

Test du serveur Apache:

# httperf –client=0/1 –server=localhost –port=80 –uri=/ –send-buffer=4096 –recv-buffer=16384 –num-conns=5000 –num-calls=10

Request rate: 4284.8 req/s (0.2 ms/req)

Puis test du serveur NGinx:

# httperf –client=0/1 –server=localhost –port=81 –uri=/ –send-buffer=4096 –recv-buffer=16384 –num-conns=5000 –num-calls=10

Request rate: 6332.6 req/s (0.2 ms/req)

On a donc un gain d’environ 30% en terme de requêtes supportées par le serveur.

 

 

Request rate / Request number

 

Support du PHP

De nos jours, un serveur Web sans support PHP c’est un peu comme un Ferrari avec des roues de 13 pouces. Dans l’optique d’avoir un serveur performant nous allons donc utiliser le module externe PHP FPM (PHP FastCGI) qui s’occupera de l’exécution des scripts PHP dans un processus indépendant de NGinx (merci à cet article qui m’a bien aidé).

On commence par installer le module:

sudo add-apt-repository ppa:brianmercer/php

sudo aptitude update && sudo aptitude install php5-fpm

Par défaut, le processus PHP-FPM va se mettre en écoute sur le port TCP/9000 et écouté les requêtes venant seulement de la machine locale (localhost).

Il ne reste plus qu’à modifier le fichier de configuration de votre site pour prendre en compte le langage PHP (fichier /etc/nginx/sites-available/monsite):

# Mon site a moi

server {

listen 80;

server_name localhost;

root /home/labo/www;

 

location / {

index index.php index.html;

}

 

location ~ \.php$ {

fastcgi_pass 127.0.0.1:9000;

include /etc/nginx/fastcgi_params;

fastcgi_index index.php;

}

}

Attention de bien avoir configurer la variable root (« root /home/labo/www » dans mon exemple), sinon vous risquez de tomber sur une erreur 404 lors du passage du script PHP vers le process PHP-FPM.

On relance ensuite Nginx:

sudo service nginx restart

Restarting nginx: nginx.

Pour tester que le PHP fonctionne bien, le plus simple est de créer un fichier info.php (à mettre à la racine du site /home/labo/www/) contenant:

<?php

phpinfo();

?>

Puis de pointer votre navigateur Web vers l’URL: http://localhost/info.php

La page suivante devrait s’afficher:

Support de Perl

Tout comme PHP, nous allons utiliser FastCGI pour exécuter les scripts Perl depuis notre serveur NGinx. Le principe est le même. Un processus (fastcgi-wrapper.pl) va se mettre en écoute sur le port TCP/8999 puis attendre les demandes d’exécution envoyées par NGinx.

Contrairement à PHP, il n’existe pas (encore) de package Ubuntu permettant d’automatiser l’installation de ce processus. Il faut donc mettre un peu les mains dans le cambouis (merci à ce blog) !

On commence par installer le module Perl FCGI sur lequel le processus fastcgi-wrapper.pl va se baser:

sudo perl -MCPAN -e ‘install FCGI’

On installe le processus fastcgi-wrapper.pl qui va s’occuper de l’exécution  des scripts Perl:

sudo wget -O /usr/bin/fastcgi-wrapper.pl http://lindev.fr/public/nginx/fastcgi-wrapper.pl

sudo chmod 755 /usr/bin/fastcgi-wrapper.pl

La plupart des tutos que j’ai trouvé sur le Net utilise ensuite un script init.d pas très beau à voir (http://lindev.fr/public/nginx/perl-fastcgi). En effet, pour arrêter le processus on a droit à un beau killall -9 perl ! Autant dire que si vous avez d’autres processus Perl en tache de fond de votre serveur cela risque de poser quelques problèmes :). J’ai donc écrit un nouveau script basée sur celui du wrapper PHP.

On automatise le lancement de ce script au démarrage du serveur:

sudo wget -O /etc/init.d/perl-fastcgi https://raw.github.com/nicolargo/ubuntupostinstall/master/perl-fastcgi

sudo chmod 755 /etc/init.d/perl-fastcgi

sudo update-rc.d perl-fastcgi defaults

Puis on le lance en tache de fond:

sudo service perl-fastcgi start

Il ne reste plus qu’à modifier le fichier de configuration Nginx de votre site pour prendre en compte les scripts Perl:

# Mon site a moi

server {

listen 80;

server_name localhost;

root /home/labo/www;

 

location / {

index index.php index.html;

}

 

location ~ \.php$ {

fastcgi_pass 127.0.0.1:9000;

include /etc/nginx/fastcgi_params;

fastcgi_index index.php;

}

 

location ~ \.pl$ {

fastcgi_pass 127.0.0.1:8999;

include /etc/nginx/fastcgi_params;

fastcgi_index index.pl;

}

}

On relance ensuite Nginx:

sudo service nginx restart

Restarting nginx: nginx.

Pour tester que le Perl fonctionne bien, le plus simple est de créer un fichier info.pl (à mettre à la racine du site /home/labo/www/) contenant:

#!/usr/bin/perl

print « Content-type: text/html\n\n »;

print « <html><body>Hello, world.</body></html> »;

Attention, contrairement au script PHP, les fichier .pl douivent avoir les droits en exécution sous peine de ce trouver devant le message suivant:

Error: No such CGI app – /home/labo/www/info.pl may not exist or is not executable by this process.

On doit donc saisir la commande:

chmod a+x /home/labo/www/info.pl

Puis de pointer votre navigateur Web vers l’URL: http://localhost/info.pl

La page suivante devrait s’afficher:

Optimisation corner !

On passe maintenant à quelques optimisations que l’on peut ajouter à la configuration de son site (merci à @T1B0).

On commence par le fait de ne pas loguer les message 404 sur le fichier favicon.ico (histoire de ne pas surcharger ses logs):

location = /favicon.ico {

access_log off;

return 204;

}

Ensuite on optimise la durée d’expiration des en-tête des fichiers statiques (pour les caches):

location ~* ^.+\.(jpg|jpeg|gif|css|png|js|xml)$ {

expires 30d;

}

Pour aller plus loin, vous pouvez également lire ce billet chez K-Tux. (notamment l’utilisation de memcache qui est intégré à NGinx !).

Conclusion

Vous avez donc à votre disposition un beau serveur Web NGinx avec le support FastCGI PHP & Perl !

Elle est pas belle la vie ?

Catégories
Developpement Open-source Planet-libre

Le livre blanc sur l’open-source de la Telecom Valley

J’ai la chance de participer régulièrement (pas aussi souvent que je le souhaiterai) au groupe de travail open-source de la Telecom Valley. Depuis plus d’un an, des membres de cette commission travaille bénévolement pour la rédaction d’un livre blanc sur l’intégration et la publication de logiciels sous licences open source.

Ce midi, avec la présence de Marc Daunis (sénateur maire de Valbonne) et de Jean-Christophe Becquet (vice président de l’April), le livre blanc a été officiellement publié.

Vous pouvez dès à présent le lire, le diffuser ou bien le réutiliser pour vos propres besoins.

Merci encore à toute l’équipe qui a travaillé sur ce projet !

Catégories
Developpement Open-source Planet-libre Web

Concours Prologin 2011 !

Vous chercher à occuper ce long week-end d’automne ? Vous aimez les logiciels libres ? Vous êtes un crack en algorithmique / développement ? Alors le concours Prologin 2011 est fait pour vous !

Depuis maintenant quelques années, l’association Prologin propose de participer à son concours national d’informatique. Réservé aux étudiants de vingt ans et moins, ce concours gratuit se déroule en trois étapes: qualification sur internet, demi-finale en région et  finale à Paris !

Outre le fait de faire un peu travailler vos méninges, le concours vous permettra, si vous passez la première étape de qualification en ligne, de rencontrer « in real life » des personnes partageant, comme vous la passion de l’informatique. Vous pouvez voir sur les photos des éditions précédentes que l’ambiance est plutôt sympa !

Les vainqueurs pourront ensuite valoriser ce trophée, cela fait toujours bien dans le CV :). De nombreuses écoles d’ingénieurs suivent de près ce coucours:

En bonus, ProLogin propose un site d’entrainement ouvert à tous (c’est à dire au vieux comme moi ou aux futurs participants voulant se jauger).

Pour participer au concours Prologin 2011, suivre ce lien !

Catégories
Developpement

Maître Capello, les chiffres !

Si vous suivez régulièrement ce blog, vous devez sûrement connaitre Nicolas Richasse alias @ZeNico qui a rédigé quelques bons billets orientées sur sa spécialité: le développement logiciel. ZeNico est clairement le meilleur développeur que j’ai eu l’occasion de croiser et pour tout dire, j’en ai vu passer pas mal !

Il y peu de temps, il a décidé de ce mettre au développement d’application pour les smartphones. Pour « se faire la main » (dixit ZeNico), il a ainsi développé une application iPhone nommée iNumbers qui reprend grosso modo les règles du jeu des chiffres dans « Des chiffres et des lettres » (vous savez le jeu télévisé préféré des plus de 70 ans :)).

« Le but du jeu est d’arriver à calculer un nombre compris entre 101 et 999 à partir de 6 chiffres tirés au hasard parmi 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 25, 50, 75 et 100 en utilisant uniquement les 4 opérateurs de base, à savoir : l’addition (+), la soustraction (-), la multiplication(*)  et la division (/) »

Si vous n’arrivez pas à trouver la solution, le logiciel la trouve pour vous en quelques secondes ! Tel un super et infatigable Jacques Capelovici !

L’application est payante, mais ne vous ruinera pas: 0.79€ !

Pour plus d’information, vous pouvez consulter la page officielle du jeux.

Teasing

Vous avez bien fait de lire ce billet jusqu’à la fin 🙂

ZeNico travaille également sur une prochaine application iPhone gratuite et open-source et qui aura un lien direct avec ce blog… à suivre…

/Teasing

Catégories
Developpement Open-source Systeme

Sauvegarde automatique de son serveur SVN

Dans la série « sauvegarde tes données sinon tu le regretteras un jour ou l’autre », je voudrais le serveur SVN.

J’utilise un serveur SVN (pas encore eu le temps ni le courage de passer à GIT) pour gérer en version mes configurations, mes scripts shell et mes petits développements personnels. Une erreur de manipulation étant vite arrivée, j’ai automatisé l’archivage journalier (avec une mémoire d’une semaine) de la base de donnée utilisée par SVN.

Sauvegarde

J’utilise pour cela la commande svnadmin qui permet à l’aide de l’option dump de copier dans un simple fichier le contenu de la base de donnée.

Par exemple pour sauvegarder le projet dont la racine SVN se trouve dans le répertoire /var/svn/monbeauprojet, il faut saisir la commande suivante:

svnadmin -q dump /var/svn/monbeauprojet > /backup/svn/monbeauprojet.svndump

Il est bien sûr conseillé d’avoir une sauvegarde sur un disque différent de celui montée par /var/svn ou encore mieux d’uploader la sauvegarde sur un autre serveur.

Script pour sauvegarder l’ensemble des projets

Si votre serveur SVN comporte plusieurs projets, il faut passer par un shell script:

# Backup SVN (local)

day=`LANG=C date +%A | tr A-Z a-z`

svnrepo= »/var/svn/ »

backupdir= »/backup/svn »

for i in `ls $svnrepo`

do

svnadmin -q dump $svnrepo/$i > $backupdir/$i-$day.svndump

gzip $backupdir/$i-$day.svndump

rm $backupdir/$i-$day.svndump

done

Ce script va produire dans le sous répertoire /backup/svn une liste de fichiers compressés (format gzip). Chaque projet aura 7 sauvegardes correspondant aux 7 derniers jours. Par exemple, le fichier nommé monbeauprojet-sunday.svndump.gz sera la sauvegarde de la base de données SVN de dimanche dernier.

Pour lancer automatiquement la sauvegarde il suffit d’ajouter ce script dans la crontab système.

Restauration

En cas de problème sur un projet, il suffit de saisir les commandes suivantes pour restaurer la base de données. On utilise également la commande svnadmin mais cette fois ci avec l’option load:

gzip -d /backup/svn/monbeauprojet-sunday.svndump.gz

svnadmin load /var/svn/monbeauprojet < /backup/svn/monbeauprojet-sunday.svndump

Il faut bien vérifier que les droits des sous répertoires sont bons (svn:svn pour mon Ubuntu Server).

Si la restauration se fait sur un nouveau serveur SVN, il faut penser à créer le répertoire avec la commande:

svnadmin create /var/svn/monbeauprojet

Conclusion

Il y a surement d’autres solutions techniques (par exemple faire une copie sur un deuxième serveur SVN avec la commande svnadmin hotcopy) mais je trouve cette solution plutôt simple et flexible.


Catégories
Blog Developpement Open-source Web

Transformer son site/blog en Google Chrome Web Apps

Dans quelques jours, le Chrome Web Store va ouvrir ses portes. Ce site va permettre au utilisateur de Google Chrome ou de la version libre Chromium d’installer des applications Web dans leur navigateur. Quelques applications sont déjà disponible (Gmail, Calendar, Google Reader…), elle se présente sous la forme d’une icône en haut à gauche des onglets et permet l’accès direct aux sites. Des fonctions de notifications seront bientôt disponibles (par exemple pour vous avertir lors de l’arrivée d’un nouveau message).

Rien de neuf par rapport aux nombreux plugins (extensions) que l’on peut trouver la toile… oui et non. En effet, comme nous allons le voir dans ce billet il est très facile de créer une application à partir d’un site Web existant. On a ainsi un accès immédiat à ces sites.

Assez de blabla, nous allons voir comment transformer votre site/blog dans une belle application Webs que vous pourrez mettre à disposition de vos lecteurs !

Toutes les manipulations suivantes marchent aussi bien sous Google Chrome ou sur Chromium (la version libre !). Il faut juste avoir la dernière version (voir instruction ici pour Chromium sous GNU/Linux Ubuntu).

Catégories
Blog Developpement Open-source

Un blog WordPress local pour vos développements

Envie de vous lancer dans le développement de votre propre thème WordPress ? Envie tester votre dernier plugin sur une copie de votre blog sans impact pour vos lecteurs ? Envies de tester cette fameuses version 3.0bêta de WordPress ?

Ces quelques exemples justifient l’installation en local (donc disponible même sans liaison Internet), sur votre PC GNU/Linux d’un environnement de développement de blog complet. Celui-ci se composera:

  • d’un serveur LAMP à jour (Linux, Apache, MySQL, PHP)
  • de la dernière version de WordPress
  • de votre IDE préférée (Bluefish, Eclipse, Anjuta, NetBeans, Emacs, vi…)