vendredi 27 janvier 2012
RFC 2325: pour votre machine à café
Dans la rubrique Techno du web
la wikipedia:RFC 2325 défini la gestion des machines à café.
Aller au contenu | Aller au menu | Aller à la recherche
vendredi 27 janvier 2012
Dans la rubrique Techno du web
la wikipedia:RFC 2325 défini la gestion des machines à café.
mercredi 25 janvier 2012
Dans la rubrique PHP / PEAR
Si vous parlez de php sur votre blog mais aussi d'autres choses.
lundi 23 janvier 2012
Dans la rubrique Général
Cela fait 3ans que nous faisons du cirque en famille, et depuis la rentrée madame se lance dans une nouvelle aventure en programmant un cours pour les toutpitis.
Ce cours s'adresse aux enfants de 2 ans et demi à 4 ans accompagnés d'un adulte. Ils sont dès lors conviés à pratiquer les techniques de cirque ensemble dans le cadre d'activités structurées.
Les ateliers Parents - Boutchou sont centrés sur deux axes :
Le cours se déroule à Braine-le-Comte le vendredi de 18h à 19h à la salle de sport de l'Institut Notre Dame de Bonne Espérance, 101 rue des postes.
Si vous n'avez pas d'enfants si jeune, pas grave, les cours classiques sont pour tous les âges
samedi 21 janvier 2012
Dans la rubrique Logiciels
mercredi 18 janvier 2012
Dans la rubrique Prof et TIc
Tout ce que j'ai twetté en Décembre à propos d’éducation et elearning
dimanche 15 janvier 2012
Dans la rubrique Mysql
jeudi 12 janvier 2012
Dans la rubrique Général
lundi 9 janvier 2012
Dans la rubrique le monde est fou




vendredi 6 janvier 2012
Dans la rubrique Coder
jeudi 5 janvier 2012
Dans la rubrique le monde est fou
L'autre jour on parlait d'euthanasie, j'ai dit à ma femme
Ne me laisse jamais vivre dans cet état végétatif, dépendant d'une machine et alimenté par le liquide d'une bouteille. Si tu me vois dans cet état, débranche les appareils qui me relient à la vie.
Elle s'est levée, a débranché la télé, a éteint l'ordinateur et a jeté mon coca
mardi 3 janvier 2012
Dans la rubrique SNCB-STIB
tout ce que j'ai twetté en décembre à propos des transports
dimanche 1 janvier 2012
Dans la rubrique Techno du web
samedi 31 décembre 2011
Dans la rubrique Mysql
Puisque sphinx ne connaît que des valeurs scalaires pour faire un tri alphabétique, il faut transformer les chaînes de caractères en nombre.
sql_attr_str2ordinal sert à ça.
Sauf que .... ce qu'on stocke c'est un n° d'ordre dans l'index, c'est pas une représentation numérique de la chaîne.
Le nom est bien 2ordinal et pas 2num
Pour confirmation cet extrait de la doc :
9.1.20. sql_attr_str2ordinal (...) When indexing ordinals, string values are fetched from database, temporarily stored, sorted, and then replaced by their respective ordinal numbers in the array of sorted strings. So, the ordinal number is an integer such that sorting by it produces the same result as if lexicographically sorting by original strings. by string values lexicographically.
Donc pour les recherches sur plusieurs indexs ça coince.
En effet si ma chaîne est 3eme dans un index, ca ne veut pas dire qu'elle serait avant celle qui est 3ème, 5ème,100ème dans l'autre index.
Bref en multi index, ça foire.
C'est un problème facile à repérer parce que vos résultats arrivent en petites séries de blocs triés. Comme un 45T dont l'aiguille saute 
C'est bien dommage parce qu'une manière d’accélérer vos indexations et vos recherches c'est de découper les indexs en "portions".
Que faire quand on veut profiter des avantages de ce découpage et des possibilités de trier alphabétiquement ?
Allez Louya, on a un nouveau type de champs. coûteux mais efficace. sql_field_string
En créant un attribut de ce type, et en l'utilisant dans "sort" sur vos chunk... ca marche.
Et en bonus, vous pouvez en récupérer le contenu. C'est-à-dire que si l'info vous suffit , vous ne devez plus aller la rechercher dans votre source.
Transformez vous même la chaîne en nombre 
Si vous utilisez une source Mysql, j'ai une solution. Bof bof pour ca. Utiliser la fonction HEX de mysql.
J'ai expliqué cela il y a quelque temps : StrToNum en Mysql ou comment convertir une chaine en nombre ?
Reste encore 2 autres problèmes à régler mais ça sera pour une autre fois.
le "œ" est-il bien entre "n" et "p" ?
Dans la rubrique Musique, Tv, Ciné, Musées, Cirque
vendredi 30 décembre 2011
Dans la rubrique PHP / PEAR
Tout ce que j'ai twetté en Décembre à propos de php.
mercredi 14 décembre 2011
Dans la rubrique PHP / PEAR
Depuis PHP 5.1.0
array explode ( string $delimiter , string $string , int $limit )
Si le paramètre limit est négatif, tous les éléments, excepté les -limit derniers éléments sont retournés.
$str = 'one|two|three|four';
print_r(explode('|', $str, -1));
résultat
Array
(
[0] => one
[1] => two
[2] => three
)
ref :
mardi 29 novembre 2011
Dans la rubrique Horreur et tranquillité
J'avance, plein d'ennuis dans la tête
Le patron résonne encore Un vieil homme faisant la quête Avec son chien qui dort Secouant son gobelet du macDo 2 pièces d'un franc dedans Lui ne perd jamais au lotto Puisqu'il ne peut y jouer un franc Il rêve de la France Son pays de rêverie Là où il passait son enfance Sur une plage de Normandie
Et nous qui le croisons Trop faible devant ses aveux Rentrant dans notre chaude maison Passant notre chemin en baissant les yeux
samedi 19 novembre 2011
Dans la rubrique Horreur et tranquillité
Pas de quoi en faire un plat Les années passes, pas moi, Cet enfant n'attend que ça Le monde des grands le bouffera Ils ne peuvent pas se sentir Ils passent leur temps à mentir Sans jamais rougir Sans voir les autres souffrir J'imaginais être encore le seul Mais on est une quirielle dans ce linceul Je m'offre une mort à l’œil
samedi 18 juin 2011
Dans la rubrique Horreur et tranquillité
Je n'ai pas su leur dire non
Je n'en ai pas envie mais je le fais
Ce n'est ni sage ni bon
C'est ma faiblesse mais je le sais
Pas besoin d'une voyante pour voir mes défauts
De façon décente aux pires maux
Dans la rubrique Mysql
Cette semaine j'ai réussi à faire un truc avec sphinx que je n'ai pas spécialement trouvé bien documenté donc je le raconte ici.
Quand on utilise une table mysql avec le plugin sphinxSE, on doit obligatoirement commencer par les colonnes
CREATE TABLE t1 ( id INTEGER UNSIGNED NOT NULL, weight INTEGER NOT NULL, query VARCHAR(3072) NOT NULL, group_id INTEGER, INDEX(query) ) ENGINE=SPHINX CONNECTION="sphinx://localhost:9312/test";
mais on peut lui ajouter des colonnes
on a les colonnes qui représentent les attributs scalaires mais aussi des colonnes "virtuelles"
c'est à dire
CREATE TABLE t1 ( id INTEGER UNSIGNED NOT NULL, weight INTEGER NOT NULL, query VARCHAR(3072) NOT NULL, group_id INTEGER, _sph_groupby INTEGER NOT NULL, _sph_count INTEGER NOT NULL, _sph_distinct INTEGER NOT NULL, INDEX(query) ) ENGINE=SPHINX CONNECTION="sphinx://localhost:9312/test";
Si vous utilisez un
WHERE query='test;groupby=attr:nomdunattributscalaire;';
_sph_groupby contiendra la valeur et _sph_count le nombre de matches
Pour donner une "idée" de la vitesse.
J'ai fait une recherche avec un terme courant avec un group by sur un critère qui peut contenir un chiffre de 0 à 9. Dans une collection de plus de 45M rows. Il y a entre 50.000 et 160.000 matches pour chaque ligne de mon group by Et il me donnait le résultat en 300ms
Avec un terme moins répandu et 500x moins de résultats j'avais un temps de réponse de 15ms
lundi 16 mai 2011
Dans la rubrique PHP / PEAR
Pour ne pas devoir utiliser "\n"
J'avais pour habitude de faire
defined('NL') || define('NL',"\n");
et j'avais du code du style
echo 'foo' . NL . 'bar';
En fait depuis PHP 4.3.10 et PHP 5.0.2, la constante PHP_EOL existe nativement pour cela.
echo 'foo' . PHP_EOL . 'bar';
Et l'intérêt principal, est dans les commentaires.
La valeur de PHP_EOL dépends de l'OS. On peut avoir \n, \r\n ou \r comme valeurs.
Ca vaut le coup de relire la liste des constantes préétablies. Ca peut donner des idées.
Dans le même ordre d'idée, un timestamp représentant le début de la demande est disponible dans la variable $_SERVER['REQUEST_TIME'] depuis PHP 5.1.
lundi 2 mai 2011
Dans la rubrique PHP / PEAR
En réponse au post "Plusieurs boutons " submit " dans un formulaire" publié sur Programmation Web|, je ressors un vieux post que j'ai écrit il y a 6 ans.
Je ne le recopie pas, je conseille d'aller le lire parce que les commentaires sont tout aussi intéressants.
Mais en pratique mon idée à l'époque était d'utiliser la même technique que pour les checkbox ou les radio.
On mets un name de la forme name="action[nom_de_mon_action]"
Cela donne 2 avantages
Dans la rubrique Techno du web
Si vous avez déployé Sphinx en production, dites leur.
Il suffit de remplir le questionnaire et rejoindre la longue liste.
samedi 30 avril 2011
Dans la rubrique Horreur et tranquillité
Le soleil brûle mes yeux
Et je revois ces images
qui m'arrachent le cœur
J'aimerai plus de douceur
que tout aille mieux
C'est pas l'envie qui me manque
C'est le cri de la démence
Cette folie en moi
Qui me met dans un sale état
mardi 5 avril 2011
Dans la rubrique Mysql

L'attribut Multi-valued attribute (MVA) de sphinx est une petite merveille que j'ai enfin appréhendé.
Je pars sur un exemple fictif.
Si j'ai des fiches étudiants à indexer. Je peux ajouter des attribut pour les filtrer.
Dans tous ces attributs, pour une ressource donnée (pour un étudiant), je n'ai qu'une valeur possible.
pour n'avoir que les garçons j'aurais
filter=genre,1;
pour n'avoir que les sections math (code 4) et sciences (code 9) j'aurais
filter=section,4,9
Si je mets
filter=genre,1;filter=section,4,9
j'aurais les garçons d'une de ces sections.
Maintenant selon la section j'ai jusqu'à 15 tranches horaires en cours à options (à la carte).
Comme ces cours à option ont des durées variables, l'étudiant doit remplir ses 15 périodes.
En composant avec les 40 options proposées, il peut se retrouver avec 15 cours d'une période ou 3 de 5 périodes ou 2 de 5h + 5 de une ...
Comment indexer cela si dans ma recherche je veux pouvoir trouver les étudiants qui ont pris une option de type "langue"
Imaginant que dans la liste j'en ai 4 :
Avec sphinx on en peut pas passer plusieurs filtres et dire matcher ce qui passe au moins un de ces filtres
Avec sphinx tous les filtres seront appliqués
Donc je ne peux pas créer 15 attributs (un par tranche) et dire
filter=attribut_1,15,18,19,21;filter=attribut_2,15,18,19,21;filter=attribut_3,15,18,19,21;....
Parce qu'il faudrait que TOUS les attributs soient matchant pour la liste et donc ne me donnerai que ceux qui ont pris les 4 options et que celles là
Je ne peux pas non plus créer 40 attributs (un par option).
filter=attribut_15,1;filter=attribut_18,1;filter=attribut_19,1;filter=attribut_21,1;
ne me donnerai que ceux qui ont pris les 4 options
C'est là que les MVA entrent en jeux.
On va avoir 1 attribut "options" et pour chaque ressource l'attribut va contenir plusieurs valeurs
Lors de la recherche on passe dans la query
filter=attribut_options,15,18,19,21;
Sphinx va matcher toutes les ressources qui ont au moins une de ces valeurs parmis celles qui lui sont attribuées
Maintenant qu'on a la façon de "chercher" il faut encore voir comment indexer cela.
Un petit coup d'oeil sur la doc.
sql_attr_multi = ATTR-TYPE ATTR-NAME 'from' SOURCE-TYPE \ [;QUERY] \ [;RANGE-QUERY]where ATTR-TYPE is 'uint' or 'timestamp' SOURCE-TYPE is 'field', 'query', or 'ranged-query' QUERY is SQL query used to fetch all ( docid, attrvalue ) pairs RANGE-QUERY is SQL query used to fetch min and max ID values, similar to 'sql_query_range'
Si j'ai bloqué tout un temps c'est parce que c'était trop simple.
J'utilise sql_query pour ma source d'indexation.
Il suffit de produire un champs avec des valeurs séparée par des virgules.
puis on met
sql_attr_multi = unit lenomduchamps from field
Et nous y voilà.
Il y a aussi moyen de demander une sous-requete avec FROM query ou ranged-query
sql_attr_multi = uint tag from query; SELECT id, tag FROM tags
En voici un autre.
J'ai une liste d'enregistrements, ces enregistrements sont qualifiés par des tags.
C'est à dire qu'on est pas dans un classement par catégories dans un arbre tout simple.
Chaque enregistrement peut être associés à plusieurs tags.
Admettons que j'aie les tag grand, beau, bleu, jaune, ....
J'ai besoin de trouver tous les grands et bleus de ma base
id name--- 5 bleu 11 grand
je vais faire une MVA pour pouvoir faire une recherche filter:tag_id,5,11