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. 2015-03-18T00:00:00Z fr hourly 1 repo - un outil pour gérer des repositories git multiples sans trop s'arracher de cheveux http://www.yoannsculo.fr/git-repo-outil-gestion-multiples-repositories-arracher-cheveux 2015-01-27 http://www.yoannsculo.fr/git-repo-outil-gestion-multiples-repositories-arracher-cheveux Maintenir un projet sur un repository git c'est cool. Quand on a plusieurs projets qui font 300 à 500 repositories et qui traînent une ribambelle de branches, c'est une autre histoire à maintenir ! Accessoirement, ça commence déjà à être compliqué à une dizaine. Il existe plusieurs outils pour nous sauver un peu la vie lorsqu'on en arrive là. Chacun a des avantages et inconvénients. Mais je n'ai pas encore vu de logiciel sortir vraiment du lot.

  • Git submodules me fout des boutons.
  • Git Subtree existe également. Je ne l'ai pas encore testé faute de temps.
  • Google repo est la solution dont je vais parler ici et que je commence à bien connaître.

repo, « The Multiple Git Repository Tool », est une application en Python développée par Google, historiquement pour gérer les centaines de repositories d'Android. J'ai commencé à l'utiliser pour compiler des firmwares Android, et j'ai fini par m'en servir sur des projets non Android. L'outil n'est franchement pas parfait mais fait son travail si l'on est un minimum rigoureux. Et surtout si on sait à quel moment utiliser et ne pas utiliser repo.

Le but de cet article est de présenter l'outil, lister quelques astuces et de pointer les difficultés que l'on peut rencontrer en utilisant cette application.

Pour créer un projet avec repo, il faut déjà télécharger l'application.

Je conseille d'éviter d'aller chopper des vieilleries dans les versions de repo. Il peut y avoir de sacrées différences entre des versions de repo assez éloignées, j'en ai fait les frais. De toute façon, repo vérifie régulièrement l'existence de mises à jour sur le net. S'il trouve une mise à jour, vous serez notifié à chaque exécution du soft.

Voici le plan de mon article, pour mieux s'y retrouver dans le pavé qui suit :

  • TLDR - Too long; didn't read
  • Utilisation de repo - la théorie
  • Utilisation de repo - la pratique
    • Le manifest
    • Récupération des sources
    • Se placer sur une branche
  • Utilisation de repo - quelques remarques et astuces
    • Désynchronisation de branche au repo start
    • Désynchronisation de branche lors du développement
    • Tagger des repositories multiples avec repo
    • Connaître l'état de ses repositories
    • Limites du manifest
    • Le repository du manifest
    • Aller plus loin : le manifest local
  • Conclusion - Retour sur mon propre usage

TLDR - Too long; didn't read

repo est un super outil qui peut s'avérer être une plaie à utiliser si l'on ne connaît pas bien ses limites.

  • J'utilise repo (repo sync) pour synchroniser mon code, effectuer des actions rébarbatives sur tous les repostories en un coup, maintenir à jour mon serveur Jenkins et générer des firmwares from scratch.
  • J'utilise uniquement des commandes git lorsque je manipule des branches et souhaite récupérer les modifications de mes collègues.

Utilisation de repo - la théorie

repo fournit un lot commandes pour manipuler plusieurs repositories à la fois :

  abandon        Permanently abandon a development branch
  branch         View current topic branches
  branches       View current topic branches
  checkout       Checkout a branch for development
  cherry-pick    Cherry-pick a change.
  diff           Show changes between commit and working tree
  diffmanifests  Manifest diff utility
  download       Download and checkout a change
  grep           Print lines matching a pattern
  info           Get info on the manifest branch, current branch or unmerged branches
  init           Initialize repo in the current directory
  list           List projects and their associated directories
  overview       Display overview of unmerged project branches
  prune          Prune (delete) already merged topics
  rebase         Rebase local branches on upstream branch
  smartsync      Update working tree to the latest known good revision
  stage          Stage file(s) for commit
  start          Start a new branch for development
  status         Show the working tree status
  sync           Update working tree to the latest revision
  upload         Upload changes for code review

L'usage classique de repo est le suivant :

mkdir myproject
cd myproject
repo init -u [url]
repo sync
repo start master --all

repo utilise un fichier xml (manifest) qui va définir exactement où trouver nos repositories, quelles branches récupérer, où créer les dossiers, etc. On initialise le projet de la façon suivante :

repo init -u git@github.com:yoannsculo/manifest.git

On synchronise ensuite tous les repositories

repo sync

On se place alors sur la branche de notre choix (ici master) sur tous les repos.

repo start master --all

On peut se faire une idée de l'état du projet avec

repo status

On peut alors développer comme d'habitude, en utilisant git individuellement sur chacun des repositories. Les commandes classiques fonctionnent. Mais si on doit faire 500 git pull individuellement, repo prend tout son sens et repo sync nous permet de synchroniser tous les repositories d'un coup.

Il est bon de savoir que toutes les commandes repo command peuvent être lancées depuis n'importe quel niveau de l'arborescence du projet.

Utilisation de repo - la pratique

Bien qu'il y ait peu de commandes, repo s'avère un peu capricieux à l'usage. Je vais donc détailler comment je fonctionne. D'ailleurs je reste ouvert à toute remarque ;)

Le manifest

Pour un projet qui existe déjà, il s'agit d'initialiser le projet grâce à une url qui pointe sur le bon manifest. Juste pour se faire une idée, voici le manifest par défaut d'Android. On en est à environ 500 repositories git !

On peut trouver plus d'informations sur les manifests dans les spécifications se trouvant dans les sources du projet de Google.

Lorsque l'on part de zéro, il faut créer ce manifest. La première étape est donc la création de ce fichier (fichier default.xml) qui va référencer les projets à synchroniser.

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <remote name="github" fetch="https://github.com/yoannsculo"/>
    <remote name="buildroot" fetch="git://git.buildroot.net"/>

    <default revision="master" remote="github" sync-j="8"/>

    <project name="JobCatcher.git" remote="github" path="job/jobcatcher" revision="unstable">
    <copyfile src="README.md" dest="README.md" />
    </project>

    <project name="emploi.git" remote="github" path="job/emploi" />
    <project name="SHOUTcast-Recorder.git" remote="github" path="dev/SHOUTcast-Recorder" />
    <project name="adbd.git" remote="github" path="dev/adbd" revision="gingerbread-adbd" />
    <project name="buildroot.git" remote="buildroot" path="dev/buildroot" />

</manifest>

Je me suis construit un exemple à partir de divers projets github. J'ai créé un repository github pour cet article, où j'y ai déposé le fichier default.xml

repo init ne fonctionne qu'avec une url de repository git, je n'ai pas encore trouvé de moyen de bricoler un manifest sans commiter systématiquement chacune de mes modifications.

Le manifest default.xml est le manifest appelé si l'on ne spécifie pas de manifest particulier. Pour bon nombre de projets, un seul manifest peut suffire. Mais il est possible de demander un autre manifest avec l'option -m Par exemple, si je rajoute un second manifest sur mon repository github, je peux choisir un nouvel ensemble de projets et de branches spécifiques.

repo init -u git@github.com:yoannsculo/manifest.git -m new_project.xml

Personnellement, je possède un seul repository privé qui centralise tous mes projets. Je n'ai qu'à appeler le bon fichier de manifest xml.

Récupération des sources

Après avoir récupéré les sources de cette façon,

repo sync

on se retrouve alors avec l'arborescence suivante :

.
├── dev
│   ├── adbd
│   ├── buildroot
│   └── SHOUTcast-Recorder
├── job
│   ├── emploi
│   └── jobcatcher
└── README.md

J'utilise systématiquement l'argument -j8 à mes commandes repo. C'est à dire repo sync -j8, repo status -j8, etc. Parce que j'ai 8 cœurs et qu'on gagne un temps fou si on ne le fait pas en parallèle !

Si on regarde les fichiers cachés, on s'aperçoit qu'un dossier .repo a été créé à la racine de l'arbre des sources.

.
├── dev
│   ├── adbd
│   ├── buildroot
│   └── SHOUTcast-Recorder
├── job
│   ├── emploi
│   └── jobcatcher
├── README.md
└── .repo
    ├── manifests
    ├── manifests.git
    ├── manifest.xml -> manifests/default.xml
    ├── project.list
    ├── project-objects
    ├── projects
    ├── repo
    └── .repopickle_fetchtimes

repo init créé automatiquement ce dossier qui va contenir tous les objets git. En effet, si on rentre dans le dossier .git de l'appli SHOUTcast-Recorder, on peut voir que ce dernier contient des liens symboliques vers le dossier .repo principal.

.
├── config -> ../../../.repo/projects/dev/SHOUTcast-Recorder.git/config
├── description -> ../../../.repo/project-objects/SHOUTcast-Recorder.git.git/description
├── HEAD
├── hooks -> ../../../.repo/project-objects/SHOUTcast-Recorder.git.git/hooks
├── index
├── info -> ../../../.repo/project-objects/SHOUTcast-Recorder.git.git/info
├── logs -> ../../../.repo/projects/dev/SHOUTcast-Recorder.git/logs
├── objects -> ../../../.repo/project-objects/SHOUTcast-Recorder.git.git/objects
├── packed-refs -> ../../../.repo/projects/dev/SHOUTcast-Recorder.git/packed-refs
├── refs -> ../../../.repo/projects/dev/SHOUTcast-Recorder.git/refs
├── rr-cache -> ../../../.repo/project-objects/SHOUTcast-Recorder.git.git/rr-cache
├── shallow -> ../../../.repo/projects/dev/SHOUTcast-Recorder.git/shallow
└── svn -> ../../../.repo/project-objects/SHOUTcast-Recorder.git.git/svn

Les objets git de tous les repositories sont donc centralisés à un seul et unique endroit (le dossier .repo) et plus dans chacun des repositories git. C'est important à savoir, car cela change la façon d'appréhender certaines manipulation sur les repositories git.

On peut très bien supprimer le dossier dev/SHOUTcast-Recorder par exemple. Un repo sync fera réapparaître le dossier dans la mesure où ses objets git n'avaient pas été supprimés.

Se placer sur une branche

Si je rentre dans le projet jobcatcher, juste après le repo sync -j8,

$ git status
# Not currently on any branch.
nothing to commit, working directory clean

Par défaut, nous ne sommes sur aucune branche. Regardons de plus près.

$ git branch -avv
* (no branch)             11d0b5d Happy new year!!
  remotes/github/master   9de3e04 Merge pull request #91 from guillaumerose/patch-1
  remotes/github/unstable 11d0b5d Happy new year!!
  remotes/m/master        -> github/unstable

Comparons avec la même commande, mais effectuée à la suite d'un git clone du repository récupéré individuellement.

$ git clone git@github.com:yoannsculo/JobCatcher.git
Cloning into 'JobCatcher'...
remote: Counting objects: 1954, done.
remote: Total 1954 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1954/1954), 1.14 MiB | 966.00 KiB/s, done.
Resolving deltas: 100% (1208/1208), done.
Checking connectivity... done

$ git branch -avv
* unstable                11d0b5d [origin/unstable] Happy new year!!
  remotes/origin/HEAD     -> origin/unstable
  remotes/origin/master   9de3e04 Merge pull request #91 from guillaumerose/patch-1
  remotes/origin/unstable 11d0b5d Happy new year!!

Nous avons un résultat légèrement différent. Cette différence est source de problèmes par la suite. Non seulement il faut se placer sur la branche qui nous intéresse (master ou unstable ne sont pas choisies par défaut), mais repo va automatiquement créer une branche remotes/m/master qui va pointer sur la branche qui a été spécifiée dans le fichier manifest. La branche unstable ici. Alors qu'un simple git clone va automatiquement créer une branche de suivi master, ce que ne fait pas repo.

Pour se placer sur la branche unstable, il suffit de faire

$ repo start unstable JobCatcher.git

Les commandes repo peuvent être exécutées à n'importe quel niveau de l'arborescence du projet principal.

Le repository est alors initialisé à la bonne branche.

$ git branch -avv
* unstable                11d0b5d Happy new year!!
  remotes/github/master   9de3e04 Merge pull request #91 from guillaumerose/patch-1
  remotes/github/unstable 11d0b5d Happy new year!!
  remotes/m/master        -> github/unstable

Personnellement j'ai du mal à comprendre pourquoi cela a été conçu de cette façon. J'ai tendance à faire légèrement différemment en faisant un git checkout moi même, afin de récupérer le tracking de la branche distante :

$ git checkout unstable
$ git branch -avv
* unstable                11d0b5d [github/unstable] Happy new year!!
  remotes/github/master   9de3e04 Merge pull request #91 from guillaumerose/patch-1
  remotes/github/unstable 11d0b5d Happy new year!!
  remotes/m/master        -> github/unstable

ce que je préfère. Mais nous verrons par la suite dans quel cas cela peut poser des problèmes.

Après ces quelques explications, revenons à la méthode officielle de création de branches avec repo.

La documentation de repo est assez laconique car adaptée à Android qui possède des branches harmonisées sur tous les repositories. Ainsi on se place sur une branche de la façon suivante :

$ repo start <newbranchname> [--all | <project>...]

Si l'on souhaite se placer sur la branche master partout il suffit alors de faire :

$ repo start master --all

Cela fonctionne plutôt bien si on a un paquet de repositories dont le workflow git est assez basique. Mais pour des projets plus complexes, il n'est pas garanti que l'on retrouve une branche distante identique sur tous les repositories. Et si les repositories utilisés ne sont pas hébergés sur nos propres serveurs, la création de branche distante n'est pas envisageable.

Il faut alors spécifier soi-même la branche à utiliser, comme précédemment dans cet article.

$ repo start unstable JobCatcher.git

Sur plusieurs de mes projets, lors de la première synchro, je commence systématiquement par

$ repo start <branche_majoritaire> --all

suivi de commandes plus spécifiques pour les repositories pour lesquels je veux une branche spécifique

$ repo start <autre_branche> projet.git
$ repo start <autre_branche_bidule> projet2.git
$ ...

Honnêtement ça peut rapidement devenir assez pénible. Donc généralement je fork tous les projets extérieurs et je créé systématiquement une branche pour mon projet sur mon propre serveur git. Cela me permet d'avoir un simple

$ repo start <ma_branche_commune> --all

lors de l'initialisation des sources.

L'inconvénient de cette solution c'est que ça pollue mes repositories avec de nombreuses branches, juste pour simplifier l'usage de repo...

Utilisation de repo - quelques remarques et astuces

Désynchronisation de branche au repo start

Attention au repo start ! La commande repo start va créer une branche locale synchronisée avec la branche distante. Et cela uniquement si la branche correspond à celle indiquée dans le manifest. Autrement, une branche du même nom et désynchonisée sera créée à partir du dernier commit de la branche indiquée par défaut dans le manifest. Il faut donc bien spécifier la bonne branche dans le manifest sans quoi on aura de sales surprises avec des branches désynchronisées.

Ce n'est sans doute pas clair. Rien de mieux qu'un exemple pour illustrer cette spécificité. Prenons un manifest basique, avec un projet test-repo.git qui possède deux branches : master et branche-A. Nous sommes synchronisés sur la branche master.

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <remote name="github" fetch="https://github.com/yoannsculo"/>
    <default revision="master" remote="github" sync-j="8"/>
    <project name="test-repo.git" remote="github" path="test-repo" />
</manifest>

J'initialise le repo. Le repsitory du manifest est un brouillon pour l'exemple. Il aura été supprimé de github d'ici à ce que je publie l'article.

repo init -u https://github.com/yoannsculo/manifest-2.git
repo sync -j8
repo start master test-repo.git

ce qui donne l'historique suivant :

* de585a0 (github/branche-A) A: commit 3
* 42d70f0 A: commit 2
* f377cca A: commit 1
* a0a11f4 (HEAD, m/master, github/master, master) first commit

Je suis bien sur la branche master

$ git branch -avv
* master                   a0a11f4 first commit
  remotes/github/branche-A de585a0 A: commit 3
  remotes/github/master    a0a11f4 first commit
  remotes/m/master         -> github/master

Maintenant je vais modifier le repository test-repo.git, mais sans passer par repo. Je clone le repository autre part et vais rajouter un commit sur master. Ce qui donne l'arborescence suivante sur ce repo individuel git.

* 29c3d97 (HEAD, origin/master, master) master: new commit
| * de585a0 (origin/branche-A, branche-A) A: commit 3
| * 42d70f0 A: commit 2
| * f377cca A: commit 1
|/  
* a0a11f4 first commit

Je retourne à mon projet repo et fais un repo sync -j8 pour répercuter mes modifs

* 29c3d97 (HEAD, m/master, github/master, master) master: new commit
| * de585a0 (github/branche-A) A: commit 3
| * 42d70f0 A: commit 2
| * f377cca A: commit 1
|/  
* a0a11f4 first commit

Le résultat est le même, tant mieux :) C'était pour montrer le cas qui marche !

Maintenant je recommence tout mais je ne vais pas demander à me placer sur la branche master.

repo init -u https://github.com/yoannsculo/manifest-2.git
repo sync -j8
repo start branche-A test-repo.git

et là c'est le drame

* 29c3d97 (HEAD, m/master, github/master, branche-A) master: new commit
| * de585a0 (github/branche-A) A: commit 3
| * 42d70f0 A: commit 2
| * f377cca A: commit 1
|/  
* a0a11f4 first commit

Nous avons bien une branche locale qui s'appelle branche-A, mais elle n'est pas du tout synchronisée avec la branche distante branche-A. Elle a été créée à partir du dernier commit de master (branche par défaut dans le manifest).

Donc la première difficulté avec repo, c'est que repo start se manipule avec la plus grande attention. On peut créer des branches locales, mais la synchronisation avec la branche distante n'est pas automatique si on demande une branche qui est différente de celle indiquée dans le manifest (master dans notre cas).

Je vais maintenant modifier le fichier manifest pour spécifier, cette fois-ci, la branche-A comme branche par défaut.

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <remote name="github" fetch="https://github.com/yoannsculo"/>
    <default revision="master" remote="github" sync-j="8"/>
    <project name="test-repo.git" remote="github" path="test-repo" revision="branche-A" />
</manifest>

On recommence la manipulation

repo init -u https://github.com/yoannsculo/manifest-2.git
repo sync -j8
repo start branche-A test-repo.git

Nous avons une branche bien synchronisée

* 29c3d97 (github/master) master: new commit
| * de585a0 (HEAD, m/master, github/branche-A, branche-A) A: commit 3
| * 42d70f0 A: commit 2
| * f377cca A: commit 1
|/  
* a0a11f4 first commit

On voit donc que la branche spécifiée dans le manifest est importante.

Comme je l'indiquais précédemment, repo va automatiquement créer une branche remotes/m/master qui va pointer sur la branche qui a été spécifiée dans le fichier manifest.

* branche-A                de585a0 A: commit 3
  remotes/github/branche-A de585a0 A: commit 3
  remotes/github/master    29c3d97 master: new commit
  remotes/m/master         -> github/branche-A

Le choix du nom m/master n'est pas super judicieux et porte à confusion lorsque l'on quitte un workflow git basique (c'est à dire quasiment tout le temps dès que l'on a un gros probjet entre les mains). Il faut donc faire attention à cette particularité de repo. Sinon on passe son temps à resynchroniser ses branches manuellement.

Désynchronisation de branche lors du développement

Ce problème de désynchronisation apparaît également lorsque l'on utilise repo en même temps que l'on développe dans les repositories. C'est à dire tout le temps en fait :) Raison pour laquelle tout utilisateur de repo est devenu fou à un moment ou à un autre. Je vais tâcher d'illustrer ce qui s'avère être l'aspect le plus pénible de repo. Nous verrons également que nous arrivons à une limite de l'outil et qu'il faut savoir ne pas utiliser repo dans certains cas.

Nouvel exemple. Partons de l'état suivant :

* 1dc67f8 (github/master) master: commit 2
* 6025629 master: commit 1
| * e891433 (HEAD, m/master, github/branche-A) branche-A: commit 2
| * b25bd14 branche-A: commit 1
|/  
* 75d5550 some stuff

où branche-A est la branche par défaut de repo sur ce repository.

Si je me place sur master,

$ git checkout master

* 1dc67f8 (HEAD, github/master, master) master: commit 2
* 6025629 master: commit 1
| * e891433 (m/master, github/branche-A) branche-A: commit 2
| * b25bd14 branche-A: commit 1
|/  
* 75d5550 some stuff

que je commence à travailler dessus et que quelqu'un fait des modifications entre temps sur cette branche distante master. Je cherche alors à récupérer les nouveautés de cette façon :

$ repo sync -j8
Fetching project test-repo.git 
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1)
Unpacking objects: 100% (3/3), done.
From https://github.com/yoannsculo/test-repo
   1dc67f8..253a10b  master     -> github/master
Fetching projects: 100% (1/1), done.  

test-repo/: manifest switched refs/heads/master...branche-A
project test-repo/
First, rewinding head to replay your work on top of it...
Applying: master: commit 1
Applying: master: commit 2

ça sent très mauvais ! En effet regardons ce que nous a fait le repo sync

* be7476d (HEAD, master) master: commit 2
* 1e05acc master: commit 1
* e891433 (m/master, github/branche-A) branche-A: commit 2
* b25bd14 branche-A: commit 1
| * 253a10b (github/master) master: commit 3
| * 1dc67f8 master: commit 2
| * 6025629 master: commit 1
|/  
* 75d5550 some stuff

Berk. Notre branche master locale a été rebasée sur branche-A, sans pour autant prendre le commit 3 qui nous intéressait.

A vrai dire c'est normal, il fallait s'y attendre. Car nous étions resté sur master avant de faire le repo sync Avant de faire le repo sync, il faut donc revenir sur la branche par défaut, ici la branche-A (git checkout branche-A). De cette façon, pas de soucis de rebasing sur la mauvaise branche

* 0993c09 (github/master) master: commit 3
* 1dc67f8 (master) master: commit 2
* 6025629 master: commit 1
| * e891433 (HEAD, m/master, github/branche-A, branche-A) branche-A: commit 2
| * b25bd14 branche-A: commit 1
|/  
* 75d5550 some stuff

Bon ! Cette fois, on a récupéré correctement le code sur la bonne branche. Mais la branche master locale se retrouve désynchronisée et est bêtement restée sur le commit 2 ... Généralement, je ne m'embête pas trop dans ce cas et je fais

git branch -D master
git checkout master

Tout ceci est bien laborieux pour un repository git. Alors imaginez que vous avez travaillé sur plusieurs repositories et que vous souhaitez récupérer les modifs de vos collègues. Il faut penser à se placer sur la branche par défaut du manifest, puis supprimer la branche de travail et la recréer ... Ça devient rapidement galère.

repo vient avec une commande super pratique, repo forall. Pour une raison inconnue, la commande qui est sans doute la plus utilisée et la plus pratique n'est même pas documentée dans repo help ... Bref, repo forall permet de lancer des commandes sur tous les repositories git en une fois.

Par exemple, nous pouvons nous placer sur la branche branche-A sur tous les repositories en une seule commande

repo forall -c git checkout branche-A

Il est donc possible d'automatiser la suppression de la branche master désynchronisée puis sa recréation. Mais tout cela commence à être lourd à l'usage !

Ce problème de désynchronisation des branches est le principal défaut de repo. Pour moi, repo n'est pas fait pour le développement au quotidien. C'est un super outil dont il faut connaître les limites. Ses commandes n'utilisent avec parcimonie.

Pour ne pas subir les problèmes de désynchronisation, je fonctionne ainsi de la façon suivante :

J'utilise repo et donc repo sync pour récupérer tout le code source sur une nouvelle machine de dev ou pour récupérer un projet clean. Pour tenir à jour le projet sur mes serveurs d'intégration continue et donc pour générer un firmware compilé from scratch en quelques lignes de commandes

J'utilise les commandes git (et surtout pas repo) pour développer, créer des branches par feature/bug et changer régulièrement de contexte et appliquer des patchs. Pour récupérer les modifications de mes collègues j'utilise plutît git fetch -a et git pull --rebase origin ma_branche. Il m'arrive même de cloner les repositories à l'extérieur du projet repo pour travailler sereinement dedans.

Normalement, en suivant ce schéma de travail, repo n'est pas une source de problème et s'avère être très utile !

Tagger des repositories multiples avec repo

La commande repo forall est super pratique, je m'en sers pour tagger mes repositories en une seule ligne de commande. Pour ça j'ai écrit rapidement deux scripts.

tag-add.sh

#!/bin/bash

REMOTE=$(git remote)
BRANCH=$(git branch | grep '*' | sed 's/* //')
TAG=$1
MSG=$2

if [ $# -eq 0 ]; then
    echo 'Missing parameters'
    exit 0
fi

git tag -a $TAG -m "$MSG"
git push $REMOTE --tags

exit 0

tag-rm.sh

#!/bin/bash

REMOTE=$(git remote)
BRANCH=$(git branch | grep '*' | sed 's/* //')
TAG=$1

if [ $# -eq 0 ]; then
    echo 'Missing parameters'
    exit 0
fi

git tag -d $TAG
git push $REMOTE :refs/tags/$TAG

exit 0

Je peux alors ajouter un tag

repo forall -c /.../.../tag-add.sh "TAG123456" "TAG: Super tag pour mon repo"

Et le supprimer

repo forall -c /.../.../tag-rm.sh "TAG123456"

Attention, ça part tout seul !

Connaître l'état de ses repositories

La commande repo status revient à faire un git status sur tous les repositories. Mais cette dernière ne retournera rien si nous ne sommes pas passés par un repo start sur chacun des repositories.

La commande suivante, bien pratique, me permet de connaître les hashs de commits à un instant donné pour tout le projet.

repo forall -c 'echo `git log --pretty=format:'%h' -n 1` $(basename `pwd`)'

Cela donne la liste suivante avec mon projet repo de test

fbd9354 SHOUTcast-Recorder
c5d1b30 adbd
1c34119 buildroot
bf7f7e6 emploi
11d0b5d jobcatcher

En stockant cela dans un fichier à chaque build du projet, on peut aisément connaître l'état du projet lors de sa compilation, sans avoir à tagger chaque build du projet.

Limites du manifest

Il semblerait qu'utiliser plusieurs éléments default pour plusieurs remote ne fonctionne pas.

C'est à dire qu'il n'est pas possible de faire ça

<default revision="master" remote="github" sync-j="8"/>
<default revision="ma-branche-custom" remote="buildroot" sync-j="8"/>

C'est bien dommage ! Et donc je dois spécifier le champ revision dans toutes mes entrées project de mes manifests.

Le repository du manifest

Dans la mesure où il n'est pas possible (jusqu'à preuve du contraire) de fournir un chemin local à git init, la configuration du repository du manifest se fait souvent en plusieurs temps.

"Oh j'ai oublié un truc, ah et puis zut il faut rajouter ça ..."

En voulant faire quelque chose de propre, on est tenté de réécrire les commits pushés sur le serveur avec avec git push -f.

Mauvaise idée !! Même si on est seul à jouer sur la branche. repo gère mal la réécriture d'historique et ça explose dans .repo/manifests.git. C'est là-bas qu'il faut aller résoudre l'hécatombe, en corrigeant la désynchronisation de la branche default.

Mon conseil est de faire plusieurs commits, tant pis si l'historique n'est pas beau. On s'en fiche un peu ce n'est qu'un manifest. Personne ne regarde son historique :P

Aller plus loin : le manifest local

Je découvre à la toute fin de la rédaction de cet article l'existence du manifest local dans la documentation de repo. En déposant des manifest *.xml dans le dossier .repo/local_manifests on peut rajouter projets et remotes.

Je n'ai pas encore testé, mais je pense que ça peut être assez utile lorsque l'on souhaite adapter une petite partie d'un très gros projet, en local. Voir même, justement, pour mettre en forme son fichier manifest sans avoir à pusher 20 commits pour chaque nouveau test.

Un peu de doc à ce sujet

Je testerai ça à l'occasion et complèterai sans doute mon article dès que j'aurai bien joué avec.

Conclusion - Retour sur mon propre usage

Pour moi repo est un peu un sorte de bazooka qui permet d'effectuer des tâches grossières sur de très gros projets. Je le trouve particulièrement adapté :

  • à la syncho de code source de gros projet sur son PC de dev super facilement
  • à la génération de firmwares
  • à la compilation sur serveur d'intégration de type Jenkins. On charge un projet on se place sur la bonne branche et on lance le build.
  • à la manipulation automatisée sur repositories (ajout de branches, de tags, etc.)

J'utilise donc repo sync -j8

  • quand je suis sur mon serveur de build ou sur un dossier clean de ma machine de dev.
  • quand je synchronise le projet pour la première fois.

Par contre, le bazooka devient trop bourrin et anti-productif dès qu'il s'agit de travailler finement et individuellement sur des repositories git. En fait dès que l'on se met à développer, repo perd alors son utilité. Il faut alors privilégier les commandes git classiques pour :

  • créer des branches par feature/bug
  • changer régulièrement de contexte et appliquer des patchs
  • récupérer les modifications de ses collègues

Pour simplifier les choses, je conseille également d'héberger soi même tous les repositories sur ses propres serveurs git. Cela facilite le travail et cela permet de déposer tags et branches custom.

]]>
ParisEmbedded 2.0 http://www.yoannsculo.fr/parisembedded-2.0 2014-12-23 http://www.yoannsculo.fr/parisembedded-2.0 Paris Embedded

Vous avez peut être lu ou entendu que la société Joshfire, qui organisait ParisEmbedded, s'était rapprochée de la société userADgents en novembre dernier. En conséquence, Joshfire a déménagé et ne peut plus héberger de meetup dans ses locaux. Malheureusement, l'embarqué n'est plus leur coeur de métier et le meetup n'est plus une priorité pour eux.

Comme vous vous en êtes peut-être rendu compte, si vous êtes inscrit au meetup, la fréquence des meetups a fortement baissé. Il aurait été assez dommage de mettre fin à l’événement.

Je me suis proposé comme repreneur pour le meetup. Je vais donc organiser ParisEmbedded à partir de maintenant avec l'aide de Pierre-Rudolf Gerlach et Christophe Blaess,

Je tiens à remercier Joshfire pour avoir créé ce meetup à Paris et de m'avoir fait confiance pour la reprise du groupe. Je ferai de mon mieux pour que le groupe dure longtemps et que l'on organise des meetups intéressants.

Le Lieu

Nous organisons maintenant le meetup à titre personnel et plus en tant que société. Ainsi nous n'avons plus de locaux pour héberger l'événement, comme Joshfire le pouvait. Et donc nous avons besoin de retrouver un lieu pour nous accueillir tous. J'ai déjà des pistes intéressantes. Toutefois si vous avez des contacts et des connaissances pouvant nous aider à trouver un local de 50 à 90 personnes dans Paris, je suis très intéressé !

Le prochain meetup

Cela dépendra complètement du lieu et de la disponibilité de ce dernier. Nous souhaitons organiser un meetup par trismestre (donc 4 par an). Le premier devrait avoir lieu courant Q1 2015 (en février/mars). Je vous tiendrai au courant dès que nous aurons choisi le lieu.

Le contenu des meetups

La forme des prochains meetups restera telle quelle. Je souhaiterais néanmoins recibler les présentations sur des sujets plus techniques et industriels. Quelque chose de moins hardware, laissant un peu plus de place au software.

Si vous avez des propositions de présentations ou de discussions, n'hésitez pas à me contacter.

Je posterai plus d'informations dès que j'aurai matière à communiquer :)

]]>
Réappropriation de mes données privées, un an après http://www.yoannsculo.fr/reappropriation-donnees-privees-un-an-apres 2014-12-14 http://www.yoannsculo.fr/reappropriation-donnees-privees-un-an-apres J'ai pris la décision fin 2013 de reprendre le contrôle de mes données privées, il y a exactement un an.

J’avais prévu d’écrire un article de blog à ce sujet il y a bien longtemps, mais ce dernier est resté à l’état d’ébauche pendant un bon moment. Une année m’a permis de tester plusieurs solutions et alternatives à Google et consorts. Je prends le temps aujourd'hui de faire un premier bilan.

Raisons et explications

J’ai décidé de quitter Google et tous les autres services centralisés ne respectant pas ou menaçant ma vie privée. Jusque là, je reportais mon départ car je ne trouvais rien d'aussi confortable que l'écosystème de Google. Mais à vouloir absolument garantir une transition confortable, la migration n'a jamais lieu. A mes yeux, les violations et menaces de la vie privée sont devenues bien plus importantes que mon petit confort gracieusement offert par Google.

Voici quelques explications et informations très intéressantes sur la question de la vie privée :

Et si vous vous dites "De toute façon, je n'ai rien à cacher", je vous invite à consulter les liens suivants :

Mon bilan

Mon but pour 2014 était de ne plus utiliser les outils de Google à moyen/long terme. M’en séparer dès que possible. Nous allons voir que j'ai réussi en partie et que je travaille toujours à une transition complète. Je vais tâcher de rendre cet article le plus accessible et le moins complexe possible. Comprendre pas trop technique.

Je lisais récemment que, 62% des Français sont au courant de l’existence de l’informaticien américain Edward Snowden. Mais que 23% d'entre eux ont pris effectivement des mesures pour protéger leur vie privée en ligne. C'est ridiculement bas. Cela m'a poussé à ressortir mon article des cartons et d'essayer à ma façon de faire grossir ce pourcentage.

Sommaire

Je vais donc aborder point par point les transitions réussies ou ratées et vous faire part de mon ressenti un an après.

La partie simple

  • Soutenir la Quadrature du Net
  • Stopper la traque automatique
  • La recherche - DuckDuckGo
  • Le navigateur web - Firefox
  • L’email - Par un fournisseur de noms de domaine français
  • Les cartes - OpenStreetMap
  • Magasin en ligne - Au revoir Amazon
  • Autres services - Read it later, RSS, ...

La partie plus complexe

  • Utilisation d'un NAS
  • Le téléphone - CyanogenMod, F-Droid et FirefoxOS

Soutenir la Quadrature du Net

Quadrature du Net

Ce qui a fait le déclic dans ma tête il y a un an c'est la promulgation de la loi de programmation militaire. J'y songeais depuis un moment, j'ai donc décidé de soutenir financièremenrt la Quadrature du Net, qui lutte :

  • Pour une vraie protection de la neutralité du Net et la non-discrimination des données ;
  • Pour la protection du droit à la vie privée contre la surveillance des États et des entreprises ;
  • Pour l'adaptation du droit d'auteur aux pratiques culturelles actuelles et la légalisation du partage non marchand des œuvres numériques entre individus ;
  • Pour la liberté d'expression contre la censure ;
  • Pour l'exclusion des dispositions mettant en danger nos droits fondamentaux des accords internationaux (TAFTA, CETA, TISA, ACTA, etc) ;
  • Pour la participation de tous à la vie démocratique et au débat public ;
  • Pour la défense de l'Internet que nous aimons et qui nous respecte <3

Vous pouvez faire de même !

Stopper la traque automatique

Google, Facebook et autres nous traquent en permanence. La première chose à faire est de ne plus se connecter systématiquement et automatiquement à leurs services.

Pour Google, cela consiste à ne plus utiliser le bouton "Connexion" et donc ne plus indiquer à Google qui on est lorsque l'on fait des recherches.

Connexion Google

Idem pour Facebook et autres qui nous traquent partout ailleurs sur le net.

Pour me connecter sur Gmail, par exemple, j'utilise la fonctionnalité de navigation privée de mon navigateur. Elle permet de cloisonner la connexion à Google. Et je fais le reste de ma navigation sur le navigateur standard. De cette façon, je ne suis plus identifié par Google et autres lors de la visite de sites tiers.

Ce n'est pas une solution parfaite pour être anonyme, mais déjà un bon départ pour cloisonner sa navigation.

La recherche - DuckDuckGo

DuckDuckGo

Je ne me sers plus la recherche Google pour mon utilisation personnelle. J’utilise maintenant DuckDuckGo. Après un an, je peux complètement me passer de Google pour mes recherches. Je ne bascule sur Google qu’à de très rares occasions.

Par contre, pour un usage professionnel, il est assez difficile de n’utiliser que DuckDuckGo. Certaines recherches techniques retournent des résultats bien plus pertinents chez Google.

Le navigateur web - Firefox

Firefox

Je n’utilise plus Chrome mais Firefox. Et cela, bien que je trouve le premier plus rapide et plus stable que le second sur mes machines Ubuntu chez moi et au travail.

J’utilise les plugins suivants :

  • Adblock Plus pour bloquer la publicité.
  • Ghostery pour bloquer les mouchards et les cookies.
  • WOT pour me renseigner sur la réputation des sites Web avant que je ne les visite.
  • Terms of Service; Didn’t Read qui m'indique la note relative à la politique de vie privée des sites que je consulte.
  • DuckDuckGo Plus qui intègre DuckduckGo dans Firefox.

J’ai utilisé pendant un moment NoScript mais c’était l’horreur. Je me suis fait avoir pas mal de fois lors de mes paiements bancaires où la transition n’a pas eu lieu à cause des blocages du Javascript par défaut. Je passais mon temps à activer/désactiver des domaines pour pouvoir faire fonctionner les sites que je visitais. C’était bien trop lourd. A mes yeux c’est un plugin trop extrémiste qui m’a fait perdre plus de temps au quotidien.

La combinaison de ces cinq plugins me plaît beaucoup et j’ai trouvé mon équilibre comme ça.

De plus, je n’utilise plus de page par défaut externe chargeant la page de Google. J’ai une page html (sur mon ordinateur) dans laquelle j’ai agencé les liens que je visite régulièrement. Lorsque je veux faire une recherche je rentre ma recherche dans la barre de recherche ou me rend directement sur le site que je veux visiter via ma page d’accueil customisée. De cette façon j'ai moins tendance à passer par un moteur de recherche pour visiter des sites qui peuvent être atteints directement avec la bonne url. Comme ça, moins de traces.

L’email - Par un fournisseur de noms de domaine français

La Quadrature du Net explique très bien la démarche au grand public.

Je suis passé chez OVH, mais j'aurais pu aller chez Gandi. J’ai bénéficié des 2Go et de l’adresse mail fournie avec mon domaine sculo.fr chez OVH. Pour info, l’adresse email en .fr seule avec le domaine coûte 9,58 € TTC par an chez OVH. Mon email me coûte maintenant 0.79€/mois

Quand on compare 2Go avec les 15Go de gmail on se dit que c’est trop peu. En fait non !

  • Je fais le ménage régulièrement dans mes emails, ce que je ne faisais jamais avec Gmail.
  • Je supprime les emails reçus que je ne relirai jamais, ce que je ne faisais pas avant non plus.
  • Je supprime surtout les emails avec pièces jointes. Je stocke tout sur mon ordinateur et mon NAS (voir plus loin dans l'article). Pour moi, la boîte mail n’est pas un espace de stockage de fichiers zip, pdf et photos. On me parle souvent de l’aspect pratique de pouvoir retrouver beaucoup de choses facilement dans gmail. Comme par exemple des photos, un CV, des RIB, etc. Notre société a dévié tellement vers l’instantané, le tout tout de suite qu’on en oublie qu’il est parfaitement envisageable d’attendre la fin de sa journée pour faire une recherche de document sur son ordinateur ou son NAS. Et puis en cas de piratage de compte email, le pirate a accès à tout plein de données privées. Bravo !
  • Je supprime tous les emails envoyés. Généralement la réponse contient l’email envoyé. A quoi bon conserver le message original. Je ne garde mes message envoyés qu’en de rares cas de correspondances importantes. Le reste du temps j’efface tout.

Après un an d’utilisation, ma boîte email me prend 30 Mo sur 2Go. A cette vitesse, je remplirai ma boîte mail en plus de 60 ans.

Pour la lecture d’emails, j’utilise :

Je me suis essayé à mutt. En tant qu'utilisateur de vim je trouvais le concept super. Mais le tout clavier commence à m'épuiser (enfin surtout mes doigts et mes poignets, j'en suis très triste en tant que pro-vim). J'aspire à utiliser des logiciels ergonomiques. Je suis donc resté sur Thunderbird que j'utilise déjà pour mes emails pro.

Je suis très très très satisfait de K-9 mail. J’ai l‘impression d’utiliser l’ergonomie de Gmail sur mon téléphone, sauf que je n’utilise pas Gmail :)

L’avantage d’OVH c’est que mon adresse email vient avec 2000 alias. Avec ça je peux créer jusqu’à 2000 adresses emails redirigées vers l’email de mon choix. Je m’en donne à coeur joie. A chaque fois que je fournis un email à un nouveau service, je créé un alias et de cette façon je maîtrise le spam. Je peux surtout supprimer mes alias après usage. Même si le subterfuge se devine facilement, cela limite la casse en cas de vol de mot de passe sur un service tiers. Et cela dans la mesure où j’utilise à chaque fois un email par service. Et comme le vol de mots de passe du côté fournisseur des service arrive souvent ...

Quitter gmail reste long et laborieux. Après un an, je reçois toujours des emails dessus. Mais c'est de la newsletter et des sites marchands, des recruteurs qui ont mon CV en base de donnée, et quelques rares sites sont j'avais oublié l'existence. Ma boîte gmail s'est transformée en boîte de spam où j'y fais atterrir tout ce qui n'est pas "safe" pour ma boîte mail officielle.

Après un an d'utilisation je suis particulièrement content de la transition ! Je ne pense pas fermer mon compte gmail, car j'ai besoin d'utiliser les comptes Google de temps à autres. Mais ce n'est plus mon email principal, et je consulte ma boîte que rarement à présent.

Les cartes - OpenStreetMap

OpenStreetMap

J’utilise OpenStreetMap pour remplacer Google Map. Quand il manque des informations, je contribue et modifie la base en conséquence. J’utilise parfois Google Street View lorsque je dois repérer des lieux à l’avance. Mais OpenStreetMap est maintenant ma référence. Lorsque je dois parler d’un endroit particulier, j’utilise les fonctionnalités de partage d’OSM. Exemple :


Afficher une carte plus grande

Vous pouvez également vous faire une idée de la différence de couverture et de détails entre Google Map et OpenStreetMap.

Par contre, je n'ai rien trouvé pour mobile sous Android :( Je dois passer par osm.org sur Firefox.

Magasin en ligne - Au revoir Amazon

Je n’ai rien acheté chez Amazon depuis un an. J'achète BD et livres dans des librairies physiques. De cette façon mes achats ne sont plus centralisés chez une seule société. Je n’utilise plus non plus leur wishlist et j’ai constitué la mienne que je mets à jour dans un fichier texte que je partage avec mon entourage. J’utilise SensCritique pour lister les bien culturels que je consomme et mes envies. Et ça le temps que je développe / trouve un équivalent décentralisé !

Autres services - Read it later, RSS, ...

  • J'utilise Wallabag pour stocker les articles à lire plus tard.
  • J'utilise Selfoss comme lecteur de flux RSS.
  • Je ne me suis pas complètement désinscrit de Facebook. Je m'y connecte une fois tous les deux mois pour avoir deux trois news de personnes qui utilisent Facebook.

Utilisation d'un NAS

NAS

Je centralise mes données chez moi sur un NAS. Je ne dépose surtout pas mes données sur un cloud de type Dropbox / Google Drive / OneDrive / ...

D'ailleurs je ne devrais pas dire Cloud, mais ordinateur de quelqu'un d'autre. Car en définitive il faut appeler les choses comme elles sont.

Je n'ai pas ouvert mon NAS vers l'extérieur. En conséquence, je dois m'assoir sur bon nombre de fonctionnalités bien cool sur le papier. C'est dommage. Mais je pense que mes données privées doivent rester chez moi. Si je suis en déplacement, et bien ce n'est pas grave. J'attendrai d'être chez moi pour consulter mes données. Risquer d'exposer mes données sur Internet par confort est pour moi une assez mauvaise idée.

L'avantage du NAS est que je bénéficie de sauvegardes de toutes mes données régulièrement. Et je peux laisser tourner ça la nuit de façon automatisée.

Les seuls inconvénients dans l'histoire sont :

  • le prix du matériel
  • la consommation électrique, entre 30 à 40W en permanence ce qui fait environ 30 à 40€ par an en France.

Le téléphone - CyanogenMod, F-Droid et FirefoxOS

On rentre dans la partie compliquée. Quitter Android n'est pas une mince affaire !

Free your Android

La Free Software Foundation Europe (FSFE) a mis en place la campagne Free Your Android. Je vous invite à aller y faire un tour.

J'ai commencé par basculer mon ancien téléphone HTC Desire HD sous CyanogenMod. La manipulation, simple pour moi, n'est clairement pas grand public. Dans la manipulation, on risque de briquer/bloquer son téléphone. Accessoirement, on perd toute garantie en faisant cela. Mon téléphone avait presque 4 ans, je me suis lancé, n'ayant pas grand chose à perdre.

Le gain était intéressant au premier abord. Une interface bien plus customisable avec plus de fonctionnalités. Je n'ai pas réinstallé le Google Play Store pour tester un Android sans Google. J'y ai mis F-Droid à la place.

Les inconvénients

Se passer du store officiel de Google reste très très difficile.

  • On doit dire adieu à l'application Twitter
  • ainsi qu'aux applications bien pratiques comme RATP et Transilien.
  • mais aussi à tout ce qui peut être sympa comme CapitaineTrain, l'appli de sa Banque, les jeux, etc.
  • Il n'y a plus d'agenda. Je n'ai rien trouvé de qualité pour remplacer l'application Google Agenda.
  • Plus d'application Google Map. Et je n'ai pas retrouvé d'équivalent pour OpenStreetMap.
  • Malheureusement, j'ai dû hériter d'un soucis de surconsommation avec CyanogenMod sur mon téléphone, qui vidait sa batterie à la vitesse de la lumière. Alors que la version officielle de HTC était correcte.

Les avantages

  • K9-mail via F-Droid est génial pour gérer les mails
  • J'ai trouvé un clone de 2048, sur F-Droid, très bien foutu qui nécessite aucun accès à mes données privées, alors que l'application officielle est un peu trop curieuse.
  • J'ai accès à un terminal et peux bricoler plus mon téléphone
  • Je n'ai plus de dépendance à Google

Conclusion

J'ai arrêté l'expérience ici. La perte de fonctionnalité était trop importante. Et accessoirement mon téléphone n'était plus utilisable, la batterie se vidait en quelques heures / minutes, contre une journée auparavant. Ceci-dit, le soucis devait très certainement être lié à mon modèle et pas à CyanogenMod en lui même.

FirefoxOS

J'ai acheté ensuite le premier téléphone FirefoxOS vendu en France, le ZTE Open C, pour lequel j'ai écrit un test sur mon blog. Je vous invite à lire l'article pour plus de détails. C'était une expérience très intéressante, FirefoxOS a un superbe potentiel ! Je ne suis pas resté dessus pour une simple raison, l'appareil photo.

J'utilise trop mon téléphone comme appareil photo. La qualité du capteur du ZTE Open C est tellement médiocre qu'il n'était pas question de basculer définitivement sous FirefoxOS. Cet achat était avant tout pour tester FirefoxOS.

Comme mon HTC Desire HD était plus où moins HS à cause de sa batterie qui se déchargeait en quelques minutes/heures, je me suis acheté un Galaxy S4. Je voulais un super appareil photo, et j'en suis ravi. Mais niveau applications à la con préinstallées, j'ai touché le jackpot ! Les cordonniers sont les plus mal chaussés, comme on dit. J'ai désinstallé un maximum de trucs, mais je n'ai pas encore rooté mon téléphone pour virer ces conneries de Samsung. Et mon téléphone étant sous garantie, je ne souhaite pas encore trop charcuter le firmware.

Mon usage d'Android, aujourd'hui se résume à quelques applications qui craignent un peu niveau vie privée:

  • Ratp / Transilien
  • Twitter
  • Mon appli bancaire
  • Google Map de temps en temps. Je n'ai rien trouvé pour utiliser OpenStreetMap sur mobile (hors version web) ...
  • Gmail pour recevoir du spam de temps en temps, et des mails de gens qui n'ont toujours pas pris en compte mon changement d'email.

J'ai installé F-Droid en plus du google store, et j'utilise :

  • K9-mail (oh yeah)
  • mon clone de 2048
  • des applications basiques du store F-Droid comme la boussole, la calculatrice, etc.

Lorsque je pourrai installer FirefoxOS sur Galaxy S4 sans trop de perte de performance, que je pourrai faire tourner un client mail de qualité comme K9-mail et que je pourrai prendre des photos de qualité, je n'hésiterai plus un instant.

Conclusion

FirefoxOS est sur une très bonne voie. Je suis impatient que le système arrive à maturité pour que je puisse basculer complètement dessus. En attendant, j'utilise des applications bien sales comme celles de la RATP et Twitter, faute de trouver mieux.

Ce qu'il reste à faire !

J'ai encore un travail énorme.

  • VPN : Je voudrais utiliser un VPN sur mon téléphone, et pourquoi pas chez moi. Je songe souscrire à celui de FDN pour accéder à des réseaux Wifi ouverts qui ne sont pas de confiance. Mais même pour une utilisation classique afin d'avoir un accès Internet neutre.
  • DNS : Il faudrait que je quitte le DNS de mon Fournisseur d'Accès à Internet, au profit de celui de FDN par exemple.
  • Google Agenda : Je souhaite déplacer mon agenda Google vers un serveur à moi (pas auto hébergé). Mais je souhaite garder une certaine sécurité et ergonomie, je n'ai rien trouvé de bien pour le moment.
  • Google Drive : Je veux basculer le peu de documents Google que j'ai sur un éditeur hébergé sur un serveur perso.
  • Google Contacts : Il faudrait que j'arrête d'utiliser les contacts Google pour avoir mon propre serveur de contacts.
  • Google Analytics : Il faut que je bascule mon serveur sur Piwik. Mais je traîne des pieds, j'aime pas MySQL, j'aimerais utiliser SQLite à la place.
  • Gmail : Je dois trier tous les emails de ma boîte Gmail et transférer les correspondances importantes sur ma boîte OVH.
  • Twitter : Je songe à mettre en place un script qui va supprimer tous mes tweets au bout d'une à deux semaines.
  • SensCritique : Ma copine est en train de développer une version libre et décentralisée de SensCritique. J'ai hâte de pouvoir l'utiliser.

Conclusion

Il me reste encore plein de choses à faire pour me réapproprier complètement mes données privées. Mais je suis en bonne voie. La clé de la démarche est de ne plus mettre tous ses oeufs dans le même panier ! Mais ce qui est sûr, c'est que je suis vraiment ravi de mon passage de Gmail à mon propre email.

La route est longue mais la voie est libre

]]>
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.

]]>