Blog du service technique de PMSIpilot
By Sarah Haïm-Lubczanski
Nous utilisons des méthodes agiles inspirées de SCRUM au sein de nos équipes de travail, et nous aimons améliorer nos connaissances et apprendre. Du coup, nous proposons un Barcamp d’une journée. Nous espérons voir arriver des personnes de l’agglomération lyonnaise et alentours.

Un Bar Camp est une « non-conférence » ouverte qui prend la forme d’ateliers-événements participatifs où le contenu est fourni par les participants qui doivent tous, à un titre ou à un autre, apporter quelque chose au Barcamp, l’objectif est avant tout de partager des idées.
Tous les participants sont invités à parler du Barcamp autant avant leur participation, qu’après, pour rendre compte de leurs échanges.
1ère règle: Tu parleras du BarCamp.
2ème règle: Tu blogueras à propos du BarCamp.
3ème règle: Si tu veux faire une présentation, tu dois inscrire ton sujet et ton nom dans un slot de présentation.
4ème règle: Des intros de 3 mots seulement.
5ème règle: Autant de présentations à la fois que l’infrastructure le permet.
6ème règle: Pas de présentations réservées à l’avance, pas de touristes.
7ème règle: Les présentations iront tant et aussi longtemps qu’elles le doivent, où jusqu’à ce qu’elles se heurtent à l’heure de début de la présentation suivante.
8ème règle: Si c’est votre première fois au BarCamp, vous DEVEZ présenter. (Bon, on ne va pas vous forcer, mais essayez de trouver quelqu’un avec qui présenter, ou posez des questions et soyez un participant actif.)
par Tantek Çelik, en parodie des Règles de Fight Club.
L’accès se fait via une inscription préalable et est limité à 40 participants, pour des raisons légales. Au delà de 40, vous serez en liste d’attente.
Nous vous attendons samedi 3 mars de 10h à 18h dans les locaux de PMSIpilot, 61 r Sully, Lyon 6ème.
Plus de détails sur la page Barcamp de l’événement.
By admin
Nous accompagnons les établissements de santé dans la gestion et le pilotage de leur activité avec une offre logicielle étendue. Afin de maintenir les nombreux produits en place et à venir, nous recrutons de nouveaux développeurs PHP en CDI sur Lyon.
Le but est d’intégrer les personnes progressivement dans les équipes de nos managers techniques : Eric, William et Denis (blog de son équipe) (qui sont tout de même des types supers).
Vous rejoindrez l’une de nos 3 équipes, qui sont chaque jour confrontées à des problématiques métier complexes. Pour ce faire ces équipes structurées agissent en mode agile, avec des outils qualitatifs (git, redmine, jenkins).
Nous rechercons tout type de profil, motivé par le developpement web, désirant intégrer un editeur reconnu dans son domaine.
Voici les technos utilisés chez nous :
- PHP5, symfony 1.4 et 2
- html/css, ajax
- Jenkins
- Linux
- MySQL
Vous trouverez un aperçu des conditions de travail sur
le compte Flickr de l’entreprise. Un petit tour sur ce blog peut vous en apprendre plus. Pour postuler par email, écrivez à recrutement-dev AT pmsipilot.com et n’hésitez pas à solliciter un entretien.
By Philippe Ho
Voici la répartition des navigateurs utilisés au sein des établissements de santé pour accéder à la gamme de logiciels PMSIpilot.

répartition par navigateurs
By admin
L’objectif du projet était de pouvoir projeter l’effectif (RSS ou patient) défini par le filtrage PMSIpilot sur une carte interactive.
Le mécanisme de filtrage existant dans PMSIpilot permet de visualiser les aire de recrutement selon tous les axes d’analyses présents : GHM, DMS, âge, actes, diagnostics … et toutes leurs combinaisons.
Voici un petit aperçu des résultats.

Répartition de la chirurgie ambulatoire en Bretagne
By Philippe Ho
Le 21 Juin 2011, trois inspecteurs de la CNIL ont procédé à une revue complète des systèmes d’informations et des procédures informatiques liées à l’activité de PMSIpilot.
Ils se sont assurés :
- des modalités de gestion des produits PMSIpilot (maintenance, mises à jour)
- que PMSIpilot ne disposait d’aucun accès à des données non anonymes contrôlées, optimisées et analysées aujourd’hui par plus de 550 hôpitaux grâce aux logiciels PMSIpilot.
- de l’usage fait des données d’activités médicales anonymes faites par PMSIpilot dans le cadre de notre produit BRN Bases RégioNales.
Suite au contrôle, un avis favorable de la CNIL a été émis précisant que les différentes activités contrôlées étaient conforme aux lois en vigueur.
By Olivier Balais
Aujourd’hui chez PMSIpilot, je suis tombé sur le problème suivant : après avoir passé une valeur par défaut à un des widgets de mon formulaire, je ne parvenais pas à la récupérer dans mon action ni dans mon template.
L’appel à la méthode getDefault du sfForm me renvoyait systématiquement null,.
Le code en question :
// Dans le code de mon formulaire :
$this->setWidgets(array(
...
'my_field' => new sfMyWidget(array('default' => 'my_value')),
));
// Dans le code de mon action :
if ($my_form->getDefault('my_field') == 'some_value')
{
...
}
Dans ce cas, la méthode getDefault() appelée sur mon formulaire me renvoie null alors que j’ai explicitement donné une valeur par défaut à mon widget. Pourtant, en lisant la doc de symfony sur le sujet je retiens ceci :
The setDefault(), getDefault(), setDefaults(), and getDefaults() methods manages the default values for the embedded widgets. They are proxy methods for the getDefault() and setDefault() widget methods.
Les méthodes setDefault() et getDefault() au niveau de la classe sfForm sont censées êtres des raccourcis pour les méthodes setDefault() et getDefault() de la classe sfWidgetForm().
En fait il s’avère que ce n’est absolument pas le cas et que la méthode getDefault() du formulaire ne fait jamais appel à la méthode getDefault() du widget associé.
L’appel à $my_form->getDefault(‘my_field’) n’est donc pas équivalent à $my_form['my_field']->getWidget()->getDefault().
Par conséquent, il est important de bien comprendre quelle méthode appeler et dans quel cas.
A savoir, $my_form->getDefault(‘my_field’) quand le setDefault a été utilisé au niveau du formulaire. Exemple :
// Valeurs passées dans mon formulaire :
$this->setWidgets(array(
...
'my_field' => new sfMyWidget(),
));
$this->setDefault('my_field', 'my_value');
// Ou alors valeurs passées dans mon action :
$my_form = new myFormClass(array(
...
'my_field' => 'my_value',
));
Et, $my_form['my_field']->getWidget()->getDefault() quand le setDefault() a été utilisé au niveau du widget. Exemple :
// Dans le code de mon formulaire :
$this->setWidgets(array(
...
'my_field' => new sfMyWidget(array('default' => 'my_value')),
));
Voilà, désormais vous êtes prévenus…
By Sarah Haïm-Lubczanski
Pour coder, nous utilisons majoritairement l’IDE PHPStorm. PHPStorm est vraiment agréable à l’utilisation, et plutôt riche en fonctionnalités, tout en gardant une personnalisation fine. La personnalisation nous permet d’avoir chacun les raccourcis-clavier de notre choix, du coup, quand on souhaite intervenir sur un autre poste de travail, c’est souvent suprenant.
Mais c’est également l’occasion de découvrir et d’échanger sur le logiciel, voilà des astuces pour PHPStorm que j’ai découvertes petit à petit, par hasard ou par transmission directe de la part des collègues.
Connexion avec SCM (Git)
PHPStorm implémente les fonctions du SCM dans des menus contextuels, mais parmi mes collègues, je crois que nous utilisons majoritairement la ligne de commande pour interagir avec Git.
Rollback dans la marge

Les marges affichent les modifications faites sur le fichiers par une barre de couleur dans la marge, et en cliquant sur la barre, il est proposé de faire un rollback de nos modifs. Pratique pour supprimer les lignes vides ajoutées en plus (et éviter des modifications sur un fichier qui n’a pas été réellement amélioré au final).
Je soupçonne le Colonel Moutarde avec une Regex dans la lib

Un clic-droit dans la marge du fichier propose “Annotate”, cela revient à utiliser le Blame de Git. On a donc un affichage sur le dernier commit (hash et auteur) pour chaque ligne du fichier.
Configuration du panneau TODO

Tout comme Eclipse, PHPStorm propose des panneaux pour les différentes fonctionnalités. Un des ces panneaux (numéro 6) se nomme TODO. Par défaut, il présente une liste de fichiers indexés parce qu’ils ont un TODO dans leur contenu.
Le plus ?
On peut configurer des filtres, pour indexer n’importe quel autre contenu.
Par exemple, on peut imaginer indexer le mot-clef DEBUG, et laisser dans notre code des DEBUG pour signifier qu’il faudra repasser à cet endroit avant publication des fichiers, pour ôter le code spécial Debug Mode.
Le petit défaut est que le panneau garde son nom de TODO, quelle que soit la configuration.
Rechercher dans vos fichiers modifiés

Un choix de scope de recherche intéressant se trouve dans la boîte de dialogue de recherche : “Changed Files” au sens Git du terme. Cela permet de chercher dans les fichiers modifiés et pas encore commités.
Quel intérêt ?
La recherche sur tout le projet s’avère assez longue, pour nous qui avons une énorme base de code.
Find Usage…

En menu contextuel sur le nom d’une méthode ou d’une fonction, on peut lancer une recherche “Find Usage…” et PHPStorm recherche tous les fichiers contenant cette méthode.
La liste des éléments est filtrée sur : usage en lecture, appel de la méthode, nommage uniquement (en commentaire par exemple).
Bémol : cela fonctionne parfaitement pour des méthodes nommées et moins pour tout ce qui est système de Factory (construction selon le nom des méthodes/objets).
Zoom à la molette
Comme dans beaucoup de logiciels, cette manipulation agrandit la police du texte (zoom).

Le petit plus de PHPStorm : chaque onglet est indépendant dans son zoom. Encore plus fort : quand on splitte notre fenêtre de travail en deux, on peut zoomer sur un fichier dans une partie du splitte sans impact sur l’autre partie (oui, sur le même fichier).
Utiliser ses deux écrans
Quand on saisit un onglet et qu’on le glisse-déplace hors de la fenêtre applicative de PHPStorm, l’onglet se met dans une fenêtre autonome, et on peut lui ajouter d’autres onglets. Ensuite, on peut replacer les onglets dans la fenêtre principale.
C’est plutôt intéressant pour avoir un fichier sur un second écran, sans avoir à splitter la vue.
Toute la ligne
Et une astuce tellement simple qu’on se demande pourquoi ne pas y avoir pensé avant : quand on fait un Ctrl+C sans sélection, la ligne sur laquelle on se trouve est copiée (fonctionne avec couper aussi). Pas besoin de sélectionner la ligne auparavant.
Et vos astuces ?
Ces astuces sont celles que j’ai notées au cours du dernier mois, et qui pourront vous servir. Evidemment, cet article est loin d’être exhaustif, alors n’hésitez pas à l’enrichir.
By admin
Aujourd’hui a eu lieu un atelier / débat sur les bonnes pratiques. Un atelier / débat, c’est une sorte de réunion technique, mais où chacun est invité à exposer son opinion sur ce qui se dit pendant la réunion technique, un sorte de brainstorming géant. Le sujet des bonnes pratiques s’y prêtait bien, et malgré les peurs de certains, aucun lancé de troll malencontreux n’est à déplorer :-)
Expérience enrichissante pour tout le monde, que nous ne manqueront pas de réitérer !
By Philippe Ho
Le développement, comment y êtes vous venu ?
J’ai eu la chance d’avoir un contact très jeune avec les ordinateurs (j’ai quasiment appris à lire dessus…). Le développement a donc été une continuité logique, d’abord avec des bidouilles de fichiers bat puis un jeu de shoot basique où on devait tirer sur des têtes qui émergaient d’une haie. Je me suis finalement mis au php pendant mes études à l’IUT pour ne quasiment faire que ça depuis que je travaille
Pourquoi nous avez-vous rejoint ?
Les tâches variées qui sont proposées, la bonne ambiance de travail, l’aspect technique et la liberté laissée aux équipes de développement ont été pour moi les arguments principaux dans ma venue chez PMSIpilot.
Quel système d’exploitation préférez vous ?
A titre personnel, j’utilise Windows 7 (et j’aime bien). Par contre lorsque je développe, je préfère passer par Linux. Dans ce cas, que ce soit chez moi ou à PMSIpilot, ma préférence va sur Ubuntu.
Quel est le problème technique le plus important que vous avez rencontré ici ?
Je dirais la réalisation et le test d’un module de répartition d’une valorisation sur plusieurs éléments et selon différents paramètres. Il m’a fallu comprendre le besoin métier et réussir à le transformer en code tout en garantissant la fiabilité des calculs.
En quelques mots, quelles sont vos tâches ?
Je travaille principalement au développement de nouvelles fonctionnalités ou à l’amélioration de nos produits. J’ai la chance d’avoir en général des tâches plutôt variées. Dans une journée, mes tâches peuvent être du développement de fonctionnalités, un refactoring de l’existant, la réalisation de tests, une intervention au support afin d’aider les clients, l’optimisation de code ou de base de données, etc.
Quelle serait votre spécialité au sein de l’entreprise ?
Ayant participé à sa mise en place dans le projet, je dirais que je connais bien Propel et son Criteria. Étant dans l’équipe depuis quelques temps, j’ai plutôt une bonne connaissance globale du projet sans être forcement pointu sur un aspect en particulier.
Quels sont vos styles musicaux préférés ?
J’écoute pas de mal de rock et autres dérivés. Je suis un grand fan de Muse, et ma liste Spotify passe par des groupes pouvant aller de Placebo à Slipknot en passant par Prodigy, Transplants, The Offspring, Korn.
Votre sport préféré ?
A la base, je ne suis pas un grand sportif. J’ai quand même retenté une approche cette année entre le PMSIbasket hebdomadaire et les sorties skis. Si jamais je trouve un jour suffisamment de motivation, il faudra que je me remette au ping pong ou me mette au badminton.
Que faites-vous de votre temps libre ?
J’aime bien la lecture, rentrer dans ma Creuse natale, etc. J’apprécie également les sports mécaniques à 4 roues et faire du karting. Sinon, je geeke et ai une trop grosse consommation de séries TV.
By Philippe Ho
Hier chez PMSIpilot, nous avons testé une nouvelle manière de ventiler les connaissances. A l’initiative de William (@wooshell) et Marion (@titeiko), des ateliers techniques directement présentés sur les postes des animateurs ont eu lieu. Les membres de l’équipe technique étaient libres de circuler entre chaque atelier afin de recueillir les informations qui les intéressaient.
Les thèmes abordés étaient les suivants :
Less – http://lesscss.org/
Pierre Yves (@pym) a présenté Less : un système dynamisant le css, qui introduit des variables, des fonctions et d’autres comportements normalement réservés aux langages de programmations.

les tests unitaires et Propel – http://www.propelorm.org/
Frédéric (@mageekguy) a présenté la façon de faire des tests en utilisant des mocks d’objets Propel pour enlever la dépendance à la base de données.
QUnit et testswarm – https://github.com/jeresig/testswarm
Gabriel (@gabrielpillet) a présenté Qunit un framework de tests unitaires pour le javascript et testswarm un outil d’intégration continue pour ces tests.
Vim – http://www.vim.org/
Geoffrey (@ubermuda) a présenté une initiation à Vim, un éditeur de texte en ligne de commandes.

Pflow
Marion (@titeiko) a présenté un outil interne s’interfaçant entre git (http://git-scm.com/), notre système de versionning, et redmine (http://www.redmine.org/), notre gestionnaire de tickets.

Les premiers retours de l’équipe technique sont positifs, et nous pensons mensualiser ces #pmsiAteliers. Ce système, plus dynamique que nos précédentes réunions techniques, permet de présenter plus de sujets, tout en suscitant un intérêt soutenu des participants durant une heure et demi. Pour nos futures itérations la durée sera rallongée.