Kamelot Blog

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

vendredi 6 janvier 2012

ven
06
jan '12

Rétrospective programmation 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" ?

lundi 14 février 2011

lun
14
fév '11

Paramètre commentaire de SphinxClient::query

Je fait pas mal de tests sur sphinx pour le moment.

En lisant PHP: SphinxClient::query - Manual

[php]
public array SphinxClient::query ( string $query [, string $index = "*" [, string $comment = "" ]] )

Mon attention a été attirée par le 3ème paramètre. (supporté par sphinx depuis la Version 0.9.8 du 14 juillet 2008)

En fait ce paramètre accepte une chaine de caractère qui se retrouve dans le query.log

[php]
$result = $hSphinx->query('leMotQueJeCherche', '*', 'mon commentaire');

Ce paramètre existe aussi en SphinxSE mais ce n'est pas documenté,

Il suffit d'ajouter ';comment=mon test' dans la chaine query,

query='leMotQueJeCherche;comment=mon commentaire';

Et voila dans le query.log

[query.log] [Mon Feb 14 14:54:00.216 2011] 0.091 sec [any/0/rel 14094 (5000,99)] [*] [ios=0 kb=0.0 ioms=0.0 cpums=91.5] [mon commentaire] leMotQueJeCherche

Ce qui est très pratique avec un tail -f et un grep pour ne voir que les rêquetes faisant partie du test,

Lire la suite...

samedi 6 novembre 2010

sam
06
nov '10

Comment voir les fichiers .htaccess dans l'explorateur de Zend Studio (ou Eclipse) ?

Vous cliquez sur la flèche en haut a droite de l'explorateur


puis il faut décocher la case qui dit de ne pas afficher les fichier de type .*


source : chrismacpherson.com

Screenshots réalisés avec FastStone Capture pas "libre" mais dispo sur liberkey

jeudi 29 juillet 2010

jeu
29
juil '10

PHP-FPM (FastCGI Process Manager)

PHP-FPM est disponible dans le dernier php (5.3)... mais qu'est-ce-que c'est ?

PHP-FPM (FastCGI Process Manager) est une alternative à PHP FastCGI avec toute une série d'amélioration.

Principalement utile pour les sites à fort taux d'utilisation.

Plusieurs VHosts avec un UID/GID différent et des PHP.ini différents.

FPM permet de faire tourner plusieurs VHosts avec un UID/GID différent et des PHP.ini différents.

Support de l'upload accéléré

Statistique de base

similaire à mod_status d'apache.

Redémarrage de secours en cas de destruction accidentelle de l'opcode

Un header d'erreur

une config style

[ini]
 fastcgi.error_header = "HTTP/1.0 550 Server Made Big Boo"

... provoquera l'envoi de cette erreur au lieu d'en "200 tout va bien" avec une page blanche.

amélioration de la gestion des processus en cas de graceful stop/start

En pratique ca permet de prendre en compte une nouvelle config qui nécessite un redémarrage sans interrompre ce qui avait commencé avec l'ancienne configuration.

Journalisation des scripts lents

avec

[xml]
    <value name="request_slowlog_timeout">5s</value>
    <value name="slowlog">logs/slow.log</value>

donnera

[log]
 Sep 21 16:22:19.399162 pid 29715 (pool default)
 script_filename = /local/www/stable/www/catalogue.php 
 [0x00007fff23618120] mysql_query() /srv/stable/common/Database/class.MySQLRequest.php:20 
 [0x00007fff23618560] getResult() /srv/stable/common/Database/class.Facade.php:106 
 [0x00007fff23618aa0] query() /srv/stable/common/mysite.com/ORM/class.UsersMapper.php:99 

Journalisation de Stdout & stderr

fastcgi_finish_request()

une fonction spéciale pour clôturer la connexion avec le client, mais continuer un traitement php à découvrir en détail ici

Autres points

  • PHP-FPM est compatible avec ZendOptimizer

à lire aussi

Notes

[1] Qui, le temps de rédiger et publier cet article, a déjà été retravaillée. C'est la magie wikipedia

lundi 26 octobre 2009

lun
26
oct '09

Local History dans Eclipse.

On va probablement me rire au nez mais j'ai découvert en journée, une fonctionnalité d'Eclipse, qui peut-être salvatrice. Donc je la partage pour ceux qui comme moi ont pris trop vite leur IDE sans trop lire le manuel.

L'historique local.

En fait un versionning interne des fichiers du projet, permet de retrouver les dernières modification du fichier même après fermeture du fichier et/ou redémarrage d'Eclipse.

Lire la suite...

jeudi 20 août 2009

jeu
20
aoû '09

mon checkout ne fonctionne pas via cron

J'ai mis en place un serveur de développement avec un script qui checkout le code.

Pour ce faire j'avais fait un script shell qui fait tout mes checkout générait quelques infos de logs.

Ce script appelé régulièrement par cron devait garder mon serveur de test synchrone.

Problème...

quand j'appelais ce script en direct tout fonctionnait correctement, mais le cron lui ne mettait jamais à jour.

Je me suis alors décidé de regarder les mails envoyés par cron et j'y ai vu ceci

 svn: Can't convert string from 'UTF-8' to native encoding

Une recherche sur le web m'a permi de trouver cet article et la lumière fut.

Ce qui se passe c'est que sur le svn il y avait dans un sous-répertoire des noms de fichier contenant des caractères utf8 !!!.

un set en console m'indiquait LC_CTYPE=en_US.UTF-8 mais pas en cron.

Solution

Dans mon script appelé par le cron, J'ai juste ajouté

export LC_CTYPE=en_US.UTF-8

à mon script et tout à fonctionné correctement

mercredi 21 janvier 2009

mer
21
jan '09

50 outils bien pratiques pour PHP

Smashing Magazine publie une liste de 50 tools utiles pour le développement PHP.

On y trouve des grands classiques, mais avec 50 il y en a peut-être que vous ne connaissez pas encore.

C'est "50 Extremely Useful PHP Tools"

Dans le même style
Personnellement

J'utilise

  • SimpleTest
  • phpDocumentor
  • GeSHi - Generic Syntax Highlighter
  • phpLangEditor <- Yeeeeeeeeahhh c'est de Sébastien Piraux, développeur de claroline
  • Zend Framework
  • phpMyAdmin
  • Smarty
  • PHPEclipse
  • Zend Studio
  • Aptana PHP
  • PhpED
  • PDT

mercredi 1 août 2007

mer
01
aoû '07

Zend Studio Neon

Des captures de Zend Studio Neon dans l'album photos Flickr de Sebastian Bergmann pour montrer l'integration de PHPUnit

Zend Studio Neon sera la version commerciale de PHP Development Tools (PDT) d'Eclipse .

New PHP Project New PHP Class Skeleton for the BankAccount Class The BankAccount Class New PHPUnit Test Case Skeleton for the BankAccountTest Class Running the BankAccountTest Tests

mercredi 14 février 2007

mer
14
fév '07

Voilà c'est fini. Claroline mon plaisir, UCL ma peine, je vous laisse.

16h24 cet après-midi j'ai rangé mon sac, salué mes collègues, et refermé derrière moi la porte de l'IPM où j'aurais passé 5 ans et 2 jours. 5 années pas les plus calmes de ma vie. Je n'étais ni marié, ni papa, je rentrais de France après 3 ans jour pour jour au magasin mondial du scoutisme. J'organisais en un froid jour de janvier 2002 mon premier aperoPHP de Bruxelles. Sont venus à cet apéro 4 personnes, moi, un gars plus jamais revu, mais aussi un certain Thomas De Praetere et Hugues Peeters. Un mois plus tard je rencontrais Auguste Laloux président de l'IPM et Marcel Lebrun responsable de la cellule Multimédia.

Voilà j'arrivais dans l'aventure Claroline/iCampus

mercredi 24 janvier 2007

mer
24
jan '07

PAT directory : tous les patchs PHP

<Moosh_> PAT en gros  c'est un bouillon de culture en C pour PECL ?
<damien> yep
<damien> c'est même pas trop exhaustif
<damien> un gars fait un machin, il veut le publier ? il va sur PAT

Lire la suite...

vendredi 12 janvier 2007

ven
12
jan '07

PEAR : Packages à remettre

Il existe dans pear des packages sans gestionnaire. Peut-être certains concernent une fonctionnalité qui vous intéresse. Pourquoi ne pas prendre cette occasion pour contribuer.

Lire la suite...

mercredi 10 janvier 2007

mer
10
jan '07

offre d'emploi officielle

L'UCL a mis en ligne l'offre d'emploi pour mon remplacement

(url corrigée)

lundi 8 janvier 2007

lun
08
jan '07

Poste d'informaticien(ne) à temps-plein à l'IPM - UCL pour me remplacer

Poste d'informaticien(ne) à temps-plein à l'IPM


Titre minimum requis : gradué en informatique

Description du poste :

  • Gestion d'exploitation de iCampus, la plateforme de mise en ligne des cours de l'UCL.
  • Aide à la gestion du serveur linux de production et participation au développement de l'application open source Claroline en PHP/MySQL.

Compétences requises :

  • Programmation : les tâches de programmation se font en php, Javascript, HTML et XML. Une pratique du shell unix et de perl sont des atouts.
  • Base de données : SQL et modélisation. Une pratique de MySQL est un atout.
  • Gestion Système Linux : connaissance du système linux. Une connaissance en particulier des serveurs apache, mysql et postfix sont des atouts.
  • Travail en équipe.

Cadre de travail : L'activité s'effectuera au sein d'une équipe de conseillers pédagogiques et techniques dans la cellule multimédia de l'IPM.

Sites de référence :

vendredi 10 novembre 2006

ven
10
nov '06

Jour 2 - Présentation 1 : eZ Component by king Derick

Présentation en anglais. eZ Component, dont on avait pu lire une bonne description dans un direction php du début de cette année, nous est présenté par Derick. Un framework de plus ? oui, comme Pear que j'aime bien ou zend platform.

Le but des component de eZ est de fournir au public des briques génériques qu'ils utilisent pour ez Publish.

Cela permet d'élargir leur champs de test.

Voici ses slides et son feedback

jeudi 20 mai 2004

jeu
20
mai '04

Choisir un éditeur php

Pour le moment j'utilise Quanta. Mais il y a surement mieux pour php.

Lire la suite...

Tags