code, coder, coding, coffee, computer, copy, hands, js, keyboard, laptop, note, php, programmer, programming, writing, work, office, août 2022

L'extensibilité d'objets métiers dans différents langages

Il arrive fréquemment qu’avec l’évolution des besoins dans le temps, les objets métiers qui ont été définis auparavant...

Lire la suite

code, coder, coding, coffee, computer, copy, hands, js, keyboard, laptop, note, php, programmer, programming, writing, work, office, août 2022

Foncteurs, Foncteurs Applicatifs et Monades

Dans ce premier billet de l’année 2018, je vais m’essayer de vous présenter ce que sont les foncteurs, les foncteurs...

Lire la suite

code, coder, coding, coffee, computer, copy, hands, js, keyboard, laptop, note, php, programmer, programming, writing, work, office, août 2022

Les Programmations Orientées Objet

La Programmation Orienté Objet (POO pour les intimes) est de nos jours la lingua franca de la programmation dite...

Lire la suite

code, coder, coding, coffee, computer, copy, hands, js, keyboard, laptop, note, php, programmer, programming, writing, work, office, août 2022

L'extensibilité d'objets métiers dans différents langages

Il arrive fréquemment qu’avec l’évolution des besoins dans le temps, les objets métiers qui ont été définis auparavant nécessitent d’être étendu par l’ajout de nouvelles fonctionnalités. Selon la nature des langages de programmation, mais aussi selon les caractéristiques propres aux langages, les méthodes d’extensions varient et peuvent être plus ou moins aisées à mettre en œuvre, en particulier lorsque les extensions sont fournies dans des modules (paquetages, bibliothèques, …) à part et que l’existant ne doit pas être impacté par ces ajouts (ou du moins le minimum possible). Dans ce petit billet je voudrais vous présenter certaines d’entre elles, et en particulier dans le contexte présenté ci-dessus, et ceci avec trois langages de programmations différents : Java, un langage impératif (orienté classe), Smalltalk, un des rares langages qui soient vraiment orienté objet, et Haskell, un langage fonctionnel.

Lire la suite

code, coder, coding, coffee, computer, copy, hands, js, keyboard, laptop, note, php, programmer, programming, writing, work, office, août 2022

Foncteurs, Foncteurs Applicatifs et Monades

Dans ce premier billet de l’année 2018, je vais m’essayer de vous présenter ce que sont les foncteurs, les foncteurs applicatifs et les monades de façon simple, sans étalage de la théorie mathématique derrière (celle des catégories) dont, de toute manière, je ne maîtrise pas. Bien que ce soient des constructions utilisées dans la programmation fonctionnelle, elles peuvent aussi être utilisées dans d’autres approches de programmation et avec d’autres langages que ceux fonctionnels. C’est pourquoi je présenterai chacun des concepts non seulement avec du code en Haskell mais aussi en Java.

Lire la suite

code, coder, coding, coffee, computer, copy, hands, js, keyboard, laptop, note, php, programmer, programming, writing, work, office, août 2022

Exemple d'immutabilité en Java

Dans un billet précédent sur l’égalité d’identité et celle de valeurs, je vous ai parlé d’objets immuables pour lesquels l’égalité de valeur et l’égalité d’identité se confondent. J’ai souvent vu dans divers blogues sur l’immutabilité en Java l’utilisation du mot clé final. J’ai toujours trouvé son usage pour réaliser l’immutabilité comme absurde et surtout par trop contraignant. Pour moi, il ne sert à rien de qualifier les propriétés des objets comme final étant donné que celles-ci doivent être encapsulées selon les principes de la programmation orienté objet. Non, l’immutabilité des objets devrait au contraire se faire au niveau du comportement et surtout des mutateurs de ces objets.

Lire la suite

code, coder, coding, coffee, computer, copy, hands, js, keyboard, laptop, note, php, programmer, programming, writing, work, office, août 2022

Une histoire d'objets obèses ...

Il arrive dans un projet en Java de se trouver, selon le métier ou le domaine adressé, avec des classes d’objets obèses en méthodes qu’elles soient publics ou propres aux objets de la classe. Or, sachant que l’on passe plus de temps à lire, voir à toucher du code existant qu’à en écrire de nouveaux, ceci peut vite devenir pénible. Evidemment, avec nos IDE actuels, il est facile de naviguer entre les différentes méthodes et propriétés d’une classe. Mais en général ceci signifie que l’on sait, déjà, à peu près ce que l’on cherche ou que l’on connait a minima les responsabilités ou certaines particularités d’implémentation de la classe. Lorsqu’on doit toucher du code inconnu ou au mieux revenir sur du code au bout de 6 mois, nous aimons bien identifier aisément les parties à utiliser ou à retoucher et accéder à l’essentiel sans se perdre dans les méandres de la ou des classes inspectées. En effet, il peut être difficile, avec de telles classes, de démêler le comportement de l’objet, ce qui le caractérise, du reste. En tout cas c’est mon cas. Pour éviter de tels embonpoints, je vous propose d’utiliser les approches de certains langages fonctionnels comme Haskell (ou OCaml), dans lesquels les types et les fonctions sur ces types sont séparés (au sein d’un même module tout de même).

Lire la suite

Le SnowCamp 2017

Le SnowCamp a été renouvelé cette année et a eu lieu du 8 au 11 février avec cette même formule qui a fait le succès de la première édition : une journée d’université le merdredi au World Trade Center, deux jours de conférences le jeudi et vendredi à l’Université des Alpes et une journée d‘“unconference” sur les pistes de ski de Chamrousse le samedi.

Lire la suite

code, coder, coding, coffee, computer, copy, hands, js, keyboard, laptop, note, php, programmer, programming, writing, work, office, août 2022

L'égalité d'identité et l'égalité de valeur en Java

Dans certains langages de programmation, comme Java, il n’y a pas de méthodes ou d’opérateurs distincts entre l’égalité d’identité et celle de valeur. Si, dans un programme classique écrit dans un langage comme Java, l’égalité d’identité (de l’OID pour Object IDentifier) pourrait se faire avec l’opérateur == et celle de valeur avec la méthode equals surchargée, il n’en va plus de même dès qu’il s’agit d’objets persistés. Et là, in fine, c’est le drame : que compare t’on avec la méthode equals ? la valeur des objets ou leur identité ?

Lire la suite

Sticker_SnowCamp_2016_-_CommitStrip.png

Le SnowCamp 2016

Je vous propose un petit compte rendu du SnowCamp 2016 qui s’est déroulé du 20 au 23 janvier à Grenoble et ceci en toute … subjectivité étant un des organisateurs de cet événement. Mais d’abord, qu’est-ce que le SnowCamp ? C’est une manifestation faite par les codeurs à destination des codeurs et qui profite du pôle technologique et d’innovation qu’est Grenoble pour ouvrir ses portes aux thésards et aux chercheurs afin qu’ils nous fassent profiter de leur travaux.

Lire la suite

code, coder, coding, coffee, computer, copy, hands, js, keyboard, laptop, note, php, programmer, programming, writing, work, office, août 2022

L'approche Micro-Services et le paradigme Orienté-Objet

J’aime à dire que l’évolution en informatique ne connait que très peu de ruptures et ressemble à une grande spirale dans laquelle les nouvelles technologies et approches ne sont que des reprises de plus anciennes que l’on a dépoussiéré et adapté aux attentes et au temps actuels ; c’est ce que l’on appelle l’innovation. Les micro-services, le grand buzz de l’année 2015, n’échappent pas à cette régle. (On est friand aussi de buzz en informatique). Mais qu’est-ce que les micro-services ? En fait, rien de spécial. Ce n’est ni plus ni moins que le découpage des responsabilités des applications dans des services Web dédiés et qui communiquent entre eux par messages. Du SOA ? Du REST ? … Oui, tout ça mais ce n’est plus à la mode, il faut parler maintenant de micro-services.

Lire la suite

Humeur.jpeg, août 2022

PJLRenseignement ... Ô rage ! Ô désespoir !

Aujourd’hui, je hurle de rage !La Loi sur le Renseignement, comme pressentie, a été adoptée à l’Assemblée Nationale aujourd’hui, le 5 mars 2015 et ceci malgré l’opposition vive de la société civile. C’est une loi liberticide qui a été voté. Elle oblige l’écoute de toutes données qui transitent dans le réseau internet et téléphonique par des boites noires, et elle autorise aux forces de police l’accès à celles-ci sans aucun contrôle judiciaire. (cf. ici et là). Elle offre sur un plateau d’argent les moyens de museler toute contestation ou affaire embarrassante à des politiciens peu scrupuleux ou à une Marine Le Pen accédant à la présidence. (Souvenez vous des écoutes téléphoniques au temps de Mitterrand ou plus récemment l’affaire des comptes de campagne de Sarkozy.) C’est une loi qu’aurait rêvé de disposer Mussolini, Hitler ou encore Pétain à leur accession au pouvoir.

Lire la suite

Revue.jpg, août 2022

Devoxx France cru 2014

Le Devoxx France est, à l’image de son parent le Devoxx, une conférence à caractère technologique qui s’étale sur trois jours. Bien que axé sur l’écosystème Java, on y trouve aussi des tracks sur d’autres langages (comme Erlang ou Go), et sur d’autres technologies (programmation système sur Raspberry Pi ou sur Arduino). C’est la troisième année et le cru 2014 a été, à mes yeux, excellents. Ce que j’aime dans cette conférence est son caractère technique ; les tracks sont animés par les programmeurs pour les programmeurs. Foin donc de toute propagande sur tel outil, tel framework ou tel autre produit. Ici, l’accent est mis sur la présentation avant tout technique, le plus souvent illustrée par une démonstration qui, je l’avoue, me parle beaucoup plus qu’une suite ininterrompue de slides et de blabla.

Lire la suite

Revue.jpg, août 2022

Un petit voyage dans DragonFly BSD

DragonFly BSD est le dernier rejeton de la famille des Unix BSD libres. Il est issu du désaccord de Matthew Dillon sur les choix d’architecture SMP de FreeBSD 5. Créé en 2003 à partir de FreeBSD 4.8 pour initialement proposer une autre implémentation du multi-threading (multiflot en français), plus originale, il devient l’opportunité, pour l’équipe de DragonFly BSD, d’emprunter des directions différentes, voir innovantes, de celles des autres systèmes Unix.

Lire la suite

card slot

Une histoire de slots

L’amélioration de la structuration du code d’un programme, avec la distinction des considérations techniques de celles métier, est le Saint Graal que poursuivent sans fins les développeurs. A cette fin, de nombreuses techniques ont fait leur apparition dont nous pouvons citer les traits ou les annotations. A côté de ceux-ci, il existe une technique élégante et uniforme que sont les slots. Mais, que sont ces derniers et en quoi peuvent ils nous aider dans notre quête ?

Lire la suite

Apache Wicket 6 Starter

Instant Apache Wicket 6

Voici un petit compte-rendu du livre Instant Apache Wicket 6 édité par Packpub. Ce compte-rendu a aussi été publié sur le site de l’Alpes JUG dont je fais partie.

Lire la suite

Tour-Eiffel.jpg

La programmation entre science et art

Actuellement, la programmation relève de l’ingénierie qui consiste en la conceptualisation et en la réalisation d’ouvrage d’art fonctionnel et qui repose sur une méthodologie et une rigueur toute scientifique. Paradoxalement, dans l’industrie, l’activité d’ingénierie dans le développement logiciel manque de rigueur scientifique et sa méthodologie s’apparente souvent à de la planification et à de la gestion des activités.

Lire la suite

Programming-languages-696x489.jpg, août 2022

Evolution de code avec Haskell (partie 2) : évolution

Un logiciel n’est jamais terminé. Il ne fini pas d’évoluer pour satisfaire aussi bien de nouveaux besoins que de nouveaux enjeux technologiques. Un logiciel qui ne change pas, qui ne vit pas un refactoring continue, est un logiciel qui se meurt jusqu’à disparaître du marché parce que dépassé. Nous savons faire évoluer une application écrite selon la POO en jouant sur les propriétés de rétention, de composition, et d’extension des objets, ces entités logicielles qui représentent les concepts adressés par le programme. Mais qu’en est-il en programmation fonctionnel ? Comment peuvent être représentés les concepts ? Comment un code, écrit avec un langage fonctionnel, peut-il évoluer face aux changements ? Je vous propose de montrer ces aspects par un petit tour d’horizon d’un programme écrit en Haskell.

Lire la suite

Programming-languages-696x489.jpg, août 2022

Evolution de code avec Haskell (partie 1) : conceptualisation

Un logiciel n’est jamais terminé. Il ne fini pas d’évoluer pour satisfaire aussi bien de nouveaux besoins que de nouveaux enjeux technologiques. Un logiciel qui ne change pas, qui ne vit pas un refactoring continue, est un logiciel qui se meurt jusqu’à disparaître du marché parce que dépassé. Nous savons faire évoluer une application écrite selon la POO en jouant sur les propriétés de rétention, de composition, et d’extension des objets, ces entités logicielles qui représentent les concepts adressés par le programme. Mais qu’en est-il en programmation fonctionnel ? Comment peuvent être représentés les concepts ? Comment un code, écrit avec un langage fonctionnel, peut-il évoluer face aux changements ? Je vous propose de montrer ces aspects par un petit tour d’horizon d’un programme écrit en Haskell.

Lire la suite

code, coder, coding, coffee, computer, copy, hands, js, keyboard, laptop, note, php, programmer, programming, writing, work, office, août 2022

Les Programmations Orientées Objet

La Programmation Orienté Objet (POO pour les intimes) est de nos jours la lingua franca de la programmation dite impérative. Pourtant, fort est de constater que celle couramment usitée est loin de l’approche définie par son auteur, Alan Kay, au point que l’on peut dire qu’il existe actuellement en fait deux approches orientées objet !

Lire la suite

Programming-languages-696x489.jpg, août 2022

Un benchmark sur le tri rapide dans 5 langages

L’article de James Roper sur les performances de Scala et de Java via l’exemple du tri rapide m’a donnée l’idée, juste pour amusement, de réaliser le même benchmark mais avec 5 langages différents : C, Go, Java, Scala et Haskell ; on y retrouve donc ici à la fois des langages à orientation impérative et d’autres à orientation fonctionnelle. L’implémentation de l’algorithme est celui utilisé dans son article mais déclinée selon deux axes pour les langages de nature impérative : un axe plus classique dans lequel la récursivité est utilisée, et un autre bien moins traditionnel dans lequel la récursivité est, au contraire, évitée.

Lire la suite

Programming-languages-696x489.jpg, août 2022

Langages impératifs et fonctionnels

James Roper a publié sur son blog un billet qui compare les performances de Java et de Scala via une réalisation du tri rapide d’une liste ou d’un tableau (quicksort). J’ai trouvé l’article intéressant pour deux raisons principales et qui sont liées à la nature particulière de ces deux langages.

Lire la suite

Bienvenu sur mon nouveau site

Mon ancien site personnel commençait à prendre de l’âge et n’était plus maintenu pour cause de manque de temps. Il en était de même de mon blog personnel. J’ai donc décidé de fusionner les deux en un...

Lire la suite