Catégorie : développement

Tout ce qui concerne le développement en général, que ce soit des choses générales, ou des choses bien précises. Cela va de la gestion de projet à la recherche du fonctionnement de pointeurs en C.

NodeJS qui sert des fichiers et accède à MongoDB

// Exemple copié collé et adapté sur stackoverflow :
// http://stackoverflow.com/questions/15630770/node-js-check-if-path-is-file-or-directory
// http://stackoverflow.com/questions/7268033/basic-static-file-server-in-nodejs
//
var http = require('http'),
    url = require('url'),
    fs = require('fs'),
    mongoose = require('mongoose'),
    fileSystem = require('fs'),
    path = require('path');
var mimeTypes = {
    "html": "text/html",
    "jpeg": "image/jpeg",
    "jpg": "image/jpeg",
    "png": "image/png",
    "js": "text/javascript",
    "css": "text/css"};

var server;
var Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;

var personneSchema = new Schema({
  nom: String,
  prenom: String
});
var Personne = db.model('Personne', personneSchema);

db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
    console.log('DB connexion reussie');
    server = http.createServer(function (request, response) {
        if (request.url=='/personnes') {
            console.log("> JSON");
            Personne.find({}).select('nom prenom').exec(function (err, p) {
                if (err) {
                    return console.log(err);
                }
                var retour='[';
                for (var i = 0; i < p.length; i++) {
                    retour+='{'+ p[i].nom+', '+p[i].prenom+'},';
                };
                retour=retour.substr(0, retour.length-2)+']';
                response.writeHead(200, {
                    'Cache-Control': 'no-cache, must-revalidate',
                    'Expires': 'Mon, 26 Jul 1997 05:00:00 GMT',
                    'Content-type': 'application/json'
                });
                response.end(retour);
            });
            // Stopper tout traitement :
            return;
        }
        var uri = url.parse(request.url).pathname;
        var filename = path.join(process.cwd(), uri);
        console.log("> " + filename);
        fs.exists(filename, function(exists) {
            if ((!exists) || (fs.lstatSync(filename).isDirectory())) {
                console.log(">> fichier inexistant : " + filename);
                response.writeHead(200, {'Content-Type': 'text/plain'});
                response.write('404 Not Found\n');
                response.end();
                // Stopper tout traitement :
                return;
            }
            var mimeType = mimeTypes[path.extname(filename).split(".")[1]];
            response.writeHead(200, {'Content-Type':mimeType});

            var fileStream = fs.createReadStream(filename);
            fileStream.pipe(response);
        });

        //var p = new Personne({
        // nom: 'Pons',
        // prenom: 'Olivier'
        //});
        //p.save(function (err) {
        // if (err) {
        // return console.log(err);
        // }
        // var query = Personne.find();
        // query.select('nom prenom');
        // query.exec(function (err, p) {
        // if (err) return console.log(err);
        // for (var i = 0; i < p.length; i++) {
        // console.log(p[i].nom+' '+p[i].prenom);
        // };
        // console.log('Nombre total d\'enregistrements : '+p.length);
        // });
        //})
    });
    // Listen on port 8000, IP defaults to 127.0.0.1
    server.listen(8000);
    // Put a friendly message on the terminal
    console.log("Server running at http://127.0.0.1:8000/");
});

8 – Source pour un clavier AZERTY

Je mets en disponibilité mes sources pour la configuration complète d’un clavier AZERTY tel que je l’ai expliqué dans la page de configuration du clavier.

Pour tous ceux qui veulent le récupérer et le compiler, cela se passe par .

6 – Ma configuration du clavier

Je vais expliquer comment j’ai configuré mon clavier.
Tout d’abord voici les…

Idées sur lesquelles je suis parti :

  • Je ne veux pas réapprendre toutes les touches, je n’ai pas que ça à faire. ;
  • Je veux que toutes les touches difficiles d’accès deviennent faciles d’accès ;
  • Je veux bouger le moins possible mes doigts ;
  • Je veux pouvoir développer et accéder au moins aussi rapidement qu’avant aux touches spéciales pour les développeurs ;

Donc voici ce que j’ai mis en place. Avant de le montrer…

Ma façon de raisonner :

  • Clavier en mode normal : toutes les touches accessibles comme un clavier AZERTY. Très facile. ;
  • Touches développeur à gauche : le clavier français est tout simplement le clavier le moins bien pensé pour les développeurs. Autant le clavier QWERTY donne la possibilité d’accéder facilement aux accolades, crochets et autres pipes, slash et antislashes, autant le clavier français est un calvaire : c’est pourquoi j’ai pensé à mettre toutes ces touches faciles d’accès ;
  • De la même façon, les touches de déplacement. Quand on y réfléchit bien, les touches fléchées sont bien, mais elles ne sont pas disposées logiquement : c’est juste une habitude qu’on a pris, ça ne signifie pas que c’est le plus pratique. Exemple simple : quand on va à gauche, c’est la flèche gauche. En réfléchissant un peu, si on veut aller beaucoup plus à gauche, il faudrait, logiquement avoir une touche supplémentaire à gauche, et pas une touche totalement dégroupée au dessus comme c’est le cas sur tous les claviers classiques. Donc sur ma configuration, lorsqu’on accède aux touches de déplacement, j’ai, à gauche de la « flèche gauche », la touche « home », et pas au dessus. C’est juste un repère spatial très simple, et ça fonctionne à merveille !
  • Ensuite il me fallait le pavé numérique. J’ai donc crée une couche pour le pavé numérique. Comme c’est toujours avec la main droite qu’on accède au pavé numérique, je l’ai laissé à droite. Le côté gauche, lui, est réservé aux lettres accentuées. ;
  • Enfin, j’ai dû gérer les touches de fonction : comme il n’y avait plus de place pour les disposer de manière logique j’ai fait une dernière couche « fonctions ». Sur cette couche, il me restait beaucoup de touches disponibles. J’ai donc utilisé une des possibilités géniales du clavier : les macros. On peut jouer une suite de touches en n’appuyant que sur une seule lettre. Génial. Avec un petit bémol que je dis à la fin de cette page. Par exemple, pour écrire l’espace insécable, qui est &nbsp; j’appuie sur une touche « FN » (fonction) et la lettre « e » et hop il me fait tout. Vous pourriez tout à fait dire « oui mais on peut tout à fait faire ça sur l’éditeur : on configure un raccourci clavier. Ce à quoi je répondrai : oui mais tu ne peux pas prendre ta configuration et faire du plug n play n’importe où, alors que mon Ergodox, je le prends et je le branche sur n’importe quel PC, ça fonctionnera ! 🙂
  • Pour terminer, je ne vais pas entrer dans le détail, mais j’ai retravaillé le code du développeur qui a fait le portage d’un programme qui gère les claviers USB entièrement configurables. Avec ma « grosse » retouche – mais qui n’est que dans le clavier français, ainsi pas de souci, on peut avoir tout de suite une vision très claire et simple des touches qui seront affichées, et juste en dessous, de la touche réelle envoyée en USB. C’est très pratique, surtout si jamais vous voulez modifier votre configuration clavier, tout fonctionnera du premier coup et facilement. Le code d’origine était fonctionnel, mais dur à lire. Là, c’est sympa et c’est un jeu d’enfant. Il vous suffit juste de trouver la correspondance avec la bonne touche : par exemple, si vous voulez envoyer le « a », vous allez dans ma table de correspondance (page Ergodox AZERTY configuration juste un peu au dessus de celle en cours) et vous chercher où est le « a » dans la colonne de droite. Vous verrez qu’il faut envoyer la lettre « Q » et vous modifiez la touche que vous voulez, et tout fonctionnera.

Donc voici les images de…

chaque « couche » clavier :

…même s’ils elles ne sont pas très lisibles, cliquez dessus pour avoir la version plus grande :

Couche 0

AZERTY normal :

,--------------------------------------------------.           ,--------------------------------------------------.
|    Esc |  & 1 |  é 2 |  " 3 |  ' 4 |  ( 5 |  ^L3 |           | Pscr |  - 6 |  è 7 |  _ 8 |  ç 9 |  à 0 |  Bspc  |
|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
|   Tab  |  a A |  z Z |  e E |  r R |  t T | Bspc |           |  ~L1 |  y Y |  u U |  i I |  o O |  p P |   ^ ¨  |
|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
|    .   |  q Q |  s S |  d D |  f F |  g G |------|           |------|  h H |  j J |  k K |  l L |  m M |  Enter |
|--------+------+------+------+------+------|  Ent |           |  Ins |------+------+------+------+------+--------|
|  Lsft  |  w W |  x X |  c C |  v V |  b B |      |           |      |  n N |  , ? |  ; . |  : / |  ! § |  Rsft  |
`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  | LCtl | LGui | LAlt | Lsft |  Del |                                       |  Spc |  Spc | RAlt | RGui | RCtl |
  `----------------------------------'                                       `----------------------------------'
                                       ,-------------.       ,-------------.
                                       | Copy | Pste |       | Nbsp |   F8 |
                                ,------|------|------|       |------+------+------.
                                |      |      | Cut  |       |   <> |      |      |
                                |  ~L1 |  ~L2 |------|       |------|  ~L2 |  ~L1 |
                                |      |      |  Del |       |  </> |      |      |
                                `--------------------'       `--------------------'

Couche 1

Caractères pour le développement à gauche, mouvements du curseur et copier coller à droite :

,--------------------------------------------------.           ,--------------------------------------------------.
|   Esc  |   F1 |   F2 |   F3 |   F4 |   F5 |   F6 |           |   F7 |   F8 |   F9 |  F10 |  F11 |  F12 |  Bspc  |
|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
|   Tab  |   \  |   <  |   _  |   >  |   |  |   $  |           |  Cut | Copy | Ct-← |   ↑  | Ct-→ | Pste |   ^ ¨  |
|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
|     -  |   {  |   (  |   /  |   )  |   }  |------|           |------| Home |   ←  |   ↓  |   →  |  End |  Enter |
|--------+------+------+------+------+------|   =  |           |  -   |------+------+------+------+------+--------|
|  Lsft  |   #  |   [  |   *  |   ]  |   @  |      |           |      |   -  | PgUp |  Ins | PgDn | PEnt |  Rsft  |
`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  | LCtl | LGui | LAlt |   ~  | Lsft |                                       |   0  |   .  | RAlt | RGui | RCtl |
  `----------------------------------'                                       `----------------------------------'
                                       ,-------------.       ,-------------.
                                       |   -  |   -  |       |   -  |    - |
                                ,------|------|------|       |------+------+------.
                                |      |      |   -  |       |   -  |      |      |
                                |   -  |   -  |------|       |------|   -  |   -  |
                                |      |      |   -  |       |   -  |      |      |
                                `--------------------'       `--------------------'

Couche 2

Les touches accentuées à gauche, pavé numérique à droite :

,--------------------------------------------------.           ,--------------------------------------------------.
|    Esc |   -  |   -  |   -  |   -  |   -  |   -  |           |   -  |   -  | NLCK |   /  |   *  |   -  |  Bspc  |
|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
|   Tab  |   -  |   ô  |   â  |   à  |   -  |   -  |           |   -  |   -  |   7  |   8  |   9  |   +  |   ^ ¨  |
|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
|     -  |   ë  |   é  |   -  |   è  |   -  |------|           |------|   -  |   4  |   5  |   6  |   +  |  PEnt  |
|--------+------+------+------+------+------|   -  |           |   %  |------+------+------+------+------+--------|
|  Lsft  |   -  |   -  |   û  |   ù  |   -  |      |           |      |   -  |   1  |   2  |   3  | PEnt |  Rsft  |
`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  | LCtl | LGui | LAlt |  Spc | Lsft |                                       |   0  |   .  | RAlt | RGui | RCtl |
  `----------------------------------'                                       `----------------------------------'

Couche 3

Trois macros à gauche, et les touches de fonction sur tout le clavier :

,--------------------------------------------------.           ,--------------------------------------------------.
|   Esc  |   F1 |   F2 |   F3 |   F4 |   F5 |   F6 |           |   F7 |   F8 |   F9 |  F10 |  F11 |  F12 |  Bspc  |
|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
|    -   |   -  |   <> |   -  |  </> |   -  |   -  |           |   -  |   -  |   -  |   -  |   -  |   -  |    -   |
|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
|    -   |   -  |   -  |   -  | Nbsp |   -  |------|           |------|   -  |   -  |   -  |   -  |   -  |    -   |
|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
|    -   |   -  |   -  |   -  |   -  |   -  |   -  |           |   -  |   -  |   -  |   -  |   -  |   -  |    -   |
`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  |   -  |   -  |   -  |   -  |   -  |                                       |   -  |   -  |   -  |   -  |   -  |
  `----------------------------------'                                       `----------------------------------'
                                       ,-------------.       ,-------------.
                                       | +L2  | Home |       | PgUp | Del  |
                                ,------|------|------|       |------+------+------.
                                |      |      |  End |       | PgDn |      |      |
                                | BkSp |  ESC |------|       |------| Enter| Space|
                                |      |      |  Spc |       | Ins  |      |      |
                                `--------------------'       `--------------------'

Couche 4

Pour jouer à Trackmania : touches pour accélérer, droite et gauche, et toutes les autres touches sont annulées :

,--------------------------------------------------.           ,--------------------------------------------------.
|    -   |   -  |   -  |   -  |   -  |   -  |  -L4 |           |  -L4 |   -  |   -  |   -  |   -  |   -  |    -   |
|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
|    -   | Bspc |  z Z |  Del |   -  |   -  |   -  |           |   -  |   -  | Bspc |   ↑  |  Del |   -  |    -   |
|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
|    -   |  q Q |  s S |  d D |   -  |   -  |------|           |------|   -  |   ←  |   ↓  |   →  |   -  |    -   |
|--------+------+------+------+------+------|   -  |           |   -  |------+------+------+------+------+--------|
|    -   |   -  |   -  |   -  |   -  |   -  |      |           |      |   -  |   -  |   -  |   -  |   -  |    -   |
`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  |   -  |   -  |   -  |    - |   -  |                                       |   -  |    - |   -  |   -  |   -  |
  `----------------------------------'                                       `----------------------------------'
                                       ,-------------.       ,-------------.
                                       |   -  |   -  |       |   -  |   -  |
                                ,------|------|------|       |------+------+------.
                                |      |      |   -  |       |   -  |      |      |
                                |   -  |   -  |------|       |------|   -  |   -  |
                                |      |      |   -  |       |   -  |      |      |
                                `--------------------'       `--------------------'

La version informatique des écrans précédents :

Configuration clavier code au complet

5 – Le silence

Voici la dernière étape de ma recherche concernant le silence. J’ai retrouvé des vis qui servent à soutenir des disques dur, et à amortir leur bruit via un petit morceau en plastique :

Vis amortissantes pour disque dur

J’ai donc pris le petit morceau qui sert à amortir, et j’y ai adjoint un oring rouge :

Vis amortissantes pour disque dur

Vis amortissantes pour disque dur

Ensuite, j’ai fait ma petite « tour » ainsi :

Vis amortissantes pour disque dur

Et je l’ai mise sous le clavier, ainsi :

Vis amortissantes pour disque dur

J’ai fait la même chose pour les 4 coins les plus extrêmes du clavier. Je vous montre les deux de devant :

Vis amortissantes pour disque dur

Ce qui fait que maintenant, dès que je frappe, le son est totalement amorti, et ne suit pas sur le support sur lequel est posé l’Ergodox.

Configuré ainsi, mon clavier est à la fois l’un des plus silencieux que je connaisse, mais aussi un des plus agréables à utiliser. Il ne me reste plus qu’à terminer ma configuration, jour après jour, pour savoir là où sont les touches qui me manquent le plus et les mettre directement en relation là où ma main a envie de taper. Bien sûr, après plus de 15 ans de pratique quotidienne d’un clavier AZERTY, je ne veux pas passer du temps à tout réapprendre, donc je l’ai laissé pour l’instant tel quel, mais j’ai défini pas mal d’autres raccourcis claviers et maintenant, je commence à aller presque aussi vite qu’avec mon autre clavier quand je tape en français. Pour le reste, et surtout pour le développement, qui nécessite beaucoup de mouvements de curseurs, de copier coller, etc, c’est tout de même beaucoup plus difficile de m’adapter, même si je gagne énormément de temps sur toutes les touches bien énervantes à avoir telles que toutes les touches avec ALTGR. Là je gagne un temps énorme. Mais j’en dis plus dans la prochaine page consacrée à l’ergodox, sur ma configuration AZERTY.

2 – Les O-ring

Si votre clavier a des touches mécaniques, il risque fort de vous gêner par son bruit. Une solution très efficace est de commander des Oring. Ce sont des petits anneaux qui se mettent dans chaque touche et qui amortissent le choc, voire pour les Oring bleus, qui empêchent les touches d’aller au bout de leur course, coupant totalement le bruit de choc.

Oring bleus et rouges

Attention, forcément, les touches ne se comporteront plus exactement comme avant, et cela peut déstabiliser des gens. Certains peuvent même préférer le bruit et garder les sensation « clicky » des touches.

Personnellement, j’ai des oring rouges, et donc il n’y a aucun clic : les pressions sont linéaires donc peu importe la distance de pression. J’ai ainsi mis des Oring bleus et franchement, je n’ai jamais eu un clavier aussi agréable au toucher et aussi silencieux. Pourvu que ça dure !

3 – Configuration AZERTY et conversion

Voici la table qui vous manquera certainement le plus lorsque vous voudrez utiliser le configurateur Web qu’on met à disposition sur massdrop ici :

Attention : vous ne voyez qu’une partie des images pour qu’elles puissent s’afficher correctement dans mon blog, mais si vous cliquez dessus vous en verrez beaucoup plus !
Cliquez sur l’image et elle va s’ouvrir dans une autre fenêtre en grand.

Donc j’ai passé deux soirées complètes à faire ce qui va suivre, comme d’habitude, en espérant que cela serve à d’autres personnes qu’à moi :

Il y a 4 images, avec deux colonnes par image : la colonne de gauche c’est ce qu’il y a d’affiché sur massdrop, et la colonne de droite, c’est ce qui s’affichera réellement sur Windows (je n’ai pas testé sur Linux encore).

Exemple concret : vous voulez mettre la lettre « m ». Vous regardez dans la colonne de droite de chaque image et là vous trouverez le « m » tout en bas dans la première image. Cliquez sur l’image et elle va s’ouvrir dans une autre fenêtre en grand. Tout en bas, sur la fameuse ligne du « m » vous lirez ce menu : « Punctuation KEY_Comma_LessThan ». Donc dans le configurateur, il vous suffira de cliquer avec le bouton droit de la souris, et de choisir le menu « Punctuation KEY_Comma_LessThan ». Bien sûr ce qui va s’afficher sur le configurateur sera ce qu’il y a dans la colonne de gauche, donc le « ;: » mais on s’en moque, le plus important c’est que ce qui sera affiché sera sur la colonne de droite, donc « m ».

J’ai passé un temps énorme à faire ces fichiers de correspondance « propres », j’espère qu’il serviront et si c’est le cas, n’hésitez pas à me remercier en laissant un message !

Page 1 Page 2 Page 3 Page 4

1 – Réception et montage

Lorsque j’ai reçu le colis, j’ai pris quelques photos afin de vous montrer ce que cela donne :

Dépaquetage de l'Ergodox - étape 1
Dépaquetage de l'Ergodox - étape 2
Dépaquetage de l'Ergodox - étape 3
Dépaquetage de l'Ergodox - étape 4
Dépaquetage de l'Ergodox - étape 5

Pour la note, j’ai acheté aussi l’outil qui aide à retirer les touches, et je vous conseille vivement de l’acheter, parce que le petit truc qui est fourni avec n’est pas très efficace, j’ai eu du nez pour le coup : l’outil est juste en haut sur l’image :

Dépaquetage de l'Ergodox - étape 6