facebook

Il y a eu toutes sortes d’expériences autour du réseau social qui fait tant parler de lui. Je vous en propose une nouvelle. Mon but était d’établir un état des lieux des comportements des utilisateurs envers une demande d’ami inconnu. Le procédé fût fort simple : la première étape fût la création d’un compte d’un personnage complètement fictif et inconnu, qu’on appellera Jean-Claude. Suite à ça, ce sont quelques 250 personnes qui ont été sollicitées pour faire partie du réseau d’amis. 250 personnes de toutes origines, tous pays, sélectionnées complètement aléatoirement.

Une semaine plus tard, les résultats sont là. Il y a déjà 119 personnes qui se sont déclarées ami(e)s avec mon Jean-Claude. Sur ces 119 individus, seulement 6 ont envoyé un message pour connaître mon identité. Après avoir répondu, 2 m’ont retiré de leur liste d’amis. Jean-Claude aurait donc 113 personnes qui le connaissent vraiment ? En tout cas, Jean-Claude a accès à toutes les informations de ses amis : photos, statuts, quizz, etc.

Des conséquences qu’à titre personnel, je considère désastreuses. Ok, je ne suis pas mal intentionné. Mais qu’en savent ces « amis » ? De même, rien ne semble m’empêcher de dresser une liste d’habitudes, de comportements. Ces problèmes de confidentialité ne sont pas nouveaux, je ne vais les déballer ici, mais ce qui m’intrigue surtout au plus haut point, c’est cette facilité déconcertante de rentrer dans le cercle de connaissances de n’importe qui. Une sensibilisation des utilisateurs ne ferait de mal à personne…

mysqlqa

Un code de la route version DBA. Le maillon faible puissance 10 000. Voyez ça comme vous voulez, « MySQL Question Of The Day » est un sympathique site qui vous permettra de tester vos connaissances et d’apprendre en tentant de répondre chaque jour à une nouvelle question. Bref, à suivre ! http://mysql-qotd.casperia.net

mae-bd

Cette semaine, c’est un lien pour tout le monde ! Au diable la technologie, au diable l’innovation, nous n’avons que faire du business, place à l’humour ! J’ai récemment découvert pas le biais de ma dulcinée la « BD de Maé« , signée Pacco.

En quelques phylactères, Pacco retrace sa vie avec sa fille Maé, insupportable au possible. Deux tomes ont d’ailleurs été édité en chouette BD papier, disponibles chez les libraires habituels. Un petit aperçu avec un récent épisode qui fera sourire tout geek qui se reconnaît : ici. N’hésitez pas donc pas à suivre dès maintenant cette agréable aventure : http://www.mae-bd.fr

hiphop

Certains d’entre vous ont peut être entendu parler d’ »Hyper PHP ». Le nom du projet est apparemment « HipHop ». Il s’agit là du compilateur complètement customisé par Facebook, pour ses propres besoins liés à la scalabilité et la montée en charge.

Ce compilateur réécrit le code PHP en C++, puis le  compile avec le bien connu compilateur G++. Chez Facebook, ils nous font part d’un gain de 50% en terme d’utilisation du CPU.

hiphop2Utilisé en production depuis 2 ans mais présenté seulement aujourd’hui à la communauté, le projet HipHop est d’ores et déjà disponible, n’hésitez pas à l’essayer

correction

Vous avez récemment découvert mon histoire d’un curieux recrutement. J’y montrais alors une portion de code PHP exemptée de bonne pratique et fourmillant d’erreurs. This might sound more complicated than playing online casino (http://www.casino.com/fr/) at first but you will soon get your head around it. Voici donc la « correction » que je vous propose, recensant les points que j’aurais aimé voir soulevés par les candidats :

  1. Le tag <?php dans sa version courte
  2. Un code intégralement en français.
  3. Pas de commentaires multi-lignes en entête de fonction
  4. Pas de tags pour la génération de documentation (phpDoc, Doxygen…)
  5. Pas de typage pour le paramètre $voiture (en tant qu’objet, autant bénéficier du typage apporté par PHP)
  6. Commentaires inutiles dans le code (lignes 8 et 13)
  7. Mauvaise indentation
  8. Problème de type pour $max
  9. If/else à problème
  10. L’opérateur de comparaison pourrait être poussé à « ===« 
  11. Lorsque que $max vaut « inconnu », on pourrait préférer une constante
  12. Pas d’utilisation d’ORM, utilisation de mysql_query natif
  13. Requête SQL peu lisible (mots clés en minuscules, une seule ligne…)
  14. Problèmes dans la requête SQL (guillemets mal placés, le SET est après le WHERE)
  15. Pas de protection de la requête
  16. return est un mot clé, pas une fonction : on devrait omettre les parenthèses.
  17. Il vaut mieux éviter d’insérer les tags de fermeture PHP
  18. Vu ce que fait la fonction, ça serait sûrement mieux d’en faire une méthode au sein de la classe (mais l’analyse de ce que fait la fonction n’était pas demandé)

Bravo à tous ceux qui avaient farfouillé ! Sans forcément trouver exactement tous ces points, il était sûrement aisé d’en identifier au moins 4 ou 5. Attention, ce ne sont pas forcément des erreurs, mais des points qui pourraient être discutés (les commentaires pourraient très bien être en français pour telle ou telle raison, par exemple)

hiring

J’ai récemment effectué une session de recrutement de 3 élèves pour un organisme de formation. Ce dernier souhaitait développer et mettre en place un intranet capable de gérer les notes des étudiants et des emplois du temps. Laissez moi conter dans les colonnes de ZT les questions et points abordés, et les retours obtenus.

Premier contact entre le candidat et le recruteur : le CV. Bien que corrects, ils comportaient quelques perles. Pour commencer, une utilisation assez litigieuse du terme « ingénieur », pour une école qui ne propose absolument pas des formations et des diplômes d’ingénieurs. Je retiendrai aussi l’approximation suivante :

Base de données : Oracle (MySQI, Pl/SQL certifié 1Z0-007)

Étrange utilisation des parenthèses, n’est-ce pas ?

Question 1 : le jeu des 15 erreurs

Passons ensuite aux questions techniques. Je commence par fournir un code hideux, écrit par mes soins, tant au niveau du comportement de la fonction que du code en lui même. Je demande alors au candidat de me trouver un maximum de choses qui ne vont pas, qu’on pourrait changer, qu’il ne faudrait pas faire, dont on pourrait discuter. L’objectif n’est pas tant de trouver TOUS les écarts, mais au moins de montrer ce à quoi on accorde de l’importance. Voici le code en question, admirez plutôt :

<?

// fonction qui calcule la vitesse maximale
// en fonction du type de la voiture passé en paramètre

function calcul_vitesse_maximale($voiture)
{
   // si le type est "sport"
   if ($voiture->getType() == "sport") {
     $max = 230;
      }

   // si le type vaut "1980"
   if ($voiture->getType() == "1980") {
     $max = "120";
   }
   else
   {
     $max = "inconnu";
   }

   mysql_query("update from voitures where id="$voiture->getId" set max=$max);
   return($max);
}
?>

Je considère qu’il y a facilement 15 « erreurs », ou au moins points à discuter. Certains sont carrément des gorritudes. Je vous invite à essayer de touver un maximum de choses par le biais des commentaires, je laisserai la solution dans un prochain billet.

Et bien, quelle ne fût pas ma surprise de découvrir que les candidats avaient un mal fou à trouver ne serait-ce qu’un seul point discutable. À l’exception d’un candidat, qui paradoxalement avait beaucoup moins de pratique que les autres (pour ne pas dire presque aucune), qui a tout de même remonté 3 points importants. Inquiétant, pour des élèves « ingénieurs » et développeurs en Bac+4. La réponse la plus surprenante ? La voici : « Oh vous savez, j’ai l’habitude de travailler sur du code bien plus laid que ça ! »

Question 2 : Simulateur de grand mère

L’organise recruteur ne possède absolument aucune connaissance technique. J’étais donc à la recherche d’un stagiaire capable de vulgariser au mieux les termes, questions et démarches techniques. Je demande donc aux candidats de m’expliquer un mot technique comme si j’étais leur grand-mère. Voici un extrait de conversation type :

- Pouvez-vous m’expliquer le mot « framework » ?
- Hum.. un quoi ?
- Un framework. Comme Zend, symfony, ou Struts
- Jamais entendu parler…
- Bon.. peut-être pouvez-vous m’expliquer ce qu’est un design pattern ?
- Ha.. ça me dit quelque chose, mais en mathématiques…
- Un ORM alors peut être ?
- …

Et je vous jure que je n’exagère pas du tout. Pas évident de faire un exercice de vulgarisation dans ces conditions… Du coup, j’ai laissé de côté mes autres questions :

  1. Vous utilisez un système de versionning ?
  2. Vous pourriez m’écrire la fonction factorielle en récursif ? en itératif ? (Amaury si tu passes par là…)
  3. Quels types d’attaques connaissez-vous ?
  4. Vous aimez le Nutella ?

Le but de ce billet était bien évidemment de montrer comment une école qui prétend au titre d’école d’ingénieur en informatique peut envoyer des étudiants avec peu de background technique pour un stage en Bac +4. Ces étudiants avaient bien entendu d’autres qualités qui leurs sont propres : bon relationnel, bonne gestion de projet, pour ne citer que les principales. La solution de l’exercice1 au prochain billet !

geek-a-directeur-technique

Il s’est écoulé un bon petit paquet de semaines sans lien attitré dévoilé par ZT. Manque de bons sites ? Certainement pas ! La preuve cette semaine avec le blog d’un ancien épitéen, rencontré lors du forumPHP 2009.

Je vous invite ainsi dès maintenant à découvrir De Geek À Directeur Technique, blog qui s’auto-désigne comme celui d’un « geek devenu directeur technique ». Dans un style rhétorique fort plaisant, l’auteur vous invite à découvrir toutes ses interrogations, ses analyses, ses points de vues tant sur des technologies et méthodologies émergentes que sur des points faussement anodins (citons, par exemple, l’e-mail).

L’adresse à rallonge : http://www.geek-directeur-technique.com

terms-of-services

C’est une annonce qui pourrait passer inaperçue mais qui paradoxalement pourtant pourrait changer bien des comportements, bien des habitudes, autant du côté de l’internaute que de celui des gérants de sites Internet.

Soyons sérieux, lisez-vous souvent les politiques de confidentialité affichées avant une commande ou inscription à un service web ? Jamais ? Certainement comme la majorité des internautes. Je n’ai pas de statistiques sous les yeux, mais j’ose m’avancer sur un minimum de 90%.

L’équipe Mozilla tiendra demain une conférence, visant à déterminer quels sont les critères qu’un internaute serait envieux de connaître : combien de temps les données sont elles sauvegardées ? Sont-elle partagées avec d’autres entreprises ? Quels sont mes droits ? Ces discussions pourraient mener à l’élaboration d’icônes visant à résumer de manière lisible et explicite les longs et verbeux « termes de service » et aux conditions générales.

Les enjeux derrière de telles innovations pourraient selon moi être fondamentaux, dans la mesure où ces icônes peuvent permettre de sensibiliser l’internaute dans le choix des services, ou encore  d’identifier rapidement un changement dans les conditions. Vous pourrez suivre les sessions via @MozLabs.

Capture d’écran 2010-01-14 à 23.13.29

C’est l’histoire d’un client (moi) qui effectue une commande sur RueDuCommerce. Fidèle client, j’avais en tête l’ancien processus. Manque de bol, ce processus a changé, et ayant passé la commande « machinalement », je n’ai donc pas retiré la garantie « Contrat Or ». Encore moins de bol, j’ai trouvé le produit moins cher dans une boutique de la vraie vie à côté de chez moi. Ce qui non seulement me fait payer le produit moins cher, mais m’exonère des frais de port.

J’ai donc tout mis en œuvre pour annuler la commande. Or, en cette période post-fêtes et de soldes, impossible de joindre le service client par téléphone (30 coups de fil par après-midi). L’annulation par email est une hérésie : le lien n’apparaît qu’une fois la commande expédiée. Bref, j’étais sur le point de mettre un zéro pointé à RdC, qui ne m’a pourtant jamais déçu.

Criant ma détresse sur Twitter, j’ai eu l’excellente surprise de voir apparaître une réponse de … RueDuCommerce en personne !

c’est vrai qu’il est difficile de nous joindre en cette période post-fêtes et en pleins soldes, nous en sommes désolés

Agréablement surpris, je n’hésite pas alors à faire part de ma situation, par comptes Twitter interposés. Et c’est seulement quelques minutes plus tard que j’obtiens enfin ma réponse.

Rebonsoir Adrien, il suffit pour cela de refuser le colis et de nous faire un petit message sur votre espace client

Encore une raison d’utiliser Twitter… un bon moyen pour les entreprises de traquer leurs clients et leur offrir un nouveau service ! Bravo RueDuCommerce !

Le baladeur MP3 est aujourd’hui l’accessoire indispensable de tout mélomane mobile. Mais quel long parcours depuis les années 2000 ! Alors que Gizmodo nous rappelait avec nostalgie leurs caractéristiques dorénavant archaïques, je laisse sur ce blog une part de moi même en dévoilant 2 modèles que j’ai pu posséder.

1) Mon premier modèle, l’excellent iBead. Petit, grande autonomie, tout se faisait depuis une molette. Il m’a rendu de bons et loyaux services pendant 2 années lycéennes.

iBead 128 Mo

2) Après une baisse conséquente des prix, je n’ai pas fait l’impasse sur le Creative Nomad Jukebox ! Une autonomie ridicule assurée par 4 piles, un poids monstre, mais un jukebox presque portable !
Creative Jukebox

Souvenirs souvenirs…