Le blog des salariés

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

vendredi, septembre 25 2009

I've lost my files !!!

Bonjour,

À qui cela n'est-il donc jamais arrivé ???

Avec le système de fichiers ext2 il 'y avait la possibilité de retrouver des fichiers effacés à l'aide de Midnight Commander mais avec Ext3 que néni.

Après quelques recherches, j'ai découvert ext3undel. Celui-ci peut être utiliser directement, avec ses options, ou bien propose deux autres exécutables, gabi et ralf qui sont plus simples d'utilisations mais plus globaux.

Ext3undel s'appuie, entre autre, sur foremost, disponible en paquets Debian (Lenny).

Foremost permet de restaurer des fichiers effacés du système en spécifiant des types de fichier, la partition ou image dd concernée, un répertoire de destination des fichiers restaurés ainsi que quelques autres options... Il a l'avantage de pouvoir travailler dur une partition montée ce qui n'est pas forcément le mieux pour éviter l'écrasement d'inodes mais permet de travailler sur des filsystem que l'on ne peut pas démonter ou monter en readonly.

Dans le cas présent, après avoir créer le répertoire de destination, j'ai utilisé la commande :

foremost -s 512 -o /root/photo-finds/ -t jpg /dev/md1

Le résultat est surprenant, pour un répertoire effacé d'une taille d'environ 5 Go, il a récupéré 199 Go de fichiers correspondant au type et sur la partition que j'avais spécifié. Foremost a donc restauré des fichiers effacés depuis longtemps :)

mardi, mai 5 2009

Support d'Internet Explorer 8 chez Easter-eggs

Easter-eggs franchit le pas et supporte désormais Microsoft Internet Explorer 8.

Le logiciel nous a été livré ce matin aux alentours de midi par un livreur en scooter. Quelques salariés ont eu l'occasion de le goûter.

Internet Explorer 8

Promesse tenue par Microsoft : la version 8 du navigateur est plus sécurisée que ses versions précédentes. En effet, nous avons reçu un coup de fil avant livraison nous demandant si nous étions sûrs de bien vouloir commander. L'installation est rapide : seulement une demi-heure d'attente avant livraison.

jeudi, janvier 22 2009

Symfony et grep

J'ai écrit un nouveau plugin minimaliste facilitant l'utilisation de la commande grep dans le framework Symfony.

Il est implémenté comme une «task» Symfony.

Il est désormais possible de faire des recherches dans le code source du projet Symfony à l'intérieur des actions, des classes du modèle, des formulaires, des filtres et des templates.

Il y a un fichier de configuration pour régler les répertoires et fichiers exclus par défaut, ainsi que les options par défaut passées à grep.

Quelques exemples :

  • recherche de getContactInformation dans tout le code source (en excluant les répertoires de cache, les plugins, etc.) :
symfony grep getContactInformation

L'option -n affiche la ligne grep qui aurait été exécutée :

symfony grep getContactInformation -n
grep "getContactInformation" -r --color=always -i -n --include=*.php --include=*.css --include=*.js --include=*.yml --include=*.ini --exclude-dir=./lib/model/om --exclude-dir=./lib/model/map --exclude-dir=./lib/form/base --exclude-dir=./lib/filter/base --exclude-dir=./cache --exclude-dir=./plugins .
  • recherche de "Nouveau" dans les templates et dans les formulaires
$ symfony grep Nouveau --templates --forms -n
$ grep "Nouveau" -r --color=always -i -n ./apps/*/modules/*/templates ./lib/form/*.php

lundi, janvier 19 2009

Vim surround

J'aimerais présenter l'extension Surround qui permet de jouer avec les délimiteurs.

Ce plugin permet d'ajouter, supprimer ou remplacer n'importe quel délimiteur : parenthèses, crochets, tags HTML ou autre.

Exemple :

var_dump($contact["name"]);

Remplaçons les guillemets par des quotes avec cs"' :

var_dump($contact['name']);

Supprimons var_dump avec dw puis les parenthèses avec ds( :

$contact['name'];

Mais c'est là que je gagne surtout du temps : si je veux utiliser la fonction format_text() en lui donnant comme paramètre $contact'name', je sélectionne en mode visual avec la souris le texte (sans le point-virgule) puis je tape sf puis je tape le nom de la fonction et Entrée. Cela donne :

format_text($contact['name']);

Pour que cela fonctionne il faut avoir placé dans le ~/.vimrc :

vmap <Leader>s <Plug>Vsurround
set mouse=a

Veuillez consulter la doc pour plus d'exemples sur ce plugin redoutable.

vendredi, janvier 16 2009

2.6.26 et HP Proliant ML 350 G*

Quelque petits soucis lors d'un upgrade kernel sur un HP Proliant ML350 G3.

L'action : mise à jour noyau du 2.6.18-6-686 Debian vers un 2.6.25-bpo.1-686 puis 2.6.26-bpo.1-686

Le résultat : après les reboot nous obtenions :

[ 115.293610] virtual[3035]: segfault at 9bd844b8 ip b7c92d5b sp bfcde0d0 error 4 in libc-2.3.6.so[b7b96000+127000]
[ 117.156483] smokeping[3029]: segfault at 9be1c4b8 ip b7f5ed5b sp bfbec9ac error 4 in libc-2.3.6.so[b7e62000+127000]
[ 119.843435] authdaemond[2700]: segfault at 9bfa34b8 ip b7ebed5b sp bfe551b0 error 4 in libc-2.3.6.so[b7dc2000+127000]
[ 119.850857] authdaemond[3193]: segfault at 9bfa34b8 ip b7ebed5b sp bfe551b0 error 4 in libc-2.3.6.so[b7dc2000+127000]
[ 119.861912] authdaemond[3197]: segfault at 9bfa34b8 ip b7ebed5b sp bfe551b0 error 4 in libc-2.3.6.so[b7dc2000+127000]
[ 119.881931] authdaemond[3204]: segfault at 9bfa34b8 ip b7ebed5b sp bfe551b0 error 4 in libc-2.3.6.so[b7dc2000+127000]
[ 123.437760] authdaemond[3209]: segfault at 9bfa34b8 ip b7ebed5b sp bfe551b0 error 4 in libc-2.3.6.so[b7dc2000+127000]
[ 126.109079] sympa.pl[3223]: segfault at 9b9884b8 ip b7e94d5b sp bfb22d6c error 4 in libc-2.3.6.so[b7d98000+127000]
[ 126.122140] authdaemond[3215]: segfault at 9bfa34b8 ip b7ebed5b sp bfe551b0 error 4 in libc-2.3.6.so[b7dc2000+127000]
[ 126.510816] authdaemond[3225]: segfault at 9bfa34b8 ip b7ebed5b sp bfe551b0 error 4 in libc-2.3.6.so[b7dc2000+127000]
[ 127.022884] archived.pl[3237]: segfault at 9b9da4b8 ip b7ee5d5b sp bfb745ac error 4 in libc-2.3.6.so[b7de9000+127000]
[ 127.936428] task_manager.pl[3240]: segfault at 9ba634b8 ip b7f6ed5b sp bfffba2c error 4 in libc-2.3.6.so[b7e72000+127000]

avec les deux version et reproductible à chaque fois.

La libc faisant plus que rarement des segfaults nous sommes orientés vers un problème mémoire puis matériel mais après moult tests, que néni, rien de tout cela.

En grattant un peu plus loin nous avons trouvé dans /var/log/dmesg.*.gz :

[ 0.000000] ------------[ cut here ]------------
[ 0.000000] WARNING: at arch/x86/kernel/rtc.c:124 mach_get_cmos_time+0xb6/0x161()
[ 0.000000] Modules linked in:
[ 0.000000] Pid: 0, comm: swapper Not tainted 2.6.26-bpo.1-686 #1
[ 0.000000] [<c0122587>] warn_on_slowpath+0x40/0x66
[ 0.000000] [<c02b42ea>] cpu_init+0x233/0x23b
[ 0.000000] [<c0122e00>] vprintk+0x21f/0x2e1
[ 0.000000] [<c0389f31>] init_apic_mappings+0x2a8/0x2c2
[ 0.000000] [<c02b9dab>] _spin_lock_irqsave+0x16/0x2f
[ 0.000000] [<c02b9e39>] _spin_unlock_irqrestore+0xd/0x10
[ 0.000000] [<c0122a2d>] release_console_sem+0x173/0x18c
[ 0.000000] [<c0122eb6>] vprintk+0x2d5/0x2e1
[ 0.000000] [<c0108f00>] fpregs_get+0x20/0xcc
[ 0.000000] [<c0391f1d>] __alloc_bootmem_core+0x129/0x2ba
[ 0.000000] [<c010872b>] rtc_cmos_read+0x5f/0x66
[ 0.000000] [<c01089c9>] mach_get_cmos_time+0xb6/0x161
[ 0.000000] [<c01088d5>] read_persistent_clock+0x14/0x27
[ 0.000000] [<c0390792>] timekeeping_init+0xc/0x12f
[ 0.000000] [<c03902b3>] pidhash_init+0x5f/0x8a
[ 0.000000] [<c037f722>] start_kernel+0x19b/0x2d7
[ 0.000000] =======================
[ 0.000000] ---[ end trace 4eaa2a86a8e2da22 ]---0

Ouch! vilain.

Puis grâce à ce cher Google nous avons découvert ce joli bug RTC du kernel qui semble être spécifique aux HP Prolaint ML350 G*

https://bugs.launchpad.net/debian/+source/linux-2.6/+bug/314378

En suivant le lien redhat-bugs #451188 en haut de page nous constatons qu'il est signalé que ce bug est corrigé dans la branche Git du 2.6.27 de Linus.

Un peu de patience avant les upgrades sur ce type de hardware :).

Propel Criteria Builder

Symfony propose les ORM Propel ou Doctrine par défaut.

L'ORM est censé simplifié l'écriture des requêtes. Cependant le développeur maîtrisant bien le langage SQL saura sans difficulté exprimer une requête SQL mais devra réfléchir pour être capable de l'exprimer dans l'ORM.

Si vous utilisez Propel, voici un site qui propose de construire le Criteria Propel à partir d'une requête SQL, ou même d'une sous-partie de requête SQL.

Par exemple, si j'entre ceci :

contact.id NOT IN (1,2,3)

Le code suivant sera généré :

$c = new Criteria();
$crit0 = $c->getNewCriterion(ContactPeer::ID, array(1,2,3), Criteria::NOT_IN);
 
// Perform  at level 0 ($crit0 )
 
 
// Remember to change the peer class here for the correct one in your model
$c->add($crit0);
$result = TablePeer::doSelect($c);
 
// This loop will of course need to be edited to work
foreach ($result as $obj)
{
	//$val = $obj->getValue();
}

Reste à adapter ce code à notre application.

mardi, janvier 13 2009

Vim aligne

Par défaut Vim ne permet pas d'aligner verticalement plusieurs lignes entre-elles et cela me manque.

Je m'explique, prenons ce code (moche) :

array(
   'id' => 23,
   'name' => 'Jean-Charles Huet',
   'age' => 58
   )

Nous aimerions qu'il ressemble à :

array(
   'id'   => 23,
   'name' => 'Jean-Charles Huet',
   'age'  => 58
   )

Le plugin Vim «Align» permet cela : http://www.vim.org/scripts/script.p....

Sélectionner les lignes avec Shift-v puis taper

:Align=>

Cela fonctionne avec n'importe quel(s) caractère(s) d'alignement donc on peut aligner des affectations, etc.

lundi, janvier 12 2009

Symfony VlaDatePickerPlugin : intégration d'un widget Javascript

J'ai diffusé mon premier plugin pour Symfony. Il permet d'utiliser le widget Javascript Vla Date Picker.

Ce widget offre l'avantage d'être programmé en MooTools.

Pour l'instant il n'existe que très peu de plugins Symfony pour des widgets MooTools, la communauté utilisant plus volontiers JQuery. Mais nous qui souhaitons diffuser ce fabuleux framework Javascript qu'est MooTools, voici un premier (embryon de) plugin.

eeVlaDatePickerPlugin chez Symfony

dimanche, septembre 9 2001

GPL, kesako ?

Article rédigé par Florent Jugla, fondateur de la société ELEDO

Le but de ce article est de répondre à des questions simples et pratiques à propos de la licence GPL.

Cet article est basé sur les textes contenus dans les sites suivants :

Qu’est ce que la licence GPL ?

La licence GPL (GNU General Public License) est une "licence de logiciel libre" :

  • "licence de logiciel" car elle définit un cadre d'utilisation fixé par un programmeur sur son logiciel.
  • "libre" car le cadre d'utilisation défini par cette licence est - contrairement aux licences classiques - de s'assurer qu'un certain nombre de "libertés" seront respectées sur le logiciel protégé par celle-ci (ou sur tout logiciel en dérivant).

Pour R. Stallman (inventeur de la GPL), les "libertés" sur un logiciel sont :

  • liberté d'exécuter le logiciel, et ce pour n'importe quel usage;
  • liberté de modifier le logiciel pour l'adapter à ses besoins (dans la pratique, cela nécessite l'accès au code source);
  • liberté de redistribuer des copies, soit gratuitement, soit contre rémunération;
  • liberté de distribuer des versions modifiées afin que la communauté du logiciel libre puisse en profiter.

La licence GPL est basée sur la notion de "copyleft" (détournement du terme "copyright") :

  • la notion de "copyright" permet à l'auteur d'un logiciel propriétaire de bloquer les "libertés" sur son logiciel ;
  • au contraire la notion de "copyleft" permet à l'auteur d'un logiciel, d'être sûr que ces "libertés" seront bien respectées non seulement sur son logiciel, mais aussi sur tout logiciel dérivant du sien.

GPL Pratique

Placer un code sous licence GPL : (cf. gpl-howto.html)

Dans chaque fichier source, inclure en commentaires :

  • une ligne de copyright 'Copyright 2001 '
  • une déclaration sur les droits de copie précisant que le programme est distribué sous les termes de la Licence Publique Générale GNU.

Ajouter un fichier COPYING contenant le texte de la licence GPL.

A l'heure actuelle, seule la version anglaise peut être utilisée.

Réutilisation de code GPL par un programmeur :

  • les fichiers sources présents dans la versions originales et qui ont été modifiés peuvent porter le 'copyright' du programmeur. Cependant, le ou les 'copyright' déjà présents dans le source original ne doivent pas être effacés.
  • les nouveaux fichiers source de cette version du logiciel portent seulement le 'copyright' du programmeur.

Points importants :

Le fait de placer son code sous licence GPL assure que ce code ne sera jamais "fermé".

Toute utilisation ultérieure de ce code devra être faite dans l’ "esprit" GPL.

Un logiciel construit à partir de briques de code GPL peut être commercialisé .

En fait, même de simples copies du logiciel GPL initial peuvent l’être, les seules restrictions sont :

  • que les codes sources doivent être présentés à l'acheteur ou à toute personne qui le demande, et ce sans surcoût sur le logiciel (mis à part le coût de copie physique de ce code source).
  • que la licence GPL doit être conservée dans chaque copie du code.
  • En usage interne, on peut tout faire avec du code GPL ; une société peut ainsi utiliser du code GPL pour ses logiciels internes, sans avoir de comptes à rendre à personne.
  • Il ne faut pas confondre GPL et "Open Source". Si tout code GPL est automatiquement "Open Source", la réciproque n’est pas vraie. Il existe un tas d’autres licences à caractères "Open Source", mais qui sont différentes de la licence GPL.

Aspects "philosophiques" et implications de la licence GPL

L’un des aspects les plus intéressants de la licence GPL est qu’elle a permis l’émergence d’une "communauté du logiciel libre". Cette communauté rassemble un grand nombre de personnes autour de thèmes communs :

  • Lutte contre les monopoles, favorisation de la concurrence : la licence GPL favorise la concurrence puisqu’elle assure à toute personne la possibilité d’améliorer un logiciel et de pouvoir profiter de fruits de son travail. Dans le même sens, elle empêche des monopoles (du type Microsoft) de se constituer.
  • Brevetabilité sur les logiciels : bien qu’en pratique, la licence GPL n’ait aucun rapport avec la question de brevetabilité sur les logiciels, la communauté du logiciel libre est fortement impliquée dans la lutte contre celle-ci. En effet, les thèmes défendus par la communauté du libre (favorisation de la concurrence, lutte contre les monopoles, aspects démocratiques) rejoignent les critiques formulées à l’encontre de la brevetabilité sur les logiciels. (cf. savingeurope.fr)
  • Informatique et démocratie : l’introduction de l’informatique dans le processus démocratique se fera dans un avenir proche ; on peut penser que cela sera réalisé dans la pratique par des logiciels placés sous des licences de type "libre". A ce propos, voir : Trois députés proposent de généraliser l’usage des standards ouverts, l’accès au code source et introduisent le "droit à la compatibilité" : ( cf. prop. loi)

Note : il est intéressant de remarquer que, lors d’un vote en France, les urnes sont transparentes. L’urne de demain - l’ordinateur et le logiciel de vote qu’il héberge - devront eux aussi être "transparents". Cette transparence ne pourra être assurée que si chacun a la possibilité physique d’accéder au code du logiciel.

Critiques sur la GPL

La licence GPL est proche de la notion de "démocratie à l’américaine" - citons Stallman, auteur de la GNU GPL :Le mouvement pour le Logiciel Libre a été fondé en 1984, mais son inspiration provient des idéaux de 1776 : liberté, communauté et coopération volontaire. C’est ce qui conduit à la libre entreprise, au droit à la parole et au logiciel libre.