Billets du sujet Développement
Mes pensées instantanées
- 12/11/2016
Docker : nettoyer après usageDepuis quelques mois, j'utilise abondamment Docker, l'environnement de conteneurs facile à utiliser. C'est excessivement pratique pour tester un script, un logiciel si l'on veut éviter de pourrir sa machine de travail, ou reproduire un environnement. J'ai commencé à l'utiliser pour tester manuellement la configuration de deux serveurs Mysql en réplication, et depuis je suis persuadé que pour un développeur ou un adminsys, c'est assez inratable aujourd'hui.
Par contre, Docker accumule facilement des images inutilisées, des containers non arrêtés, des volumes obsolètes. J'ai donc collecté les astuces ici et là pour en faire un script de nettoyage, qui se trouve sur mon compte Github. A lire avant d'utiliser, il efface notamment tous les containers arrêtés, ce qui peut ne pas correspondre à votre besoin.
- 07/11/2016
Je cherche un collègue adminsysMon employeur embauche un adminsys. Que dire de plus qui ne soit pas dans l'annonce ?
Ambiance humaine, logiciels Opensources en général (y compris en interne), automatisation, Hébergement Agrée de Données de Santé, HA et sécurité à différents étages. Pour les mots clefs techniques qui comptent pour moi en ce moment sont Linux, Docker, Ansible, devops, Vmware. On a largement la place pour des gens qui rentrent pas tout à fait dans les cases, qui vont vouloir faire bouger pour aller chercher le mieux.
Je dirais surtout de venir nous parler, nous poser des questions, en ligne ou IRL. Le facteur humain est important tant pour vous que pour nous.
Pour ma part, pour situer, je suis développeur de formation, j'ai assumé l'infrastructure d'hébergement quelques temps et j'assume maintenant un rôle devop depuis que de vrais admins ont rejoint l'équipe.
- 27/10/2016
Utiliser un autre outil que le dockerfile pour construire une image DockerDans le cadre d'un projet, j'ai eu besoin de déployer Pentaho DI en l'emballant dans un container Docker pour faciliter le déploiement. Je manquais un peu de temps, et j'avais déjà écrit un playbook Ansible pour un déploiement serveur. La solution simple, un peu trichée, qui a été retenue fut :
- un Dockerfile minimaliste qui installe quelques paquets et un script entrypoint dans une image de base
- le script entrypoint qui lance le service Pentaho DI (qui n'est pas encore présent au moment de sa création)
- un inventaire Ansible qui précise l'option "ansible_connection=docker" derrière le nom du container
- un script bash qui construit l'image, lance un container, exécute le playbook pour installer le logiciel, puis exporte le container sous forme d'une nouvelle image
C'est cette dernière image qui servira à démarrer les containers.
Cette astuce me mène à l'idée qu'il est possible d'utiliser n'importe quel outil de provisionning ou scripting en lieu et place du script Dockerfile. Ansible est bien plus puissant et concis par exemple, et je peux utiliser des scripts existants pour fabriquer des images Docker. Il suffit ensuite d'avoir un serveur de build qui les construise et les pousse dans ma registry privée, et cela revient quasiment au même.
Le script de build ressemble à cela :#!/bin/bash
image=pentahodi_base
image_done=pentahodi_full
cnt=pentaho_cnt
source=<> #chemin contenant le zip de PentahoDI
pathAnsible=<> #dossier de mes playbooks Ansible
docker build -t $image .
docker kill $cnt 2>/dev/null
docker rm $cnt 2>/dev/null
docker run -d --name $cnt $image
echo "$cnt ansible_connection=docker" > inventory.txt
docker cp $sources/pdi-ce-6.0.1.0-386.zip $cnt:/space/pentaho/
ansible-playbook -i inventory.txt $pathAnsible/pentahodi/pentahodi.yml
docker exec -ti $cnt rm /space/pentaho/pdi-ce-6.0.1.0-386.zip
docker exec -ti $cnt rm /etc/apt/apt.conf.d/01proxy
docker commit $cnt $image_done
docker save $image_done | gzip > ~/pentahodi_complet.tgz
docker kill $cnt 2>/dev/null
docker rm $cnt 2>/dev/null
- 22/08/2016
Programmer, une écriture comme les autresL'article "If You’re a Programmer, Your Brain Could Be Priceless to Science. Here’s Why" annonce que l'étude va être prolongée pour en tirer des conclusions définitives, mais c'est une idée courante dans certains cercles professionnels, et je la partage. Programmer, c'est (presque) comme écrire, nous faisons le même travail de manipulation de sens, de signifiants, avec la complexité de reconnaître et utiliser des modèles, des structures, des mots.
Scientists are studying programmers as they create code in order to discover if this is more of a mathematical cognitive task or a language task. Using MRIs and other types of brain scans, they are intrigued by the connection between the creativity usually displayed by foreign language learners and the way programmers handle the highly complex task of writing code. The brain normally has a completely different set of reactions when exposed to mathematical problem solving
Dr. Janet Siegmund and a team of international scientists have recently been studying programmers as they have been comprehending short source code snippets. It was hoped that specific brain regions that dealt only with code would be indicated.
Several brain regions were finally located that had direct input into the process: language processing, attention span, and working memory were all included. The ventral lateral prefrontal cortex was heavily involved. Dr. Siegmund says that much more detailed study is needed before anything like an exact mapping can be done.
Initial conclusions from the study indicated that language and memory skills were much more highlighted than mathematical ability. This might be good news for prospective programming students who are strong in language skills but rather less so in math.
- 12/05/2012
Virtualbox et performance réseaux pour le développeurJ'utilise largement dans mon travail des machines virtuelles, actuellement en utilisant Virtualbox même si deux collègues m'ont motivé pour essayer KVM et ses différentes surcouches (proxmox, gnom-virt). J'ai notamment créé des machines de build dédiées, embarquant dans une même entité dédiée tous les outils, le code, les informations (synchronisées via SVN entre les différentes instances de ces machines). Une machine de build, comme son nom l'indique, fadrique des choses, en l'occurence des paquets d'installation de logiciels, voire des ISO de CD ou DVD à graver.
L'évident besoin est de transférer les fichiers produits. J'ai une machine virtuelle chez moi, l'autre au boulot, les deux sont dédiées à la génération d'un fichier ISO de 600Mo, que je transfère ensuite sur ma machine physique pour les graver ou les transférer ailleurs. Or le transfert plafonnait à 15Mo/s chez moi, et à 25Mo/s au bureau, alors que les machines ne sont pas très différentes. La différence venait de la carte réseau virtuelle utilisée. En passant les deux sur la carte "réseau paravirtuel", le transfert pointe à 35Mo/s quand le disque n'est pas trop occupé par ailleurs, ce qui approche le débit de copie d'un fichier entre deux dossiers du disque.
Cette simple modification de la configuration me fait gagner plusieurs dizaines de secondes à chaque fois, fluidifiant la construction et le déploiement des paquets un peu plus, et rendant l'outil un peu plus efficace et agréable à utiliser.
- 03/04/2011
Tests utilisateurs ou créateurs en tour d'ivoire?L'article User led innovation cant create breakthroughs, just ask Apple and Ikea (l'innovation dirigée par les utilisateurs ne peut provoquer d'innovation, demandez à Apple et Ikea) a provoqué chez moi une réflexion assez perturbante.
Je rejoins totalement l'auteur de l'article pour que les créatifs n'abandonnent pas toute volonté de diriger la création. C'est leur formation, leur métier, leur occupation quotidienne. Mais cela n'empêche pas de recueillir les commentaires des utilisateurs, en proposant des innovations et en explorant la réaction du public visé.
La lecture est arrivée alors que je me préparais à montrer à mes utilisateurs le futur logiciel de forum pour integralsport.com, c'est à dire à demander à des archers, membres et utilisateurs de l'actuel forum, de commenter mon travail et de m'aider à avancer. L'article est argumenté, et se base sur des références de produits grands publics.
Sauf que!...
- 27/03/2011
De la motivation par les utilisateursIl y a quelques jours, je me suis décidé à rendre AgorArcherie public, sur mon blog mais surtout sur le forum Integralsport.com, qu'il fera tourner dès qu'il en sera capable. La discussion qui s'en est suivi a produit l'effet escompté.
Le but était annoncé franchement : me remotiver. J'ai commencé AgorArcherie en février 2007, ce qui signifie que j'avais déjà travaillé un peu avant sur la maquette, les idées, les moyens. Il y a eu des périodes très efficaces, et des grands blancs déserts de toute avancée. Parce que j'avais d'autres préoccupations, d'autres projets qui ont pris la place, mais aussi parce que le défi est de taille, et que tenir sa motivation dans le temps n'est pas facile.
Depuis longtemps je suis persuadé que j'ai besoin de travailler pour des "clients" concrets, des gens que je peux rencontrer, qui peuvent commenter mon travail. Le développement logiciel n'a que deux limites : l'imagination et le temps. Il est donc important d'avoir un guide, un retour sur ce que l'on fait. Donc un contact direct avec l'utilisateur, ou selon les cas un responsable de produit au sens Agile.
Ici, mes "clients", ce sont les utilisateurs du forum, les régulier s comme les occasionnels, les simples membres, les rédacteurs et les modérateurs. La solution simple était donc de leur demander leur avis, et pour l'instant ils assurent! On va essayer un Perfection Game par forum interposé pour activer les idées.
- 23/03/2011
Bienvenue à AgorArcherieJe dois être un peu fou dans ma tête, c'est fréquent dans mon métier. Après avoir développé un CMS, je me suis lancé dans l'écriture d'un forum pour le web. AgorArcherie est en chantier depuis quelques années maintenant, par vagues sporadiques de développement séparées par des moments de préoccupations autres. Le but est de remplacer PHPBB2 sur le forum de tir à l'arc Integralsport que je gère.
Le but est qu'il soit rapide, facile à utiliser, et facile à modifier pour pouvoir expérimenter autour de la communication et de la gestion de la connaissance.
Après y avoir longtemps pensé je le rend maintenant public, espérant que la pression de la foule me poussera à avancer un peu plus vite.
La page de présentation est ici : AgorArcherie
La démonstration est là : cedricg.ouvaton.org
Voilà, foule, je suis tout à toi ;-)
- 14/08/2010
De la dette technique dans un projetJe parlais il y a peu de la dette temporelle que l'on accumule parfois dans sa vie, et de ces temps de pause qui permettent de l'éponger, voire du plaisir de reporter vers eux tout ce qui n'est pas urgent.
Dans un projet logiciel on peut avoir une dette temporelle, qui en générale se transforme en date de livraison qui glisse, mais on a également une dette technique : l'accumulation de la non-qualité, l'ensemble des petites choses dont on n'est pas très content mais que l'on reporte à plus tard, à quand on aura le temps. Les fonctions trop grosses. Les configurations mal faites. Le code peu lisible. Tout ce qui n'empêche pas le programme de tourner, mais qui va se révéler la prochaine fois que l'on touchera à ce code, ou quand on voudra l'installer ailleurs.
Ce "plus tard" n'existe que sous une seule forme : la pause qualité...
- 17/12/2009
Soyez brut et fruste... pour commencerJe souhaite, pour chaque projet sur lequel je travaille, pouvoir déterminer la couverture du code assurée par les tests unitaires. En gros, repérer les portions du code qui ne sont pas exécutées pendant les tests, et donc dont les erreurs ne pourront pas être détectées automatiquement.
Quelques écueils dans mon projet :- entre Windows et Linux la ligne de commande change un peu, les chemins notamment
- d'un poste à l'autre je ne souhaite pas forcément stocker les fichiers au même endroit
- Entre Linux et Windows je n'ai pas de langage commun nativement, donc soit je scripte en PHP, soit j'installe bash pour Windows, soit...
Bref, toutes choses fort simples mais qui demandent de mettre en place une petite abstraction, de tester sur les différentes machines, de résoudre des cas particuliers sur chacune peut-être... En sachant qu'il faut déployer les nouvelles versions sur chaque machine, ce qui peut être fréquent en phase de développement.
La solution est d'explorer en évitant un maximum de perte de temps. J'ai donc simplement écrit un script pour chaque plateforme, pour un seul projet, et j'ai tout stocké via le dossier SVN de ce projet...
- 16/12/2009
Installer ailleurs pour améliorerParfois les évènements se combinent si bien qu'il semble que le hasard souhaite me faire écrire sur un sujet précis. Ou alors est-ce juste que je suis à l'écoute de certains incidents, et prêt à les comprendre?
Ce matin, mise à jour via SVN d'un projet, je lance ses tests unitaires... qui cassent alors qu'ils étaient bons hier. Bons sur une autre machine, je veux dire.
Hier, je termine un développement PHP, et je le livre sur le serveur de recette. Cinq minutes plus tard, mon chef me signale un bug, juste ce que je n'ai pas pensé à tester évidemment. Pourtant, sur mon poste de développement, tout était correct!
Évidemment, à chaque fois c'est lié à un petit défaut rendu visible par le déploiement sur une autre machine. Défaut qui se serait vu de toute façon lors de la mise en production...
- 15/12/2009
Efficacité et interruptionsDans une optique d'efficacité les méthodes d'auto-organisation conseillent toutes de limiter au maximum les interruptions et les changements de tâches, bref, le papillonnage et les collègues qui viennent taper sur l'épaule pour parler de tout autre chose que la tâche en cours.
Les conseils vont d'apprendre à dire "non" jusqu'à placer un drapeau de pirate au dessus de son écran quand on est en immersion dans une tâche difficile... enfin bref de signaler aux passants que l'on TRAVAILLE bordel de code!
L'autre soir, quand un collègue m'a interrompu pour me parler du nouveau méga-projet de l'équipe, genre le projet qui va nous occuper pendant 6 bons mois, nous pousser à sortir nos tripes pour aller un peu plus loin que la normale, enfin bref, le projet super-tripant où on va apprendre et expérimenter pleins de choses, j'aurais vraiment eu mal au cœur de repousser la discussion.
Mais après avoir passé une bonne journée à travailler, une journée productive, accepter l'interruption est possible... quand elle en vaut la peine. Elle la valait, je glisserai peut être des scories du projet sur ce blog dans les mois qui viennent.
- 09/12/2009
Pourquoi les développeurs craignent?La question est agressive, elle vient de l'article Why programmers suck, qui est effectivement assez agressif, mais qui est probablement dans le vrai.
L'argument principal de l'auteur est que la majorité des développeurs (80 à 90%) ne maitrisent pas techniquement les outils qu'ils utilisent, en l'occurrence les langages, les OS, les supports physiques. Et de ce manque de connaissances découlent des erreurs, un code moins efficace et moins lisible. De la complexité inutile, en somme. Le plus grave n'est pas le manque de connaissance, mais le fait de ne pas savoir ce que l'on ne sait pas. Ce n'est pas limité à la création de logiciels, mais c'est particulièrement handicapant.
Une citation qui résume son point de vueThey were just mimicking the mistakes of other programmers–copying code and typing more-or-less meaningless incantations at the machine in the hope that it would behave like they wanted, without any real understanding of the mechanics of the computer, the principles of software design, or the meanings of each individual word and symbol they were typing into the computer.
soit...
- 03/12/2009
Comment interdire tous les mots clefs MysqlDans une application qui permet à l'utilisateur de saisir les noms des champs d'une table Mysql on voulait interdire tous les mots clefs SQL possibles. Mais si on se contente d'une liste il est facile d'en oublier un, difficile de vérifier qu'ils y sont tous. Les futures versions du moteur de base de données peuvent allonger la liste, ce qui nous oblige à la maintenir en suivant les évolutions.
Une maxime de eXtreme Programing est "demande au système". Evite de faire le travail toi même, de tenter de deviner, alors que le système peut te donner l'information. Le système étant Mysql, comment lui demander si un terme est un mot clef?
La solution trouvée est simple et semble solide :select 1 as MOT
En remplaçant MOT par celui qu'on veut tester, si la requête passe c'est que le mot n'est pas réservé, sinon la requête est refusée car invalide.
- 12/11/2009
Forum PHP : ce que j'ai besoin d'apprendrePlus j'avance dans mon parcours professionnel, et plus le besoin d'apprendre s'affine. Au départ, il me fallait "apprendre le métier" à l'école. Puis il m'a fallu "vraiment apprendre ce qu'est le métier" lors de mes premiers contrats (parce que l'école n'apprend pas tout). Ensuite j'apprends de mes erreurs, j'apprends les technologies que j'utilise pour telle ou telle mission. J'apprends à mieux organiser, à mieux planifier, à me concentrer sur la livraison de valeur pour le client, à écrire un code plus clair et des jeux de tests plus cohérents.
Mais apprendre a aussi un versant plus abrupte : il me semble nécessaire d'avoir un plan d'apprentissage, qui vise à m'enseigner les choses utiles et nécessaires sans attendre de les rencontrer. Pour pouvoir par exemple utiliser tel nouveau langage parce qu'il est parfaitement adapté, ou tel framework, ou proposer une pratique d'équipe aux collègues. Pour insérer dans mon quotidien quelque chose de totalement nouveau que l'évolution au jour le jour aura du mal à proposer...
- 22/10/2009
Mon bureau Windows : logiciels en accès rapidePassant en moyenne huit heures par jours sur mon ordinateur au travail, j'ai cherché à en optimiser l'usage. Je vais présenter là où j'en suis arrivé en quelques billets.
On commence par le menu Démarrer. Sur l'image ci-contre, c'est le petit "S" noir, qui prend bien moins de place que le bouton vert standard. J'ai obtenu cela avec TClock Light, qui permet de configurer finement l'affichage de horloge. Le but est clairement d'utiliser plus efficacement la largeur.
Mon horloge m'affiche simplement "(22) 19:37", soit le jour du mois et l'heure.
Ensuite, la barre d'outils "Lancement rapide", déployée sur l'image, et qui regroupe les logiciels que je lance le plus souvent, plus deux dossiers et un sous menu. Le dossier WWW pointe vers le documentroot de mon dossier Apache, qui contient tous mes projets web, alors que le dossier Ma boite amène à mon dossier personnel sur le serveur de fichiers. Le sous-menu Autres (lui aussi déployé) regroupe les logiciels utilisés un peu moins souvent mais utiles quand même.
Enfin, la barre d'outil "Bureau" juste à droite de la précédente m'affiche directement le contenu du bureau. Très utile puisque ce bureau me sert d'espace de travail, qu'il est vidé régulièrement et donc ne contient que le travail en cours. Je télécharge un fichier, il apparait ici. J'ai besoin d'ouvrir un document, j'y accède par là. Cela évite de fermer toutes les fenêtres puis de les ré-ouvrir juste pour toucher un fichier.
Le prochain billet concernera le Bureau, comment je l'utilise et quels outils m'y aident.
Et vous, chers lecteurs, quelles optimisations avez vous utilisé?
- 14/10/2009
Mysql : can't open file frm/mydDeux de nos serveurs produisaient cette erreur depuis quelques temps :
mysqldump: Got error: 1016: Can't open file: './base/sb_19458102558_group.frm' (errno: 24) when using LOCK TABLES
Ces erreurs survenaient lors d'un mysqldump, ou pendant l'exécution de nos applications. Comme le problème s'était aggravé depuis la mise en place d'une sauvegarde régulière, on craignait un soucis de verrous sur les tables...
- 07/08/2009
Grandir, est-ce avoir honte de son passé?Une citation d'un billet de Jeffrey Zeldman sur le blog de Gou a particulièrement résonné pour moi à l'instant.
«If your old work doesn’t shame you, you’re not growing.»
Alors oui d'un côté j'ai honte quand je revois mon second site, ou quand je repense à certains sites heureusement défunts (mais retrouvable via la machine à remonter le temps parfois).
Et en même temps je ne suis pas tout à fait content de mon site actuel, ou de ce que je fais, et c'est peut être ça le meilleur moteur : penser qu'on peut mieux faire.
Ceci étant, ce que j'ai fais dans le passé a fait de moi ce que je suis maintenant. Ce que je fais maintenant conditionne ce que je serai.
Donc j'ai honte mais je ne regrette rien.
- 10/07/2009
Des traces de notre travailSuite à ce billet de Djou, je me pose la question : quelles sont les traces du travail d'un développeur?
Je veux dire, en dehors de la valeur qu'il livre à son client (équivalent à la B.D. déposée chez l'éditeur)? Quid du code remanié, modifié, déformé (les croquis, crayonnés qui ne seront pas retenus)? Quid des idées, discussions qui n'ont pas été utilisées? Des erreurs, voies de garages qui ont été abandonnées?
A la rigueur, il subsiste l'historique du logiciel de contrôle de version, quelques croquis, ... et nos souvenirs qui ne s'attachent à rien de tangible.
- 10/06/2009
Cédric découvre le shell UnixL'une des raisons qui me font préférer Linux en tant que plateforme de développement est le shell. Il apporte une telle souplesse et puissance de traitement qu'aucune interface graphique ne pourra jamais égaler... sauf si la reconnaissance vocale évolue franchement, mais on sera alors plus proche de la ligne de commande que du clickodrome ;-)
Bref, j'ai récemment passé un serveur Subversion d'HTTP à HTTPS, ce qui est très facile mais implique de re-localiser tous mes dossiers de travail. Sous Windows et l'excellent TortoiseSVN, j'ouvre chaque dossier, je donne la nouvelle adresse, ...
Sous Linux, une ligne et c'est terminéfor i in *; do if [[ -d $i ]] ; then svn switch --username utilisateur --relocate http://ancienneadresse https://nouvelleadresse $i; fi; done
On pourrait même y mettre le mot de passe pour ne pas avoir à le coller à chaque fois, mais ça laisse des traces dans l'historique.
- 24/11/2008
Envoyer un fichier par courriel depuis un serveur UnixUne astuce à laquelle je pensais depuis quelques temps et que j'ai enfin pris le temps de bricoler : l'envoi d'un fichier depuis un serveur auquel j'accède en SSH. Avant, je me connectais en SFTP pour le récupérer, maintenant un simple
envoi.sh fichier.txt moi
Nettement plus simple!...
- 21/11/2008
Problème dans le dialogue
Il faudra un jour que j'écrive tout le bien que je pense de PHPEdit 3, outre le fait qu'il n'existe que sous Windows, mais ce genre de dialogue a tendance à me faire bondir. Pourquoi utiliser un dialogue standard et donner une table de correspondance plutôt que de personnaliser chaque bouton? Pourquoi ajouter une complexité?
- 15/10/2008
La route de l'agilité est encore longue...Quand je lis ce genre de phrase
Tous les développeurs le savent : toute fonctionnalité non prévue dans la conception originale rend toute l'application plus complexe et fragile.
sur un site aussi consulté que developpez.com, je m'inquiète fortement sur d'une part sur l'adoption larges des pratiques agiles, et d'autre part sur l'avenir de mon métier...
- 08/10/2008
Un peu de lectureDes articles que j'ai trouvé très pertinents mais pour lesquels je n'aurais pas le temps ou la motivation de faire un billet complet.
Des applications web simples nécessitent avant tout des processus simples : on parle de KISS, d'applications usines à gaz que veulent contenter tout le monde.
When It’s Ready : "The first and most important thing to state is that we, as a project, are quality driven, not date driven", tout est dit, et explique en bonne partie la qualité reconnue des logiciels libres.
Critical Vulnerability in Microsoft Metrics explique la prudence à avoir face aux métriques, surtout quand on s'en sert pour des objectifs commerciaux.
- 08/10/2008
Gestion de nombreux projets avec SubversionSubversion est un formidable logiciel pour gérer le code source, mais quand les projets se multiplient deux problèmes apparaissent :
- surveiller que tous les projets sont bien commité, qu'il ne reste pas de fichiers modifiés en local
- tenir à jour ses dossiers de travail par rapport au travail des collègues
L'image ci-contre montre la réponse de TortoiseSVN au premier. Pour le second, je me suis rendu compte que l'on pouvait sélectionner tous les dossiers de travail et demander leur mise à jour (svn:update).
En ligne de commande, on a également des solutions simplessvn status *
permet de lister les projets modifiés du dossier courant etsvn update *
met tous ces dossiers à jour.
Ceci étant, un petit panel de suivi ne serait pas de trop parfois.
- 07/10/2008
Mon PC se la pèteTous les PC testés jusqu'à maintenant mettaient 20 secondes à exécuter les 280 tests unitaires d'un projet. Mon nouveau PC n'en met que 13. Cela semble négligeable, mais quand on fait tourner les tests en permanence ce petit gain se multiplie, se multiplie, et au final c'est un vrai gain de confort et de temps.
- 05/10/2008
Hasta la Vista, crédibilité!Il faut faire attention à ce que l'on affirme, surtout quand c'est pour vendre, donc convaincre.
Je cite un article de Brain not found :Ca commence à grands renforts de publicités qui comparent, sans rire, le lancement de Vista à la conquête spatiale et aux premiers pas de l'homme sur la lune. Si. Et puis, c'est le responsable de la recherche en France qui affirme, dans les échos, que Vista est "probablement la chose la plus complexe jamais construite de l'histoire de l'humanité".
Que Vista soit complexe, je pense que beaucoup en sont persuadé. Surtout ceux qui l'ont essayé. ;-D Enfin ici je crois que l'on parle de complexité interne...
- 18/09/2008
Travailler chez soiBloqué chez moi hier pour régler un détail d'intendance, j'ai passé ma journée à télé-travailler. Tout était prévu pour : machines virtuelles utilisées, serveur SVN accessible, poste déjà installé, téléphone à portée de la main, ...
Le point intéressant est mon comportement : alors qu'au bureau je reste collé à mon siège toute la journée, ne le quittant que pour boire ou parler à un collègue, chez moi je me lève régulièrement, je fais quelques pas, tout en continuant à penser à mon problème du moment.
D'une part cela a des chances d'être meilleur pour la santé : un peu moins sédentaire, j'active la circulation sanguine, j'étire mes muscles. L'humain n'a pas été fait pour être assis, ne l'oublions pas.
D'autre part, il est possible que cela me permette de prendre un peu de distance avec la tâche en cours, ce qui me permet parfois de prendre une meilleure voie...
- 18/09/2008
Stack Overflow - débordement de bonnes chosesImaginez un site où peuvent être posées toutes les questions techniques, où les réponses restent accessibles sans frais, où chaque question est posée une fois pour toute. Le paradis du développeur!
Peut être qu'il existe enfin : Stack Overflow
Pas de limitation, on peut autant y parler de PHP que de configuration de serveurs.
Lancé par Joel Spolsky et Jeff Atwood, personnes que personnellement je considère comme intéressants (techniquement et de par leurs idées), le site a démarré très rapidement, preuve du besoin qu'il remplit et de la renommée des deux papas.
J'y ai posé quelques questions, j'ai eu des réponses rapides et intéressantes, qui m'ont permis de préciser ma question, et finalement d'apporter une réponse. Car c'est une particularité dans les sites d'entraides : on peut modifier ses questions et ses réponses, afin d'apporter au final la réponse absolue et définitive....
- 11/09/2008
De la simplicité comme d'une qualité essentiellePour étoffer mon billet d'hier sur les niveaux de compétences, je dirais qu'une qualité qui s'est développé chez moi depuis quelques années est la capacité d'écrire des logiciels plus simplement. Des logiciels dont la structure interne est plus simple...
- 10/09/2008
Niveaux dans le codeJe perçois dans mon évolution en tant que programmeur différents niveaux de compréhension, et les transitions entre eux me semblent séparées par de longs plateaux où l'on se prépare au bond suivant. Je ne parle pas là de compétences dans un langage ou un outil, mais dans la compréhension du code et la capacité à l'écrire....
- 05/09/2008
De l'intérêt des itérateurs pour la clarté du codeJ'ai commencé cette année à utiliser des itérateurs partout dans mon code. C'est extrêmement pratique dès que l'on doit parcourir des éléments : fichiers, enregistrements d'une base de données, entrées d'un tableau, etc...
Passons tout de suite à une implémentation rapide en PHP...
- 02/09/2008
Un éditeur de code Firefox?En tant que développeur utilitomane*, j'avoue que je ne trouve pas mon bonheur parmi les éditeurs disponibles. J'oscille en ce moment entre Scite et PHPEdit, avec un petit peu de Delphi 7 de temps à autre.
Le premier est très léger, se charge en un instant, propose le minimum vital et est très pratique. Le second est terriblement puissant, notamment dans ses aides à la manipulation et l'écriture du code, mais est un peu long à lancer, un peu trop complexe, et ses aides tombent parfois à côté de la plaque. Le troisième est juste vieux, et propose moins que le strict minimum.
Mais pourquoi titrer "éditeur de code Firefox" alors? Parce que Firefox est l'exemple personnifié et réussi d'un logiciel qui peut convenir au plus grand nombre. A la base FF propose un navigateur très simple, très facile à utiliser. Chacun est libre de le rendre plus puissant sur les aspects qu'il juge importants grâce aux nombreux plug-ins existants (avec la possibilité ultime d'en écrire).
On a donc le système idéal : suffisamment puissant pour le besoin, mais sans fonctionnalité inutile, et avec la possibilité de choisir parmi les modules celui qui colle réellement aux besoins...
- 29/08/2008
Sessions Core ProtocolsRésumé
ces sessions sont des rattrapages de sessions qui n'ont pu avoir lieu pendant le dernier XP Day Paris. Les Core Protocols sont des protocoles de communication au sein d'une équipe, visant à la rendre plus réactive et mieux alignées. Le jeu de la communication est une mise en situation pour "vivre in vitro" une situation conflictuelle et l'étudier sous différents angles...
- 28/08/2008
Gestion d'un traitement automatisé journalierMise en situation : chaque jour, mes calendriers Google, les bases de données de mes sites et pleins d'autres choses sont sauvegardés sur une autre machine. Le but est qu'en cas de problème sur le serveur j'ai toujours une sauvegarde récente (moins de 24 heures dans ce cas).
La solution est relativement simple, j'ai développé des scripts qui récupèrent les flux ou une copie des bases, scripts qui sont lancés par une crontab classique (qui exécute des tâches automatiquement, pour ceux qui ne connaissent pas Unix). Cela fonctionne bien, mais...
- 08/08/2008
Sauver des flux Google CalendarEn bon informaticien, je suis un peu paranoïaque et je sais bricoler des scripts automatisés. Cette seconde caractéristique trouve dans la première une source inépuisable de petites choses à faire.
Dernier exemple en date : j'utilise Google Calendar pour gérer mes calendriers, mais je me dis que le service pourrait avoir des coupures, ou brutalement ne plus être utilisable suite à un changement de politique chez Google. On n'est jamais à l'abri d'un problème de ce genre avec un service gratuit.
Donc j'ai pris le temps de scripter une sauvegarde des flux ICal et XML privés de tous mes agendas...
- 23/07/2008
Rendre les erreurs lisiblesSupprimant des lignes pour voir si elles servent à quelque chose (voir un précédent billet), je tombe sur cette erreur.
1) testMessages_FiltreChercher(IterateurMessagesTest)
Erreur SQL (champ inconnu : msg_id_fk) (SELECT DISTINCT dis_id AS id, dis_titre AS titre, DATE_ADD(m.msg_dateheure, INTERVAL 2 HOUR) AS dateheure, m.msg_etat AS etat, d.msg_id_fk
FROM aa_discussions AS d
INNER JOIN aa_messages AS m ON d.msg_id_fk = m.msg_id
INNER JOIN aal_sujets_discussions AS l3 ON d.dis_id = l3.dis_id_fk
INNER JOIN aal_groupes_sujets AS l1 ON l3.suj_id_fk = l1.suj_id
INNER JOIN aal_groupes_membres AS l2 ON l1.grp_id = l2.grp_id AND l2.mem_id = 0
WHERE dis_id = 1
AND ( ( m.msg_etat NOT IN ("censurer", "spam") AND ( m.msg_etat IN ("a_verifier", "valider", "en_discussion") OR m.mem_id_fk = 0 ) ) OR (0) ))
\code\classes\db_sql.class.php:18
\code\classes\db_sql.class.php:278
\code\classes\iterateurs.class.php:145
\testsUnitaires\code\dataobjects\messages.data.test.php:16
\testsUnitaires\code\dataobjects\messages.data.test.php:80
\testsUnitaires\index.php:128
J'ai la pile des appels de fonction, tous les endroits par où est passé le code, mais comprendre d'un coup d'oeil d'où cela vient... Le champ est inconnu, pourtant il est bien présent dans la requête. Quelle est cette diablerie?...
- 23/07/2008
La force du lego en programmationDe retour hier dans un autre code PHP longtemps négligé (décidément), j'ai vite repris mes repères et j'ai pu ajouter la fonctionnalité désirée (suppression de tous les messages classés comme spam en l'occurrence).
La tâche fut très simple : une classe me permet de sélectionner tous les messages concernés, une librairie me facilite l'itération sur le jeu de données retourné, et la classe précédente permet tout un tas d'actions.$messages=new CReponseListe($Session['site']);
$messages->Filtre(etatSpam, '');
$req = NewQuery($messages->SqlListe());
while($req->next_record()) $messages->Supprime($req->f('rep_ident'));
Rien à décider, rien à inventer, juste à me concentrer sur la fonctionnalité désirée. Et c'est très bien! Je pense que pour chaque projet il y a un temps pour innover, créer des outils, des librairies, des frameworks. Et un autre pour développer l'application fonctionnalité par fonctionnalité. Dans le premier on doit être créatif et à l'écoute des besoins du second, et dans l'autre on doit simplement utiliser ce que fournit le premier pour avancer. Empiler des briques pour obtenir la forme désirée. Jouer au lego, donc.
Il s'agit ici de changer de casquette explicitement, au moins pour soi même, et de ne pas mélanger les deux aspects. Le code fonctionnel ne sera alors que fonctionnel, métier, exprimant ce que l'application doit faire, et ne sera pas mélangé au code "outils", qui fournit des moyens.
PS: ce code a plus ou moins quatre ans. De nos jours la couche outils aurait un itérateur qui m'aurait éviter de devoir le faire explicitement.
- 23/07/2008
Revenir au codeDe retour sur un code un peu trop longtemps délaissé (un peu comme ce blog), je tombe sur ces lignes de PHP dans un bloc d'initialisation de test.
$Membre = new CMembres(0);
$Membre->LierAGroupe(1);
La variable $membre n'est utilisée nulle part ailleurs, pourtant quand je désactive l'une des lignes ou les deux, un test plante. Donc ces lignes sont utiles, mais en quoi?
Le "1" identifie un groupe créé un peu plus haut, c'est clair. la classe CMembres sert à manipuler la table éponyme et ses dépendances (les tables qui lui apportent des informations relationnelles). Par contre le "0"...
- 24/06/2008
De l'intérêt des formats d'échange standardIl y a quelques jours j'ai développé un micro-site web qui récupère des courriels (via IMAP), et qui affiche sous une forme très simple le contenu afin que je puisse le lire sur mon PDA ou mon téléphone portable.
Le cycle est simple : j'envoie un courriel, il est capturé par le programme tous les quart d'heure, et ainsi j'ai toujours de la lecture de disponible.
Aujourd'hui, j'ai commencé à utiliser la possibilité de Google Reader d'envoyer un billet par courriel pour pouvoir le lire par le même système. C'est simple, direct, je gagne du temps (je n'ai pas besoin de copier/coller le texte dans un courriel avant de l'envoyer). Et là, je suis content d'utiliser un mécanisme standard de communication* entre applications...
- 18/06/2008
Tout voir VS RechercheTodoGed* a un parti pris, décidé dès le début du développement : la manière la plus simple d'accéder aux projets et éléments mis en GED est un champ recherche, qui va filtrer immédiatement les projets, les tâches qui les composent, et les morceaux d'information glanés ici et là.
L'autre jour, je souhaitais retrouver l'adresse d'un bar qui organise des soirées pour échanger en japonais**. Je saisi "Japon" dans le champ de recherche, et je retrouve rapidement la note.
Régulièrement je dois conserver à portée de la main une masse de données que je vais utiliser prochainement, ou que je devrais revoir : je les range dans ma GED avec le mot-clef "todo" dans leur titre. Une simple recherche de cet anglicisme me fait retrouver toutes ces bribes qui concernent des sujets à traiter rapidement...
- 07/01/2008
Le danger des extensionsEn croisant une intéressante notice pour le développeur web (sur l'usage de plusieurs profils sous Firefox), je suis tombé sur cette réflexion pas très récente : Le danger des extensions...
- 23/11/2007
Un petit grain de selVoici une bonne démonstration qu'il est important de mettre un petit grain de sel quand on fait un hash MD5 de mot de passe...
- 08/10/2007
De l'impact des outils sur les (bonnes) pratiquesJe viens de découvrir FreeVcs, outil de versionnement intégrable facilement à Delphi, alors que je ne connaissais vraiment que SubVersion. Un point qui me choque est de devoir verrouiller un fichier avant de le modifier...
- 05/10/2007
Foutues erreurs silencieusesDéjà chez Bracer, quand je développais un automate elles me faisaient tourner en bourrique. Et là, elles sont encore présentes, alors que je pensais les avoir semé.
Des erreurs silencieuses, des CASE OF/SWITCH qui ne gèrent pas tous les cas possibles et n'ont pas de clause ELSE/DEFAULT; des IF qui vérifient la valeur de retour d'une fonction sans avoir de ELSE; et d'autres ignominies dans le même genre.
La petite différence est que je flaire assez rapidement les dessous d'un comportement anormal, et que maintenant je cherche l'erreur silencieuse...
- 26/03/2007
Sécuriser un script lancé régulièrementPetit incident récent : un script récurrent a mis la machine sur laquelle il tourne à genoux. Recherche et découverte du problème, et moyens d'éviter cela....
- 13/03/2007
Facilité de manipulation du schéma de baseExtrait d'un billet d'Egographie (aujourd'hui hors ligne apparemment)
Dans un court documentaire à l’entrée de l’exposition, Michel Serre rappelle que si les Grecs étaient de bons géomètres, ils étaient de piètres arithméticiens, handicapés par un système complexe de numération. Les Arabes, à l’inverse, disposaient de la notation des nombres qui nous est aujourd’hui familière, grâce à laquelle ils excellaient dans les calculs arithmétiques. Ils purent de ce fait compléter et perfectionner les principes mathématiques hérités des Grecs.
Au delà de l'aspect historique pur, je trouve un parallèle intéressant avec mon métier (créer des logiciels, pour ceux du fond de la classe). Le langage de base du domaine (dans l'exemple, le système de numération) est un paramètre important de l'efficacité. Plus les atomes support de notre réflexion sont faciles à manipuler, plus on travaille efficacement.
Traduit en développement logiciel, cela donne : un outil de programmation qui permet de se concentrer sur la tâche à réaliser, et non sur ses arabesques, et surtout un code lisible, cohérent, facile à lire et relire.
- 04/03/2007
rEvolution.comLe développement logiciel a à peine plus de 50 ans.
Les compilateurs ont pris en charge un travail auparavant fait par des humains.
Si je prend en compte ces deux faits, jeunesse du métier et changements passés, je me dis que rester bloqué sur des schémas anciens hérités d'une industrie qui les abandonne relève du suicide professionnel....
- 05/01/2007
Faiblesse des abstractionsJoel Spolsky (encore lui) a écrit il y a longtemps The Law of Leaky Abstractions, et je viens seulement de découvrir ce texte long mais limpide sur un aspect essentiel de mon travail de développeur. Citations marquantes et renchérissement personnels...
- 09/11/2006
De l'importance de ne pas trop pré-calculerUn copain m'a signalé un bug étrange de date sur le forum Integralsport : un évènement commençant le 23 mars 2007 se fini le 24 inclu s'il dure deux jours, et le 26 s'il en dure trois. Traque et élimination du bug au menu, et leçon de développement...
- 20/10/2006
Turbo Delphi : qu'est-ce que c'est?Comment écrire un texte qui n'informe absolument pas le visiteur d'un site. Démonstration sur un texte publicitaire Borland...
- 25/09/2006
Binômage via internetJuste pour pointer deux témoignages de binômage via Internet, l'un très synthétique et utilisable, l'autre plus descriptif (mais avec une expérience de co-rédaction du compte-rendu en plus).
Sinon j'ai testé...
- 07/09/2006
Ne suppose rien, teste-le!Souhaitant optimiser quelque peu une fonction de recherche d'élément dans un tableau un peu lente, je me suis penché sur une première optimisation assez basique, la recherche par dichotomie.
Son avantage est qu'elle réduit le nombre d'accès aux cases du tableau, et que son temps d'exécution n'évolue pas proportionnellement au nombre d'éléments. La seule contrainte est que le tableau doit être trié....
- 10/04/2006
Autre avantage des logiciels de contrôle de versionJe suis en train de changer de machine au boulot, et le code est ce qui a migré immédiatement, grace à subversion. Création d'un dossier, configuration de l'adresse du serveur, identifiant et mot de passe, quelques minutes pour récupérer les fichiers, et je peux immédiatement travailler. A côté, le courriel, les fichiers divers, les configurations des autres logiciels sont une plaie!
- 07/03/2006
Journaliser les erreurs, toutes les erreurs, et apprendreCela fait des années que mon gestionnaire de site internet, et tous les programmes que je réalise, remplissent un journal d'erreur. Traquer la moindre erreur est primordial pour améliorer réellement un programme, un peu comme un enfant apprend de ses faux pas. Et le journal est la seule manière de surveiller un logiciel web, un logiciel serveur qui interragit avec de nombreuses personnes. J'étais ...
- 21/02/2006
ServeurDix bonnes pratiques sur les logiciels serveurs en production que l'auteur semble trouver nécessaire au maintien de votre santé mentale. Pour ma part, je respecte les trois dernières dans toutes mes applications serveurs, par contre n'ayant pas encore à gérer des applications critiques les plans de seco...
- 14/11/2005
Après le forumLe forum est passé, et on en parle chez les copains :
- Perrick
- Jean-Marc
- Par ici pour la suite
- 11/11/2005
Voilà, c'est fini
Voilà, c'est fini
On a tant ressassé les memes théories
On a tellement tiré chacun de notre coté
Que voilà c'est fini
Trouve un autre rocher petite huître perlée
Ne laisse pas trop couler de temps sous ton p'tit nez
Car c'est fini...c'est fini
Jean-Louis Aubert
Le forum PHP 2005 s'est terminé ce soir sur un "goodby" à nos invit...
- 06/10/2005
LoiAu sein d'une équipe de développeurs, notament quand il y a une forte différence d'expérience, les plus anciens ont tendances à signaler aux plus jeunes leurs erreurs. Bien.
Sauf que pour des erreurs courantes (dans le formatage d'un source, dans le nommage d'une variable), et même pour les autres, édicter une loi n'avance pas à grand chose. Or annoncer "évite de laisser un fichier non versi...
- 04/10/2005
Agilité libre" a 'spec' is close to useless. I have _never_ seen a spec that was both big enough to be useful _and_ accurate. And I have seen _lots_ of total crap work that was based on specs. It's _the_ single worst way to write software, because it by definition means that the software was written to match theory, not reality " -- Linus Torvalds
merci Par ici pour la suite
- 21/09/2005
ForumPHP 2005Annonce officielle du site de la conférence PHP annuelle, enfin.
Je suis adhérent AFUP depuis l'an dernier, j'ai un peu donné la main mais compte en faire plus, et l'an dernier, c'était génial. Conférences intéressantes, techniques, l'ambiance, se retrouver entre professionels
et utilisateurs du libre, tout ça a contribué...
- 09/05/2005
Cohérence d'un système d'informationToujours pour mon "job" bénévole pour le CRIDF, je dois maintenir les classements, classements qu'en général j'extrais tranquillement à la main (voir le billet précédent).
Soucis, l'un de ces classements est faux, une erreur bizarre qui fait disparaitre les séniors d'un classement sur les cinq dont j'ai besoin. Comme la FFTA est dépendante d'un prestataire, que la bonne personne était en vaca...
- 04/05/2005
Ergonomie et extranetLa Fédération Française de tir à l'arc a mis un grand coup de collier, il y a de cela quelques années, pour mettre en place un système informatique efficace. Ils ont notamment la base des archers et tous les résultats à gérer. Ils ont pour cela recruté une société, qui a développé outre le système d'information un extranet permettant aux régions, départements, clubs et depuis quelques mois archers...
Rubriques des billets
- Agilité (22)
- Archerie (10)
- Avis (76)
- Cultures (26)
- Délires (44)
- Démocrachie (13)
- Développement (63)
- Développement web (36)
- Ergonomie (20)
- Geekerie (12)
- Inclassable (6)
- Informatique (27)
- Japon (9)
- Littératures (39)
- PHP (12)
- Poor Lonesome Coder (31)
- Régalons-nous (6)
- Sortons! (3)
- Travail (20)
- Vivre mieux (40)
- Voyages (4)
- Webmasteriat (20)
25/06/2017 - Systeme