Kamelot Blog

Aller au contenu | Aller au menu | Aller à la recherche

mardi 21 février 2012

mar
21
fév '12

Poésie politique

Par Thomas Gunzig

(republié pour cause de commentaire )

samedi 18 février 2012

sam
18
fév '12

Je poste peu parce que je tweet plus

mardi 14 février 2012

mar
14
fév '12

Indexation d'un arbre avec sphinx

Mes données liées à des nœuds ou feuilles d'un arbre et je veux pouvoir faire une recherche en filtrant sur un nœud en espérant trouver toutes les entrées liés à ce nœud ou a sa descendance.

Mes données sont donc

* id_ressource
* id_category
* ...

Et j'ai un arbre stocké dans une structure classique

* id_category
* id_category_parent
* ...
 1    null
 2    null
 3    1
 4    3
 5    3
 6    2
 7    6
 8    6
Solution 1.

J'indexe les données sans me préoccuper de l'arbre, juste en stockant l'id_category d'appartenance.

Lorsque que je veux chercher un nœud, je récupère la liste de ses enfants et puis je cherche tous les objets appartenance à un de ces catégories

donc pour la catégorie 2

;filter:id_category,2,6,7,8

Le problème avec cette solution, c'est qu'avec un arbre imposant, on se retrouve avec des filtres très grands.

Pour mon cas, avec un arbre de 20000 catégorie, on se retrouvait avec des filtres de plus de 5000 valeurs !!!

Solution 2

stocker tout le chemin

donc pour l'objet qui est dans la catégorie 8

on stocke 2, 6, 8

3 valeurs à stocker -> 2 possibilités

  • en champ texte
  • dans 3 champs "numériques"

J'ai donc crée autant de champs catégorie qu'il n'y a de profondeur dans mon arbre (ici 3)

pour chercher les éléments dans le nœud 2 je fais

;filter:id_category_lvl1,2

pour chercher les éléments dans le nœud 6 je fais

;filter:id_category_lvl2,6

pour chercher les éléments dans le nœud 3 je fais

;filter:id_category_lvl2,3
Solution 3

Suite à une nouvelle demande je viens de penser à une solution tout simple et encore plus performante.

La demande était toute simple : pouvoir chercher dans plusieurs nœud en même temps. par exemple 3 et 2

Ma solution 2 ne va pas en effet

;filter:id_category_1,2;filter:id_category_2,3

ca ne retournerait rien puisqu'aucun objet ne peut être dans 2 ET dans 3

Ma solution 1, empirerait le défaut qu'elle a déjà car je me retrouverai avec encore plus de catégories.

En fait quand j'ai mis en place la solution 2 il y a un type d'attribut sphinx que je ne maitrisait pas vraiment, c'est le mva. mais pour le cas qui nous occupe il est parfait.

Je disais en solution 2, 3 valeurs à stocker -> 2 possibilités Je me trompais. Et mva porte bien son nom.

Il me suffit de stocker les 3 valeurs dans un champs MVA

et ma requête redevient

;filter:id_category,2,3

Mieux encore, la puissance de sphinx fait que je peux fabrique la valeur de remplissage de ce champs à l'indexation, par une "autre" requete Sql

C'est expliqué dans la doc.


Note il est un peu tard, je ne suis peut-être pas très clair.

N'hésitez pas à poser vos question et je retravaillerai le texte en conséquence.

dimanche 12 février 2012

dim
12
fév '12

Que dit firefox à mon propos ?

Je relance ce petit jeu 4 ans plus tard : Que dit firefox à mon propos ?

Le principe est simple:

sur votre blog (ou sur le mien en commentaire) ou sur votre page facebook. vous allez lister 26 adresses web.

Comment ?

dans votre barre d'url

  • Tapez A, copiez l'url du premier site qui apparaît dans la liste et parlez en en une ligne
  • Puis Tapez B , ...

Quand vous avez fini, vous le postez puis vous demandez a vos amis , contacts de faire la même chose.


vendredi 27 janvier 2012

ven
27
jan '12

RFC 2325: pour votre machine à café

la wikipedia:RFC 2325 défini la gestion des machines à café.

mercredi 25 janvier 2012

mer
25
jan '12

5 petites choses qui ne prennent pas beaucoup de temps pour s'investir dans la communauté php

original : http://devzone.zend.com/article/12450-Get-involed-in-the-PHP-community-5-easy-steps-that-take-less-than-5-minutes-each

1 ° Mettez en place un tag "PHP" sur votre Blog

Si vous parlez de php sur votre blog mais aussi d'autres choses.

  • Proposez un tag ou une catégorie dédiée à PHP
  • Proposez un feed rss de ce tag ou catégorie
  • Soyez actif dans cette catégorie
  • Portez cette catégorie à la connaissance des "planets"
    • http://www.planete-php.fr/
    • http://www.planet-php.net/blog/

lundi 23 janvier 2012

lun
23
jan '12

Attention jongleurs un cours de cirque pour les tout petits à Braine-le-comte.

Attention jongleurs

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 :


  • L'acrobatie : Nous profiterons de la grande différence de taille entre l'adulte et l'enfant pour effectuer des figures d'acrobatie tout à fait inédites et spécifiques (incluant par exemple des "portés" qui permettent à l'enfant de réaliser dès le plus jeune âge des prouesses impressionnantes).

  • L'équilibre et la jonglerie : L'enfant et l'adulte s'initieront aux autres techniques de cirque dans des réalisations collectives et complémentaires qui renforceront encore leur complicité. Malgré tout certains moments de travail plus individuel (aussi bien pour l'adulte que l'enfant) seront nécessaires afin d'acquérir une expérience suffisante pour accomplir les activités par équipe.


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

sam
21
jan '12

Rétrospective logiciel Libre de Décembre


mercredi 18 janvier 2012

mer
18
jan '12

Rétrospective Profs et Tics de Décembre

Tout ce que j'ai twetté en Décembre à propos d’éducation et elearning


dimanche 15 janvier 2012

dim
15
jan '12

Rétrospective SGBD de Décembre


jeudi 12 janvier 2012

jeu
12
jan '12

Rétrospective en vrac de Décembre

  • Accueil des personnes handicapées en Wallonie : signature d'un accord entre la Wallonie et la France - RTBF Regions http://awe.sm/5cGms
  • Un tsunami de nuages dans le ciel d’Alabama | Big Browser http://j.mp/vD7Wba
  • Amizour : La semaine sur l'environnement : Participation record des scouts http://j.mp/s1mDF9 - La Dépêche de Kabylie
  • Un trou noir s'apprête à engloutir un nuage de gaz au centre de la Voie Lactée http://j.mp/sRJpOC
  • Ça « nordique walking » à Mons - Bonjour - La Voix du Nord http://j.mp/rW40Za
  • Quand la science s'intéresse aux flocons de neige http://bit.ly/uqG1wf
  • RT @GPeyronnet: "Je ne veux pas former mes employés !" 3 fausses bonnes raisons... http://t.co/SOf6DkGT
  • Choisissez une verrerie adapté à vos cocktails http://bit.ly/rCWQvP
  • Je ne suis pas un Apple addict mais ca ressemble à un "sortir de l'ombre" http://awe.sm/5b6wc
  • Question aux non belges : qui connaît ces bonbons : soucoupe sûres http://awe.sm/5cWIy
  • La nouvelle arme de la gendarmerie : le gyrophare - Vidéo Dailymotion http://awe.sm/5cDHN

lundi 9 janvier 2012

lun
09
jan '12

Rétrospective loufoque de Décembre



vendredi 6 janvier 2012

ven
06
jan '12

Rétrospective programmation de Décembre


jeudi 5 janvier 2012

jeu
05
jan '12

Euthanasie (ré-édit)

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

mar
03
jan '12

Rétrospective SNCB de Décembre

tout ce que j'ai twetté en décembre à propos des transports

  • Nos lignes de chemin de fer améliorées - sudpresse.be http://j.mp/rF6Xc0
  • RT @laurent_local: La SNCF organise une compétition de hackers pour ses futures bornes d'accueil http://t.co/NRVGQXFg (via @olyvyer)

[https://twitter.com/#!/Moosh_be]

dimanche 1 janvier 2012

dim
01
jan '12

Rétrospective jQuery, css, .... de Décembre


samedi 31 décembre 2011

sam
31
dec '11

Sphinx : Tri par titre en multi index ...

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 ?

Solution depuis Sphinx 1.10

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.

Solution avant Sphinx 1.10

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.

  • avant de trier il faut "TRIM" tous les espaces blancs. Et ca, Mysql ne le fait pas aussi bien que php. En effet mysql ne retire que les ASCII 32.
  • pour trier il faut une bonne collation. Et ca je n'ai pas encore trouvé comment faire en sorte que sphinx s'en sorte aussi bien que Mysql
le "œ"  est-il bien entre "n" et "p" ?
sam
31
dec '11

Rétrospective musique de Décembre


vendredi 30 décembre 2011

ven
30
dec '11

Rétrospective php de Décembre

Tout ce que j'ai twetté en Décembre à propos de php.


mercredi 14 décembre 2011

mer
14
dec '11

limit negatif dans explode depuis PHP 5.1.0

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 :

PHP: explode - Manual

mardi 29 novembre 2011

mar
29
nov '11

Le clodo (2) // 30 Novembre 1995

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

sam
19
nov '11

Pas de quoi en faire un plat

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

sam
18
juin '11

Je n'ai pas su leur dire non

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

sam
18
juin '11

Group by avec Sphinx. via SphinxSe

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

  • id
  • weight
  • query
  • group_id
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"

  • _sph_groupby,
  • _sph_count
  • _sph_distinct

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

lun
16
mai '11

Le saviez vous ? PHP_EOL & REQUEST_TIME

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.

Tags