C’est connu et reconnu mais avec la libéralisation des données, avoir un référentiel géographique prêt à l’emploi et actualisé est maintenant très rapide.

Le site de l’INSEE met les données dispositions l’ensemble de ces référentiels en libre accès sous forme de fichier dbf ou txt. Le travail d’actualisation des données est pré-mâché (puisqu’une liste de données d’actualisation est disponible).
Il n’y a donc plus aucune excuse à fournir un outil ne permettant pas de faire des statistiques fines sur le positionnement de ces utilisateurs.


Lien sur les référentiels : http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement.asp

Bonne intégration

Des sources de motivations

Voici quelques liens qui permettent de ne pas se laisser entraîner par la facilité technique de la routine.

Challenge algorithmique :
Nos neurones ont souvent l’envie de paresser et de croire que les algorithmes maîtrisés lors de nos études, le reste par la suite.
Rien de tel que des petits challenges pour relancer notre gymnastique intellectuel :

CodinGame Des concours, des puzzles, des challenges .. il y a toujours moyen de se divertir en enrichissant son agilité algorithmique.

Project Euler Dans le même esprit, mais précurseur, le côté mathématique est beaucoup plus mis en avant.

Histoire de côtoyer les challenges entrepreneurial, voici une triptyque à suivre :
humancoders, pragmaticentrepreneurs, voir codeur

Car nous avons toujours quelques choses à apprendre :
Mooc fun : un Mooc intéressant et de qualité dans la langue de molière.
Safari Une source semblant inépuisable de documentations, vidéos et tutoriels.

Installation de Retroshare sur Debian Sid

Quand des paquets sont disponibles pour d’anciennes versions ou pour d’autre distribution, il est souvent plus souvent de corriger la liste de dépendance d’un paquet plutôt que de le reconstruire de but en blanc.
Cette technique possède toutefois une contrainte importante, il est possible que les évolutions des dépendances aient des conséquences importantes sur les fonctionnalités de l’application. Néanmoins, pour des utilisations classiques, ou sous réserve de tests complémentaires, le gain de temps est très appréciable.

la démarche est la suivante :

En un, décompresser le paquet debian ainsi que sa liste de contrôle:


dpkg-deb -x retroshare_0.5.5-0.7068~wheezy_amd64.deb dir_tmp
dpkg-deb --control retroshare_0.5.5-0.7068~wheezy_amd64.deb dir_tmp/DEBIAN

Il faut ensuite mettre à jour les dépendances pouvant poser problèmes (nouvelle version disponible, renommage … )

Edition du fichier de contrôle :


vi dir_tmp/DEBIAN/control

Dans le cas de rétroshare,le problème se situe sur la dépendance suivante : libprotobuf7 qui n’est maintenant plus disponible en version testing.


Depends: libbz2-1.0, libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libglib2.0-0 (>= 2.12.0), libgnome-keyring0 (>= 2.22.2), libprotobuf9, libqt4-network (>= 4:4.5.3), libqt4-script (>= 4:4.5.3), libqt4-xml (>= 4:4.5.3), libqtcore4 (>= 4:4.8.0), libqtgui4 (>= 4:4.8.0), libssl1.0.0 (>= 1.0.0), libstdc++6 (>= 4.6), libupnp6 (>= 1:1.6.13), libx11-6, libxss1, zlib1g (>= 1:1.1.4), gnome-keyring

=> Remplacer le libprotobuf7 par libprotobuf9

Il suffit ensuite de reconstruire le paquet via la commande suivante pour avoir un paquet directement installable via les commandes classiques.

Reconstruction du paquet :


dpkg -b dir_tmp retroshare_0.5.5-0.7068~wheezy_amd64.deb

et il est maintenant possible de l’installer.

Ps : Ce post est une adaptation de Install Pencil on Debian qui traite du même problème pour une application différente.

Aujourd’hui c’est #VotreJob sur twitter

Alors c’est l’occasion de mettre une nouvelle version de mon CV, un peu plus en phase avec ma situation actuelle.

Chef de projet informatique innovant : CV Chef de projet

Me retrouver sur les réseaux sociaux : Viadeo, Linkedin

Cette mise à jour est visible : ici

Pour résumer, je suis actuellement chef de projet technique au GIP Sim@ris à Rouffach. J’apporte mes compétences techniques sur un projet de gestion du dossier médical patient. Mon rôle est de seconder le directeur de projet dans la gestion d’une équipe de 15( +2) développeurs.

Nos principaux objectifs sont l’intégration du marché suisse ainsi que la la migration de notre application d’un frameworks en fin de vie (WebObject) à un environnement standard (Spring + Hibernate).

En parallèle de cette activité de co-gestion d’équipe, je suis responsable de la cellule R&D associée au pôle édition logiciel. Je travaille notamment à intégrer les technologies de développement mobile dans notre DPI.

Les différentes activités du GIP Sym@ris sont disponibles sur le site du Gip Symaris ; http://www.symaris.com

Auparavant j’ai eu plusieurs expériences professionnelles ces dernières années qui me permettent aujourd’hui d’avoir une expertise dans un grand nombre de technologies telle que l’architecture objet, la programmation en C++ ou encore la veille technologique.

Ces différentes expériences m’ont permis d’être à l’aise dans un grand nombre de configuration de développement ou de gestion de projet : je pratique les méthodes agiles et je suis apte à mettre en place un serveur d’intégration continue. D’un point de vue langage de programmation, si le C++ est celui que j’ai le plus pratiqué, je connais aussi le Java/J2EE, le Fortran et j’ai pu pratiquer des langages de scripts tel le python ou encore le perl.

Actuellement en poste, je reste ouvert à toute proposition me permettant de mêler de manière efficace la recherche de solution et d’innovation technologique.

Compétences informatiques

Environnements GNU Linux (Debian), Windows
Langages C/C++, Java, LaTeX
Framework : Spring, Hibernate, AngularJS, ExtJS
Script Perl, Bash
Tech. Web HTML/CSS, JavaScript, PHP/MySql
Parallélisme MPI, PM2, CUDA, OpenMP, Threading Building Blocks
IDE Netbeans, Eclipse, Visual C++, emacs
Débuggeur DevPartner, Valgrind, gprof
Bureautique OpenOffice.org, Office, Latex
Logiciels div. Qt-Designer, gnuplot, OAR, The Gimp, skencil
IHM Qt-Trolltech, Java Swing

Pinterest, une communauté basée sur le partage d’épingle

Ma découverte de la semaine : la communauté Pinterest.

Cette communauté semble se baser sur le partage, non pas de bookmark, mais d’images.

L’idée première semble de pouvoir sauvegarder chaque lien sur chacune des ressources graphiques que l’on pourrait rencontrer ou rechercher. Il est possible de classer ces différentes ressources en fonction d’une thématique.

Pinterest

Là ou cela devient intéressant, c’est qu’à cette simple fonctionnalité de bookmarks, s’ajoute un aspect communautaire. Il est en effet possible de voir, de partager, et de bénéficier des sélections de tout à chacun et c’est là que ce site devient intéressant. En effet, la recherche d’image ne se fait plus dans l’immensité du Web mais dans une sous-partie déjà sélectionnée par la communauté. Il est vrai que cela peut être contraignant, car cela impose d’être un suiveur plus qu’un découvreur … mais suivant le type de recherche que l’on effectue, cela peut grandement gagner du temps.

De prime abord, le premier contact fut un peu distant car il faut avoir un compte pour consulter les différents résultats du site. Il est possible d’avoir un aperçu, mais dès qu’un scroll est nécessaire, la navigation se stoppe en demandant une connexion. Une fois cette étape réalisée, le site offre tout son potentiel et présente une vraie alternative à la recherche d’image classique via les moteurs de recherche.

le Blog Pinterest

Pinterest, le site

Oracle : Update or Insert = MERGE

J’ai du répondre à une question simple de prime abord, comment mettre un jour un référentiel, non prévu pour être versionné, et ayant pu évoluer de manière différente sur chacun des différents sites de manière indépendante.

Après quelques recherches, le principal mot clé qui pouvait revenir était : MERGE

Un merge pour un développeur, c’est quelque chose de connu et ce n’est pas souvent envisager comme quelque chose de simple et de généralisable.
En théorie si, mais en pratique, c’est souvent durant cette étape que la livraison de son code prend un retard inattendu.

Alors avant d’envisager une telle pratique quand on utilise traditionnellement le SQL pour faire de simple CRUD … on cherche du simple … on envisage de se mettre au PL …. voir de faire une mini application faisant ce que l’on veut.

Et pourtant, le merge cela peut aussi être simple dans certain cas et cela peut rapidement être mis en place.

Comme dit en introduction, mon contexte était le suivant :
– Mise à jour de référentiel
– Pas d’assurance sur l’état du référentiel avant travaux
– Pas nécessairement le temps de s’assurer de la cohérence des données pour chacun des sites.

A priori, il existe plusieurs techniques, plus ou moins simple pouvant arriver à ce résultat.
Dans mon cas, il fallait que le génération du script se fasse dans un temps relativement court … et en ne demandant pas de devenir DBA au passage.

Le processus choisit pour l’actualisation de la table fut le suivant :

– Mise en place d’une date de fin pour l’ensemble des champs du référentiel utilisé en production (assurance de conserver les champs pour les données déjà saisies).
– Injection de la nouvelle table de référentiel
– merge proprement dit entre l’ancienne table et la nouvelle afin d’actualiser les champs utiles, quelques soit l’état de la table initialement.

En SQL, cela donne cela :


-- Généralisation de la date de fin à l'ensemble des occurrences de la table
update SOC_TYPE_DOMICILE set datefin= '01/11/14';

-- Injection de la table référentiel nouvelle version
CREATE TABLE "SOC_TYPE_DOMICILE_REF"
( "CODE" VARCHAR2(10 BYTE),
"CODEREGROUPEMENT" VARCHAR2(10 BYTE),
"DATEDEBUT" DATE,
"DATEFIN" DATE,
"LIBELLE" VARCHAR2(100 BYTE),
"RANGAFFICHAGE" NUMBER(3,0),
"ANCIENCODECSD" VARCHAR2(10 BYTE),
"CODEREGROUPEMENTTYPE" VARCHAR2(10 BYTE),
"ID_LIBELLE" NUMBER(7,0)
);

Insert into SOC_TYPE_DOMICILE_REF (CODE,CODEREGROUPEMENT,DATEDEBUT,DATEFIN,LIBELLE,RANGAFFICHAGE,ANCIENCODECSD,CODEREGROUPEMENTTYPE,ID_LIBELLE) values ('SIFO','SIT_LOC',to_date('01/01/07','DD/MM/RR'),to_date('01/11/14','DD/MM/RR'),'Sans information','1','0',null,null);
Insert into SOC_TYPE_DOMICILE_REF (CODE,CODEREGROUPEMENT,DATEDEBUT,DATEFIN,LIBELLE,RANGAFFICHAGE,ANCIENCODECSD,CODEREGROUPEMENTTYPE,ID_LIBELLE) values ('HEBST','SIT_LOC',to_date('01/01/07','DD/MM/RR'),to_date('01/11/14','DD/MM/RR'),'Hébergement stable','2','2',null,null);
Insert into SOC_TYPE_DOMICILE_REF (CODE,CODEREGROUPEMENT,DATEDEBUT,DATEFIN,LIBELLE,RANGAFFICHAGE,ANCIENCODECSD,CODEREGROUPEMENTTYPE,ID_LIBELLE) values ('HEBPR','SIT_LOC',to_date('01/01/07','DD/MM/RR'),to_date('01/11/14','DD/MM/RR'),'Hébergement précaire ou de durée incertaine','3','A',null,null);
Insert into SOC_TYPE_DOMICILE_REF (CODE,CODEREGROUPEMENT,DATEDEBUT,DATEFIN,LIBELLE,RANGAFFICHAGE,ANCIENCODECSD,CODEREGROUPEMENTTYPE,ID_LIBELLE) values ('HOP','SIT_LOC',to_date('01/01/07','DD/MM/RR'),to_date('01/11/14','DD/MM/RR'),'Hôpital sans perspective de logement à la sortie','4','B',null,null);
Insert into SOC_TYPE_DOMICILE_REF (CODE,CODEREGROUPEMENT,DATEDEBUT,DATEFIN,LIBELLE,RANGAFFICHAGE,ANCIENCODECSD,CODEREGROUPEMENTTYPE,ID_LIBELLE) values ('SAB','SIT_LOC',to_date('01/01/07','DD/MM/RR'),to_date('01/11/14','DD/MM/RR'),'Sans abri, absence totale d hébergement','5','1',null,null);

-- Merge
-- deux cas : la ligne existe : dans ce cas on modifie le libellé pour qu'il corresponde exactement avec le résultat attendu (les valeurs, même modifiées, ne changent pas de sens)
-- La ligne n'existe pas, on l'insère
MERGE INTO SOC_TYPE_DOMICILE S
USING SOC_TYPE_DOMICILE_REF R
ON ( S.CODE = R.CODE )
WHEN matched
THEN UPDATE SET S.DATEFIN = null, S.LIBELLE = R.LIBELLE, S.RANGAFFICHAGE = R.RANGAFFICHAGE, S.ANCIENCODECSD = R.ANCIENCODECSD
WHEN not MATCHED
THEN INSERT (CODE,CODEREGROUPEMENT,DATEDEBUT,DATEFIN,LIBELLE,RANGAFFICHAGE,ANCIENCODECSD,CODEREGROUPEMENTTYPE,ID_LIBELLE)
VALUES (R.CODE,R.CODEREGROUPEMENT,R.DATEDEBUT,R.DATEFIN,R.LIBELLE,R.RANGAFFICHAGE,R.ANCIENCODECSD,R.CODEREGROUPEMENTTYPE,R.ID_LIBELLE);

-- et c'est fini ...

Duplication de clé USB

des fois on se fait plaisir avec peu de ligne de commande ..

Duplication de la clé
dd if=/dev/sdc of=/dev/sdd bs=4096 conv=notrunc,noerror

Hors avec des clés de tailles différentes, on obtient :

fsck /dev/sde1
fsck from util-linux 2.20.1
e2fsck 1.42.8 (20-Jun-2013)
La taille du système de fichiers (selon le superbloc) est de 7793408 blocs
La taille physique du périphérique est de 7674624 blocs
Le superbloc ou la table des partitions est peut-être corrompue !

Un simple : resize2fs -f /dev/sde1 7674624

et tout est de nouveau opérationnel :

fsck /dev/sde1
fsck from util-linux 2.20.1
e2fsck 1.42.8 (20-Jun-2013)
/dev/sde1 : propre, 25468/1925120 fichiers, 303289/7674624 blocs

Je vais de nouveau mettre ma sd card classique dans le Eeepc et la microSD dans une nouvelle go-pro ^^

Maisons de santé, un projet en devenir

Travaillant depuis maintenant deux ans pour un éditeur de logiciel en phase avec le monde de la santé, c’est avec un grand intérêt que je suis le projet de l’Asip Santé quand à son label maisons de la santé.

L’objectif est de permettre aux acteur de la santé de s’assurer que le logiciel qu’ils évaluent ou qu’ils possèdent répond correctement à un ensemble conséquent mais indispensable de fonctionnalités.

A l’inverse, cette homologation permet pour un éditeur de connaître, dans les grandes lignes le périmètre d’une solution pour ce type d’acteur.

A titre perso, cette définition de périmètre me permet de voir l’étendu du travail à accomplir pour réaliser ce type de développement … et après un premier passage sur le DSFT de l’Asip santé ( lien ext ), il y a du travail en perspective.

Mise à jour de wordpress

Depuis quelques temps, les mises à jours automatiques ne se faisait plus pour raison de mémoire, et là,
je n’ai pas fait attention à qui à changer ses pré-requis mais elle est passée.

Avec cette mise à jour et la suppression de tous les commentaires non-validés (rien de moins que 50 000), c’est peut être l’occasion de relancer ce blog

A bienôt.