Ahhh, l’offshore !

L’Offshore est de plus en plus présent, avec ses tarifs alléchants et son coté exotique ; ceci est un fait ! Cependant, l’informatique n’est pas une industrie manufacturière et bien que certains entendent la délocaliser pour réaliser de substantielles économies, il ne semble pas évident que celles-ci soient aussi simplement réalisables.
En parallèle de cela la question de la formation en Europe se pose : nous formons des informaticiens à un métier presque exclusivement technique, métier qu’ils n’auront que peu le temps d’exercer pour basculer au plus vite dans des domaines fonctionnels aux antipodes de leur formation.

Qu’est-ce que l’Offshore aujourd’hui : c’est avant tout la délégation de tâches de réalisation de programmes informatiques (développement). Ces développements sont effectués en Asie (principalement en Inde) où le coût d’un informaticien à la journée tourne autour des 80 euros ; soit 5 à 10 fois moins que son homologue Européen. Mais voila, avec ces bas coûts viennent se greffer les milliers de raisons qui les justifies et qui viennent impacter très fortement le budget global d’un projet : distance, différence de langue, différence d’horaire, différence de façon de travailler, de culture .. et surtout un turn-over extra-ordinaire qui réduit à néant tous vos efforts de formations ou de partage de nouvelles méthodes de travail comme toutes capitalisations liée à la réalisation de projets successifs dans un même contexte. En effet, avec un salaire de quelques centaines d’euros par mois, pour 10 euros de plus vous partiriez n’importe où d’autant que l’on recrute à grand coup d’affiches 4×3 dans les rues de Bombay.
La main d’oeuvre Indienne est certes réputée dans les domaines de l’informatique, je ne vais pas remettre en cause leur compétence, toutefois un ingénieur indien a un BAC+3, ce qui dans le domaine de l’informatique et particulièrement dans celui de la programmation objet représente une grosse différence.
Bref, actuellement l’offshore n’est actuellement valable que pour des projets où la part de développement est suffisante pour que les bas coûts, impactés par l’augmentation de la complexité, restent rentables. De très gros projets donc.

Ma réflexion n’est pas vraiment de vous convaincre que l’offshore n’est pas rentable d’autant qu’il doit l’être puisque de plus en plus de monde s’y met. Il s’agit plutôt de se demander pourquoi nous ne sommes pas compétitifs en Europe alors que nous devrions avoir une productivité bien supérieure à celle de nos collègues indiens ?!?

L’informatique est une prestation intellectuelle, de ce que je sache, c’est encore là dessus que les pays développés sont encore compétitifs, pourquoi l’informatique serait différents des autres métiers ?
La particularité de l’informatique tien peut être de la différence qu’il y a entre le métier d’informaticien tel qu’il est enseigné et la réalité de la carrière qui suit les études. L’informatique, dans les domaines de la programmation, de l’exploitation, des réseaux est un métier technique, plutôt mal connu et qui demande un enseignement lui aussi technique, d’au moins 2 ans mais plus souvent de 3 à 5 ans maintenant. C’est une voie dans laquelle s’engage plutôt par hasard bon nombre de candidats. Cette formation me semble incontournable car l’informatique moderne repose sur de très nombreux concepts qu’il est nécessaire d’appréhender correctement pour être capable de s’adapter aux évolutions très rapides du métier : il est en effet possible d’apprendre en quelques mois un langage spécifique, mais l’excellence dans la programmation, l’adaptation à d’autres langages, l’optimisation sont des domaines nécessaires qui demandent de l’expérience. En informatique je dirai qu’il n’y a rien à apprendre mais tout à comprendre, par rapport à l’enseignement secondaire, c’est une toute nouvelle façon de penser qu’il faut apprendre : l’informatique c’est un légo dans lequel il faut imaginer l’emboîtement de briques algorithmiques, un puzzle et ceci est très loin du raisonnement mathématique et impossible à concevoir par simple apprentissage.
Bref, la formation technique est nécessaire, plutôt longue pour être productif et l’expérience joue un rôle prépondérant dans la productivité du programmeur.
C’est ce dernier point qui est primordial ! Un développeur ne deviendra productif que quand il maîtrisera le langage d’un part, mais surtout lorsqu’il aura mis en place les mécanismes cérébraux lui permettant de concevoir ce puzzle multi-dimensionnel (structure des données/algorithme/langage/modèle d’architecture/temps…). De part mon expérience, je dirai que ceci demande 2 à 3 ans de formations en informatique (soit un niveau dut ou ingénieur) et plutôt 3 ans pour les langages objets ; mais ce n’est toutefois qu’après 2 à 3 années de pratique en entreprise que le développeur sera vraiment productif à mon sens, sans pour autant atteindre un maximum (qui requiert sans doute 7 ou 8 ans d’expérience).
Le gain de productivité en informatique est colossal : entre un étudiant en première année classique et un développeur expérimenté le coefficient de productivité est de l’ordre d’un facteur 20 ; tout en considérant que le premier n’arrivera peut être jamais à une solution si la complexité est importante. Il reste d’un facteur proche de 10 pour un étudiants sortant de l’école et mon estimation pour un développeur avec deux ans d’expérience d’un facteur 2 à 3.

Pourquoi face à cela ne sommes nous pas compétitifs ? Selon moi, la carrière technique d’un informaticien ne dure pas plus de 2 à 3 ans et ce, à la sortie des études. En bref, l’informaticien quittera ses tâches de développements dès lors qu’il deviendra productif en la matière. La faute à quoi ? Simplement au système qui veut qu’un développeur soit au bas de l’échelle et qu’il n’ait comme perspective d’évolution salariale que l’unique choix de quitter son domaine d’expertise pour s’orienter vers des domaines plus fonctionnels pour lesquels il n’a jamais été formé et pour lesquels il ne trouvera pas forcement la même motivation que pour le développement.
J’ai bien du mal à expliquer les raisons de cela d’autant qu’il me semble qu’il s’agit là d’une aberration économique. Toutefois quelques facteurs me semblent expliquer cela :
Bien que les domaines fonctionnels ne requièrent que peu de connaissances techniques, un bagage informatique reste nécessaire dans la rédaction de cahiers des charges où le test. Par ailleurs la part du développement dans un projet ne représente que 25 à 50% du projets. Indiquant par là que pour 1 poste de développement, il est nécessaire d’avoir 3 personnes d’orientation fonctionnelle pour s’occuper du projet. Enfin, il faut reconnaître que l’orientation informatique pour beaucoup n’a sans doute pas été la bonne et que fuir sa composante technique est une chance. Le dernier point qui me vient à l’idée et que pour un non informaticien, la programmation est une chose inintéressante, incompréhensible, de là, quitter cette branche est une opportunité aux yeux d’un RH.

En conséquence de tout cela, l’état dépense beaucoup d’argent pour la formation technique d’informaticien durant 3 à 5 ans. Les entreprises n’utilisent ces compétences que durant les 2 à 3 ans qui suivent alors que “l’outil” n’est pas encore productif. N’est-ce pas du gâchis ?
En parallèle, les informaticiens que nous formons, lorsqu’ils entrent sur le marché du travail ne sont pas préparés à leur futur métier et doivent vivre une carrière qui ne correspond pas à leur projections.

Pour conclure sur ce sujet, je dirai que l’informatique va assez mal, nous avons le choix (actuel) d’arrêter son approche technique et de perdre alors une technique que nous maîtrisons sans aucun doute mieux que les pays émergeants ; la conséquence en sera la disparition de l’industrie informatique de création logicielle en Europe alors que comme nous le montre Microsoft c’est une des industries les plus rentable du monde, principalement intellectuelle et correspondant donc au modèle de croissance de notre société. Auquel cas la formation est à revoir totalement avec sans doute une approche généraliste ou commerciale avec option métier de l’informatique.
L’autre solution serait, me semble-t-il plus juste, de valoriser l’investissement de formation réalisé par l’état en valorisant la filière technique de l’informatique. En reconnaissant ce métier à sa juste valeur et en offrant des plans de carrière dans ce domaine. Comme je l’ai expliqué, le coût jour n’a aucun sens. Nous comparons le coût d’européens débutant vendu 3 fois leur salaire par des SSII à celui d’indiens plus expérimentés mais pas forcement plus productifs. Nous oublions fréquemment de considérer les coûts annexes de pilotage ou les retards que nous n’aurions pas eu en travaillant localement…

Enfin pour finir, je me pose toujours la question de cette spécificité de l’informatique : pour la construction de nos ponts, de nos immeubles, est-ce que les architectes Européens sont remplacés par des architectes Chinois à moindre coût ?!? Il ne me semble pas. Est-ce que cela viendrait à l’idée de quelqu’un d’arrêter la carrière d’un architecte juste à la fin de sa première réalisation ? Je ne pense pas, dans tous les autres métiers intellectuels, l’expérience est fortement valorisée. En informatique nous n’obtenons que le droit de basculer vers un métier qui n’est pas le notre, un métier meilleur pour nous parait-il !

La commande screen (gestionnaire de fenêtre en mode texte)

Imaginons que vous ayez un process texte qui tourne sur une machine accesisble uniquement par le reseau et que vous souhaitiez que ce process continue à s’exécuter bien que votre session ssh soit terminée. Imaginons, qui plus est, que ce qui se passe en console vous interresse et que vous souhaitiez donc par la suite (les jour suivant) pouvoir vous reconnecter à ce programme et consulter sa console… Et bien ceci est possible et même très simple en utilisant la commance screen

screen est un gestionnaire de fenêtre en mode texte (lol). Son utilisation est simple au travers d’un exemple :

  • Ouvrez une session ssh
  • Tapez screen
  • Lancer top dans ce terminal
  • Fermez la connexion ssh
  • Ouvrez de nouveau ssh
  • Reconnectez vous au terminal en lançant screen -R
  • Top est de retour !
  • Pour fermer definitivement la session CTRL+a k

Merveilleux non ?!?

Linux RAID1 soft, changement d’un disque

Lorsque l’on utilise une solution de sauvegarde, on est toujours inquite le jour où il faut mettre en oeuvre la restauration … c’est bien se qui m’est arrivé le jour où l’un de mes disques RAID1 à grillé et qu’il a fallu le changer puis restaurer le RAID1. Et bien en 1 mot (mais personne n’en doutait) le RAID1 soft sous linux ca marche nickel !

Détails de l’opération :

  • Retrait du disque defectueux et retour au fournisseur
  • Le système fonctionne parfaitement sur son second disque le temps que le disque en SAV revienne
  • Backup des données (on sait jamais)
  • Reinstallation du second disque dans la machine
  • Synchro du RAID1
  • Retour au mode normal

Bref super ! Pour ce qui est des quelques commandes magiques à utiliser :
sfdisk –dump /dev/sdx | sfdisk /dev/sdy Permet de cloner la table des partitions du disque x sur le disque y.
mdadm /dev/mdx -a /dev/sdy Permet d’ordonner la resynchronisation du disque que l’on vient d’ajouter en le remontant dans l’ensemble RAID1.

La progression de la reconsruction du raid peut être suivie en consultant /proc/mdstat

Tomcat, problème de JVM_LIBDIR

Par defaut la config ne semble pas cohérente du coup j’ai eu des messages de ce style … “cp=/%20JVM_LIBDIR%20/usr/lib64/jvm-exports/java-1.5.0-sun-1.5.0%20does%20not%20exist%20or%20is%20not%20a%20directory” ou encore “error: JVM_LIBDIR /usr/lib64/jvm-exports/java-1.5.0-sun-1.5.0 does not exist or is not a directory”
Pour s’en sortir j’ai créé un lien symbolique dans /usr/lib64/jvm-exports/ de “java-1.5.0-sun-1.5.0 pointant” vers “java”.
Il faut ensuite redemmarer tomcat et ca fonctionne.

Raid1 soft avec Asus P5B-VM sous opensuse 10.1

Après avoir realisé une installation de ma suse 10.1 sur un disque configuré en RAID1 soft, j’ai eu la désagreable surprise de trouver un kernel panic au boot du style : VFS: Cannot open root device “…” or unknown-block(…,…)

Il semble qu’a ce moment là du demarrage le disque md0 ne soit pas encore bien monté (problème de module sans doute)… la solution simple pour s’en sortir est de préciser dans les paramètre du boot que root n’est pas sur /dev/md0 mais sur /dev/sda1 par exemple … ce qui ne change pas fondammentalement grand chose si ce n’est qu’en cas de defaillance de sda1, il faudra penser à preciser sdb1 pour que ca boote.

La procédure n’empeche absoluement pas / d’etre monté sur md0 une fois la machine bootée. Il faudra modifier les parametres de grub dans /boot/grub/menu.lst pour ne pas être obligé de réitérer la manip à chaque lancement.

Jmicron et Raid

Oui, je suis fan de l’utilisation du RAID1 (mirroring entre 2 disque dur) cette solution m’a permis de sauver quelques données ou de me dépatouiller rapidement de crash disque … Pour la machine qui très bientot hébergera ce site, je souhaitai donc passer du RAID soft sous linux (qui marche bien au demerant) au RAID hardware. Les carte ayant cette option sur des disques ATA etant très abordable, j’en ai fait l’achat.
Me voici donc avec une ASUS P5B-VM, deux disque SATA identique…
Et bien vous ne devinerez jamais !!! il n’y a qu’un seul port SATA permettant de connecter un disque RAID !!! Le raid 1 à 1 seul disque … il falait l’inventer ca !! En y regardant de plus pret, asus se contre fiche d’offir du raid, il utilise le composant uniquement pour proposer un port IDE, il est donc théoriquement possible de faire du raid entre un disque PATA et un disque SATA … bref aucun interet pour du mirroring. Je l’ai un peu en travers là : la doc ne précise rien là dessus (ils s’en gardet bien) comptant surement sur les 90% d’utilisateur qui ne se serviront jamais de l’option. Bref, je vais peut etre essayer de mettre le second disque sur le SATA externe qui avec un peu de chance est branché sur le chip JMicron… Sinon, retour au raid soft, sans doute moins performant mais qui lui au moins fonctionne (et en plus gratuitement).

RTL8111b sur P5B-VM sous Opensuse 10.1

Je viens d’acheter un carte mère Asus P5B-VM basée sur un chip réseau gigabit Realtek RTL8111b de la famille des r1000. Ce dernier n’est pas reconnu et mon installation réseau en est un peu compliquée … Je vous livre ici comment je m’en suis sorti …

Il est tout a fait possible de charger un module lors de l’installation, le tout etant de l’avoir. Pour cela, il faut recopiler le driver Realteck sur une suse de même version pour obtenir le module … je vous livre ici mon module pour la suse 10.1 (version 32b) et ici la version SMP pour suse 10.1… ca vous fera toujours gagner une etape ..

Pour ceux qui souhaitent le recompiler par eux-même, il y a deux choses à savoir :

  • Il faut modifier src/Makefile et remplacer $(PWD)/Makefile_linux26x par le chemin complet de ce même fichier
  • Il faut remplacer dans src/r1000_n.c les 3 lignes MODULE_PARM par MODULE_PARM_DESC

Ensuite il faut copier ce module sur une clef USB par exemple. Lancer l’installation et lorsque l’on arrive sur les premières fenetre de YAST
De là il faut :

  • Appuyer sur CTRL+ALT+F9 pour passer sur une console
  • Monter la clef usb : mount -t vfat /dev/sda1 /mnt
  • Ajouter le module : insmod /mnt/r1000.ko

En appuyant sur CTRL+ALT+F1, vous retournez alors sur l’installeur yast et l’installation réseau pourra commencer.

Attention, il faut aussi noter que le chipset G965 n’est pas reconnu avant le 2.6.18 et donc pas avant la suse 10.2. Toutefois ce n’est pas ce chip qui pose des problème mais le Southbridge JMicron qui n’etant pas du tout reconnu empèche la détection des disques dur IDE et même du CDROM une fois l’installation lancée. Cependant pour installer linux sur une SATA via le réseau, ca fonctionne …

Revenons à nos moutons … une fois Linux installé, il faudra se recompiler une nouvelle fois un driver, il ne faut donc surtout pas oublier d’installer le package kernel-source sans quoi, après c’est trop tard ! Au premier redemarage, dès que yast se lance, il est possible de trouver un console pour compiler un nouveau module. Attention, le Makefile ne fait pas de depmod -a lors de l’installation … pensez à l’ajouter !
Enfin, la recompilation sera à faire après les mise à jour de noyau … Au passage, pour forcer l’usage d’un module pour un périphérique reseau, il faut jeter un oeil dans /etc/sysconfig/hardware, c’est à cet endroi que l’association se fait.

Utilisation du Pata JMicron sur P5B-VM sous Opensuse 10.1

Bon … pour accéder au controleur PATA JMicron de la carte mère Asus … c’est pas gagné !!! En tout cas on finit par y arriver avec un peu de patience. Dans la doc c’est possible, et ca l’est en effet, mais ce n’est pas trivial. Je vous donne la liste des manip que j’ai dû faire :(sans pour autant garantir que tout soit utile

  • Dans le bios, configurer le JMicron en mode AHCI
  • Booter l’install de la 10.2 puis dès que possible passer sur un terminal (CTRL+ALT+F9)
  • Charger le module par modprobe pata_jmicron
  • Jeter un oeil avec dmesg pour voir ce qui s’est passé …

Pour ma part le cdrom est sur /dev/sr0 et le disque dur semble etre sur /dev/sdb

Cette manip faite il ets presque possible d’installer suse 10.2 à partir du CD, j’ai toutefois du passer par la case “vérification du support” avant que l’installeur veuille bien me monter le cdrom