Zeemoz – dev : entrées terminées

Ca y est maintenant on peut entrer tout ça sans problème, ça fonctionne :

0 => marseille
1 => Marseille
2 => MARSEILLE
3 => abbeville st lucien
4 => abbeville saint lucien
5 => abbeville-saint-lucien
6 => aix en provence entre 200000 et 500000 euros
7 => aix en provence
8 => entre 200000 et 500000 euros
9 => 13 entre 200000 et 500000 euros
10 => 13013 entre 200000 et 500000 euros
11 => 13013 entre 200000 et 500000euros
12 => 13013 entre 200000 et 500000
13 => loyer entre 200000 et 500000
14 => prix entre 200000 et 500000

Je crois que je vais recommencer à être un peu fatigué. Bonne fin de nuit à tout le monde…

Deux sites à la mode et autres actualités

Voilà deux sites, dont tout le monde parle depuis quelque temps, et personnellement j’ai essayé mais je n’en vois pas l’intérêt :

  1. twitter, un site où on se connecte et où… on dit ce qu’on fait en permanence… genre « je fais le thé », « je pars faire mes courses » etc. Bon bref, je n’en vois vraiment pas l’intérêt. Genre MSN mais on ne peut pas échanger en live avec les autres…
  2. friendfeed, lui, est en pleine montée : il est un peu plus original à savoir qu’on ne regarde pas principalement son petit nombril, mais… principalement celui des autres ! En effet vous pouvez voir en permanence ce que font vos amis. Assez original en fait.

Dans un tout autre registre, les photos qui font scandale de Eva Mendès.

Encore dans un autre registre, vous voulez déposer des noms de domaine ? Voilà le site le plus pratique et le plus rapide du moment pour vérifier la disponibilité des noms : domize

Serious Business, la société derrière l’applet Facebook Friends for Sale, a réussi une levée de fonds de 4 millions de dollar dans un tour de table dirigé par Lightspeed Ventures.

WeLoveFreeMusic.com, un nouveau site qui offre de la musique gratuite (ne pas confondre avec « un site qui offre gratuitement de la musique) a été lancé récemment par le prix Nobel Archbishop Desmond Tutu.

Le site de l’entrepreneur Steven Nowack propose plein de musique, entièrement gratuite, d’artiste tels que Naomi Striemer, Idrissa Diop, Shawn King et Mario Winans… enfin, pour être précis, ce ne sont que des musiques de ces artistes qui sont mises à disposition actuellement. Néanmoins c’est toujours un bon début, non ? Le petit plus amusant c’est que l’expression “The Day That Music Was Set Free™” a été déposée… on ne peut plus s’en servir dans le cadre de la musique. C’est beau les trademarks.

MySQL : astuces pour quelques ordres de base

Voici quelques astuces dont je me sers souvent, pour ne pas avoir à systématiquement les rechercher, je m’en suis fait une copie dans un petit champ texte :

  1. Création d’une base de données
    CREATE DATABASE z DEFAULT CHARACTER SET utf8;
  2. Initialisation d’une variable via une requête :
    SELECT @MON_ID:= ID FROM matable WHERE CHAMP='champ_recherche';
    puis on se ressert de cette variable pour faire une insertion en base de données :
    INSERT INTO autre_table (ID_CLE_EXTERNE, DESCRIPTION, DOCUMENT) VALUES
    (@MON_ID, 'valeur1', './valeur2');
  3. Relancer le service MySQL
    1. service mysqld stop
    2. attendre une trentaine de secondes afin que le cache soit vidé et que toutes les allocations mémoires soient correctement libérées
    3. service mysqld start
  4. Convertir une table en utf8 :
    Très important : si vous tapez ce qui suit avec pour objectif de convertir la table et les données cela ne fonctionnera pas :
    ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
    Ce n’est qu’en utilisant les ordres suivants que la conversion sera faite par MySQL !
    ALTER TABLE t1 CHANGE c1 c1 BLOB;
    ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;
  5. Renommer un champ :
    Ici, je renomme la clé primaire « ID » et je la passe en minuscules (« id« ) :
    ALTER TABLE ville CHANGE ID id int(11) NOT NULL auto_increment;
  6. Modification des AUTO_INC
    Pour changer la valeur d’un auto_inc (‘réinitialiser la valeur’, comme on le dit dans MySQL ici) :
    ALTER TABLE tbl_name AUTO_INCREMENT = N
  7. Créer un utilisateur pour une base de données (la manière sale)
    Important : d’abord sans le ‘.*’ sinon ça ne fonctionne pas, et puis refaire avec le '.*'.
    Très important : ici on autorise tout à l’utilisateur qui va être crée. C’est donc une méthode rapide mais de bourrin et ce n’est pas la bonne méthode si vous voulez faire un utilisateur proprement, destiné à exister pour longtemps. Dans ce cas il faut faire quelque chose de plus précis afin de ne pas tout lui autoriser.
    GRANT ALL PRIVILEGES ON basededonnees
    TO ‘nomutilisateur’@’192.168.2.16’
    IDENTIFIED BY ‘motdepasse’;
    GRANT ALL PRIVILEGES ON basededonnees.*
    TO ‘nomutilisateur’@’192.168.2.16’
    IDENTIFIED BY ‘motdepasse’;

Lorsqu'échouer devient une chose positive

Article trouvé ici :

Attention, le moment QUIZZ : « quel pourcentage de start-ups dotcom (= orientées Internet) ont échoué ?”. Un article trouvé dans Strategy + Business y répond.
La réponse, venue de trois auteurs académiques, est beaucoup plus courte que vous le pensez.
Malgré le fait que tout le monde pense typiquement que 90 pourcent des compagnies dotcom n’ont pas réussi, la réalité est plutôt celle ci : sur un échantillon de toutes les dotcom qui ont reçu des fonds d’investissement en 1999, il y en a presque la moitié (48 pourcent) qui n’a pas coulé cinq ans plus tard, selon Tim Laseter (Université de Virginia’s business school), David Kirsch et Brent Goldfarb (Université de Maryland).
“Après réflexion », continuent-ils, « le fait qu’autant de compagnies aient survécu nous suggère que, dans le domaine de de « la révolution des startup dotcom », la toute première vague a souffert non pas de trop de startups mais pas assez”.
“Pour être clairs, ce n’est pas que nous voudrions que plus de start-ups aient échoué. C’est plutôt qu’un taux faible de manqués indique que trop peu d’entrepreneurs ont eu d’investissements et trop peu d’autres ont investi. S’il y avait eu le double d’investissements et de start-up, il n’y aurait pas eu deux fois plus d’entreprises qui auraient échoué, même si le taux d’échec aurait augmenté, mais à l’inverse, il y aurait eu beaucoup plus d’entreprises avec des modèles de business qui fonctionnent qui auraient réussi et cela aurait été profitable pour tout le monde à moyen et long terme.”
Leur message subliminal : des plus petits paris sur plus d’entreprises pourraient faire naître le prochain boom technologique — qui, au vu du nombre impressionnant de compagnies qui attendent de pouvoir démarrer, est proche de commencer — pourraient s’avérer plus efficaces et plus lucratifs aussi bien à moyen qu’à long terme.

Tout est vieux

Alors que les gens qui achètent des véhicules hybrides et autres pensent qu’ils sont un morceau de ce qui est tout nouveau, une partie de l’avenir, quelqu’un y a plus réfléchi : “The Tonight Show”.
“J’ai possédé trois véhicules à propulsion différentes”, écrit Jay Leno, qui a eu sa colonne de journaliste dans « Popular Mechanics » sur les huit dernières années. “Ma toute dernière a été pensée et conçue en 1925; la plus vieille en 1909. Chacune est la concrétisation d’une idée brillante. Malheureusement les idées avaient été à l’époque beaucoup trop en avance sur leur temps et elle ont toutes les trois échoué.”
Mr. Leno continue à décrire ses trois voitures, et le moment le plus intéressant concerne la plus vieille : une « Baker Electric ».
“Au contraire des autres, la Baker Electric n’avait pas besoin de démarrer, pas d’essence, ne sentait pas le gasoil, et n’avait aucun coût de maintenance.”. Bien évidemment, c’était un marché principalement destiné aux femmes.

Mr. Leno décrit l’intérieur de sa voiture comme “plutôt froufrou, avec le kit de maquillage intégré.”

Superman est en vie

Un étudiant diplômé du MIT (Massachusetts Institute of Technology) a inventé un engin qui permet aux gens — pompiers y compris — de grimper des buildings entiers en un seul bond.
Inventor’s Digest explique que l’instrument, crée par Nathan Ball, 23 ans, donne la possibilité aux pompiers complètement équipés avec lances etc., d’atteindre le haut d’un gratte-ciel de 30 étages en moins de 30 secondes, ce qui est tout bonnement hallucinant quand on sait qu’il faut au jour d’aujourd’hui au moins six minutes pour arriver en haut du même building avec 20 à 40 kilos d’équipement sur le dos.
Mr. Ball prévoit que son « Atlas Powered Rope Ascender », qui est de la taille d’un gros outil électrique manuel, sera utilisé aussi bien pour sauver des gens que pour grimper en s’amusant.
“Il est possible de faire plein de tâches plus efficacement et consommant moins d’énergie”, affirme-t-il.

La bêtise brevetée

Toutes les idées ne sont pas forcément bonnes à prendre. Eric Steuer le prouve dans Wired.
S’appuyant sur les travaux de Scott Seegert, qui a écrit un livre entier sur le sujet, Mr. Steuer nous a concocté un petit article résumé sur les idées vraiment stupides qui ont été brevetées.
Par exemple, le Pogo-copter : un autocollant classique avec une petite hélice dessus qui ferait penser à un hélicoptère.
“Lorsque vous sautez en l’air, les pales de l’hélicoptère vous envoient plus haut dans les airs. C’est comme de flotter sur un nuage — pendant à peu près une seconde. Et puis on s’écrase.”

Il y a aussi “airbag-sous le manteau”, qui envoient de l’air comprimé “dans des ballons situés dans vos chaussures”, quand ils détectent que vous êtes sur le point de tomber.

Et pour le plaisir, quelque chose qui pourrait fonctionner : Robert Bohannon (de Durham, N.C.), un biologiste moléculaire, a crée le donut cafféiné. Le magazine The American a écrit que « Mr. Bohannon a réussi à mettre en place un processus qui élimine le goût amer du café mais laisse tout le truc qui booste provenant de ce dernier intact, et qu’il négocie actuellement son invention avec les grandes chaines de production alimentaire.”

PAUL B. BROWN

Linux : faire l'ISO d'un CD

  1. Il faut insérer le CD dans le lecteur ;
  2. Vérifier avec mount qu’il n’a pas été monté automatiquement, sinon il faut le démonter
    (umount /dev/cdrom) ;
  3. Ensuite se mettre dans une partition qui a au moins l’espace requis de libre
    (vérifier avec df -kh) ;
  4. Ensuite, taper l’ordre :
    dd if=/dev/cdrom of=/toto/cd.iso ;
  5. S’il faut le copier sur un site distant :
    scp /toto/cd.iso 192.xx.xx.xx:/sources .

Zeemoz : berkeleydb : linké avec la librairie !

J’ai trouvé comment linker les exemples de berkeley DB avec la librairie :
Lors de la compilation, l’utilitaire de lien (ld) va chercher les toutes dernières librairies qu’il connait et les lie à l’executable. Seulement, quand il ne connait pas les librairies, il faut les ajouter.
L’opération est simple : il faut lire le fichier
/etc/ld.so.conf
Sur une distro Debian, il ne contient que cette ligne : include /etc/ld.so.conf.d/*.conf
C’est donc dans le répertoire /etc/ld.so.conf.d/ qu’il nous faut créer un fichier avec un nom explicite, qui spécifie où le linker doit aussi aller chercher les librairies.
Dans mon cas j’ai crée un fichier nommé /etc/ld.so.conf.d/db.4.5.conf dans lequel j’ai mis :
# creation olivier pons 2 mai 2007
/home/sources/db-4.5.20/build_unix/.libs
Ensuite, il suffit juste de dire au linker de recharger son cache :
ldconfig
Pour plus d’infos : man ldconfig !

Une mémoire d'éléphant

Hier, Sylvie – ma belle soeur – nous a donné un puzzle dont ses filles ne se servaient plus. C’est un puzzle destiné aux enfants à partir de 3 ans.

Sandrine, hier matin, au réveil d’Inès, lui montre une ou deux fois comment le faire, puis l’amène chez notre nourrice. Le soir arrive, on a joué, tout allait bien, et puis j’ai fait à manger et là Inès a commencé à dodeliner de la tête et à s’endormir. Sandrine est arrivée à ce moment là et pour la faire patienter, lui a montré le puzzle. Elle a fait tomber les dix pièces du puzzle, et les a pris une par une et a demandé à notre fille : « Où elle va celle-là ? ». Inès a alors montré du doigt le bon emplacement. Décontenancée, Sandrine en a pris une autre. « C’est sûrement un coup de chance… Où elle va celle-là ? ». Inès a montré du doigt le bon emplacement. Et ainsi de suite avec toutes les pièces. C’était limite effrayant… Alors j’ai été chercher la caméra et j’ai filmé, parce que je pense que pas mal de personnes ne nous croiraient pas si on en parlait juste comme ça : Inès a 22 mois. Un an d’avance au minimum. Elle nous a fait aussi un coup qui montre qu’elle n’a pas qu’une mémoire visuelle : en effet, elle nous montre un emplacement, et la pièce n’entrait pas. On s’est donc dit « Ouf finalement il y avait quelque part un peu de chance ». Et comme Inès a vu que la pièce n’entrait pas elle s’est mise à rire et nous a dit « Naaaaaaan c’est pas les cochons ici, c’est les zoâââ ! » (= les oies). Nous avons été sidérés parce qu’effectivement c’était bel et bien l’emplacement des oies.

Aujourd’hui, Sylvie est venue avec ses filles, et comme elle aime bien taquiner les enfants, elle a fait faire le puzzle à Inès, mais pendant qu’Inès donnait les bons emplacements, Sylvie a retourné le puzzle. Aucun problème : Inès a continué exactement comme si le puzzle était à l’endroit.

Sylvie, qui avait arrêté de la surnommer « Einstein », a recommencé à l’appeler ainsi… on se demande pourquoi !

Dix règles d'or pour les filtres de sortie.

Le contenu en Anglais non traduit se trouve ici.

Voilà les règles que doivent suivre à la lettre les filtres de sortie :

  1. Les filtres de sortie ne devraient pas passer de brigades vides le long de la chaine de sortie, mais devraient être tolérantes sur l’arrivée de brigades vides.
  2. Les filtres de sortie doivent passer tous les seaux de métadonnées (metadata buckets) le long de la chaine de sortie ; les seaux de vidages (FLUSH buckets) devraient être respectés en passant tous les seaux en attentes le long de la chaine de sortie.
  3. Les filtres de sortie devraient ignorer tous les seaux qui suivent un seaux de fin de fichier (EOS buckets).
  4. Les filtres de sortie doivent traiter une quantité fixe de données, à la fois, afin de s’assurer que la consommation mémoire n’est pas proportionelle à la taille du contenu qui est filtré.
  5. Les filtres de sortie devraient ignorer les types de seaux, et doivent être capables de traiter des seaux de type inconnu.
  6. Après avoir appelé ap_pass_brigade pour faire suivre une brigade le long de la chaine de filtres, les filtres de sortie devraient appeler apr_brigade_cleanup pour s’assurer que la brigade est vide avant de s’en resservir ; les filtres ne devraient jamais utiliser apr_brigade_destroy pour « détruire » des brigades.
  7. Les filtres de sortie doivent mettre de côté les seaux qui sont destinés à être gardés plus longtemps que la durée du filtrage.
  8. Les filtres de sortie ne doivent pas ignorer la valeur de retour de ap_pass_brigade, et doivent renvoyer les erreurs appropriées en retour, à la chaine de filtres.
  9. Les filtres de sortie doivent seulement créer un nombre fixe de brigades de seaux pour chaque réponse, plutôt que une par invocation.
  10. Les filtres de sortie devraient en tout premier lieu essayer des lectures non bloquantes sur chaque seau, et envoyer un buffer de vidage (FLUSH bucket) le long de la chaine de filtres si la lecture doit être faite à nouveau, et de manière bloquante, avant de recommencer une lecture bloquante.

Sachant que la règle 9 n’est pas très claire pour moi, je vous la relivre en Anglais :
Output filters must only create a fixed number of bucket brigades for each response, rather than one per invocation.

Apache : notes pour les filtres

Voilà ce que j’ai mis longtemps à comprendre :

Lorsqu’un client envoie quelque chose à httpd, le serveur Web commence à créer des seaux qu’il remplit au fur et à mesure : et quand un seau est plein, il en remplit un autre etc jusqu’à ce qu’il ait un nombre de seaux suffisants. Ces seaux sont rangés dans une brigade. Une brigade de seaux. Une bucket brigade, en Anglais. Et là, il les fait passer au premier filtre qu’il a sur sa liste. Ce filtre peut à son tour, ajouter d’autres seaux, en enlever, ou même, tout supprimer et créer toute une série d’autres seaux. Toujours est-il que quand on développe un filtre, il faut toujours avoir en tête plusieurs choses :

  • Il va toujours y avoir une série de seaux qu’il va falloir parcourir, ce ne sera jamais un seul seau simple et seul. La boucle de parcours sera toujours de la forme :
    /* on demande à lire une série de seaux : */
    rv = ap_get_brigade(f->next, bb, AP_MODE_READBYTES, APR_BLOCK_READ, readbytes);
    /* si erreur, la gérer, sinon boucle pour lire seau après seau : */
    for (b = APR_BRIGADE_FIRST(bb);
         b != APR_BRIGADE_SENTINEL(bb);
         b = nextb) {
        nextb = APR_BUCKET_NEXT(b);
        ...
        traitement de ce qu'on a reçu
        ...
    }
  • Le serveur Apache gère une chaine de filtres, qui se suivent dans un ordre qu’il est impossible à connaitre du point de vue d’un filtre. En résumé, on ne sait jamais, quand on programme un filtre, quels sont les filtres qui ont été appelés avant le nôtre, ou quels sont les filtres le seront après. Bon ok. Il y a quand même une possibilité de dire grossièrement où on veut que le filtre soit, dans la chaine. En réalité il est possible de préciser l’un cinq niveaux grossiers parmi :
    1. APR_HOOK_REALLY_FIRST
    2. APR_HOOK_FIRST
    3. APR_HOOK_MIDDLE
    4. APR_HOOK_LAST
    5. APR_HOOK_REALLY_LAST

    Revenons à notre brigade, pleine de seaux, mais dont on ne sait pas exactement ce qu’elle contient, mais on le suppose. Lorsque celle-ci arrive et que notre filtre est appelé, on ne sait que grossièrement où est placé le filtre dans la chaine, donc il se peut que la brigade arrive avec des données en plus qui proviennent d’autres filtres mais qui ne nous concernent pas (entre autres des données personnelles qui vont d’un filtre à l’autre, des méta-données, en Anglais METADATA). C’est pour cela qu’il faut toujours s’assurer que ce ne sont pas des métadonnées qui ne nous concernent pas : c’est la macro APR_BUCKET_IS_METADATA :
    /* on demande à lire une série de seaux : */
    rv = ap_get_brigade(f->next, bb, AP_MODE_READBYTES, APR_BLOCK_READ, readbytes);
    /* si erreur, la gérer, sinon boucle pour lire seau après seau : */
    for (b = APR_BRIGADE_FIRST(bb);
         b != APR_BRIGADE_SENTINEL(bb);
         b = nextb) {
        nextb = APR_BUCKET_NEXT(b);
        if ( ! APR_BUCKET_IS_METADATA(b) ) {
            ...
            traitement de ce qu'on a reçu
            ...
        }
    }

Le canard n'a qu'à bien se tenir !

Les voisins ont amené je ne sais quoi qui fait exactement un bruit d’oie qui cacarde (c’est le verbe pour dire qu’une oie « crie »). On l’entend une fois, j’explique à Inès que c’est un canard pour voir sa réaction. Elle se met alors à hurler :

« Nanard ça suffit main’nant ! »

Les voisins ont certainement entendu parce que depuis, c’est le calme plat… le canard n’a qu’à bien se tenir !