Le petit coin de Nicolas

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

Trucs de geek

Extension Postgres pour PHP sous Slackware

Par défaut, la version de PHP fournie par Slackware ne comprend pas les extensions pgsql et pdo_pgsql, chose que nous allons corriger dans un instant :

Pour commencer, récupérer le slackbuild de PHP pour votre version de Slackware :

rsync -avz --del rsync://slackware.mirrors.tds.net/slackware/slackware64-13.0/patches/source/php ./
rsync -avz --del rsync://slackware.mirrors.tds.net/slackware/slackware64-13.0/source/n/alpine ./

Pour PHP, on s'appuie sur les patchs car la version par défaut dans Slackware 13.0 est PHP 5.2.10 et que par la suite il y a eu une mise à jour en PHP 5.2.12. Pour alpine, il s'agit d'une dépendance afin de pouvoir compiler l'extension imap de PHP. Il n'y a pas eu de mise à jour d'alpine depuis la sortie de Slackware 13.0 donc on le prend dans les sources originelles.

Editez ensuite php/php.Slackbuild pour y ajouter les informations relatives à Postgres dans le cadre du configure, à savoir :

--with-pgsql=shared,/usr \
--with-pdo-pgsql=shared,/usr \

Ce qui me donne au final (et avec au passage modification du BUILD pour le distinguer du paquet officiel)

BUILD=${BUILD:-1_slack13.0_with_pgsql}
 
[...]
 
  --with-mysql=shared,/usr \
  --with-mysqli=shared,/usr/bin/mysql_config \
  --enable-pdo=shared \
  --with-pdo-mysql=shared,/usr \
  --with-pdo-sqlite=shared \
  --with-pgsql=shared,/usr \
  --with-pdo-pgsql=shared,/usr \
  --with-pspell=shared,/usr \
  --with-mm=/usr \
 
[...]

Ensuite il faut éditer le fichier doinst.sh pour que les extensions relatives à Postgres soient chargées ; il y a surement plus propre comme méthode mais ça marche :

echo "extension=pgsql.so" >> /etc/httpd/php.ini
echo "extension=pdo_pgsql.so" >> /etc/httpd/php.ini

Ne pas oublier de re-gzipper à nouveau doinst.sh pour qu'il soit pris en compte par le slackbuild :

gzip doinst.sh

Une fois cela effectué, pour générer la création de votre package PHP, il vous suffit de faire :

./php.SlackBuild

Une fois généré, pour l'installer :

removepkg php
installpkg /tmp/php-5.2.12-x86_64-1_slack13.0_with_pgsql.txz

Pour ceux qui veulent récupérer le slackbuild ou bien le package 64 bits :

Pour ceux qui ne sont pas en 64 bits, il suffit de recompiler en précisant dans php.Slackbuild :

ARCH=${ARCH:-i486}

Et voilà...

Eviter le kernel panic en mettant à jour vers slackware current

Par curiosité, j"ai voulu voir ce que pouvait donner slackware-current (le branche "bleeding-edge" de slackware) et dans un premier temps bien mal m'en a pris vu que cela s'est terminé par un joli "Kernel Panic". Après discussion avec un collègue et un peu de recherche sur internet, il s'avère qu'à partir du noyau linux 2.6.32, Slackware a désactivé la vieille couche IDE qui faisait que les périphériques étaient vus en /dev/hd*.

Voici la manipulation à suivre pour passer d'une slackware 13.0 à slackware current :

Tout d'abord, utiliser un mirroir slackware-current en éditant /etc/slackpkg/mirrors en lieu et place du mirroir de la version stable. Mettre à jour ensuite votre distribution :

slackpkg update gpg
slackpkg update
slackpkg install-new
slackpkg upgrade-all

A ce stade, votre système est à jour et vous avez un joli noyau 2.6.33 en passe de devenir votre noyau par défaut.

Avant de redémarrer votre machine, il faut faire les manipulations suivantes :

  • Edition de /etc/lilo.conf pour remplacer les occurrences de /dev/hd* par /dev/sd*
  • Edition de /etc/fstab pour remplacer les occurences de /dev/hd* par /dev/sd*
  • Suppression de /etc/udev/rules.d/70-persistent-cd.rules ; Le fichier sera régénéré correctement au redémarrage de la machine
  • Si vous utilisez initrd au démarrage, il faut éditer /boot/initrd-tree/rootdev et regénérer votre image initrd via mkinitrd. Dans mon cas avec une installation de base de slackware, je n'en ai pas eu besoin. Par contre, j'en aurai besoin pour mon linutop.

A ce stade, si vous faites un lilo -v pour prendre en compte vos modifications, il va hurler puisqu'il ne trouve pas de périphérique /dev/sd*.

Pour cela il suffit de tricher un peu (ma partition /boot est sur /dev/hda2) :

ln -s /dev/hda /dev/sda
ln -s /dev/hda1 /dev/sda1
ln -s /dev/sda2 /dev/sda2
lilo -v
reboot

Au redémarrage, udev remplacera vos liens symboliques /dev/sd* par les bonnes entrées qui vont bien.

Vais pouvoir aller tester KDE 4.3.5 en attendant que KDE 4.4.x arrive dans slackware-current du coup... :-)

Source : Robby’s libata switchover howto

Un modem peut en cacher un autre

Ci-après ma contribution à Polar Geek, initiative pour le moins ingénieuse de Bruno Bord.

Mon téléphone s'agita, le message fut bref :
- "Rendez-vous au Bar de la Taupe à 15 heures"
J'eus à peine le temps d'assimiler le message que l'appel était fini. Sortant de ma torpeur, je notais rapidement le message sur un bout de papier tant qu'il résonnait encore en ma mémoire. Je ne connaissais qu'une personne en mesure de me passer ce type d'appel et cela faisait bien des années que je n'avais pas entendu cette voix. Me réveillant doucement en sirotant mon café, je songeais à ce message et surtout à son émetteur. Les souvenirs remontaient au fur et à mesure et ma mémoire commençait à rassembler des bribes de visage dans mon esprit. Rigolo, il se rappelait que j'évitais de travailler en début d'après-midi pour cause de digestion et de sa sieste associée. Il ne prenait aucun risque quant à ma disponibilité de me fixer un rendez-vous à 15h dans ce lieu... Il était donc toujours de la partie ? J'aurais pensé qu'il aurait fini par renoncer... L'après-midi s'annonçait intéressant et pour le moins intrigant...

La matinée passa machinalement avec son lot de paperasses et ses coups de téléphone. Les quelques affaires en cours n'avaient pas grand intérêt mais me permettaient de payer mon toit, mon manger et les croquettes du chat. Pour ne pas rater mon rendez-vous, je mangeai léger et me rendis en marchant jusqu'au Bar de la Taupe. A défaut de dormir, ce sera une marche digestive...

Le Bar de la Taupe a pour intérêt d'y accueillir une grande diversité de personnes. Des jeunes lycéens crapoteurs aux cadres tirés à quatre épingles, il se transformait en "salon de thé" tous les jeudi après-midi pour y accueillir un groupe de mamies terribles, plus portées sur le panaché que le thé et plus sur leurs parties de poker que leur tricot. Je m'assis donc en terrasse, afin de profiter des quelques rayons de soleil et commandai mon café. A peine eus-je le temps de poser ma veste qu'il arriva. Il n'avait pas changé malgré toutes ces années. Toujours habillé de son vieux costume pastel et de son noeud-papillon, il était maigre comme un clou. De prime abord, il ne ressemblait à rien, beaucoup de personnes s'y étaient laissés prendre et avaient fini par perdre leur dossier contre lui. Denis Zot, alias Papy, s'assit et commanda un café avec son nuage de lait.
" Toujours avocat ?", lançai-je
" Bien évidemment, le petit peuple a besoin qu'on le représente !"
Ainsi, il n'avait vraiment pas changé. Idéaliste jusqu'au bout des ongles, il était le chevalier servant de la justice dans un monde qui grouillait de requins à la solde de gros intérêts privés. Personne n'avait donc eu raison de lui jusqu'à présent ; ça laissait présager de bonnes choses.
"J'ai un dossier pour toi", me dit-il, "c'est urgent et tu es le seul qui peut m'aider"
Perplexe, je le laissais continuer :
"Tes derniers dossiers ne t'ayant pas tenu au fait de l'actualité informatico-légale, il se trouve que depuis plusieurs mois, j'ai mis à mal bon nombre de majors et des membres de nos gouvernements dans leurs tentatives de poursuite d'internautes pour des histoires de copyrights. Au début, cela était assez simple, il suffisait de trouver le vide de procédure pour faire tomber le château de cartes. Même si la presse a peu relayer l'information, j'ai quand même réussi à évincer A. Dopi de toute velléité électorale..."
Ah oui songeais-je. Je m'en souviens maintenant, c'était l'une des dernières informations qu'avait remonté un vieux script en analysant des flux RSS que je pensais périmés. Depuis l'avénement des "Etats Majors" en lieu et place des "Etats Nations" au début du 21ème siècle, la presse était sous contrôle et il était de plus en plus complexe d'échapper à la propagande d'Etat. Le modèle Chinois s'était imposé de part le monde, toute l'information était contrôlée par l'une des cinq Majors et les bribes de gouvernement qui restait ne faisait que leur obéir aveuglément. Arrestations sommaires et mise sur écoute se faisaient à tour de bras. Papy, en face de moi, faisait donc la résistance et jouait le rôle de Chevalier Blanc du petit peuple. Il devait être considéré comme l'ennemi public n°1 ou presque. Il ne devait pas non plus lui rester beaucoup de soutien. Dans quoi allait-il m'embarquer ???
"... mais bon revenons-en à notre affaire" me dit-il. "Mon client, qui comme moi, milite pour le retour aux libertés fondamentales, après moult menaces (comprendre des courriers envoyés par le ministère de la culture pour des activités soit-disant illégales) vient d'être arrêté. S'il ne signe pas un faux aveu, il sera expédié dans son pays natal avec sa femme et ses deux enfants. S'ils repartent en Birmanie, ce sont les pompes funèbres qui vont les accueillir à l'aéroport..."
"Qu'attends-tu de moi ?"
"Trouve la preuve du complot ; seul toi peut la trouver et je n'ai confiance qu'en toi."
"Et j'y gagne quoi ? Hormis de passer sur une liste noire ?"
"Financièrement, donne-moi ton prix et tu l'auras. La question n'est pas là. Comme tu le sais peut-être, la contestation gronde et nous avons besoin d'un coup d'éclat pour faire prendre conscience au reste du peuple que la solution est là. On peut mettre fin au joug des Majors. Ce que je t'offre, c'est la liberté !" Le bougre, il savait que j'étais sensible à ces mots et que je ne supporterais pas que l'on puisse faire du mal à des enfants. Et puis financièrement, je n'avais pas trop le choix, je commençais à prendre les raviolis en grippe...
"Ok, j'accepte ; qu'as tu pour moi ?"
"La clé de sa maison, la milice du Ministère de la Culture ne s'y est pas encore rendue. Ils iront demain d'après un de mes informateurs. C'est ton unique chance de trouver les preuves de son innocence avant qu'ils ne déposent les fausses. C'est tout ce que j'ai pour toi..."
"Bien, j'y vais de ce pas..."
"Fais attention à toi et surveille bien tes échanges" me dit-il. Alors qu'il se levait pour partir il me dit "Tu en auras besoin aussi : Pomme Noisette" et il disparut.

Je finis d'un trait mon café, payai l'addition. Je repartis au bureau mais plutôt que de monter à l'étage, je pris le chemin de la cave. Il me fallait du matériel spécifique et qu'on ne remonte pas jusqu'à moi si je me faisais prendre. Je ne faisais aucunement confiance au matériel dernier cri qui était sur mon bureau. Pour mes affaires courantes, cela allait bien mais pas pour des situations comme celles-ci. Je ressortis mon petit netbook sous Slackware en disant "Hello Citrouille, j'ai du boulot pour toi". Au moins avec Slackware, on sait que l'on installe les sources officielles. Pas de risque de rootkit ou autre tripatouillage exotique. Le temps de vérifier le bon état des batteries et de son bon fonctionnement et je prenais la direction de la maison du client de Papy.

La maison était située en banlieue Ouest de Paris. Elle était au milieu d'une résidence calme et agréable. Un bon coin pour une vie de famille songeais-je. Un jour peut-être... Après avoir fait un petit tour de la maison pour vérifier de la véracité des propos de l'informateur de Papy, je m'y introduisis sans problème. Pas de voisine curieuse pour casser mon approche, vraiment chouette ce quartier. L'intérieur était propre et bien rangé. Quelques jouets dispersés témoignaient de la présence d'enfants.
Je m'attelais au travail et cherchais les ordinateurs. Une fois le premier trouvé, je remarquai que le réseau était filaire. Chose étrange de nos jours mais trahissant le coté paranoïaque du client. En effet, le Wifi s'était imposé comme mode d'accès par défaut mais sa médiocre sécurité permettaient une écoute des plus aisées par nos milices étatiques ou la multitudes de sociétés privées dont les résultats étaient basées sur la délation d'internautes. Au moins avec un réseau filaire, il est aisé de trouver les différents ordinateurs. Je dénombrais 2 portables et deux tours, ainsi qu'une sorte de client léger collé sous le bureau, au même niveau que les prises électriques. Avant d'entrer plus loin dans mon investigations, je branchais Citrouille pour vérifier quelques informations supplémentaires : pas de réseau wifi à proximité, donc j'ai bien tous mes PCs.
Je commençais mon analyse par les deux tours situés dans les chambres des enfants. Je les débranchais du réseau et y introduisis ma clé USB magique contenant un OS minimaliste et surtout des outils d'analyse rapide. Ces derniers ne m'apprirent pas grand chose des deux tours. Les logiciels étaient tous en règles et à jour et les données étaient celles d'un ordinateurs d'enfant : des photos, des jeux vidéos, quelques listes aux Père Noel et quelques menues bricoles. La seule chose repérée fut la présence d'un proxy. Tiens, le père de famille semble vouloir protéger ses enfants. Cela doit correspondre au client léger repéré sous le bureau. Passons à autre chose...

Je décidais alors de brancher Citrouille sur le réseau en utilisant le câble réseau d'une des tours pour voir s'il y avait des activités suspectes. J'activais le mode furtif et en lecture seule pour éviter toute intrusion désobligeante. Le temps que Citrouille s'initialise, je poursuivais l'analyse des deux portables. Pour l'un des deux, ce fut facile, il était complètement HS et vue la dose de poussière sur la machine, cela ne datait pas d'hier. Pour le second, il était en veille et tout de suite un mot de passe me fut demandé. J'avais deux solutions pour cet ordinateur : soit le redémarrer sur ma clé usb magique et analyser son contenu au risque de perdre les données actuellement en cours ; soit le sortir de sa veille et l'analyser en direct live, sans trop savoir ce qu'il contenait tant d'un point de vue données que de celui du mouchard. Il me fallait bien sur trouver le mot de passe... Un mouvement de lumière attira mon attention. Je retins mon souffle avant de constater que c'était seulement lié au soleil qui se couchait et dont la lumière se reflétait dans la porte du four. Et là, le déclic : Pomme Noisette pardi ! Le mot de passe en ma possession, cela ne m'aidait pas pour autant sur l'attitude à suivre vis à vis de ce portable.

Mon attention se déporta alors sur le client léger placé sous le bureau. Je connaissais ce genre de modèle, une configuration minimaliste qui ne prend pas de place et qui permet de rendre des services. Une invite me demanda un mot de passe et Pomme Noisette fut le sésame. Mes soupçons étaient justes, la machine faisait bien office de proxy particulièrement agressif. Des tunnels VPN étaient en outre établis et obéissaient à des règles de routage bien particulières. Tout était fait pour protéger les internautes de la maison et anonymiser au maximum certaines pratiques. Le client de Papy est pour le moins paranoïaque et la réalité ne pouvait que lui donner raison. Toutefois, il s'était fait prendre. Il me restait à trouver comment...

Tout d'un coup, Citrouille se mit à biper dans tous les sens. Elle m'indiqua que le réseau contenait une activité anormale de programmes cherchant à récupérer des informations de tout ce qui circulait sur le réseau et/ou à s'introduire sur les machines présentes sur le réseau. A priori, elle ne s'était pas fait prendre mais il allait falloir la jouer finement pour en apprendre un maximum sans se faire prendre ou montrer que quelqu'un cherche à innocenter le client de Papy...
Il me fallait maintenant accéder au contenu du portable à tout prix sans éveiller les soupçons. Du client légér, je récupérais toutes les informations réseau sur le profil du portable (Adresse MAC, etc). Ceci s'ajoutant aux informations produit écrites sur le portable, j'étais en mesure de créer un profil factice sur Citrouille pour se faire passer pour le portable afin de pouvoir l'analyser tranquillement. Alors que je notais les informations sur un bout de papier, je notais la présence d'un bon de livraison émis par le FAI pour le remplacement du modem/routeur. En y regardant de plus près, cela datait de la semaine précédente... tiens donc. Le courrier stipulait que l'équipe du FAI en charge de la surveillance du matériel avait noté des incidents sur le modem. Par conséquent, un modem de rechange était envoyé de façon préventive et moyennant l'envoi du modem originel pour réparation. Mon radar vit rouge tout de suite, se pourrait-il que le modem soit le responsable de l'histoire ?

Rejoignant Citrouille, je peaufinais mon plan d'attaque. Citrouille allait se faire passer pour le portable et me permettrait d'analyser le modem à son insu en lui donnant des données bidon à manger en masse. Ces données était constituées d'un savant mix de consultations de sites honnêtes, téléchargement de binaires et d'images de femmes plus ou moins dénudées, histoire de faire tilter tout algo de surveillance comme il se doit. Citrouille était prête, il ne me restait plus qu'à taper sur "Entrée". Une pression de touche plus tard et simulant une micro-coupure réseau, Citrouille avait pris la place du portable. J'ouvris alors la session et lança le gestionnaire des tâches ; aucune activité suspecte pour le moment. Il cherchait à se reconnecter sur le réseau mais je ne craignais rien, Citrouille l'empêcherait de revenir en ligne. Je fis une passe rapide sur l'ordinateur. Rapidement je découvris un dossier "Téléchargement" contenant quelques oeuvres piratées à des dates variées. Cela était vraiment trop gros comme pièce à conviction mais à l'heure des Etats Majors, cela suffisait amplement pour vous mettre à l'ombre et vider votre compte en banque. Surtout, cela ne collait pas avec ce que j'avais pu voir précédemment sur le client de Papy. Un Dialer dont le nom contenait celui du FAI chercha alors à s'exécuter ; louche me dis-je et tuait alors le processus. Pour éviter tout autre problème, j'arrêtai l'ordinateur pour une analyse ultérieure. Mon regard revint sur le modem, qui de ses diodes me narguait, je le savais...

Citrouille me donna la solution. De nombreuses connexions avaient cherché à se connecter sur le portable pour récupérer moult informations et surtout y placer les mêmes fichiers que ceux que j'avais vu dans le dossier "Téléchargement". Je le tenais mon coupable et il devenait aisé de reconstituer l'histoire. En recevant son nouveau modem, le client de Papy bien qu'habituellement derrière son proxy, dut pour une fois se connecter en direct au modem. A ceci s'ajoutant le CD d'installation dont venait surement le Dialer (et surement d'autres exécutables peu catholiques), le portable avait été compromis à ce moment là. Les autorités n'avaient alors plus qu'à attendre que le modem fasse son travail et de saisir l'individu quand bon leur semblait. L'énigme était résolue, je remis les choses en ordre et quittais discrètement la maison du client de Papy.

La fin de l'affaire fut explosive. Après avoir fait part de mes découvertes à Papy, celui-ci contacta différents collectifs et associations en faveur de la liberté pour créer un effet presse hors du commun. Lorsque la communication fut lancée, les autorités ne purent la retenir et elle déferla sur l'espace public. Le quidam moyen s'empara du sujet et des manifestations spontanées eurent lieu aux quatre coins du pays. L'opposition bien qu'affaiblie tira son épingle du jeu en faisant part de son expérience à ce mouvement citoyen qui grossissait de façon exponentielle. Le gouvernement chercha à faire sauter quelques fusibles en la présence de Monsieur Lop Psi et d'A. Cta mais cela ne suffit pas. Après un mois de manifestation, il fut contraint à la démission et de désapprouver les Majors. Un nouveau gouvernement fut élu et il s'empressa de rétablir bon nombre de libertés fondamentales bafouées depuis tant d'années, ainsi que la neutralité du net. Quelques FAI jugés trop proches des Majors firent faillite et il fut décider de confier les accès à internet à des associations citoyennes.

Personnellement, je savourais cette victoire même si je regrettais de ne pas avoir demandé une rémunération supérieure pour ce que j'avais fait. Je me consolais néanmoins en me disant que de toutes façons, la liberté n'a pas de prix...

Note de l'auteur : au départ, j'étais parti sur tout à fait autre chose. Le revirement s'est fait suite à la lecture du billet "La Quadrature jette l'éponge". Il semblerait que nous prenions une route où mon histoire pourrait devenir possible (tout au moins le début, pour la fin j'en doute). Après DADVSI et HADOPI, il y maintenant LOPPSI et ACTA... Pour soutenir la Quadrature du Net, il vous est possible de faire un don si vous n'avez pas la possibilité de les aider autrement...

Perl vs Shell vs Python

Ayant suivi il y a 2 semaines une formation Perl de 3 jours vu qu'il s'agit d'un standard de fait chez JCDecaux pour tout ce qui touche au scripting, mon petit ressenti sur le sujet.

Tout d'abord, il faut dire que j'allais à cette formation avec un a priori plutôt négatif sur Perl de part ce que j'avais pu en entendre ici ou là. Il faut dire que j'ai plutôt été agréablement surpris par certains cotés.

Match perl vs bash :

  • Perl peut être vue comme une bonne alternative / un bon complément à des scripts bash. Plutôt que de vous casser la tête à apprendre à utiliser grep/sed/awk, vous pouvez faire la même chose mais uniquement en perl. Parce que bon, franchement awk, c'est peut être super puissant mais je trouve ça inabordable et loin d'être évident.
  • Je compte ainsi revoir certains scripts bash qui ne me satisfont pas pour voir si Perl ne me permettrait pas d'atteindre l'objectif souhaité.

Match perl vs python : avantage Python

  • Pour le coup, le langage avec des des $, %, et même @ devant les types de données, des accolades pour les débuts/fin de bloc qu'on ne sait jamais à quel niveau positionner pour rester lisible de bout en bout et des ; en fin de ligne, j'ai du mal. Surtout maintenant que je me suis habitué à la syntaxe python que je trouve infiniment plus lisible et moins source d'erreur.
  • Dans la même veine, les syntaxes sont pas des plus évidentes : ainsi dire que $tab est un scalaire, @tab un tableau, %tab un tableau associatif et que si on met un "antislash" devant on parle alors d'une référence vers le scalaire/tableau/tableau associatif, ça aide pas l'écriture d'un script

Par ex en perl :

if ( $toto == 2)
{
    print "Toto vaut : $toto\n";
}

et en python :

if toto == 2:
    print "Toto vaut %s" % toto
  • Perl fonctionne de façon beaucoup trop implicite/facultative contrairement à python. Python impose un certain nombre de conventions et c'est bien. Le "There is more than one way to do it" de Perl peut être séduisant mais aussi contre productif, surtout en entreprise.

Exemple pour parcourir un tableau en perl :

#! /usr/bin/perl -w
 
# Tableau simple
@tab = ("fraise", "abricot", "goyave", "pamplemousse");
foreach (@tab)
{
    print "Valeur : $_ \n";
}
 
# Tableau associatif
%hash = ("France" => "Paris", "Allemagne" => "Berlin", "Angleterre" => "Londres");
foreach (keys %hash)
{
    print "Pays : $_ , Capitale: $hash{$_}\n";
}

Le $_ est appelé scalaire par défaut. Il est conseillé de vivement l'utilisé plutôt que d'initialiser une variable. De prime abord, ça surprend. Il existe aussi un @_ dans les fonctions et qui correspond à un tableau d'arguments passés à la fonction.

Dans ce cas les parenthèses sont implicites. On peut bien sur écrire :

foreach(keys(%hash))

alors qu'en python :

tab = ["fraise", "abricot", "goyave", "pamplemousse"]
for fruit in tab:
    print "Valeur : %s" % fruit
 
hash = {'France' : 'Paris', 'Allemagne': 'Berlin',  'Angleterre' : 'Londres'};
for key, value in hash.items():
    print "Clé : %s Valeur %s" % (key, value)

Dans les deux cas, nous aurons :

Valeur : fraise
Valeur : abricot
Valeur : goyave
Valeur : pamplemousse
Pays : France , Capitale: Paris
Pays : Angleterre , Capitale: Londres
Pays : Allemagne , Capitale: Berlin

Si on rajoutait un tri en perl, en implicite cela peut aller jusqu'à :

foreach (sort keys %tab)
{
}

Difficile de s'y retrouver à mon humble avis.

  • Perl n'a pas de "prompt" intégré : Franchement pouvoir taper "python" dans un shell et ensuite codé en direct son script et le retoucher, que de temps gagné. Il y a certes perl -pe "commandes perl" mais c'est bien en deçà de ce que peut offrir python.
  • Mettre /usr/bin/perl -w en début de script permet de lever les warnings et corriger les éventuels bugs
  • Python propose le module "re" pour les expressions régulières. Pas besoin donc de se mettre spécifiquement à Perl s'il y a des besoins de RegExp ;-)
  • J'ai l'impression que la doc python est de meilleure qualité même si apparemment Perl rattrape petit à petit son chemin...
  • Globalement, Python et Perl doivent permettre de faire les mêmes choses, donc je vais considérer le périmètre des langages comme ex-aequo.
  • Même si cela m'a troublé de prime abord avec les listes en python, les listes en perl sont sympathiques :
@tab = ("un", "deux", "trois");
($t1, $t2, $t3) = @tab;
 print "t1 vaut $t1\n";
 print "t2 vaut $t2\n";
 print "t3 vaut $t3\n";

Contrairement à ce que l'on pourrait croire de prime abord, cela n'est pas un tableau mais juste un "panier" de variables. On peut donc utiliser $t1 & co.

  • La notation objet est plus claire en Python. Je n'adhère toujours pas au $titi->dosomething(); (comme en PHP en fait)
  • La prise en main de python est beaucoup plus immédiate (aux listes / tuples (grosso modo des listes non modifiables) / dictionnaires (tableaux associatifs) prêt ;-) )
    • D'ailleurs, les listes en python correspondent aux tableaux en perl et les dictionnaires python au hash (tableau associatif) perl.
    • Sauf erreur, il n'y a pas d'équivalent des tuples en perl
    • Les listes en perl n'ont donc rien à avoir avec les listes en python (cela m'a pas mal dérangé durant la formation)

Ce qui fait qu'au final, je rejoins tout à fait David sur "Pourquoi Python & Django". A titre personnel, mon langage de prédilection va donc rester python et je vais voir dans quelle mesure je peux encourager python au boulot. J'y ai déjà glissé une appli Django après tout ;-)

Perl a malgré tout été une bonne surprise, je m'attendais à pire. Il convient par contre dans un contexte d'entreprise je pense de rendre le code le plus verbeux possible pour facilité sa reprise et sa maintenance.

Faut-il sauver MySQL ?

A la demande de Jérome Renard et suite à la publication de "Help saving MySQL" par le fondateur de MySQL, ma première pensée fut ; "Hard to have an opinion on oracle/mysql debate. Was sun a better home ? FUD ?'

Sans nul doute il y a conflits d'intérêts entre Oracle & MySQL vu qu'il s'agit de deux bases de données relationelles; toutefois sur MySQL :

  • SI vous utilisez le moteur InnoDB, vous ^tes déjà dpendant d'Oracle depuis que ce dernier à racheter Innobase en octobre 2005. Votre dépendance cessera lorsque le nouveau plugin InnoDB sera sorti en version stable
  • La base de données Oracle est je pense principalement utilisée pour des applications orientées "entreprise". Dans ce contexte, pour Oracle, l'acquisition de MySQL peut lui permettre d'être sur de nouveaux segments comme le web ou les PME (qui ne peuvent s'offrir des licences Oracle).
  • En qui Sun était une meilleure maison pour MySQL ? J'ai plutôt l'impression que MySQL en a pati que tirer partie ?
  • Le fondateur de MySQL a déjà lancé l'Open Database Alliance ainsi qu'un fork de MySQL : Maria DB et une société de services Mpnthy AB. Quel est son intérêt dans l'histoire ? Est-ce si "désintéressé" que cela ?
  • La gestion du développement de MySQL était déjà sujet à critiques (toujours par le fondateur de MYSQL). En quoi cela peut être pire ?
  • Si Oracle venait à tuer MySQL (activement ou pas), il est toujours possible de forker (c'est d'ailleurs déjà fait) - donc hormis le coté médiatique / crédibilité / image de marque à gérer, où est le problème ?
  • MySQL s'est imposée comme base de données par défaut pour le web et PME. Ce serait certes une mauvaise image pour la promotion du libre de voir MySQL disparaitre. Mais comme dit précédemment, le fork peut se faire.
  • Pour les constructeurs de solutions opensource (ou pas) autour de MySQL, il leur faut évaluer leur dépendance vis à vis des composants retenus. Temps d'adopter un ORM ou d'être compatible multi-db ?
  • Pour éviter ce cas, n'aurait-il pas fallu créer une fondation MySQL, détentrice des droits et du contrôle sur son développement ? Cela pourrait être une porte de sortie pour Oracle... A vouloir monétiser MySQL, c'est peut être une leçon à retenir ?
  • (Edit1) La grand gagnant de MySQL vs Oracle sera-t-il Postgres ?
  • (Edit 2) Le MagIT indique d'ailleurs : "Notons que Monty Widenius n'est pas totalement désinteressé. Il a récement lancé Maria DB, un fork de MySQL et ambitionne de répliquer le succès qu'il a connu avec la première itération de sa base. Autant dire qu'un MySQL en bonne santé entre les griffres d'Oracle, pourrait largement éclipser ses chances de réussite".
  • (Edit 3) : Monty admet (fin d'article) que les développements autour de MySQL sont "morts" depuis 5 ans. Le rachat de MySQL par Sun n'a rien changé : Les innovations sur MySQL ont déjà été stoppées il y a 5 ans. Il s'agissait d'ailleurs d'un point sur lequel javais beaucoup d'espoirs en intégrant Sun. C'était un désastre complet en matière de développements. Et je comptais beaucoup sur Sun pour régler le problème. Malheureusement, cela ne s'est jamais produit. On peut donc dire que les développements sont déjà morts. C'est également pour cette raison que j'ai quitté le projet. D'ailleurs aujourd'hui, il y deux vrais forks (nouveaux projets dérivant du code initial de la base libre, NDLR) de MySQL, hors Drizzle.. Cela en fait de l'agitation poru un mort... ;-)
  • (Edit 4 du 05.01.10) : La communauté semble de plus en plus critique sur Monty par bien des aspets (cf billet du président de la fondation python). Plus j'y pense, plus je me dis que le danger de l'acquisition pour Monthy est de ne plus pouvoir profiter gratuitement du code de MySQL. Je m'explique, si on considère que MariaDB == MySQL + code spécifique, alors son entreprise dans son business plan prévoyait pour le moment de ne payer que les dev spécifiques. L'acquisition d'oracle peut mettre fin à ce modèle. D'où 2 solutons pour Monty : soit on reste dans la situation actuelle et il peut bénéficier du code de MySQL gratuitement pour faire ses affaires avec MariaDB. Soit il cherche à ce que les développeurs MySQL passent à MariaDB pour reproduire l'existant. Ainsi, le cout logiciel de MariaDB reste le code spécifique et non la globalité du code (MySQL + code spécifique).
  • (Edit 5 du 06/01/10) :Monty Widenius wants another billion dollars, should we help him ?. Tout est dit sur Monty...

Sans vouloir voir MySQL disparaitre, j'ai plutôt l'impression que les problèmes étaient déjà présents par le passé et que l'acquisition d'Oracle ne fait que les mettre en valeur / compléter.

Votre avis ?

Installer Slackware 13.0 sur une clé USB pour utilisation dans un linutop

Si comme moi, vous avez un linutop et que vous souhaitez y mettre en place une slackware plutôt que la version Linutop (basée sur Xubuntu), voici la marche à suivre.

Depuis un autre ordinateur, faire une installation classique de Slackware sur votre clé USB

Dans mon cas, cela donne :

/dev/sda1    swap     1G
/dev/sda2    ext4     8G

A ce stade, dans mon cas, la clé refuse de démarrer. Même en créer la clé usb de démarrage, pas mieux car les modules USB sont chargés après qu'il chercheà accéder aux données de la partition /

Une fois l'installation finie, redemarrer votre ordinateur en laissant le CD de Slackware pour qu'il se lance automatiquement. Au lieu de taper setup pour lancer l'installateur Slackware, procéder de la façon suivante.

Mise en place du chroot

mount /dev/sda1 /mnt
swapon /dev/sda2
mount -o bind /proc /mnt/proc
chroot /mnt /bin/bash

Récupérer la version du noyau :

Via un uname -r :

uname -r
2.6.29.6-smp

Création d'un initrd personnalisé

Le but ici est de rajouter les modules permettant de booter sur une clé USB et en ext4 ; se reporter à /boot/README.initrd pour plus d'info.

mkinitrd -c -k 2.6.29.6-smp -m usbcore:ehci-hcd:uhci-hcd:ohci-hcd:usb-storage:ext4 -f ext4 -r /dev/sda2

A adapter bien sur à vos besoins.

Ensuite modifier le fichier /boot/initrd-tree/init :

Trouvez la ligne # Initialize LVM: et au dessus, ajoutez les 2 lignes suivantes :

echo "Sleeping to allow USB Init."
sleep 10

Regénérez l'initrd en tapant mkinitrd sans arguments.

Mise à jour de Lilo

Modifier /etc/lilo.conf pour ajouter la ligne initrd = /boot/initrd.gz :

# Linux bootable partition config begins
image = /boot/vmlinuz
  root = /dev/sda2
  label = Linux
  read-only
  initrd = /boot/initrd.gz
# Linux bootable partition config ends 

Faites un test de chargement des paramètres de lilo :

lilo -t -v

Si pas d'erreurs (il se peut qu'il y ait des warnings par contre), appliquez les nouveaux paramètres :

lilo -v

Sortez de votre chroot via un exit, démontez vos périphériques :

swapff /dev/sda1
umount /mnt

Redémarrez votre ordinateur via un reboot.

Mettre la clé dans le linutop et apprécier :-)

Source et autres méthodes (non testées) : Guide - Installing Slack 12.0 To a USB Drive

Compte Rendu Pycon-FR 2009

Je me suis rendu cette année à la 1ère matinée de Pycon-FR ou j'ai pu revoir David et Samuel Martin notamment (et pour ce dernier, de récupérer un linutop 1ère génération en échange de mon reste de tour...)

Ci-après mes notes sur les confs auxquelles j'ai pu assister et mon avis sur l'événement en toute fin.

Les slides sont disponibles en ligne et les vidéos devraient arriver prochainement.

Comment python va dominer le monde ?

Sur le constat du manque de visibilité de python / php, java, ruby, 3 axes de travail :

  • Visibilité
    • Presse -> suppose un effort de rédaction
    • Blog / Planet pour faire le buzz
    • Conférences / Barcamp + retombées indirectes suite à la conf. --> idée en cours d'un "world python day" ???
    • Participer à des événements pour propager python
    • Sucess Stories (OLPC, Launchpad, etc)
  • Formation
    • Exemple du Python African Tour : formation sponsorisées où on envoit des volontaires dans une université en Afrique => 3/4 par an, déjà 1 session organisée - Senegal/Zambie sur S2.
  • Communication / Communauté
    • Sprints : découvrir / documenter / coder / screencasrts/ apprendre aux débutants
    • LUG

Correction d'un bug et naissance d'une nouvelle fonctionnalité dans CPython

  • Panorama des canaux d'échanges et sources d'info sur python (python-ideas, pep, tickets, etc)
  • Bonnes pratiques pour la remontée de bug (sur la doc, le language, etc)
  • Python 2.5 n'accepte plus les corrections de bug - uniquement les bugs de sécurité. (2.6 & 3.0 maintenus, 2.7 & 3.1 en dev)
  • >~ 90% du code de python est couvert par les tests
  • Les tests deviennent une sorte de spécification du langage - Pypy et Jython se sont appuyés sur les tests pour être implémentés.
  • 100 commiteurs sur python,

PyQuery - Manipuler du html/xml à la jQuery en python

  • Utilisateur de selecteur CSS plutot que XSLT/XPATH (trop verbeux ou complexe) / selecteur CSS
  • le $ de jsquery est remaplcé par un "d"
  • Utilisation possible : web scrapping, manipulation xml/html pure, web testing, temaplating
  • Pas sur de comprendre / voir l'intérêt de la chose par rapport à du jquery "dans le texte".

Skinner vos applications web avec Deliverance

  • Mécanisme de proxy intermédiaire entre l'internaute et l'application afin de pouvoir reskinner à la volée une partie d'une application (ajout / suppression / remplacement) d'éléments, sans toucher à l'application originale
  • Overhead estimée à 4/6% - Acceptable puisque cela évite de devoir reskinner chaque application (ce qui peut nécessiter de connaitre la techno sous-jacente à l'application).
  • Attention aux problématiques de reroutage d'url (Deliverance en gère un bout mais si vous avez plusieurs formulaires dans une même page qui pointent vers différentes choses, attention aux résultats...)
  • PyQuery utilisable dans Deliverance
  • Plutöt fait pour reprendre une application principale et rajouter des données à la marge que d'adopter une logique de portail

Bases de données Non SQL

  • Présentation des termes ACID / CAP / BASE
  • Panorama des bases non-sql (clé/valeur : memcached, tokyo cabinet, etc ; documentaire : monbo-db, couchdb ; misc : hbase, etc) et des outils python existants pour utiliser ces bases de données.
  • Gros intérêt des bases documentaires / bases relationnelles notamment au niveau des migrations (suffit de créer une nouvelle version d'un document...)

Bilan des courses

Mis à part le parking de la Vilette que j'ai eu un peu de mal à trouver à cause des travaux (la Vilette m'avait prévenu, j'ai été enchanté par cette matinée et bien frustré de ne pas avoir pu y assister davantage. J'aurais bien aimé voir notamment les confs sur django, atomisator, twisted et couchdbkit.

La grande hétérogénéité des sujets permet de voir plein de choses différentes, même si on n'y a pas un intérêt direct dans l'histoire. C'est toujours instructif.

Coté organisation, rien à redire, c'était nickel pour ce que j'en ai vu. J'ai (enfin) payé ma cotisation de membre et fait le plein de t-shirts, sans oublier un petit badge ;-)

Autre conclusion plus personnelle, il faut vraiment que je me pousse aux fesses pour assister à plus d'événements de ce type et ne pas me laisser faire par de fausses bonnes / mauvaises raisons. C'est vrai que de ma "campagne", j'ai pas toujours le courage de me rendre à l'autre bout de Paris... ;-)

Vivement l'année prochaine donc et à plus court terme que les vidéos soient en ligne que je puisse visualiser ce que j'ai manquer...

Dons / Echanges composants informatiques

Donne ou échange (cf wishlist amazon) :

  • 1 routeur Linksys WRT54GL 1.1 avec firmware officiel linksys
  • 1 serveur d'impression sans fil Linksys WPS54G
  • 1 Linutop 1 avec son alimentation + Clé USB 1 Go sous Xubuntu 08.04

Pour la livraison, idéalement région de Versailles / Saint Quentin en Yvelines / Plaisir. Pour des livraisons plus lointaines, a voir si vous prenez en charge les frais d'envoi ou en fonction de la "contrepartie" - l'idée étant que cela ne me coûte rien ou pas grand chose et que cela rende service à ceux que cela peut intéresser.

Avis aux amateurs...

Mis à jour le 27/6

Cherche wiki ou cms simple pour rédaction de specs

Hello,

Pour rédiger des specs pour un usage interne et en profiter pour montrer que faire des contenus au format web, c'est plus sympa que des .doc immondes, j'aurais besoin de l'outil suivant :

  • Multi utilisateurs
  • Multi profils (lecteur / contributeur / admin)
  • Rubriquage / Catégorisation des contenus
  • Editeur WYSIWYG
  • Capacité d'insérer des images et pièces jointes (attaches ou "embed")
  • Commentaires (merci pixenjoy)
  • Bonus : édition en front office
  • Techno : peu importe tant que ça se déploie facilement sur un serveur web de type apache et sous Windows.

A première vue, je verrais des choses comme dokuwiki (pas sur pour le wysiwyg), modx,

Exclus d'office :

  • SPIP : Pas de WYSIWYG
  • eZ Publish : on a dit simple et pas trop lourd :-)
  • Mediawiki : idem
  • Drupal : pas envie de me casser la tête avec 123 modules à installer - Quoique à la limite Drupal + module Book...

D'autres idées ?

Dépots mercurial également disponible sur Bitbucket

Préambule : Bitbucket, c'est ce qu'est Github à git mais pour mercurial. Autrement dit, un service hébergeant des dépôts mercurial avec un wiki, gestionnaire de ticket, etc. Le service comprend une offre gratuite limitée en nombre de dépots privés (ie que vous ne voulez pas rendre public) et en espace (150 Mo). Par contre, aucune limitation pour les dépôts ouverts au public.

J'ai donc commencé la synchronisation entre mes dépôts mercurial et Bitbucket. Il me reste encore à peaufiner l'organisation des "push" mais c'est en bonne voie. Pour y accéder : http://www.bitbucket.org/NiCoS/

Par contre, c'est là où on voit que j'ai mal géré mes identifiants de commit sur mes dépôts et à ma connaissance, ce n'est pas récupérable :-/

Merci à David pour m'avoir fait découvrir Bitbucket.

- page 1 de 6

Des trucs de/pour geeks quoi...

Fil des billets
Fil des commentaires