Yoann Sculo - Ingénieur Linux Embarqué http://www.yoannsculo.fr Yoann Sculo - Blog d'un Ingénieur Linux Embarqué accro à vim. Bidouille, bricolage, hacking, systèmes embarqués, livres et calembours. 2014-11-24T00:00:00Z fr hourly 1 Make Things Paris http://www.yoannsculo.fr/makethings-paris 2014-11-23 http://www.yoannsculo.fr/makethings-paris Make Things

Samedi 15 novembre avait lieu la première édition de Make Things à Paris. Il s'agit d'un événement ouvert à toutes les personnes souhaitant s'initier au monde du hardware, au Do It Yourself (DIY) et à la programmation.

Make Things Paris ciblait les grands débutants n'ayant jamais fait de programmation ni de bricolage à base d'Arduino et autres petites cartes mignonnes de leur vie. La journée s'est articulée autour de 6 workshops de différentes difficultés. Mais c'était globalement pensé pour un public de débutants et de bricoleurs amateurs.

Cela se déroulait donc à l'Usine.io, que je n'avais toujours pas eu l'occasion de visiter (pourtant je travaille à côté !).

Usine.IO

Voici le programme des workshops qui était proposé :

  • Construction d'une manette de jeu avec un Arduino
  • Programmer l'ouverture d'une serrure avec des puces RFID
  • Quizz. construisez votre propre jeu
  • Conception de sa boite Arduino, découpe laser et assemblage
  • Jeu de rapidité à base d'Arduino
  • Atelier Wearable

Les supports des workshops ont été mis à disposition.

Plein de matos

J'ai animé le workshop sur le RFID. Merci à toi Pierre pour la préparation ;) J'ai récupéré des lecteurs RFID de vieux Nabaztag et des stamps qui dormaient dans mon placard et me disant que l'on pourrait bien en faire quelque chose !

Workshop RFID

L'idée était donc de simuler une serrure RFID. En passant un tag préconfiguré sur le lecteur on pouvait actionner un servomoteur, simulant une ouverture/fermeture de porte. Attention, événement d'importance, j'ai utilisé un MAC pour la 2eme ou 3eme fois de ma vie :P

Workshop RFID

Apparemment les gens ont trouvé ça cool :) Je suis bien content !

Certains des participants ont même été jusqu'à bricoler plus loin le workshop pour rajouter des LEDs quand la serrure est ouverte ou fermée.

Workshop RFID

Je n'ai pas eu le temps de tester les autres workshops ni de me balader beaucoup. Mais j'ai pu prendre quelques photos du reste de l'événement.

Workshop Sparkcore

Le Quizz

Le Quizz

Le Quizz

Atelier Wearable Découpe laser

Bref c'était une journée très chouette ! Cela faisait un bon moment que je n'avais pas touché à des cartes Arduino et des breadboards. C'était très sympa d'apprendre aux gens à bricoler et j'ai rencontré des gens intéressants :)

Peut-être à une prochaine fois !

]]>
De l'intérêt de ne pas nommer ses branches git avec des chaînes hexadécimales http://www.yoannsculo.fr/interet-pas-nommer-branches-git-chaines-hexadecimales 2014-10-31 http://www.yoannsculo.fr/interet-pas-nommer-branches-git-chaines-hexadecimales Je me suis arraché les cheveux pendant un moment sur un problème de git. Avec le recul, le problème était évident mais m'a bien fait perdre mon temps.

Voilà, on utilise des codes pour nommer nos projets au travail.

Exemple: N1, NC1NC2, P1P2, A1A2, ...

Chaque repository (j'en ai un paquet) possède une branche du nom du produit. J'ai donc des branches n1, nc1nc2, p1p2, a1a2, ...

J'ai commencé il y a un moment avec les projets n1, nc1nc2 et p1p2. Je n'ai pas rencontré de problème particulier. J'ai enchaîné avec le nouveau projet a1a2. J'ai alors, comme à mon habitude, créé ma branche de la façon suivante :

git checkout -b a1a2

puis j'ai pushé ma branche distante. Jusque là, aucun soucis.

Dès que j'ai voulu récupérer les sources depuis une autre machine, j'ai eu droit à l'erreur suivante :

$ git checkout a1a2
fatal: reference is not a tree: a1a2

Cette erreur n'arrivant que dans le repository de mon kernel et pas dans mes autres repositories pourtant bien fournis en fichiers et en commits... Curieux !

J'ai commencé à suspecter le fait que ma branche était une chaîne hexadécimale et que ça devait poser problème d'une façon où d'une autre. Pourtant pas le moindre hash de commit ne contenait de bloc a1a2 dans l'arbre de mon kernel...

Et là on m'a soufflé qu'il fallait peut-être regarder du côté des objets git.

$ git rev-list --objects --all | grep a1a2
1ca63b3e5635bec2c763e4ae93e1155f32a1a295 Documentation/arm/Samsung-S3C24XX/Suspend.txt
5a2758ab055e613d42e619b797ba1a28d020ec53 arch/arm/mach-exynos4/irq-combiner.c
111caa1a2efb4105aa0e45ae8552c8de6e5497a1 arch/cris/arch-v32/kernel/fasttimer.c
31180c321a1a29b1f7c5d7a2c1b1a5f6188ee0ed arch/mips/mti-malta/malta-init.c
7bafbf2ec0f92712aac0a1a259b22e1dd3de4b7f arch/powerpc/platforms/83xx/mpc837x_rdb.c
184fde16913282c76e51c6ba1a2ddab1d267d789 arch/sh/boards/mach-migor/setup.c
6c2239cca1a2d86204a52ecef53ab5514f8a6073 arch/sh/include/asm/ptrace_32.h
fbb0a045a1a23bc9bdc2f9dd23c6c9673e2e13f7 arch/x86/kernel/syscall_table_32.S
62122a1a2f7a6416f1105ff88dae672ccac8a5dd crypto/algif_hash.c
f37878c9c06eb43812b022ba72a034418a1a238e drivers/infiniband/core/mad_rmpp.c
a4390a1a2a9fbb214b89fcb9fc3d47d7133cfc01 drivers/net/wireless/mwifiex/11n.h
9d75dc8ca602995826b80c842e40edfea1a2d866 drivers/pci/search.c
a1a278bc340dbfd0ff6814c8bcfec577f6137c85 drivers/rtc/rtc-mc13xxx.c
5175e67a6d28f71a1a21410cdc0a7f770ac30cd4 drivers/staging/brcm80211/include/bcmsdpcm.h
47bf08dc75665a1a2163ff63145cca89bf900a7e include/linux/dlmconstants.h
889c3e93e0f4a9df2a1a2007799f2a2f13e8a496 net/mac80211/chan.c
172c4d6b1ad1d8f1d2694f51169218fa1a25d2cf sound/pci/hda
df370286694f89de7dbfce2cba1a29ae3dfcf7ee sound/soc/mid-x86/sst_platform.h
8957bbfe5acd33286aea1a2d5cfd16e620e38496 drivers

Bingo !

git checkout va chercher dans les noms des branches, les hash de commit ET les hashs d'objets git !

Pour un projet tout récent et tout vide de fichiers et de commits, il y a très peu de chances qu'une des branches coincide avec une partie de chaîne de hash de commit ou d'objet. Par contre, quand on importe un kernel avec plusieurs milliers de fichiers et un historique important, le risque devient réel !

Ainsi je peux, sans problème, créer une branche locale a1a2 et la rendre distante. Par contre, la commande git checkout est incapable de savoir si on parle d'un object git ou bien d'une branche.

A moins de faire de la façon suivante :

$ git checkout refs/heads/a1a2 
Note: checking out 'refs/heads/a1a2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at ..........

Mais comme l'indique le warning, on se retrouve en

# HEAD detached at refs/heads/a1a2

Dans mes codes de projets, j'avais jusque là, et par chance, toujours un caractère non hexadécimal. Mais sans faire attention, je me suis mis dans un cas ambigu avec mon projet a1a2.

Je suis néanmoins étonné que git ne me mette pas de warning suite à la création d'une branche nommée a1a2, car il y a un risque réel de mettre le boxon !

Conclusion:

  • toujours avoir au moins un caractère non-hexadécimal dans ses noms de branches.
  • exclure de la même façon les branches nommées exclusivement avec des caractères numériques.

Bref, finalement ça va de soi, mais on ne pense pas initialement que le nom de la branche pourrait poser problème...

]]>
Kernel Recipes 2014 http://www.yoannsculo.fr/kernel-recipes-2014 2014-10-13 http://www.yoannsculo.fr/kernel-recipes-2014 Panoramique Kernel Recipes

J'étais à la 3eme édition de Kernel Recipes fin septembre. Une édition encore très réussie. 90 personnes dans les super locaux de Mozilla à Paris. Deux journées vraiment très intéressantes sur des sujets vraiment très variés.

Les slides et vidéos des conférences ainsi que des photos des deux journées ont été mises en lignes.

Coup de cœur pour les présentations de Greg Kroah-Hartman :

Greg Kroah-Hartman

et de Hans Verkuil :

Hans Verkuil

Chouettes présentations de Maxime Ripard également :

Maxime Ripard

et de Jiri Slaby :

Jiri Slaby

Les conférences étaient très variées, ce qui était super. Il était tout de même difficile de comprendre et de bien suivre toutes les présentations. Ces dernières pouvaient être très techniques et j'étais donc pas mal largué sur les sujets relatifs à la sécurité, le réseau et le cloud. La présentation sur les instructions x86 était super hardcore à suivre. Néanmoins, je trouve bien qu'il y en ait pour tous les goûts !

Greg Kroah-Hartman nous a parlé de l'Eudyptula Challenge. Ça m'a vraiment donné envie de participer :) J'en suis à l'étape 1, et pour l'instant je n'arrive pas à trouver le temps de travailler dessus. Mais je compte bien aller plus loin ;)

Merci

A l'année prochaine !

]]>
Premiers pas sur Firefox OS - ZTE Open C http://www.yoannsculo.fr/premiers-pas-sur-firefox-os-zte-open-c 2014-08-10 http://www.yoannsculo.fr/premiers-pas-sur-firefox-os-zte-open-c zte open c

J'ai fait l'acquisition, la semaine dernière, du premier téléphone vendu en France, faisant tourner Firefox OS. Le ZTE Open C

Si vous ne connaissez pas Firefox OS, je vous invite à consulter l'article très intéressant de Flaburgan, qui explique bien le projet et sa finalité.

J'avais pu tester rapidement Firefox OS aux FOSDEM 2013 et 2014, mais je souhaitais aller plus loin, tant l'idée du projet me plaisait ! Voici un premier bilan après une semaine d'utilisation.

Le téléphone ZTE Open C

Je me suis donc procuré le ZTE pour tester Firefox OS sans réelle volonté, pour le moment, de remplacer mon vieux HTC Desire HD au quotidien. Je voulais simplement tester ce concept d'OS libre. Et puis j'étais sacrément curieux de voir les rouages du système. Après tout, c'est mon métier :)

Je ne vais pas m'étendre sur le hardware. Le téléphone est juste un prétexte pour tester l'OS. A 69€ je ne m'attendais pas à une bête de course. Toutefois je reste agréablement surpris par le rapport qualité prix. Le téléphone fonctionne bien et j'ai pu tenir une semaine sans être (trop) frustré.

Le seul élément hardware gênant est l'appareil photo. L'APN de 2 Mpx du ZTE est, pour mon utilisation personnelle, clairement un frein à son usage quotidien. Ainsi, pour de bonnes photos, il faudra viser d'autres téléphones de meilleure facture.

Je tiens à préciser que le marché de Firefox OS s'adresse normalement pour le moment aux pays émergents et aux gens souhaitant acheter leur premier smartphone. Ainsi tout est relatif, car le ZTE l'a rien à envier à mon premier smartphone Android ! Je trouve que l'approche de Mozilla est ici très judicieuse, car il n'est pas question d'entrer en concurrence frontale avec Android et IOS sur un marché bien verrouillé. En partant de marchés émergents, Firefox OS va pouvoir mûrir et progressivement se faire sa place. Alors que se jeter directement dans le grand bain serait un peu trop ambitieux.

Je pense que ZTE joue ici la carte des early adopters. Et, comme nous allons le voir dans la suite de cet article, Firefox OS fonctionne plutôt bien. Il peut convenir à un certain nombre d'usages et de personnes en France.

Usage

Je suis en train de quitter Google progressivement, depuis presque un an. Et Firefox OS est une des solutions envisageables pour me débarrasser de cette dépendance. Je ne pense pas avoir de profil classique, dans la mesure où je n'utilise que très peu d'applications et jeux sur Android.

Mon usage se résume :

  • aux emails
  • aux photos
  • au calendrier
  • à la gestion de contacts
  • aux SMS/MMS et aux appels
  • au web
  • à Twitter
  • à afficher la carte du métro de temps en temps
  • et parfois jouer à des petits jeux comme 2048.

En théorie je pourrais amplement me passer d'Android. Voyons voir ce que ça donne en pratique

Configurer le wifi

Première galère, l'écriture dans les champs texte de Firefox OS. Ça vaut pour toutes les applications. Pour revenir sur une zone et éditer un mot déjà écrit, il n'y a pas de flèches gauche/droite ni de loupe. Il faut cliquer directement au bon endroit ou un peu après pour effacer pour recommencer. Donc pour rentrer une longue clé ça devient un peu chiant si on se trompe. Surtout si l'on souhaite vérifier que le début de la chaîne est bon. Car il a disparu bien à gauche, et sans flèche pour s'y rendre bah en cas d'erreur on efface tout et on recommence.

zte open c

Deuxième point concernant les champs textes, c'est que les lettres du clavier sont en majuscules, mais génèrent des minuscules. La touche SHIFT qui permet de faire des majuscules ne change pas pour autant l'aspect du clavier. Quand on est habitué à Android, on est un peu frustré. Mais on s'y fait.

Troisième élément, il n'y a pas de copier coller pour le moment. Apparemment ça arrive

Mis à part ça, tout marche bien pour le wifi :)

Twitter

toto

J'ai commencé par Twitter, histoire de faire mon malin à poster mon premier Tweet depuis Firefox OS. Il est assez agréable d'utiliser le clavier lorsque l'on a compris comment fonctionnait l’auto complétion. Malheureusement on a droit à une ponctuation forcée à l'américaine. Donc même si on met un espace avant les points d'exclamation et d'interrogation, le système nous colle ça automatiquement au mot d'avant. C'est lourd !

Mis à part ça, c'est Twitter, et ça marche bien pour mon usage !

Emails

Outch ! Alors là j'ai pas de chance. J'ai configuré l'application Courriel sur mon compte mail OVH. J'ai récupéré mes emails sans aucun soucis. Par contre, pas moyen de lire leur contenu, ni de les supprimer, ni d'envoyer d'email… J'ai recommencé la manipulation, pareil. En patientant sur l'écran de chargement pendant 30 minutes, l'email finit par s'afficher. Tout comme le reste des emails. Par contre pas moyen de supprimer ni d'envoyer d'email.

Bug email

J'ai cherché dans la FAQ. Rien. Et j'ai fini par tomber sur l'encart tout en bas de cette page. C'était bien caché ! Après avoir donc fait un tour sur IRC sur #b2g on m'a envoyé sur bugzilla. J'ai failli abandonner la recherche de mon bug dans la liste tellement il y en avait. Mais par magie je suis tombé sur mon bug et j'ai découvert que je n'étais pas le seul

En l'état, le seul moyen que ça fonctionne est de passer en POP3, mais l'IMAP semble très capricieux ! Ça commence bien ! Donc pour le moment je peux juste consulter mes emails. Cela semble spécifique à mon compte email. Donc il y a des chances que ça marche avec d'autres configurations.

J'en ai profité pour fournir des logs. Et cela m'a permis de découvrir plusieurs trucs.

  • Qu'il y a adbd sur FirefoxOS et que ça marche bien. Damn ! Si j'avais su ! Mais on me l'avait appris dans les commentaires de mon article sur adb.
  • Que remonter un bug avec logs est particulièrement lourd et pas à la portée de n'importe qui. D'autant plus que j'ai pesté un moment à ouvrir un compte sur le support Mozilla qui m'obligeait à créer un ticket pour répondre à un ticket...
  • Que l'on peut prendre des captures d'écran avec le bouton home et le bouton power

Mass storage

Aucun soucis. Ouf ! Pas de mtp.

Le Web

Aucun soucis. C'est Firefox :)

Calendrier

Agenda

J'ai branché mon Calendar Google pour le moment. Ça marche très bien. On peut également rajouter un calendrier CalDav, option dispo sur mon NAS.

Je trouve même que le rendu du calendrier est mieux que celui de mon HTC Desire HD sous Android.

Les applications

Il existe deux façons d'installer des applications :

  • le Marketplace
  • la recherche adaptative

Le Marketplace

Rien de plus classique, c'est un magasin d'applications.

J'ai été juste un peu dérouté. Les applications s'installent comme ça, sans permissions. A la différence d'Android, on peut accepter d'installer une application mais en refuser certains accès. Si un jeu demande d'accéder aux coordonnées GPS, on peut l'envoyer bouler. C'est ensuite à l'application de gérer le refus de l'utilisateur. J'aime bien ce système, c'est juste qu'avec le passif d'Android ça fait bizarre d'installer directement une application de cette façon.

zte open c zte open c

Chaque application est estampillée d'un label PEGI. C'est bien, sauf que « 3 ans et plus » apparaît sur 80 % des applications. Le label PEGI semble étonnamment plus important que la description de l'application. Il faut cliquer sur chaque application pour savoir ce qu'elle fait. C'est assez lourd.

Je ne vais pas mentir en disant que le store est jeune et encore bien vide. Il est rempli de pâles copies de jeux populaires. Mais ça reste le lot de n'importe quel magasin d'applications. Cela fait complètement Android à ses débuts.

Pour mon usage, j'ai trouvé tout ce dont j'avais besoin. Donc je suis complètement satisfait !

Mais pour les amateurs d'applications et de jeux il faudra attendre que plus de développeurs s'approprient Firefox OS pour bénéficier d'un store d'applications de qualité.

La recherche adaptative

zte open c zte open c zte open c

Cette fonctionnalité permet d'effectuer des recherches sur des site mobiles qui peuvent être installés et utilisés comme applications.

De cette façon j'ai installé :

  • Duckduckgo
  • iMDB
  • la version officielle de 2048

J'ai joué pendant une semaine à 2048, j'avais l'impression d'être offline en y jouant. Donc j'en ai bien conclu que l'application avait été sauvegardée pour être lancée en offline.

Pour Duckduckgo, je dois systématiquement attendre que le site de duckduckgo.com se charge pour pouvoir lancer une recherche.

Gros regret tout de même, que Firefox OS ne mette pas en avant Duckduckgo. Il n'y a qu'un seul moteur de recherche, Google. Il n'y a pas encore d'application Duckduckgo sur le Market. J'espère que ça arrivera vite !

Divers

On retrouve une application native de suivi de conso. C'est bien pratique. Par contre, pas de calculatrice. Mais on en trouve sur le market.

zte open c zte open c

Pour mon plan de métro en PDF, on oublie. Le chargement se compte en minutes. Il faudra attendre une application RATP ou équivalent.

Le téléphone en lui même

zte open c

J'ai importé mes contacts Google et ça a marché super. J'ai appelé, on m'a appelé. J'ai échangé SMS et MMS. RAS là dessus. C'est même très ergonomique ! Reste un manque, les timestamp des SMS pour resituer les derniers messages envoyés/reçus. Mais j'imagine que c'est le genre de chose qui pourrait apparaître dans de prochaines mises à jour.

Conclusion

Concevoir un OS ergonomique et exempt de bugs est un travail colossal. J'admire le travail réalisé. En l'état, Firefox OS est largement utilisable pour les gens patients. Il y a des bugs, les applications sont souvent assez basiques et il y a énormément de perspectives d'améliorations. Mais ça fait globalement bien son travail ! A mes yeux il y a donc un énorme potentiel ! De plus, même avec plein d'applications lancées en même temps, le système n'a jamais ramé comme pourrait le faire Android ! Je suis agréablement surpris par la qualité du ZTE et de Firefox OS. A 69€ je savais à quoi m'attendre. J'estime en avoir eu pour mon argent.

Je pense néanmoins qu'il est encore trop top pour mettre Firefox OS dans toutes les mains et surtout celles des gros consommateurs d'applications. La marche d'Android/iOS vers FirefoxOS est encore trop importante, et il serait même anti-productif de pousser ce genre d'utilisateur vers ce nouveau système.

Cela résume l'usage actuel de Firefox OS à deux types d'utilisateurs :

  1. les personnes n'ayant jamais eu de smartphone et/ou ayant un usage très simple de leur téléphone, voir n'utilisant pas de data.
  2. les libristes / early-adopters / les développeurs / les personnes soucieuses de leur vie privée.

ZTE/Firefox OS est une combinaison de téléphone / OS que je conseillerais par exemple à mes parents. Simple à utiliser, mine de rien plutôt ergonomique et sans fioritures.

Firefox répond ainsi à la pluspart de mes besoins. Mais bien que rentrant dans la seconde catégorie sus-citée, aujourd'hui je fais le choix l'arrêter d'utiliser le ZTE au quotidien pour deux raisons :

  • L'appareil photo n'est pas d'assez bonne résolution pour mon usage personnel. Mais ça, je le savais dès le départ. Toutefois, cela pourrait par contre convenir à la première catégorie d'utilisateurs.
  • Le client mail n'est pas complètement fonctionnel pour ma configuration de mail. Mais ça reste temporaire, les bugs sont dans bugzilla et devraient être corrigés dans de prochaines versions. Juste une question de temps pour que l'on atteigne une qualité similaire à K-9 Mail sous Android, je l'espère.

Je vais maintenant tester Cyanogenmod que j'ai flashé sur mon HTC pendant que j'utilisais Firefox OS comme téléphone principal. Je vais ainsi expérimenter un Android sans Google au quotidien, ce qui sera l'occasion d'un second billet bientôt.

Je garde mon ZTE dans un coin et compte attendre les prochaines mises à jour pour les tester et remonter des bugs au fur et à mesure. Lorsque le client mail sera réparé et que des téléphones avec de bons capteurs d'appareil photo seront dispo en France, la question de l'usage au quotidien se reposera très clairement !

En attendant, j'ai Cyanogenmod et F-Droid à tester. Je compte également regarder d'un peu plus près la structure du système et le code de Firefox OS, ce qui sera peut-être le sujet d'un prochain article.

Et pour la route, des liens intéressants :

]]>
EmbeddedMap - Une carte des sociétés en Systèmes Embarqués http://www.yoannsculo.fr/embeddedmap-carte-societes-systemes-embarques 2014-07-15 http://www.yoannsculo.fr/embeddedmap-carte-societes-systemes-embarques Je référence depuis quelques années les sociétés liées aux systèmes embarqués dans une liste que j'ai déjà publié dans mon blog l'année dernière.

Je contribue à mes heures perdues à OpenStreetMap depuis déjà plus d'un an. J'ai voulu il y a quelques mois m'amuser avec les API web, notamment Leaflet. Et j'ai réalisé que je pouvais matérialiser ma liste sur une carte de la France en y plaçant un curseur pour chaque société. Au début c'était pour le fun et par curiosité. J'ai passé un moment à noter chaque adresse postale puis les convertir en coordonnées GPS. J'ai été agréablement surpris par le résultat !

EmbeddedMap

Résultat qui ressemble étrangement aux cartes issues de l'étude récente de l'OPIIEC.

Apec

En effet, on peut facilement repérer les régions dont la concentration de société est forte et inversement. J'ai même découvert la présence de sociétés, dont j'ignorais l'emplacement, à côté de chez moi. Je réalise que l'outil peut être particulièrement utile lors des recherches d'emploi où même pour savoir où déménager en fonction de la présence de sociétés dans les environs.

Et donc j'ai mis à disposition cette carte sur mon serveur : embeddedmap.sculo.fr

EmbeddedMap

Le travail est loin d'être terminé. Il n'y a pour l'instant que 124 sociétés dont j'ai récupéré les coordonnées GPS. J'y vais progressivement, dans la mesure où c'est particulièrement long et répétitif à faire. Mais le résultat est déjà montrable, raison pour laquelle je partage cela maintenant.

A terme, j'aimerais pouvoir :

  • rajouter des catégories (Industriels / service / éditeurs / OEM & Equipementiers / ...)
  • rajouter des secteurs d'activité
  • permettre le tri par catégories et secteurs
  • rajouter les salons et événements liés à l'embarqué
  • rajouter plus d'informations sur les sociétés

J'ai déposé les sources (très basiques) de la page, ainsi que les données au format json sur github.

N'hésitez pas à me faire par de vos remarques voir à m'aider en contribuant sur le projet ;) Il y a notamment beaucoup de travail sur la récupération d'informations sur les sociétés.

]]>
Etude sur l'évolution des emplois et des formations en Systèmes Embarqués - OPIIEC http://www.yoannsculo.fr/etude-evolution-emplois-formations-systemes-embarques-OPIIEC-2014 2014-07-04 http://www.yoannsculo.fr/etude-evolution-emplois-formations-systemes-embarques-OPIIEC-2014 Je viens de tomber via LinkedIn, et par l'intermédiaire de Christophe Blaess, sur une étude super intéressante sur le marché des systèmes embarqués en France. L'étude réalisée par l'OPIIEC est particulièrement détaillée, on y apprend pas mal de choses.

Dans les grandes lignes on y lit qu'en France, la filière Systèmes Embarqués regroupe 1,3% des actifs, soit 387.500 personnes. Qu'il y a eu une croissance de 76% de ces effectifs en 6 ans, soit 9,9% par an.

En 2014, le salarié type en Systèmes Embarqués...

  • travaille en en Île-de-France (exemple du plateau de Saclay), dans le Sud-Est (Grenoble ou Sophia-Antipolis) ou dans le Sud-Ouest (Bordeaux ou Toulouse - dynamisme du secteur aéronautique)
  • est ingénieur ou cadre (72% des effectifs) avec un niveau important d’expérience (46% ont plus de 5 ans dans les Systèmes Embarqués)
  • occupe une fonction d’ingénieur R&D électrique / électronique / mécanique ou de concepteur / développeur logiciel

Métiers

Le secteur connaît moins la crise que la moyenne. En effet, le nombre de demandeurs d’emploi des familles professionnelles des Systèmes Embarqués (informatique / électronique) est de 2 à 10 fois inférieur à la moyenne nationale.

9,1% des offres APEC publiées correspondent à des postes en Systèmes Embarqués. La répartition géographique des offres d'emplois en France parle d'elle même !

Apec

Le salaire moyen à l’entrée dans la vie active est de 37897€ (la moyenne nationale étant à 35184 € d’après l’Usine Nouvelle)

L'étude dresse un portrait des différents acteurs du secteur. D'ailleurs, de nouveaux noms vont bientôt atterrir dans ma liste ;) Merci !

Le rapport qui liste des besoins en matières premières (matériaux/terres rares) et leur criticité et très instructif !

On nous confirme que le marché français des fournisseurs de composants est un marché de niche. Les acteurs se comptent sur les doigts de la main. Je connaissais Eolane, mais je découvre Asteelflash et Cofidur. On cherchait justement la semaine dernière au ParisEmbedded #4 des noms d'usines en France pouvant produire des quantité d'environ 1000 produits. La discussion était très intéressante et édifiante d'ailleurs. En dessous de 1000 par de soucis. Au dessus c'est trop, et il faut aller en Chine. 1000 est une quantité bâtarde qui n'intéresse pas la Chine et qui est au delà des capacités de production de sociétés françaises. L'étude illustre bien ce constat assez désespérant.

Cette dernière confirme également la montée en puissance de l'Open source dans le secteur. En 2013, 47% des projets Embarqués avait un OS libre contre 36% en 2009.

Hélas je ne suis pas forcément super convaincu que cette croissance est due à une adoption subite du Libre et de sa culture... Mais plutôt au fait qu'Android et Linux sont des solutions "Open Bar" et tout bénef pour les industriels. Bon en réalité même s'ils s'y retrouvent au final, ils se font rattrapper par la réalité des coûts cachés :D

Près de 76000 entreprises sont aujourd’hui impliquées dans les Systèmes Embarqués en France d'après l'étude. Hé bien je ne suis pas prêt d'avoir fini ma liste ! Mais on y trouve toujours autant de SSII :(

Emplois

95% des postes à pourvoir en systèmes embarqués sur l’APEC le sont en CDI. En effet, je n'ai jamais entendu parler de CDD dans le secteur. a part à l'ANSSI. Mais c'est un cas particulier !

Sinon le marché a l'air de s'améliorer pour les ingénieurs en informatique.

Marché

Bref ! L'étude est assez conséquente voir presque indigeste à lire d'un coup, mais est vraiment intéressante lorsque l'on évolue dans ce secteur.

Vous pouvez retrouver tous les PDF sur le site du Fafiec.

]]>
adb pour les produits non Android http://www.yoannsculo.fr/adb-produits-non-android 2014-07-03 http://www.yoannsculo.fr/adb-produits-non-android Lorsque l'on travaille sur des produits embarqués d'électronique grand public, débugger et développer peut s'avérer particulièrement fastidieux. Les besoins du développeur sont généralement assez basiques, avoir une console et être en mesure de déposer / récupérer des fichiers. En pratique cela peut s'avérer particulièrement lourd. Généralement, voici les possibilités s'offrent à nous :

  • La console UART
  • La console USB
  • Le réseau (ssh, telnet, NFS)
  • Le support de stockage (USB, carte SD, ...)

Chacune possède des avantages et inconvénients. Une nouvelle solution avec pas mal d'avantages est maintenant envisageable, adb.

ADB (Android Debug Bridge)

Android vient avec un petit utilitaire bien pratique de debug, adb (Android Debug Bridge). Il permet, entre autres, d'ouvrir un shell via USB ou TCP et de transférer des fichiers. C'est ce qui m'intéresse ici. Avec l'USB, on bénéficie d'un meilleur débit qu'à 115200 bauds via la console physique, et son usage est déconcertant de facilité. On branche l'USB et on tape adb shell dans une console de la machine HOST. Pas besoin de démonter le produit, d'y souder des fils qui vont s'arracher au fur et à mesure des manips. Plus besoin d'effectuer des transferts de fichiers par carte SD ou par le réseau. Bref, un énorme gain de temps pour le développeur.

Fonctionnement d'adb

fonctionnement d'adb

adb est une application client-serveur qui se décompose en trois éléments :

  • Un serveur : qui tourne en tâche de fond sur votre machine HOST, il se comporte comme une sorte de proxy
  • Un client : qui se lance sur la machine HOST et se connecte au serveur. On peut en lancer plusieurs en même temps.
  • Un daemon adbd : qui tourne sur la target et va exécuter les commandes lancées par le HOST.

Celui qui m'intéresse ici c'est le daemon adbd, côté target, et non adb côté host (PC). On trouve bon nombre de projets qui proposent la compilation d'adb côté host, mais ces derniers délaissent systématiquement adbd. La raison est simple, la mode est à Android et adbd est déjà packagé dans AOSP. L'industrie met de l'Android partout à toutes les sauces. Les bon vieux Linux embarqués n'héritent pas forcément d'outils sympa apportés par la déferlante Android. Ainsi adb va de soi pour les développeurs qui font de l'embarqué sur Android. Sauf qu'il subsiste des gens, comme moi, développant des produits qui ne tournent pas sous Android, et qui gagneraient à utiliser adb.

L'idée initiale de porter adbd pour des produits non Android vient de mon ancien collègue Guillaume Revaillot, qui avait déjà effectué le portage il y a deux ans. Sachant que c'était faisable, je me suis donc attelé à la tâche pour le rendre open source. A première vue, cela peut sembler incongru de mettre un daemon "Android" dans un produit qui ne l'est pas, mais les avantages sont multiples. Il serait dommage de s'en priver !

L'activation d'adb/adbd se fait à deux endroits:

  • dans le kernel
  • en userspace

Côté kernel

Nous avons besoin du driver Gadget Android (option CONFIG_USB_G_ANDROID). Ce dernier ne semble pas vouloir compiler autrement qu'en builtin dans ma version actuelle du kernel.

Pour ma part, la config du USB_G_ANDROID a hérité d'une dépendance à l'option SWITCH dans drivers/usb/gadget/Kconfig, je me suis contenté de la supprimer. J'explorerai à l'occasion cette piste pour comprendre la raison de son existence et l'impact de la suppression du depends on SWITCH

diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index 26ab1e3..2985fe1 100755
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -963,7 +963,6 @@ config USB_G_PRINTER

 config USB_G_ANDROID
        boolean "Android Gadget"
-       depends on SWITCH
        help
          The Android gadget driver supports multiple USB functions.
          The functions can be configured via a board file and may be

Ce driver apporte diverses fonctionnalités

  • adb : Android Debug Bridge
  • acm : (Abstract Control Model) pour émuler du RS232 par USB
  • mtp : transfert de fichiers
  • ptp : transfert de fichiers
  • rndis : tethering
  • mass_storage : transfert de fichiers
  • accessory : Android USB accessories

Ce qui m'intéresse ici c'est adb et le mass storage. Car en définitive, le module Gadget Android remplace le module classique File-backed Storage Gadget de mass storage en rajoutant de nouvelles options. Perso je n'ai pas besoin du reste, on pourrait même envisager de désactiver des pans entiers du driver pour ne garder qu'adb et le mass storage. J'ai vu dans le driver que le défrichage serait assez simple.

Côté userspace

Le code source d'Adb se trouve dans le core d'AOSP. Il est intégré au processus de build d'Android et se compile grâce aux Android.mk Bien que proches des GNU Makefiles, les Makefiles d'Android n'en sont pas, et la compilation d'adb avec des GNU Makefile nécessite leur réécriture.

J'ai forké le core :

https://android.googlesource.com/platform/system/core.git

et ai légèrement bricolé le code pour permettre la compilation via un GNU Makefile. Je n'ai pas énormément de mérite, je me suis fortement inspiré du travail de cette personne.

Vous pouvez retrouver le code source sur github.

Il y a juste à se rendre dans le dossier adb, d'exporter vos variables d'environnement pour votre toolchain et openssl

export TOOLCHAIN=<your_toolchain_path_with_prefix>
export OPENSSL_DIR=<path_to_openssl>

et faire un make.

J'ai initialement commencé sur la toute dernière branche d'Android. adb est tellement imbriqué dans le code spécifique à Android que le portage est une horreur. J'ai remonté le temps et me suis placé sur la branche gingerbread, ce qui correspond à la version 1.0.26 d'adb. Le portage a été bien plus simple. Dès que j'aurai plus de temps, je tâcherai de remonter la timeline d'Android pour fournir un adbd plus récent. En attendant, cela fonctionne. Mis à part un gros bug sur lequel je ne me suis pas encore penché. Lorsque l'on tente de transférer un dossier de façon récursive, et que l'on atteint une certaine taille (semblerait-il) le daemon adbd explose et la connexion s'interrompt. Je suis carrément preneur d'aide la dessus ;)

Utiliser adb

Une fois adbd intégré à la target, les choses intéressantes commencent. La configuration du driver se fait via sysfs. Alors bien évidemment, si l'on ne souhaite pas trop se prendre la tête, on peut indiquer tout en dur dans le driver ou via des platform data. Ce qui évite d'avoir trop de bricolages à faire à l'init. J'ai choisi l'option sysfs histoire d'expliquer à quoi servent les différents champs.

La première étape est de démarrer adbd

ifconfig lo up
adbd &

Je n'ai pas encore trop cherché la raison exacte, mais l'interface de loopback est nécessaire. Sinon pas content le adbd ! Ensuite, la configuration d'adb se fait de la façon suivante :

echo 0 > /sys/devices/virtual/android_usb/android0/enable
echo 18d1 > /sys/class/android_usb/android0/idVendor
echo 1 > /sys/class/android_usb/android0/idProduct
echo "MyCompany" > /sys/class/android_usb/android0/iManufacturer
echo "MyProduct" > /sys/class/android_usb/android0/iProduct
echo "0123456789" > /sys/class/android_usb/android0/iSerial
echo "adb" > /sys/class/android_usb/android0/functions
echo 1 > /sys/devices/virtual/android_usb/android0/enable

J'ai gardé 0x18d1 comme VendorId. C'est celui de Google. Je n'ai pas essayé de changer, mais une fois le service adbd le produit apparaît comme un périphérique Google. (cf résultat d'un lsusb)

Bus 002 Device 097: ID 18d1:0001 Google Inc.

Par contre, l'usb énumérera un périphérique custom tout mignon à votre nom :)

[286392.560081] usb 2-1.5.1.2: new high-speed USB device number 97 using ehci-pci
[286392.652892] usb 2-1.5.1.2: New USB device found, idVendor=18d1, idProduct=0001
[286392.652897] usb 2-1.5.1.2: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[286392.652900] usb 2-1.5.1.2: Product: MyProduct
[286392.652903] usb 2-1.5.1.2: Manufacturer: MyCompany
[286392.652905] usb 2-1.5.1.2: SerialNumber: 0123456789

Et pour couper le service :

echo 0 > /sys/devices/virtual/android_usb/android0/enable
killall -9 adbd
echo "" > /sys/class/android_usb/android0/functions

Utiliser le mass storage

Pour le mass storage, la manipulation est similaire :

echo 0 > /sys/devices/virtual/android_usb/android0/enable
echo 525 > /sys/class/android_usb/android0/idVendor
echo 1265 > /sys/class/android_usb/android0/idProduct
echo "MyCompany" > /sys/class/android_usb/android0/iManufacturer
echo "MyProduct" > /sys/class/android_usb/android0/iProduct
echo "0123456789" > /sys/class/android_usb/android0/iSerial
echo "mass_storage" > /sys/class/android_usb/android0/functions
echo "/dev/<...>" > /sys/devices/virtual/android_usb/android0/f_mass_storage/lun/file
echo "/dev/<...>" > /sys/devices/virtual/android_usb/android0/f_mass_storage/lun1/file
echo 1 > /sys/devices/virtual/android_usb/android0/enable

ou "/dev/<...>" est votre partition à exporter en mass storage. Ici je peux exporter une seconde partition (carte SD par exemple) sur lun1.

Ce qui nous donne l'énumération suivante

[286815.281120] usb 2-1.5.1.2: USB disconnect, device number 97
[286820.341156] usb 2-1.5.1.2: new high-speed USB device number 98 using ehci-pci
[286820.433975] usb 2-1.5.1.2: New USB device found, idVendor=0525, idProduct=1265
[286820.433980] usb 2-1.5.1.2: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[286820.433982] usb 2-1.5.1.2: Product: MyProduct
[286820.433985] usb 2-1.5.1.2: Manufacturer: MyCompany
[286820.433987] usb 2-1.5.1.2: SerialNumber: 0123456789

et pour couper le mass storage

echo 0 > /sys/devices/virtual/android_usb/android0/enable
echo "" > /sys/class/android_usb/android0/functions
echo "" > /sys/devices/virtual/android_usb/android0/f_mass_storage/lun/file
echo "" > /sys/devices/virtual/android_usb/android0/f_mass_storage/lun1/file

Je ne suis pas sûr que les echo "" soient vraiment fonctionnels/nécessaires. Il faudrait que je vérifie leur utilité.

Utiliser adb et le mass storage en même temps

Cette option est possible, et est censée fonctionner de la façon suivante :

echo "adb,mass_storage" > /sys/class/android_usb/android0/functions

mais j'avoue avoir eu des soucis pour faire marcher ça sous Windows ET Linux à cause des product et vendor id. J'explorerai ça à l'occasion, mais Android le fait donc ce n'est qu'une question de configuration à priori.

Conclusion

Tout ça marche super bien sous Linux. Sous Windows c'est tout de suite plus tricky. J'ai rencontré les mêmes soucis qu'il y a quelques années. La configuration précédente marche sous Windows seven, j'ai pas testé plus loin pour le moment.

J'ai utilisé le vendor id de Netchip Technology pour déclarer comme mass storage (0x0525/0x1265). S'il y a une façon plus propre, je suis preneur :)

Sous Windows, trouver des drivers adb est assez pénible. J'ai trouvé le site adbdriver.com, site qui fait franchement peur tellement ça sent le malware à plein nez. Le hic c'est que ça marche ! Je n'ai pas trouvé d'autre source plus fiable. Donc je suis preneur si jamais vous avez des trucs qui inspirent plus confiance. D'un autre côté, si vous êtes quelqu'un de normal, vous développez sous Linux pour une target Linux. Le problème ne devrait donc pas se poser :D

A noter que le mass storage et adb correspondent à 2 fonctionnements distincts et donc à deux drivers.

Et voilà ! Maintenant adb fonctionne comme un périphérique Android.

adb devices retournera la valeur indiquée dans le fichier iSerial. Tout beau tout propre.

List of devices attached 
0123456789  device

adb shell vous donnera un shell tout mignon par USB sans avoir à charcuter le casing de votre produit :)

N'hésitez pas à me faire part de vos remarques/critiques. Et je suis également preneur de pull requests ;)

]]>
Fosdem 2014 http://www.yoannsculo.fr/fosdem2014 2014-02-09 http://www.yoannsculo.fr/fosdem2014 Fosdem 2014

J'étais au Fosdem 2014 le week-end dernier. Bien épuisant, mais toujours aussi intéressant ! Comme l'année dernière, niveau conférences c'était parfois très inégal. Il y a du très bon comme du pas franchement passionnant, ni préparé. Rageant lorsque l'on doit faire un choix entre plusieurs présentations se déroulant en même temps. Mais parlons plutôt de ce qui m'a plu !

Firefox OS

Firefox OS attire du monde ! J'ai commencé les talks samedi par une conférence Firefox OS. La salle était bien remplie.

State of Firefox OS

J'étais curieux de savoir où en était Firefox OS, car j'ai hâte de quitter Android. Fabien Cazenave nous a expliqué que les efforts de Mozilla n'étaient pas centrés sur le portage de Firefox OS sur les téléphones actuels. Mais plutôt sur le développement de leurs propres produits pour les marchés émergents. De la même façon, Mozilla ne s'intéresse pas aux tablettes pour le moment, mais compte sur la communauté pour l'aider. Ils vont proposer dans les semaines qui viennent un programme incitant les développeurs volontaires à participer à l'effort de guerre sur tablette, en fournissant du matériel aux motivés.

J'ai pu à nouveau m'amuser avec un téléphone ZTE, si je ne m'abuse. Bon, le hardware ne vend vraiment pas du rêve, mais le système a tout ce dont j'aurais besoin sur un téléphone. Mon prochain smartphone tournera sous Firefox OS je l'espère ! Il va juste falloir encore attendre un peu.

Jenkins

J'ai mis en place Jenkins au travail, mais ne l'utilise qu'à 10 % de ses capacités. Je me posais un certain nombre de questions pour utiliser toute la puissance de l'outil. Ça tombe bien, j'ai pu demander directement aux développeurs ! :)

LAVA

LAVA

Dans le même esprit que Jenkins, j'ai découvert le projet LAVA de Linaro. C'est un framework en Python qui permet de faire du test et de l'intégration continue sur du hardware.

Exactement ce dont j'aurais besoin ! J'ai bon espoir de pluger cet outil sur mon Jenkins et mon projet en cours de développement afin de me faire un système de build et de qualif du tonnerre ! Je vais regarder ça en détails dès que j'ai un peu de temps.

Energy consumption

Mon dimanche a débuté sur des conférences axées sur la consommation d'énergie, et les techniques pour la mesurer de façon précise et peu intrusive.

Energy consumption

Leurs propos portaient sur le fait que les développeurs software, contrairement aux gens du hardware, ne sont pas habitués à penser « consommation d'énergie ». On nous a alors présenté le projet open source MAGEEC, ayant pour premier axe de travail l'optimisation de la compilation à des fins d'économie d'énergie. Le second aspect du projet est le développement d'une board open source de mesure de consommation, que voici :

MAGEEC

J'aurais beaucoup aimé me rendre au workshop l'après midi, et repartir avec une board. Mais j'ai choisi d'aller voir du côté d'Allwinner.

Allwinner

Je me suis senti tout de suite moins seul après la présentation d'Olliver Schinagl ! Allwinner fait de l'open source, mais en pratique la qualité des livrables est tellement mauvaise que le travail des développeurs devient un enfer. Sans compter toutes les problématiques de blobs et de non respect des licences GPL. J'ai découvert, avec soulagement, que je n'étais pas le seul à pester et que la communauté sunxi, autour des processeurs Allwinner, avait les mêmes problèmes que moi. Leur wiki m'avait beaucoup aidé cet été, mais je pense aller bientôt discuter directement avec eux. Leur code semble être en avance de phase sur le code fourni par Allwinner. Que cela soit sur le bootloader et le kernel. Ô joie !

Vidéos

Vous pouvez retrouver les vidéos des présentations en ligne. Toutefois, je n'ai pas de son sur les vidéos. Je ne sais pas si ça vient de chez moi où s'il y a un soucis d'encodage.

]]>
ParisEmbedded n°3 - Petit compte-rendu http://www.yoannsculo.fr/retour-paris-embedded-3 2014-01-26 http://www.yoannsculo.fr/retour-paris-embedded-3 Paris Embedded

Mieux vaut tard que jamais. Je me suis rendu à la troisième édition de ParisEmbedded le 7 janvier dernier. Cette fois-ci, j’avais prévu une présentation / retour d’expérience sur les interactions avec la Chine dans mon métier d’ingénieur linux embarqué. Et notamment toutes les problématiques que l’on rencontre à cause des différences culturelles et techniques, de la distance, etc.

Joshfire a filmé les présentations. Soyez indulgents, c’était ma première présentation en anglais depuis un paquet d’années ^^

Manufacturing in China, what the hell ! - Yoann Sculo

Slides de la présentation - Vidéo de la présentation

Martin Bonnin a ensuite présenté des techniques de bricolage de PCB à la maison. Je n’ai pas non plus de super souvenirs avec le perchlo :P Mais j’avoue que j’opterais aujourd’hui pour le PCB fait sur mesure en Chine.

Building your circuit boards at home - Martin Bonnin

Slides de la présentation - Vidéo de la présentation

Suivi d’une présentation très intéressante de Benjamin Joffe, qui retrouve les mêmes problématiques que moi en Chine. Il nous a parlé de HAXLR8R, son incubateur de startups hardware. Et comment il aide ces startups à faire les bons choix et éviter les pièges là bas.

Lean Hardware 101 - Benjamin Joffe

Slides de la présentation - Vidéo de la présentation

Et pour finir, Maurice Svay nous a parlé de sa dernière acquisition, le Spark Core. Petite carte de dev wifi, programmable à distance sur un IDE web.

(désolé, je n'ai pas de photo)

Slides de la présentation - Vidéo de la présentation

Comme d’habitude, c’était super intéressant. C’est toujours l’occasion de revoir plein de monde et rencontrer de nouvelles personnes. Bref toujours un plaisir de venir !

Merci encore à Joshfire et merci à Robert Salita pour ses photos.

]]>