10 or more reasons to not use JDK’s HttpClient
This article explains 10+ reasons why after 14 JDK releases the JDK’s HttpClient introduced with Java 11 is unlikely to be the best option in your app.
Recent content on Brice Dutheil
This article explains 10+ reasons why after 14 JDK releases the JDK’s HttpClient introduced with Java 11 is unlikely to be the best option in your app.
In the story of this blog I used WordPress, and using the WordPress comments then moved to Discus as it was better at handling spam. Then I switched this blog to GitHub with first Jekyll with markdown then finally to Hugo, this worked well enough. Then lately I’ve been a bit more displeased by the Disqus editing capability (no markdown (or asciidoc) support, no preview). More people tend to have a…
Linux 5.14 brought a new system call memfd_secret in order to mitigate speculative attack by preventing the kernel from being able to peek at these memory segments. Let’s use this syscall from the JVM with the ~JEP-419 ~ JEP-454 API.
JDK 17 is coming and with the incubating JEP-412, let’s have a practical look at this API that should supersede JNI.
JDK 16 is coming and with the incubating JEP-389, let’s have a practical look at this API that should supersede JNI.
It all started when opening a JFR recording, I noticed a very large and growing number of very short lived threads.
Understand the RSS of a JVM leveraging the horsepower underneath ps with the help of one or two JVM diagnostic command.
Circa 2019 I had the chance to run many Java server applications, I wrote down out our best practices in order to iterate faster to find the right values for the JVM, but instead how to leverage Helm to try JVM settings.
This entry has been marinating for most of the year 2020. I should have published this opinion way earlier maybe end of 2019, but it took me time to realise I should split a bigger piece in smaller articles that hopefully made sense on their own.
If you happen to be on a read-only container that doesn’t have the usual network utilities, like netstat , ss (socket stat), lsof , etc. then your only option is to leverage procfs, however, procfs displays some data in hexadecimal.
Unified logging was introduced in JDK 9, and is available for us all, in the JDK 11 LTS. Like other great serviceability feature ( jcmd or JFR) this was inspired by JRockit.
JDK Flight Recorder, the profiler you can use in production, continuously. Flight Recorder has been available before in the JDK, e.g. it shipped as part of the JDK 8, but to use it, it demanded a to set specific commercial VM flags to unlock FlightRecorder, this is not anymore necessary with Java 11.
Integrate Asciidoctor as everyone should expect While Hugo comes with Asciidoctor support, they are in reality several issues to account for at this time: While basic rendering of asciidoc files works, we soon encounter problems ; the very first
Moving away form Jekyll. Import is easy, but tackling important details (conserve links to article, conserve comments, migrate some jekyll liquid template, theme tweaking deployment) has been challenging sometime. Motivation When started this blog in 2010 I went like a lot other to Wordpress as this was the one of the most common and easy way to write and publish something, then I got pissed at…
Régulièrement il nous arrive d’avoir à re-configurer une nouvelle machine, avec notamment la re-configuration des fichiers du $HOME . Il y a plusieurs approches et outils, faire une simple archive, utiliser git pour le répertoire $HOME, utiliser des outils comme GNU stow, etc.
Every once in a while, you may need to bootstrap a new machine, and along with it to reconfigure home directory’s dot files . Various approaches already exist, using simple archive, git the home directory, gnu stow (symlinks), etc.
Boring code that should be written once and run everywhere Suppose the application you’re working on needs to monitor changes to a file and rely on Java’s WatchService introduced in Java 7. Development and test on the local machine works ; the unit tests rely on a TemporaryFolder Junit rule as you want to control the content of the file, running the code on the actual machine just…
The quest to immutable objects It’s sometime hard to keep following good principles in object oriented paradigm especially if we’d like to enjoy modern tooling that those that generates code for us.
While Docker for mac in the edge channel offers a Kubernetes integration, I wanted to have the same tool as my pals on linux, who’re most likely using minikube . Minikube on OSX requires a virtual machine which is by default VirtualBox, since minikube is using the docker a the container runtime it bootstrap the VM environment with boot2docker .
In the past months I have been using extensively the infamous HTTP client OkHTTP, I have been impressed by the will power of committers to respect HTTP standards. My co-workers which have various degrees of knowledge and experience in different language ecosystem work on a server-side application with some JAX-RS endpoints, and this question arose:
The Quest to API versioning with JAX-RS In another post Nottingham adds that we shouldn’t use a custom header for versioning and touches on versioning through the Accept header but there is a fundamental thread here: try as hard as possible to not introduce breaking changes so that versioning isn’t a big issue.
Your application should connect to an HTTPS server, usually that’s a no brainer, however as good software craft-man, you may think how do I test this code to make nothing has been forgotten.
Your REST API is looking good, everything is ready, but here comes a paginated resource. There could be various reasons to do it, be it search, listing, etc. In this matter several choices to implement that appear :
Ce blog post est une republication de mon article sur Kafka parut dans le magazine Programmez numéro 196 en mai 2016 (pages 70-73). Il se base sur la version 0.9 de Kafka.
J’utilise Cassandra depuis un moment déjà et avec une version 2.1.13 en production je garde donc la même version sur mon poste. Hors cqlsh ne fonctionne plus correctement lorsque python est à la version 2.11 ou plus, voir le ticket CASSANDRA-11850 . Fixé en version 2.1.16 ou 3.0.10, il faut que j’utilise cette version, ou que j’utilise le moyen alternatif documenté dans ce…
Zookeeper est un service de coordination distribuée. Son usage permet notamment de maintenir des informations de configuration, de faire du service discovery, de fournir des mécasnimes distribués de concurrence (lock). Bien qu’aujourd’hui d’autres logiciels plus pratiques et plus efficaces sont apparus, Zookeeper n’en reste pas moins une pièce maitresse de certains outils…
A few book to posess Database Internals: A Deep Dive into How Distributed Data Systems Work by Alex Petrov BPF Performance Tools by Brendan Gregg Growing Object Oriented Software, Guided by Tests by Steve Freeman and Nat Pryce Reactive Design Patterns by Dr. Roland Kuhn , Brian Hanafee and Jamie Allen 97 Things Every Programmer Should Know Collective Wisdom Effective Java (3nd Edition) by Joshua…
The First 1,000 Primes The 1,000th is 7919 . For more information on primes see http://primes.utm.edu/ 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419…
Before starting, this install method is based on 1Password 4 , it may work with future versions, but it is not guaranteed. Last tested version is 4.1.0.530 . Install WINE sudo apt-get install wine Download 1Password Running 1Password on Ubuntu requires the Windows version. You can grab it at the AgileBits Downloads page .
Deux problèmes assez courant peuvent survenir sur les connexions à une base de donnée Oracle. Ces problèmes peuvent être à l’origine de timeout sur les connexions HTTP, etc… Ces deux problèmes touchent deux choses totalement différente, l’entropie du système et la coupure de connexion par un firewall.
Si par hasard votre base donnée est gérée par un véritable DBA, donc avec des scripts SQL. Mais que vous utilisez hibernate pour mapper les tables avec une configuration non triviale, modules bien découpés, package annotés, etc…. Les utilitaires comme hibernate4-maven-plugin ne suffisent plus.
Au cour d’un petit development, j’ai remarqué que mon process ne se terminait pas, une fois l’exécution de mon code terminé. Il devait y avoir soit une thread qui tournait encore, soit un deadlock quelque part, j’optais plus pour la seconde option.
ATTENTION : Cet article n’est plus d’actualité, pour les microbenchmark il faut maintenant utiliser JMH (développé par Aleksey Shipilev , en ce moment employé par Oracle, 2016-06-14), Caliper et les autres outils de microbenchmark ont de graves problèmes qui ne permettent pas de faire des microbenchmarks correctes.
MAJ 14/06/2016 : La dernière version du script est maintenant sur un repository github dédié . MAJ 29/07/2012 : Le script a été mis à jour pour fonctionner avec Mac OS X Mountain Lion. Le script a été mis à jour pour télécharger lui même le DMG chez Apple, en bref il n’y a plus qu’à commencer à l’étape 2.
Hello à tous, Mercredi 7 mars (à 19h) aura lieu la 2ème session Hackergarten. Après Soat , on a le plaisir d’être hébergé par Valtech (103 Rue de Grenelle, 75007 Paris) et il y aura des pizzas , gros merci à eux.
EDIT: Hop. Enfin la release 1.9.0 est dispo en téléchargement. Après pas mal de travail avec des périodes plus ou moins intenses - bref les vicissitudes du développement Open Source - le projet sort une nouvelle version 1.9.0 en Release Candidate , avec des bugfixes et bien sûr des nouvelles features. Il y a un ici et bientôt disponible sur le central maven.
Hello, j’en avais un peu marre d’écrire régulièrement voire répétitivement dans mes tests les constructions mockito. Pour ça je me suis créé dans mon IDE favori, IntelliJ , ce qu’on appelle des Live Template. Ces templates permettent à partir d’une abréviation d’insérer des fragments de code. Ainsi par exemple :
Pas vraiment un article mais plutôt une astuce que j’ai utilisé pour afficher la valeur de certaines property. Il faut ajouter dans la section build/plugins du pom une tache ant qui fera simplement un echo. A noter que cette tache est disponible dans la phase validate.
Vous devez écrire du code qui fait appel à JMX, en bon citoyen et bon développeur vous voulez tester ce code. Première approche; vous enregistrez vos MBean sur un MBeanServer , disons celui de la plateforme (avec Java 6 : ManagementFactory.getPlatformMBeanServer() ).
Dans cette troisième et dernière partie sur les expressions régulières en Java. Je vais aborder deux thèmes assez peu utilisés et pourtant très utiles. Le premier, dans la continuité des groupes ce sont les constructions de look behind et look ahead . Le deuxième point abordera le support de Unicode dans nos expressions régulières. Constructions de regard autour (look around) C’est bien de…
La première partie de cette mini-série s’est focalisée sur une petite intro, je n’ai pas vraiment insisté sur les bases des expressions régulières, j’ai juste abordé les ancres et les options, et j’ai parlé de certaines astuces à connaître. La suite de cette série continue comme prévu sur les constructions suivantes :
Préambule : Pourquoi cet article ? Depuis bien longtemps je connais et pratique les expressions régulières, à la fois au moment de coder, mais également dans mes éditeurs de texte, parfois aussi dans le shell, lors d’un grep par exemple. Bref les expressions régulières sont pratiques dans la vie de tous les jours pour un ingénieur logiciel.
Sujet intéressant, les problèmes en production sont quand même pour beaucoup des casse-têtes. Effectivement c’est bien vrai, les problèmes en production sont difficiles à résoudre. Il y a bien une partie technique souvent absconse, mais ce n’est pas un travail en solitaire, c’est un travail d’équipe. L’organisation dans la boite favorise ou freine cette opportunité de…
Lors de ma mission précédente, une des unités business a décidé d’investir dans Scrum, avec ce changement de méthodologie, les équipes de développement étant relativement enthousiastes, ont été formées au TDD et au pair-programming. Une discussion avec un pote, nous a amené à parler du pair-architecturing, ou la confrontation des idées, le challenge apporté par son alter-ego, m’a conduit à écrire…
Une histoire qui commence mal OK, je tranche le malheureux pattern Visiteur a la vie dure; on ne l’aime pas trop, il est mal compris, et le pauvre est sous utilisé. Alors bon même s’il a ses défauts, pourquoi lui en vouloir autant, alors qu’il apporte justement ses avantages au code orienté objet .
Prologue A l’école nos professeurs nous apprenaient ce qu’était la programmation orientée objet; en particulier l’encapsulation. En effet avoir un accès public aux variables internes d’un objet n’est pas particulièrement recommandé, pourtant nous avons connaissons tous la convention JavaBean :
Le voilà il est sorti. Ce framework de mock digne épigone de easymock, a su plaire et propose plus que son ancêtre. Mais quoi de neuf qui vaut la peine d’être mentionné?!
Depuis quelques jours déjà le framework de collection par google est sorti en version 1.0. Ce framework a vu le jour chez Google donc, et s’impose finalement comme le prochain framework pour travailler avec les collections. En effet les classes utilitaires du JDK sont plutôt limitées et les classes commons-collections de Apache ne sont pas générifiés .
Le contexte L’histoire commence par un problème en production sur une version à priori stable et sans anomalie connue. Seulement voilà une fois en prod l’application devient de plus en plus lente. Pourquoi? Que se passe-t-il?
Je suis un peu surpris de voir que beaucoup de développeurs utilisent encore énormément l’API temps du JDK. C’est la raison pour laquelle j’ajoute une nouvelle entrée sur le web à ce sujet.