L’extrême start-up

« Un souverain peut être une cause de troubles pour l’armée de trois façons. Il entrave les opérations militaires quand il commande des manœuvres d’avance et de recul impraticables ; il trouble l’esprit des officiers quand il cherche à intervenir dans l’administration des trois armes alors qu’il en ignore tout ; il sème la défiance chez les hommes en cherchant à s’immiscer dans la distribution des responsabilités alors qu’il ne connaît rien à l’exercice du commandement. »

L’Art de la Guerre, Chapitre III, Sun Tzu, traduction de Jean Lévi

Bonjour à toutes et à tous.

La dernière fois je m’étais confié sur mes expériences professionnelles, sur mes impressions quant à ces dernières ainsi que sur ma situation actuelle et à venir. J’étais passé brièvement sur mon expérience chez une certaine startup parisienne. Bien que relativement brève (7 mois), cette expérience m’a profondément marqué et, encore aujourd’hui, elle joue beaucoup sur ma perception des entreprises et de mon métier.

Je n’étais pas entré dans les détails, principalement pour deux raisons : la première est que résumer sept mois de calvaire ne pouvait pas tenir au beau milieu d’un article déjà raisonnablement long, et la deuxième est que j’ai mis du temps à pouvoir trouver les mots pour expliquer en quoi ce que j’ai vécu dans cette entreprise était anormal.

Concernant ce dernier point, un article paru il y a quelque temps sur le site developpez.com, concernant les impacts négatifs du harcèlement des patrons sur la productivité de leurs employés, m’a incité à partager brièvement mon expérience, histoire d’appuyer le propos de l’article. Cela m’a permis de faire le tri dans les points que je souhaitais aborder et à trouver une assez bonne formulation pour présenter mon vécu comme un témoignage et non une vulgaire plainte.

Témoignage

À la fin du mois de mai 2016, une startup m’a contacté pour passer un entretien pour un poste de développeur de systèmes embarqués. Le recruteur – Antoine – avait visiblement pris la peine de s’intéresser à mon profil. Le lendemain, je passais un entretien dans leurs locaux, où je rencontrais ledit Antoine mais surtout les deux patrons : Mike, directeur général, et Daniel, le président. Tout le monde était avenant, les locaux – un ancien appartement reconverti en bureaux et partagé avec une entreprise de communication – avaient l’air relativement agréables. J’ai également pu discuter par téléphone avec l’architecte du système à développer ; par la suite j’ai appris de la bouche d’Antoine que cette discussion pourtant assez sommaire était censée être l’évaluation de mes compétences techniques, quand bien même je ne me souviens pas avoir été interrogé sur des aspects techniques spécifiques. À l’issue de l’entretien, Daniel me demanda si je pouvais commencer dès le lendemain. Je ne voyais aucune raison de refuser, le cadre et le projet semblant en accord avec mon profil et mes attentes.

D’abord petite, l’équipe s’est peu à peu agrandie, assistée par des prestataires de tous horizons – notamment taïwanais, italiens et russes – et quelques coups de pouces officieux, comme celle d’un électronicien senior chargé de la conception des cartes électroniques durant son temps libre. Mais l’ambiance s’est également très vite dégradée et n’a fait qu’empirer au fil des mois. Beaucoup de facteurs sont en cause, mais on peut en isoler quelques principaux.

Sous les airs de leader charismatique qu’il essaie désespérément de se donner, Mike est un homme très égocentrique et entêté, qui a visiblement beaucoup de mal à faire confiance aux autres. Ce qui expliquerait pourquoi il insistait constamment pour avoir l’œil voire la main sur tout, même quand il n’avait pas les connaissances suffisantes pour juger correctement les situations et la qualité du travail effectué. Ce dernier aspect faisait qu’il comprenait souvent de travers ce qu’on venait de lui expliquer et prenait (trop) souvent des décisions contre-productives, voire carrément irrationnelles, nous faisant parfois perdre des semaines entières par simple caprice. Le seul qui parvenait à trouver le moyen de lui faire comprendre quelque chose, à force de patience et de pirouettes syntaxiques, était Antoine.

On aurait pu de Daniel qu’il contrebalance la personnalité de Mike, faute de la modérer. Ce ne fut pas le cas. Quand il ne laissait pas Mike faire, se disant que de toute façon il est impossible de le faire changer d’avis, il lui donnait carrément raison. Il avait également du mal à se familiariser avec les employés de sa propre boîte voire avec les termes concernant le projet, même les plus récurrents. Je me souviens encore de ma perplexité quand, au moment de me remercier au mois de décembre, il m’a dit qu’il avait espéré que l’électronicien senior de la boîte fût davantage présent pour me guider. Antoine m’a expliqué par la suite que Daniel avait tout simplement cru que j’étais électronicien, et non développeur…

Les sous-traitants russes n’étaient pas en reste, se permettant généralement d’être très critiques sur la qualité du travail des autres alors que celle du leur n’était clairement pas des plus exemplaires. De manière générale, l’entreprise a eu son lot de mauvais éléments, qui brillaient par leur incompétence et/ou par leur mauvaise volonté.

Cette ambiance toxique a eu plusieurs conséquences, en grande partie négatives.

Les éléments qui se donnaient du mal avaient tendance à être blâmés et rabaissés tandis que les mauvais éléments étaient, à l’inverse, félicités – il n’y a que ceux qui ne font rien qui ne font pas d’erreur.

Les décisions contre-productives toujours plus nombreuses faisaient qu’à partir d’un moment nous étions obligés de faire abstraction de toute conscience professionnelle et de toute rigueur. Personnellement, j’ai vécu cela comme une énorme frustration croissante.

Cela a également impacté l’avancement du projet, qui prenait toujours plus de retard au fil des mois, si bien que le prototype présenté en fin d’année lors du salon Trustech n’était en fin de compte qu’un artifice grotesque qui n’a réussi à convaincre que les visiteurs les plus candides.

Physiquement, nous étions éprouvés par le stress et par la soi-disant flexibilité de Mike, pour qui ce terme signifiait que nous devions arriver à 9:00 pile le matin mais rester jusqu’à pas d’heure le soir – il nous engueulait copieusement si on avait le malheur d’avoir plus de cinq minutes de retard le matin ou si nous quittions le boulot à l’heure prévue. Si ça ne tenait qu’à lui, Mike aurait très probablement exigé de nous que nous passions notre vie entière à travailler, quitte à abandonner toute vie privée, le tout sans rémunération des heures supplémentaires ni repos compensatoire.

Cette ambiance a également eu un impact sur notre moral. Au fil des mois, notre patience et notre volonté ont été mises à rude épreuve, si bien que lorsque Mike et Daniel ont décidé de mettre fin à ma période d’essai, je songeais déjà à partir de l’entreprise. Je confiais à Antoine que je faisais des cauchemars où Mike refusait de me laisser partir, m’obligeant à en venir aux mains pour pouvoir m’enfuir. Vers la fin je ne pouvais plus supporter quoi que ce soit venant de lui : rien que le voir, l’entendre ou le savoir pas loin me plombait le moral et me faisait déprimer.

Mon licenciement fut un soulagement pour moi mais a visiblement eu pour conséquence de miner encore plus le moral de mes collègues, tant et si bien que le fossé s’est davantage creusé entre employés et employeurs et la tension entre eux s’est accentuée. L’ambiance était telle que, lors de mon dernier jour, alors que nous allions déjeuner entre collègues, Mike et Daniel ont demandé à Antoine si quelque chose était prévu pour mon départ. Il leur a ouvertement – sans perdre de son flegme exceptionnel – expliqué que nous sortions manger, sans préciser où, et qu’ils n’étaient pas invités. Leur asséner cela lui a procuré, d’après lui, une très grande satisfaction, presque jouissive.

Je suis resté en contact avec mes collègues. D’après ce qu’ils m’ont raconté, la suite ne fut qu’un enchaînement de revendications toujours plus exigeantes en termes de salaires et d’avantages pour tenter de contrebalancer l’ambiance toujours plus néfaste. L’un après l’autre, mes anciens collègues sont partis de la boîte, si bien qu’après un peu plus d’un an il ne restait plus personne de l’équipe d’origine.

La fin n’est pas complètement heureuse pour autant. J’ai vécu ce licenciement comme une délivrance, certes. Mais, encore aujourd’hui, je garde des traces de cette époque. Quelques souvenirs heureux mêlés dans une foule de souvenirs désagréables. Même si je sais pertinemment que cela n’arrivera jamais, j’ai toujours la crainte de recevoir un hypothétique coup de téléphone de Mike pour exiger quelque chose de moi, ce à quoi j’espère trouver les mots pour lui faire comprendre à quel point nous avons souffert à cause de lui et que je ne souhaite que l’oublier définitivement, faute de pouvoir l’empêcher de nuire.

J’ai cité Sun Tzu en début d’article, car je trouve ce passage parfaitement à propos. Il illustre très bien le problème majeur de cette entreprise, à savoir une direction chaotique, perpétrée par des gens sans respect pour la condition humaine, sans aucune confiance ni reconnaissance envers les gens qui travaillent pour eux et sans qui ils ne seraient rien, même s’ils ne s’en rendent pas compte.

D’un autre côté, je trouve également cet extrait relativement triste. Si un texte de l’Antiquité présentait déjà ce genre de problèmes, que dire du fait que ce problème soit toujours d’actualité ? D’autant qu’il ne s’agit pas d’un cas isolé, il suffit de fouiller les témoignages d’expériences en entreprise pour s’en rendre compte. Cela n’a malheureusement pas l’air d’aller en s’arrangeant, surtout en sachant que des gens comme Mike agissent en toute impunité, et je redoute d’autant plus ce que l’avenir me réserve.

Sur ce, je vous laisse et vous dis à bientôt.

Nicolas SAN AGUSTIN

Prise de recul sur mes expériences professionnelles

Bonsoir à toutes et à tous.

Je dis « bonsoir » car j’écris cet article en pleine nuit, ne parvenant pas à trouver le sommeil. En partie parce que j’ai l’esprit pollué par un bon nombre de pensées parasites, notamment en ce qui concerne mes expériences professionnelles passées et ma situation professionnelle actuelle (et à venir).

Les débuts

J’ai commencé en tant que développeur informatique embarquée en octobre 2012 alors que je sortais de l’université avec une licence professionnelle en poche. Ma première expérience, au sein d’une start-up, a duré exactement trois ans et j’en garde globalement un très bon souvenir.

C’est par la suite que les choses ont commencé à se gâter. En effet, durant ces trois ans, j’ai été habitué à un cadre de travail très flexible et motivant, avec des patrons qui respectaient leurs employés et étaient très transparents sur les activités de l’entreprise. Et comme il s’agissait de ma première véritable expérience professionnelle (en tant que développeur), lorsque j’ai quitté la boîte au bout de trois ans, je me disais que j’avais des chances de tomber sur une entreprise comme celle-là.

La désillusion

La recherche d’un nouvel emploi a été un vrai choc culturel avec le monde des SSII. Elles sont partout, si bien qu’elles représentent la quasi-totalité des entreprises dans les salons de recrutement, et si vous avez le malheur de poster votre profil sur un site de recrutement, même seulement quelques heures, vous pouvez être sûr(e) que vous serez démarché(e) par des SSII pendant au moins un an. La raison à cela est que ces entreprises ratissent les sites de recrutement, récupèrent des CV « au cas où » et les conservent dans leur base de données jusqu’au jour où elles auront besoin de profils à présenter à leurs clients. Cela peut être dans l’immédiat comme dans six mois, mais il m’est arrivé de passer un mois voire un mois et demi à ne traiter quasiment que des candidatures de SSII.

Et finalement, je peux compter seulement deux expériences très très courtes avec des SSII mais qui m’ont tellement dégoûté d’elles que j’ai tendance à les éviter et à faire le mort sur les réseaux sociaux et les sites de recrutement.

La première m’a expédié en mission dans une boîte qui se situait à 2 heures de transport de mon domicile… J’ai bien évidemment fait la grimace mais j’ai finalement accepté parce que le poste semblait convenir à mes attentes, a priori. Malheureusement, la fatigue des transports et l’ambiance clairement déshumanisante de la boîte ont fait qu’après deux mois et demi je ne tenais plus du tout le rythme, j’ai perdu toute motivation et la mission s’est arrêtée là. Et pour celles et ceux qui ne sont pas encore au courant, une fin de mission signifie généralement chômage. Une SSII ne vous paiera jamais à ne rien faire, à moins qu’elle dispose de tâches à vous proposer en interne, ce qui est rarement le cas.

La deuxième expérience fut tout aussi aberrante et beaucoup plus courte. J’ai accepté d’être placé en pré-embauche dans une start-up via une SSII. Le souci, c’est que cette dernière m’a survendu en faisant miroiter à son client un expert en sécurité informatique qui pourra lui fournir une solution miracle (ou « un mouton à cinq pattes », dans le jargon). Le client voulait que je lui conçoive une solution d’échange sécurisé de fichiers. Un genre de MEGA ou de WeTransfer, mais avec le nom de sa boîte dessus et uniquement réservé à ses clients.

Qu’on se le dise, je n’ai clairement pas la prétention de réinventer ça et je me suis retrouvé très embêté au vu de la demande, et davantage en voyant les exigences aberrantes du client (par exemple, il voulait que l’on puisse chiffrer un fichier et le transmettre simplement par e-mail, sans avoir à faire d’échange de clés avec l’interlocuteur…) et ses tentatives désespérées de maîtriser du vocabulaire technique (« le design de l’interface est pas mal mais est-ce que tu pourrais faire en sorte qu’elle soit un peu plus HTML ? »).

L’expérience a duré seulement trois semaines, qui auront suffi au commercial qui m’a placé là pour prendre la tangente et au client pour me dire sans détour qu’il s’attendait à mieux vu le prix que je lui coûtais… Personnellement, le prix que je lui coûte ne me regardait pas étant donné que j’étais payé à un salaire normal, et quand bien même, je n’aurais rien pu y changer.

Sans parler du fait que, pour une raison étrange, je ne parvenais pas à m’intégrer à l’équipe. C’est la seule fois où ça m’est arrivé et même eux ne parvenaient pas à expliquer pourquoi.

Coup de grâce

Après cela, j’ai décidé de couper court avec les SSII et je me suis essentiellement concentré sur les start-ups, ayant plus d’expérience dans ce milieu. Et j’ai découvert que, contrairement à ce que j’ai pu croire, ce milieu ne prémunit pas contre les abus…

Alors que j’envisageais à moitié de me lancer dans la création d’une entreprise, j’ai été contacté par une start-up qui recherchait un profil comme le mien. Le cadre de travail semblait avenant et je ne voyais aucune raison de me méfier. Les premières semaines se sont donc déroulées assez sereinement mais j’ai finalement été confronté au très gros problème de cette boîte : son patron (techniquement, ils étaient deux mais l’un commandait clairement plus que l’autre).

Je n’entrerai pas dans les détails ici, ce serait trop long à expliquer. Je dirai seulement que l’ambiance était très toxique, avec une direction qui n’a aucune espèce de confiance ni de reconnaissance envers les gens avec qui elle travaille, qu’ils soient employés ou sous-traitants. J’ai ressenti la fin de la période d’essai (de sept mois, quatre mois renouvelés à trois) comme une délivrance. Par la suite, ce sont mes collègues qui sont partis les uns après les autres, si bien qu’après un an il ne subsistait quasiment plus personne de l’équipe d’origine.

Une lente renaissance

Après cela, fatigué des transports en commun, j’ai recherché un boulot plus proche de chez moi et j’ai fini par trouver un poste de développeur au sein d’une petite entreprise spécialisée dans l’instrumentation scientifique. Ni SSII, ni start-up. Globalement, j’ai vécu d’assez bons moments dans cette entreprise, même si on peut reprocher beaucoup de choses à sa direction : un vieux patron et son fils, avec tous deux une vision très archaïque de la gestion d’entreprise. Les projets sur lesquels j’ai eu à travailler étaient intéressants et je regrette un peu d’avoir du partir après seulement huit mois pour suivre ma compagne, affectée dans une autre région.

Presque aussitôt, j’ai trouvé un poste dans un bureau d’études. C’était à une heure de route de mon nouveau domicile mais j’ai réussi à tenir le rythme (et j’avais de quoi m’occuper les oreilles sur le trajet). Même si je n’ai eu qu’un CDD (renouvelé à deux reprises), je suis globalement satisfait. J’ai pu apprendre beaucoup de choses, quasiment tous les collègues (une trentaine de personnes) étaient sympathiques. Cela s’est néanmoins dégradé vers la fin, alors que la boîte n’avait presque plus rien d’intéressant à me proposer. Pour cette raison, le CDD n’a pas été reconduit en CDI, la direction ne pouvant garantir de me fournir des tâches à effectuer.

Le reste

Comme cette fin de contrat est survenue juste avant l’été, j’ai préféré attendre avant de rechercher un autre poste, n’étant pas certain que ma compagne soit affectée dans les mêmes environs (ni la même région). J’en ai profité pour prendre un peu de recul sur ces six années d’expériences et pour me remettre à niveau de certaines compétences.

Je vis actuellement dans une région où les perspectives d’emploi pour mon métier sont assez faibles. À moins de viser les grandes villes. Et encore…

J’ai répondu à quelques SSII, la plupart me proposant un poste :

  • soit en dehors de ma zone de recherche : souvent à Paris ou à l’autre bout de la France, comme la région PACA, des régions loin de susciter mon intérêt (ou celui de ma compagne) ;
  • soit en dehors de mes compétences : les recruteurs ne connaissent généralement pas grand chose à la technique et vont essayer d’isoler certains mots-clés. Il suffit que vous ayez mentionné un langage, même si ce n’était que de manière anecdotique, et le recruteur vous contactera comme si vous en étiez un expert… D’autres vous contacteront carrément pour un profil qui ne vous conviendront pas du tout…

Quoi qu’il en soit, mes expériences passées m’ont marqué au point que j’ai quasiment perdu tout espoir de retrouver une entreprise où je me sentirai à nouveau bien, au point d’y évoluer pendant plusieurs années. Aujourd’hui les entreprises n’embauchent plus. Elles font appel à des sous-traitants comme des bureaux d’études ou des SSII (désormais renommées ESN, même si ça ne change rien), juste le temps d’une mission avant de vous retrouver de nouveau à la rue. Et les quelques entreprises qui embauchent encore sont désastreuses côté humain et/ou gestion d’entreprise.

En espérant trouver le sommeil et ne pas avoir gâché le vôtre.

Nicolas SAN AGUSTIN

Rasprinter

Bonjour à toutes et à tous !

Entrons directement dans le vif du sujet, car il y a beaucoup de choses à dire.

Cela fait plusieurs mois que je travaille sur un projet visant à apporter de nouvelles fonctionnalités à mon imprimante. Il s’agit d’une imprimante multifonction assez classique, qui peut imprimer, numériser et photocopier. Jusque-là, cela suffisait, surtout lorsque je vivais dans un logement qui m’imposait d’avoir l’imprimante et l’ordinateur sur le même bureau (et donc à portée de câble USB).

Les déménagements dans des logements plus spacieux et le partage de l’imprimante ont apporté une contrainte principale : la nécessité de déplacer l’ordinateur vers l’imprimante (ou réciproquement) pour pouvoir numériser ou imprimer. Si je déplace un ordinateur portable jusqu’à l’imprimante, je me retrouve proche d’elle mais dans une position inconfortable pour l’utiliser. Inconfort d’autant plus accentué si l’ordinateur est lourd et que le pavé tactile est capricieux (i.e. presque tous les pavés tactiles qui m’ont été donné d’utiliser).

Pour résoudre ces contraintes j’ai donc décidé de m’atteler à un projet, baptisé Rasprinter.

Qu’est-ce que Rasprinter ?

Il s’agit d’une Raspberry Pi, connectée à l’imprimante et au réseau local, qui fait office d’intermédiaire entre l’utilisateur et l’imprimante. Debian étant une distribution GNU/Linux axée serveur, son dérivé, Raspbian, est donc tout désigné pour l’usage que je vais en faire.

Pour l’impression à distance, il existe déjà des serveurs d’impression faciles à mettre en place (ce que j’ai fait). Reste à trouver une solution pour la numérisation à distance.

Il existe une API libre pour la gestion des scanners, nommée SANE. Il s’agit d’une librairie qui prend en charge plusieurs scanners et permet de les piloter depuis une machine bénéficiant d’un OS type Unix (GNU/Linux, BSD, etc). Elle est déjà implémentée dans bon nombre de logiciels de numérisation, comme Simple Scan. XSane permet la numérisation à distance via un serveur saned mais je n’ai jusque-là pas réussi à en mettre un en place. De plus, cela impose de faire plusieurs voyages entre l’ordinateur et l’imprimante à chaque changement de page ou de document.

J’ai donc opté pour une solution visant à ajouter un petit écran tactile sur le Raspberry Pi pour piloter la numérisation en restant à côté de l’imprimante sans s’encombrer d’un ordinateur. L’écran que j’ai choisi a cependant une contrainte : il ne permet d’afficher que via le framebuffer de Raspbian, c’est à dire qu’il ne propose pas le rendu via la puce graphique du Raspberry Pi et empêche donc l’utilisation de certaines librairies graphiques. Une librairie permettant le rendu via le framebuffer est SDL, une librairie multimédia très largement utilisée. C’est donc cette librairie que j’ai décidé d’utiliser pour l’interface graphique (dans son ancienne version, la version 2 ne permettant plus d’utiliser le framebuffer).

J’ai également fait appel à la librairie GraphicsMagick, un fork de la librairie ImageMagick, pour permettre la conversion des images scannées brutes en d’autres formats (comme la fusion des images dans un document PDF).

Essais et mise en oeuvre

La première fonctionnalité à tester fut l’utilisation de l’API de SANE pour la numérisation. Le site de SANE liste de manière détaillée les périphériques pris en charge par l’API. Mon imprimante étant officiellement prise en charge et Simple Scan offrant un rendu plus que correct, je n’avais pas de raison de douter du bon fonctionnement de l’API avec elle. Après quelques essais, j’ai pu réaliser un programme qui initialise la librairie, liste les périphériques et se connecte au premier qu’elle trouve (si elle n’en trouve aucun, le programme s’arrête) avant de lancer une numérisation et d’enregistrer le résultat dans une image. Pour le format de l’image, j’ai décidé de m’orienter vers Portable pixmap, un format d’image brute, sans compression, assez simple à implanter dans un programme. Les images sont nommées en fonction de la date et l’heure, dans un format proche d’ISO 8601 (que j’encourage vivement à utiliser !). Après quelques tâtonnements, j’ai finalement pu obtenir un rendu correct (mais… on va y revenir) d’un document numérisé.

J’ai donc intégré cela à mon programme. Programme qui se base sur une machine à états, chaque état désignant une étape dans le processus de numérisation et un écran différent à proposer à l’utilisateur. C’est à partir de ce moment-là que j’ai commencé à mettre en place l’interface utilisateur, en concevant les différents écrans et les actions permettant de se déplacer d’une étape à l’autre. Concrètement, l’interface est très simpliste et se compose de zones cliquables correspondant à une action à effectuer. La procédure est implantée comme suit :

  • un écran permettant de lancer la numérisation d’un nouveau document. Un simple « clic » (il s’agit d’un écran tactile) à n’importe quel endroit de l’écran permet de démarrer la procédure ;
  • un écran de transition, avertissant l’utilisateur que la numérisation est en cours (sans compter le bruit du scanneur…). L’utilisateur ne peut pas passer cet écran manuellement, c’est le programme qui passe à l’écran suivant à la fin de la numérisation de la page ;
  • un écran d’aperçu pour montrer à l’utilisateur le rendu de la numérisation pour qu’il puisse vérifier si celle-ci est correcte. Comme pour le premier écran, un simple « clic » permet de le quitter ;
  • un écran offrant deux options : enregistrer toutes les pages numérisées dans un fichier PDF ou numériser une autre page. Le programme garde une trace de toutes les numérisations tant que le document n’a pas été sauvegardé ;
  • un écran de transition pour avertir l’utilisateur que l’enregistrement du document est en cours. Cet écran transite automatiquement vers l’écran de départ pour permettre le lancement de la numérisation d’un nouveau document.
  • un écran dédié à l’affichage d’un message d’erreur en cas de problème (non complètement implanté).

Vous noterez que je parle de « clics  » pour un écran tactile. En fait, pour la gestion d’un contact sur l’écran, cette version de SDL n’offre que la gestion de la souris, ce qui exclue la possibilité d’actions à plusieurs doigts (ce que l’écran choisi, un PiTFT 2.8″ capacitif, ne supporte pas de toute façon). Ce qui est bien dommage car, l’écran étant assez petit, l’aperçu ne permet de voir qu’une version très réduite de l’image ce qui empêche de constater d’éventuels défauts de l’image numérisée. La possibilité de zoomer l’image aurait été la bienvenue.

Enfin, j’ai procédé à la prise en main de GraphicsMagick pour la conversion des images pixmap en un fichier PDF. GraphicsMagick, à l’instar d’ImageMagick, est un framework très puissant qui mérite bien son nom. À l’aide de fonctions et/ou de commandes très simples, il est possible d’effectuer toutes sortes d’opérations très intéressantes sur des images, quelles qu’elles soient. Ici, nous n’utiliserons qu’une seule des possibilités de cette librairie : la conversion. En un code très concis, la librairie nous permet de lire plusieurs images, les mettre dans une liste et enregistrer ces images en un seul document. La puissance de GraphicsMagick est telle que le format des images ou du document PDF n’est à expliciter nulle part autre que dans le nom des fichiers. La librairie s’occupe d’identifier les formats et s’adapte en conséquence.

Résultats

L’interface, bien que simpliste, permet bien de numériser plusieurs pages d’un document. La conversion des images en un seul document se fait sans problème. Cependant, deux points majeurs sont à relever : les documents numérisés sont enregistrés dans le dossier temporaire du Raspberry Pi (/tmp) sans être transmis directement à l’utilisateur et la qualité des documents n’est pas suffisante.

Concernant le premier point, il est pour l’instant possible de récupérer les documents numérisés à l’aide d’un logiciel client SFTP (FileZilla fait cela très bien). Pour plus de commodités, j’ai pris soin de configurer la connexion pour qu’elle pointe directement par défaut vers le dossier /tmp du côté Raspberry Pi et vers le dossier Documents de mon répertoire utilisateur du côté local.

En ce qui concerne le deuxième point, il n’était pas facile de s’en rendre compte au départ et je n’ai pas encore trouvé de solution à ce problème. Ma copine m’a fait remarquer que ce défaut se voyait surtout sur des documents manuscrits. En comparant le rendu d’un document numérisé avec ma solution et un autre numérisé directement à l’aide de Simple Scan, il est flagrant de remarquer que la qualité est bien meilleure avec Simple Scan. A priori, je pense que le problème peut venir du fait que je n’effectue aucune configuration du scanneur (j’utilise les paramètres par défaut). Peut-être que le code source de Simple Scan peut me donner quelques indices sur la manière de procéder ou me donner d’autres pistes de réflexion.

Mise à jour du 21 mai 2018 : Le paramètre en question est tout simplement la résolution. Par défaut, celle-ci est configurée à 75dpi, la plus basse. En regardant dans les paramètres de SimpleScan, la résolution est configurée à 300dpi (pour les images, 150dpi pour le texte mais cette résolution est insuffisante pour nos besoins). J’ai configuré Rasprinter avec cette résolution et le rendu est parfait. Seulement, cela ralentit considérablement la numérisation et l’écriture des fichiers.

J’ai également ajouté une interface en ligne de commande pour des tests via SSH (qui normalement permet l’utilisation de X11 et donc l’affichage de l’interface graphique mais la configuration du Raspberry Pi pour fonctionner avec cet écran rend cette fonctionnalité capricieuse).

Pour l’instant je ne vais pas partager le code source. J’attends de le remanier complètement, pour corriger les bugs et intégrer la gestion complète des erreurs.

Mise à jour du 15 juin 2018 : J’ai pu identifier la cause de la lenteur lors des enregistrements d’images. Il se trouve que les images enregistrées par mon programme sont bien plus lourdes que celles que je parviens à obtenir avec d’autres logiciels comme SimpleScan. J’ignore s’il s’agit d’une compression faite par SimpleScan (peut-être n’utilise-t-il pas de format d’image brute, comme je le fais, mais un format compressé comme le PNG). Toujours est-il que j’ai là une piste intéressante à investiguer. Pour l’instant je ne travaille plus à ce projet, ayant d’autres impératifs, mais je m’y remettrai dès que possible.

Enfin, le programme est très minimaliste et il est facile d’imaginer l’implantation d’autres fonctionnalités ou d’apporter bon nombre d’améliorations. L’écran tactile n’étant pas incompatible avec l’affichage d’un environnement graphique, il serait peut-être plus avisé d’utiliser une librairie dédiée aux interfaces graphiques comme Qt, GTK ou wxWidgets pour réaliser une interface plus agréable à l’œil, voire plus efficace. Ou encore, permettre l’enregistrement des documents numérisés sur une clé USB branchée au Raspberry Pi, parcourir cette même clé USB pour imprimer des documents qui s’y trouvent, ajouter une interface en ligne de commandes pour effectuer les tests directement depuis mon ordinateur, ou alors permettre l’accès direct via WiFi voire via Bluetooth (pour l’instant le Raspberry Pi est seulement connecté au réseau local via Ethernet et donc uniquement accessible via celui-ci). J’aimerais aussi retravailler tout le code source, ne serait-ce que pour le simplifier en utilisant le C++ au lieu du C et ainsi le rendre plus modulable.

Conclusion

Même s’il est loin d’être parfait, je suis assez content de ce projet. J’ai appris beaucoup de choses et j’ai pu constater que malgré un emploi du temps pas forcément évident j’ai pu réaliser une première mouture fonctionnelle. Loin de moi l’idée de laisser ce projet en l’état, au risque qu’il prenne la poussière. Je compte bien corriger ses défauts majeurs et y apporter toujours plus de nouveautés. Et en parallèle, travailler sur d’autres projets, soit à base de Raspberry Pi, soit avec d’autres cartes. Concernant ce dernier point, je compte réaliser un petit tour d’horizon des différentes cartes dont je dispose, certaines relativement connues comme Arduino ou (feu) Intel Edison tandis que d’autres sont des cartes récupérées ça et là. Il y a de quoi s’amuser. ;-)

Sur ce, je vous laisse et je vous dis à bientôt.

Nicolas SAN AGUSTIN

Copyright Nicolas SAN AGUSTIN 2019
Tech Nerd theme designed by Siteturner