Le redirection interne

Il est possible dans Apache, lors de la gestion de la requête, de faire une redirection interne, c’est à dire de faire croire qu’il y a eu une redirection, mais au lieu de la renvoyer au client, et que le client demande la nouvelle URL, elle est faite en interne. Pour pouvoir faire cela, deux possibilités :

  1. Location: http://olivier.pons.free.fr/apache/
  2. Location: /apache/

La première est basée sur la nature double de l’entête Location d’un script CGI : elle force à envoyer une redirection au client, alors que la seconde fait une redirection en interne, sans envoyer quelque chose au client.

Seule la seconde possibilité nous intéresse. Il est possible de le faire de deux façons dans un module :

  1. void ap_internal_redirect(
      const char *new_uri, request_rec *r)
    .

    Cette forme de redirection interne est le mécanisme à utiliser dans tous les cas à de rares exceptions près. Cette fonction crée un nouvel objet requête pour l’URL passée en paramètre, et lance la nouvelle requête comme si new_uri avait été demandée en premier lieu.

  2. void ap_internal_fast_redirect(
      request_rec *new_req, request_rec *r)

    Cette fonction clone une structure existante new_req dans la requête en cours afin de pouvoir mettre en place une nouvelle requête et simuler le fait qu’on lui passe le contrôle. Ce mécanisme est parfois utilisé pour promouvoir une sous-requête en requête principale. Ce qui est important de noter c’est qu’on ne repart pas de zéro, donc on ne refait pas complètement la requête.

Linux : ne jamais faire service network restart

Extrait de conversation :

  • Olivier : Bon j’ai essayé de faire une correction mais rien ne fonctionne. Une fois le fichier modifié, il faut redémarrer le démon qui gère les échanges réseau ou pas ? Si oui, comment ?
  • Pascal : Il ne faut rien redémarrer du tout, c’est immédiat. Attends je vais voir ce qui cloche.
  • Olivier : Ah. C’est ça : « service network restart » ? Je vais essayer.
  • Pascal : Ma session SSH vient d’être coupée, c’est normal ?
  • Pascal : Non !!! Ne JAMAIS faire un network restart sur un serveur qui a des sockets ouvertes !!!
  • Olivier : Arrrrgh ! Plus rien. Je suppose que ça met du temps mais il reste injoignable au bout de 2 minutes… Je stresse un peu.
  • Olivier : Aaaaaargh ! http://www.acarat.com/ ne répond plus ! Putain je vais crever.
  • Pascal : Pas étonnant… Si tu avais attendu mes conseils 5 secondes de plus ça ne serait pas arrivé. Maintenant je n’ai plus accès au serveur, donc tu es tout seul.
  • Olivier : Bon eh bien la solution c’est d’aller à Marseille c’est ça ? Comment un service network restart peut-il tout planter ? Si tout le réseau redémarre bien, normalement tout est ok non ?
  • Pascal : Ce script touche toute la chaîne de configuration du réseau, des allocations mémoires de la pile IP jusqu’à la gestion et les options des interfaces physiques. Si tu fais un restart alors qu’il y a du trafic sur des sockets, tu as toutes les chances de planter les processus qui les utilisent avec un bon gros kernel panic à la clé.
    En résumé, tu es bon pour un voyage à Marseille.
    Même si le fait de redémarrer les services réseaux ne provoque pas de plantage, il reste tout de même les règles IPTables qui sont vidées en même temps que les interfaces sont arrêtées !
    Donc avec un network restart, tu fermes tout simplement ton firewall à tout nouveau paquet entrant.
    Si c’est vraiment ce dont il s’agit, il aurait fallu faire :
    service network restart; sleep 2; /etc/fw/iptables.sh
    Et donc en ayant patienté quelques secondes de plus, ça t’aurait épargné un A/R à Marseille et une interruption de service de tes sites Internet d’au moins 1h30.

La leçon du jour :

Ne rien toucher quand on ne connaît pas à 100% les implications d’une commande !

Assurances et courtier : le principe général

Je répète volontairement souvent certains mots pour être sûr qu’ils sont utilisés clairement et aux bons endroits, ne vous affolez pas si vous lisez souvent courtier – apporteur – assureur :
Les personnes qui assurent sont des assureurs. Oui je sais ça parait stupide de le préciser mais c’est pour vraiment tout préciser. Une compagnie d’assurance est une compagnie créée afin de vendre de l’assurance.
Serge est un courtier : dans le monde des assurances, un courtier est quelqu’un qui a une liste d’assureurs (une liste de compagnies pour être exact) et propose à des gens (prospects qui deviennent clients, si tout va bien) les tarifs que lui ont fourni ses assureurs.
Olivier est un apporteur : il amène à Serge un nouveau contrat, par exemple, Carole. Carole est contente des tarifs et décide de s’assurer chez Generali. Ce sera via Serge (le courtier) et grâce à Olivier (l’apporteur), donc.
Carole est donc l’assurée. C’est elle qui paie (qui « cotise » pour employer un verbe qui choque moins) selon une périodicité définie (tous les mois, trimestres, semestres, ou à l’année, à elle de choisir).
Pour comprendre comment circule l’argent, qui est le nerf de la guerre, voyons un exemple simple : notez bien que ce n’est que le début de la chose, en réalité c’est un peu plus complexe et des options se sont ajoutées au fil du temps mais restons pour l’instant dans un exemple simple et réaliste à la fois :
Carole paie tous les mois à Serge son assurance. Disons, pour simplifier au maximum, 100 €. Serge prend une commission (établie au départ avec la compagnie), puis reverse le reste à la compagnie d’assurance à laquelle Carole a souscrit. Disons que Serge (soyons généreux) prend 20 € de commission. Il versera donc 80 € à la compagnie d’assurance qui assure Carole.
Et l’apporteur dans tout ça ? Il sera payé par Serge sur l’argent que Serge aura mis de côté. Donc, sur les 20 €, peut-être que Serge va reverser 5 € à Olivier.
Pour pousser un peu plus loin le bouchon (mais pas trop), il y a une deux méthodes de gestion de l’argent qui arrive par Carole :

  1. Carole paie directement la compagnie d’assurance.
    Cette dernière reçoit donc 100 € et en reverse 20 € à Serge.
    C’est ce que l’on appelle la gestion non confiée.
  2. Carole paie le courtier. (C’est le cas évoqué dans l’exemple).
    Le courtier reverse à la compagnie concernée le restant dû.
    C’est ce que l’on appelle la gestion confiée.

Voilà pour le schéma au premier abord, de circulation de l’argent.

Ma fille m'a fait mourir de rire !

Comme d’habitude lorsqu’elle se réveille tôt, nous l’amenons dans notre lit. Et elle s’est rapidement rendue compte que d’abord papa sort du lit pour aller prendre sa douche, puis maman suit et sort du lit aussi. A l’inverse elle a beau dire « maman bibi », rien ne change. Alors, pas bête la belette, elle m’a poussé dans le dos en disant le plus sérieusement du monde :

« Lève papa, douche et lève. »

Et elle m’a poussé dans le dos plusieurs fois ! J’ai tellement ri que je me suis levé.

La vie est belle !

Linux : exemples de "grep"

  1. Affiche tous les fichiers files qui contiennent une ligne dans laquelle il y a le mot poppy : 
    grep poppy files
  2. Affiche tous les fichiers files qui contiennent une ligne qui commence par poppy : 
    grep '^poppy' files
  3. Affiche tous les fichiers files qui contiennent une ligne qui se termine par poppy : 
    grep 'poppy$' files
  4. Affiche tous les fichiers files qui contiennent au moins une ligne dans laquelle il y a uniquement le mot  poppy : 
    grep '^poppy$' files
  5. Affiche tous les fichiers files qui contiennent au moins une ligne qui contient par  ^s, nb : le \ sert à ignorer le caractère spécial ^ : 
    grep '\^s' files
  6. Affiche tous les fichiers files qui contiennent, soit  poppy, soit Poppy : 
    grep '[Pp]oppy' files
  7. Affiche tous les fichiers files qui contiennent popy, pOpy, poPy ou pOPy : 
    grep 'p[oO][pP]y' files
  8. Affiche tous les fichiers files qui contiennent au moins une ligne vide : 
    grep '^$' files
  9. Affiche tous les fichiers files qui contiennent deux nombres d’affilée : 
    grep '[0-9][0-9]' files
  10. Recherche de tous les fichiers php, htm ou html :
    locate . | grep '[ph][ht][pm][l]*$' | more
  11. Recherche de tous les fichiers php, htm ou html contenant le mot internet :
    locate . | grep '[ph][ht][pm][l]*$' | xargs grep internet | more
  12. Recherche de tous les fichiers php, htm ou html contenant le mot internet sans être sensible à la casse :
    locate . | grep '[ph][ht][pm][l]*$' | xargs grep -i internet | more

Linux : utilisation de SCP (mémo simple)

SCP (= Secure Copy Protocol) donne la possibilité de transférer des fichiers entre des machines UNIX via le protocole sécurisé SSH. C’est rapide et c’est fait en toute sécurité.

  • Transférer le fichier file.txt vers le répertoire en cours de la machine 192.168.0.12 :
    scp file.txt noob@192.168.0.12:.
    (NB : le « . » est important à la fin, cela indique que le répertoire de destination est le répertoire en cours)
  • Récupérer file.txt situé sur /home/noob sur la machine 192.168.0.12 et le mettre dans le répertoire en cours (important : n’oubliez pas le « . » à la fin qui indique le répertoire en cours) :
    scp noob@192.168.0.12:/home/noob/file.txt .
  • Récupérer tous les fichiers pdf situés dans le répertoire /usr/local de la machine 192.168.0.12 et les mettre dans /var/www :
    scp noob@192.168.0.12:/usr/local/*pdf /var/www
  • Transférer tout le repertoire /var/www (en récursif) vers la machine 192.168.0.12 dans le repertoire /incoming :
    scp -r /var/www noob@192.168.0.12:/incoming

Les choses que vous ne devriez jamais faire

Par Joel Spolsky, le 6 avril 2000.

Vous trouverez l’original ici

Netscape 6.0 est sur le point de publier sa première version beta. Il n’y a jamais eu de version 5.0. La derniere version majeure était la 4.0, dévoilée il y a presque trois ans. Trois ans, c’est une durée horriblement longue dans le monde Internet. Pendant ce temps, Netscape était assis, sans rien pouvoir faire d’autre que de voir leurs ventes s’écrouler.

C’est un peu ingrat de ma part de les critiquer sur le temps d’écart entre les versions principales. Ils ne l’ont pas fait volontairement, n’est-ce pas ?

Eh bien si, c’était volontaire. Ils ont fait la seule et unique, la pire erreur stratégique qu’une entreprise puisse faire :

Ils ont décidé de réécrire le code en entier.

Netscape n’était pas le première société à faire cette erreur. Borland a fait la même erreur lorsqu’ils ont acheté Arago et essayé de l’intégrer dans dBase pour Windows, un projet maudit qui a pris tellement de temps que Microsoft Access a mangé leur déjeûner, et puis ils l’ont recommencé avec Quattro Pro, en repartant à nouveau de zéro, en épatant les gens sur le nombre impressionnant du peu de possibilités qu’il avait. Microsoft a fait presque la même erreur, en essayant de ré-écrire Word pour Windows à partir de zéro, dans un projet lui aussi maudit appelé Pyramid qui a été stoppé, jeté, balayé et caché sous le tapis. Par chance pour Microsoft, ils n’ont jamais cessé de travailler sur le vieux code, donc ils ont eu quelque chose à vendre, transformant tout ça simplement en un désastre financier, et non pas un désastre stratégique.

Nous sommes des développeurs. Les développeurs sont, au plus profond d’eux-mêmes, des architectes, et la première chose qu’ils veulent faire quand ils arrivent dans un chantier est de tout raser, et de faire quelque chose de grand. Nous ne sommes pas excités par la rénovation incrémentale : le bricolage, l’amélioration, et planter des parterres de fleurs.

Il y a une raison subtile qui explique pourquoi les développeurs veulent systématiquement tout jeter et recommencer. La raison est qu’ils pensent que le vieux code est bordélique. Est c’est là que vient une observation intéréssante : ils se trompent très certainement. La raison pour laquelle ils pensent que le code est un bazar, est dûe à une loi de programmation simple, cardinale et fondamentale :

C’est toujours plus dur de lire du code que de l’écrire.

C’est pourquoi réutiliser du code est si difficile. C’est pourquoi dans votre équipe, chacun a sa propre fonction, unique, qu’il aime utiliser pour casser des chaines en tableau d’autres chaines. Ils écrivent leur propre fonction parce que c’est plus facile et plus sympa à faire que d’essayer de comprendre comment on se sert de la vieille fonction.

Un corollaire de cet axiome est que vous pouvez demander à pratiquement n’importe quel développeur aujourd’hui ce qu’il pense du code qu’il sur lequel il travaille. « C’est un bordel total, » vont-ils vous dire. « La seule chose que j’aimerais vraiment est de tout jeter et recommencer proprement. »

Pourquoi est-ce un foutoir ?

« Eh bien, » vous disent-ils, « regarde cette fonction. Elle s’étale sur deux pages ! Il n’y a rien dedans qui appartient réellement à la fonction ! Je ne sais même pas à quoi sert la moitié des appels faits aux API. »

Avant que la nouvelle brochure de Borland pour Windows ne sorte, Philippe Kahn, le fondateur très coloré de Borland, a été cité souvent dans la presse en vantant à quel point Quattro Pro serait meilleur que Microsoft Excel, parce qu’il avait été entièrement ré-écrit. Que du nouveau code source ! Comme si le code source pouvait rouiller.

L’idée qu’un code nouveau est meilleur qu’un code ancien est foncièrement absurde. Le vieux code a été utilisé. Il a été testé. Plein de problèmes ont été soulévés, et ils ont été résolus. Il n’y a aucun problème avec ça. Il ne va pas créer de nouveaux bogues juste en restant assis dans le disque dur sans bouger. Au contraire, baby ! Est-ce qu’un programme est supposé être comme une voiture, il rouille inévitablement ? Est-ce qu’un programme est comme une peluche qui devient grossière et laide si elle n’est pas faite avec un nouveau matériel ?

Revenons à notre fonction qui s’étale sur deux pages. Oui, je sais, c’est juste une fonction très simple qui affiche une fenêtre, mais elle a un peu grandi et semble avoir grossi inutilement, et personne ne sait pourquoi. Eh bien je vais vous le dire, pourquoi : ce sont des résolutions de bogues. L’un deux résoud le problème que Nancy a eu lorsqu’elle a essayé d’installer le programme sur un ordinateur qui n’avait pas Internet Explorer. Un autre résoud ce bogue qui ne sort que dans les cas où on a très peu de mémoire. Un autre résoud le problème du fichier qui est sur un périphérique externe (disquette, clé USB) et qui se voit retirer en plein milieu d’une opération d’écriture. Cet appel à LoadLibrary semble pourri mais le code fonctionne aussi sur des anciennes version de Windows 95.

Chacun de ces bogues a pris des semaines et des semaines d’usage intensif en situation réelle avant qu’ils n’aient été trouvés. Le développeur peut avoir passé plusieurs jours avant de réussir à reproduire le bogue dans le laboratoire, et de l’avoir résolu. Si c’est comme la plupart des résolutions de bogues, la solution ne prend qu’une ligne, ou tout juste la modification de quelques caractères, mais un travail énorme a été fait dans ces « quelques caractères ».

Quand vous jetez du code et recommencez tout à zéro, vous jetez aussi toute cette connaissance qui va avec. Toutes ces corrections de bogues. Des années de travail de programmation.

Vous jetez en réalité ce qui fait que vous êtes en tête dans votre catégorie. Vous donnez, comme ça, gratuitement, un ou deux ans à vos concurrents, et croyez moi, c’est une durée énorme quand on parle de logiciels informatiques.

Vous vous mettez vous-même dans une position extrêmement dangereuse, dans laquelle vous allez continuer à livrer une vieille version avec du vieux code pendant encore quelques années, quelque chose qui sera donc voué à ne pas évoluer et à ne pas réagir à des nouvelles choses que le marché va demander, parce que vous ne pourrez pas intégrer un nouveau code. Si vous n’avez pas les reins solides, vous risquez carrément de couler et de fermer votre boîte.

Vous perdez une somme d’argent colossale à réécrire du code qui existe déjà.

Est-ce qu’il y a une alternative ? Il faut tout de même admettre que le vieux code de base de Netscape était vraiment très mauvais. Eh bien, dans tous les cas, il pouvait être mauvais mais vous savez quoi ? Il fonctionnait super bien sur un nombre impressionnant d’ordinateur différents, dans le monde entier.

Lorsque les développeurs vous disent que leur code est un bordel pas possible (c’est toujours le cas à un moment ou à un autre), il y a trois choses qu’il faut inspecter.

  1. Il y a des problèmes de conception. Le code n’est pas correctement conçu. Le code concernant les échanges réseaux ouvre ses propres boites de dialogue n’importe quand ; cela aurait dû être mieux géré, et surtout ailleurs. Ces problèmes peuvent être résolus, un par un, en déplacant le code avec précaution, en le mettant à jour, et en généralisant à un seul endroit l’affichage des boites de dialogue. Un seul et unique développeur qui travaille sérieusement et qui vérifie un à un, pas à pas, chacun de ses changements, peut faire cela. Je dis un seul, pour que les autres ne soient pas dans l’impossibilité de travailler. Même les changements majeurs d’architecture peuvent être faits sans changer complètement le code. Sur le projet Juno, nous avons passé plusieurs mois à ré-architecturer autour d’un point central : simplement déplacer le code, le nettoyer un peu, créer des classes de base dont le nom et le principe de fonctionnement soit logique, et créer des interfaces d’échanges claires et précises entre les différents modules. Mais on l’a fait précautionneusement, avec notre code de base, et nous n’avons généré aucun nouveau bogue, et cela sans jeter quoi que ce soit de notre vieux code.
  2. Les développeurs pensent que leur code n’est pas optimisé et qu’il est lent. Une rumeur disait que le moteur de rendu de Netscape était lent. Cela n’affectait qu’une petite partie du projet, qu’il était possible d’optimiser ou de ré-écrire. Il n’était pas nécessaire de tout ré-écrire. Lorsqu’on optimise pour la vitesse, 1 % du travail vous donne 99 % des résultats attendus.
  3. Enfin, le code est devenu, avec le temps, illisible. Un projet sur lequel j’ai travaillé avait un type de données appelée ChaineEnBordel. Un autre projet avait commencé en utilisant, par convention, l’écriture de toutes les variables membres par un underscore, puis a changé plus tard pour quelque chose de plus standard, « m_ ». Donc la moitié des fonctions commencaient par « _ » et l’autre moitié par « m_ ». Ce qui rendait le code difficilement lisible. Honnêtement, c’est le type de chose que vous résolvez en 5 minutes avec une macro dans Emacs, pas la peine de repartir de zéro.

Il est très important que vous vous souveniez de cela : lorsque vous repartez de zéro, il n’y a aucune raison de croire que vous allez faire un meilleur boulot que celui que vous avez fait la première fois. Premièrement, vous n’aurez peut-être pas la même équipe de développeurs à gérer. Si cela se trouve, ce ne sera même qu’une équipe de nouveaux développeurs, et donc il n’auront pas « plus d’expérience ». Vous allez dans ce cas refaire à nouveau les mêmes erreurs, et à l’inverse créer de nouveaux problèmes qui n’existaient pas dans la version originale.

Le vieux mantra « construirez en un puis jetez le » est très dangereux, et encore plus lorsqu’il concerne des grosses applications commerciales. Si vous écrivez du code de manière expérimentale, vous voudrez peut-être supprimer la fonction que vous avez écrit la semaine précédente, parce que vous venez de penser à un meilleur algorithme. Très bien. Vous voudrez peut-être factoriser une classe pour la rendre plus facile à utiliser. Très bien aussi. Mais jeter complètement programme est une folie furieuse, et si Netscape avait eu une hiérarchie, et une hiérarchie qui supervisait le projet de manière adulte, avec une expérience dans le domaine du logiciel industriel, ils ne se seraient peut-être pas tiré une balle dans le pied si violemment.

Dix façons de devenir un meilleur développeur PHP

Les 5 premiers conseils viennent d’ici

Les 5 conseils suivants venaient de ce lien d’http://www.hackingajax.com/2008/02/13/5-more-ways-to-be-a-better-php-developer/ mais il est mort…

Souvent, un développeur PHP inexperimenté va sauter sur IRC et poser une question sur Freenode##php. Et si la question est facile, il aura une réponse rapidement. Au début. Parce que par la suite, il va être bombardé de réponses du style « LOL », « ROFL », « Va apprendre PHP et reviens », « Vas te documenter un minimum », « On n’est pas ton prof personnel », etc. Donc, comment devenir un meilleur développeur PHP ? Dans ce post, je vais mettre en avant cinq façons d’être un meilleur développeur, d’être plus productif, d’écrire moins de code et de faire ainsi plus de choses avec vos applications web. Il y a toujours quelque chose de nouveau à apprendre quand on parle de développement PHP. Nouvelles fonctions internes, nouveaux frameworks, nouveaux design patterns, nouveau styles de documentation. Ci-suivent quelques-unes des façons les plus efficaces pour vous aider à être un meilleur développeur PHP.

  1. Lisez le manuel
    Je ne le dirai jamais assez : c’est là qu’il faut regarder en premier et il y a des tonnes de choses à apprendre simplement en lisant le manuel. Les problèmes les plus courants sont déjà résolus si vous lisez ce qui concerne les chaines de caractères (string), et les tableaux (array). Il y a plein d’exemples qui fonctionnent directement accessibles, et souvent, rien qu’en parcourant le manuel vous allez vous rendre compte que vous êtes en train de ré-inventer la roue, parce qu’une fonction que vous voulez faire existe déjà et, mieux, elle est directement d’origine dans PHP ! Le manuel PHP est votre ami. Note d’Olivier : une petite astuce supplémentaire : si vous voulez chercher quelque chose, il vous suffit de taper : php.net/[mot à chercher] et même si PHP ne le connait pas il vous donnera une liste de mots approchants ! Génial non ?
  2. Balladez vous dans le code d’autres personnes
    PHP a plein de code open source. Pourquoi ne pas apprendre grâce à ça ? Récupérez une application PHP open source et jetez un coup d’oeil dans le code. Les plus gros projets sont sûrement meilleurs, car, même s’ils auront des structures plus complexes, ils auront des systèmes fonctionnels mais derrière tout ça une documentation détaillée qui explique tout. Visitez SourceForge.net si vous n’arrivez pas à trouver un point de départ.
  3. Apprenez un nouveau framework
    Il y a plus de frameworks PHP que vous n’avez eu de diners galants qui se sont bien terminés (!) ; la plupart sont open source et disponibles en ligne si vous savez où regarder. Essayez les principale, par exemple phpframeworks.com a une excellente liste. Votre framework ne peut jamais être entièrement complet, votre prochain travail, ou projet, aura besoin de telle ou telle fonctionnalité, ou s’appuiera sur un framework différent et vous trouverez certainement que des idées des autres sont très utiles pour l’un de vos projets.
  4. Recherchez
    Vous avez probablement entendu plein de choses et de mots dans le contexte d’un développement Internet en PHP. En allant de OOP à MVC, en passant par KISS, DRY, YAML, INI, REST, XML-RPC, etc, il y a des centaines de termes techniques et de concepts ici qui pourraient être directement reliés à vos travaux. Peut-être avez-vous déjà une compréhension basique, ou grossière d’eux, mais est-ce que vous savez vraiment en profondeur ce qu’ils signifient pour vous ? Passez un peu de temps à faire de la vraie recherche, apprenez, formez vous un peu dessus. Wikipedia est un bon endroit pour commencer. Vous allez inévitablement apprendre des choses que vous ne connaissez pas, et ça ne peut que vous être profitable.
  5. Apprenez la programmation orientée objet
    C’est un peu lié au point précédent, mais la programmation orientée objet (POO, ou en Anglais, Object Oriented Programming, OOP), est beaucoup plus importante que vous ne pouvez l’imaginer : est-ce que vous connaissez vraiment la POO sur PHP 5 ? Par exemple, est-ce que vous manipulez facilement les classes abstraites, les interfaces, le mot clé implements, les méthodes et propriétés statiques, et les propriétés protected ? Beaucoup de développeurs PHP expérimentés ne sont pas compétents dans ce domaine, et pourtant, si vous utilisez ce genre de caractéristiques propres à la POO, vous construirez certainement des architecture beaucoup plus souples, évolutives, et vous gagnerez par là même beaucoup de temps de développement.
  6. Commencez un projet que d’autres personnes (développeurs et utilisateurs finaux) vont utiliser.
    Vous ne gagnerez jamais autant de respect (ou de dédain) plus rapidement qu’en écrivant un programme pour des étrangers qui doivent se servir de votre code. Que ce soit une application web pour des utilisateurs finaux, ou une extension PEAR pour les développeurs, ou un plugin WordPress pour le bloggeurs, le fait de mettre un logiciel, ou du code entre les mains d’autres personnes de manière à ce qu’elles puissent y réagir est la chose la plus efficace que vous puissiez faire pour devenir un meilleur développeur. Être mis dans la position de devoir répondre aux demandes des uns et des autres est aussi important et valorisant que le lien entre un journaliste et le journal publié. Tous ceux qui l’ont fait vous le diront, ce n’est pas facile mais une fois que vous arrivez à gérer ça, vous saurez écrire en étant sous pression, avec des délais à tenir, et éventuellement sous le feu d’une opinion publique qui peut ne pas être facile. D’ailleurs, écrire un programme en entier de bout en bout n’est pas si différent. Faites votre travail, donnez-le et attendez le retour. C’est cette boucle d’échanges qui fait les bons programmes et les bons développeurs. En fin de compte, c’est peut-être ce fameux feedback qui a principalement de la valeur.
  7. Apprenez un autre langage.
    Si vous commencez à peine avec PHP, ce n’est peut-être pas le moment de vous plonger dans quelque chose de nouveau, mais si vous connaissez le langage et que vous voulez amélorier vos compétences, vous verrez qu’il y a des avantages à ne pas être spécialisé uniquement dans un seul langage. Par exemple : Java vous oblige à comprendre la programmation orientée objet (P.O.O., en Anglais : O.O.P.), Ruby on Rails vous oblige à apprendre le principe Modèle – Vue – Conteneur (M.V.C.), C# vous oblige à apprendre ce qu’est la dépendance à l’autocomplétion (je blague, C# ne sert à rien, apprenez Java c’est déjà une excellente chose). Le fait d’élargir vos horizons vous offre la possibilité de comprendre comment d’autres langages ont résolu certains problèmes qui ne le sont pas encore, ou pas correctement, en PHP, ou bien qui ne sont pas évidents à résoudre, tout simplement. Par exemple, je vous certifie que je suis devenu un développeur PHP nettement plus compétent depuis que j’ai écrit un peu plus de 7,500 lignes de code pour Ruby on Rails. Apparemment, je ne suis pas le seul.
  8. Apprenez un autre langage à quelqu’un.
    Rien ne vous fait mieux apprendre que d’apprendre à quelqu’un d’autre. N’importe quelle personne qui est vraiment intéressée par ce que vous apprenez va inévitablement vous posez des questions sérieuses, des questions précises, des colles que vous aurez du mal à surmonter au début, mais qui vont vous amener à un degré de connaissance du langage insoupçonnable. Et puis au moins vous aurez un autre angle de vision sur ce qu’est la patience, lorsque vous aurez à répondre pour la vingtième fois à « Au fait, vous pourriez ré-expliquer ce qu’est une variable ? ». J’ai appris le langage Python à mon fils, récemment, après n’y avoir pas touché pendant 5 ans. C’était une expérience très intéressante pas uniquement dans le sens où j’ai réalisé à quel point j’avais tout oublié de Python mais surtout dans la manière de programmer qui est différente. Quand vous réussissez à apprendre à des jeunes de 13 ans pourquoi vous devez transformer des entiers avant de pouvoir les concaténer à des chaines de caractères en Python et pourquoi ce n’est pas nécessaire en PHP — et qu’il le comprennent — vous aurez d’ici là appris énormément de choses et vous serez forcément devenu un meilleur développeur.
  9. Demandez des suggestions et des solutions
    Si jamais vous n’arrivez pas à vous décoller d’IRC, assurez vous que vous avez vraiment recherché dans tous les sens la résolution d’un problème avant de demander de l’aide. Et lorsque vous demandez, montrez votre code. Si vous montrez que vous avez essayé quelque chose et que vous avez fait déjà un bon paquet d’efforts, croyez moi, vous aurez beaucoup plus facilement des réponses à vos questions.
    Vos question devraient ressembler plutôt à « je pense qu’ici je fais quelque chose qu’il ne faut pas, pouvez-vous m’aider » plutôt que « pourriez vous faire le travail pour moi. »
  10. Utilisez ce que vous lisez.
    Que dire de plus que cette loi de programmation simple, cardinale et fondamentale :
    C’est toujours plus dur de lire du code que de l’écrire. (Joel Spolsky) ?
    Après ces deux conseils de Lisez le manuel et Balladez vous dans le code d’autres personnes, vous allez apprendre beaucoup de choses, mais il ne suffit pas que de lire. Il faut aussi écrire. Vous ne pouvez pas lire 100 livres faits par des gens talentueux et pondre juste après Le Seigneur des Anneaux en une nuit. Ne faites pas que parcourir le code, utilisez le aussi dans le votre. Eventrez CakePHP et regardez comment ils gèrent la validation des formulaires. Ecartelez HTML_QuickForm2 et utilisez sa création d’éléments. Comprenez comment WordPress gère les transactions de sa base de données, et comparez avec Drupal. Ce sont toutes les choses que votre application, à un moment ou à un autre, devra pouvoir réaliser, donc vous devriez vraiment jeter un coup d’oeil et essayer de voir comment les autres ont résolu les problèmes auxquels vous êtes confronté. Et quand c’est adéquat, et légal, utilisez leur code. Vous apprendrez incroyablement plus si vous devez prendre un morceau de code, et le modifier afin qu’il fonctionne dans votre application que si vous ne faite que lire les branches SVN du projet.

Placarissimo. Plan de campagne. Résumé de gens anormalement désorganisés.

 

Attention !

 

M. Patrice Claudin, qui dirige une enseigne Placarissimo dans la ville de Saran (45770), près d’Orléans, n’est en rien concerné par les agissements scandaleux relatés dans ce billet, qui ont eu lieu, je le rappelle, dans le magasin de Plan-de-Campagne (13170) qui est d’ailleurs est fermé depuis deux ans. Je tiens donc à rappeler que cela ne concerne que Placarissimo à Plan-de-Campagne, et aucune autre enseigne de ce type dans toute la France.

 

Les gens de Placarissimo Plan-de-Campagne sont complètement incompétents sur le suivi clientèle

Ces gens sont complètement incompétents sur le suivi clientèle. Je pèse mes mots : complètement incompétents

L’histoire que je relate ici est exclusivement composée de faits réels et vérifiables. Je suis en mesure d’apporter la preuve de chaque étape qui m’a conduit à écrire ce billet sur les agissements de Placarissimo Plan-de-Campagne. Les conclusions que j’en tire, et que je rends publiques en vertu de la liberté d’expression, n’engagent cependant que moi.

Nous avons commandé pour notre maison un magnifique placard. Le vendeur, très aimable, nous a fait le plan. Contents, nous avons fait la commande. En mai 2007. Si, je ne blague pas : mai 2007. Oui, je dis que c’est hallucinant car… la pose n’est pas encore complètement finie ! Huit mois après !
Donc nous avons fait la commande, elle est validée. Le vendeur, nous confirme que le placard sera posé début août. Nous posons nos vacances en conséquence. Mai passe. Juin passe. Aucune nouvelle. Sandrine appelle. Tout semble ok. Juillet passe. Août arrive, on appelle. Personne ne pourra venir nous poser. Sandrine fait, à raison, un scandale. Nous aurions au moins pu être avertis !
On doit nous rappeler fin août.
Fin août arrive, personne ne nous appelle. Nous appelons début septembre et voici la réponse : « Ah ben oui mais on ne sait pas encore quand ce sera possible ». Sandrine, à raison, pète un câble. Nous allons à plan-de-campagne, et la « direction » (ils sont trois à bosser là bas) donc une personne, Patricia, nous explique que le chef a eu une grave maladie et que tout est désorganisé. Sandrine, à raison, pète un câble, et lui demande à ce l’on soit informé. C’est le minimum.
Quelques semaines plus tard, oui, quelques semaines, un poseur vient enfin nous poser les deux placards.
Il a correctement fait son travail, mais deux choses manquent à l’appel, notamment des barettes pour cacher un gros trou en haut, au dessus d’un placard.
Depuis, plus de nouvelles.
Entretemps, un mail reçu dans la boite de Sandrine : Madame, la facture au nom de la SCI ne sera pas établie comme vous nous le demandez.
Donc ils nous ont menti dès le début. Ce n’est pas grave, on rappelle pour prendre rendez-vous avec le poseur. Patricia nous dit qu’il va nous rappeler. Le poseur rappelle, nous convenons d’un rendez-vous.
Bien évidemment on s’organise pour être présent et là, personne.
On attend. 1/4 d’heure. 1/2 heure. 1 heure. Toujours personne. Sandrine appelle. « Ah ben le poseur ne viendra pas, on ne sait pas pourquoi. ». Pourquoi ne nous a-t-on pas averti, au moins ? On demande à ce l’on soit informé, pas plus ! C’est le minimum.
Ces gens sont complètement incompétents sur le suivi clientèle. Je pèse mes mots : complètement incompétents.
J’appelle la semaine dernière, j’ai mon ami le commercial – dessinateur de placards (je suis ironique quand je dis « mon ami »). Il me dit qu’il me rappellera sans faute mardi soir. J’insiste très très lourdement pour qu’il me rappelle. Je ne lui dis pas qu’on a l’impression d’être pris pour des imbéciles, mais il doit bien le sentir.
Mardi arrive. Mercredi. Jeudi. Et aujourd’hui. Il ne m’a toujours pas rappelé. Je viens tout juste d’appeler, et je fais ce post en conséquence. Je tombe sur Patricia, qui m’a fait suivre le commercial – dessinateur de placards. Et vas-y que « nous avons le poseur qui nous a laissé tombé, vous comprenez etc. ». Je lui demande ce qu’il compte faire. Ils embauchent une nouvelle personne la semaine prochaine. C’est la « direction » qui s’occupe de planifier tout ça. Je lui dit que je le rappelle mardi.
Ces gens sont complètement incompétents sur le suivi clientèle. Je pèse mes mots : complètement incompétents.

Je n’exagère pas quand je dis qu’ils sont incapables de noter qu’ils doivent rappeler quelqu’un, et de s’y tenir. Incapables.

30/09/2010 15:37:00 – mise à jour de l’article avec ce qui suit

Notre Placard a finalement été monté, et globalement, très moyennement monté. Les portes font un bruit scandaleux : en fait elles font tellement de bruit, que le soir, comme le placard est près des chambres, on ne l’ouvre pas.
Alors nous avons appelé pratiquement tous les jours pendant près de deux semaines, et enfin, ils ont daigné venir voir ce qu’il fallait faire afin de finir proprement leur travail.
Leur conclusion : le placard a été mal monté, donc ils ne peuvent plus consacrer de temps pour venir le remonter : en effet, cela leur coûterait trop d’argent par rapport à ce qu’ils doivent faire pour « réparer » le montage mal fait.