<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Julien Lengrand-Lambert on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/author/jlengrand/</link><description>Articles written by Julien Lengrand-Lambert on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 02 Jul 2025 06:21:47 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/author/jlengrand/index.xml" rel="self" type="application/rss+xml"/><item><title>Kotlin adoption inside ING, five years later</title><link>https://foojayio.github.io/website/today/ing-kotlin-adoption-five-years/</link><pubDate>Wed, 02 Jul 2025 06:21:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/ing-kotlin-adoption-five-years/</guid><description>&lt;p&gt;&lt;em&gt;TL;DR: Five years after its introduction Kotlin adoption inside ING keeps growing year after year, with a current adoption rate of just over 11%. We were also featured as one of the user stories for the KotlinConf 2025 Keynote.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Five years ago, &lt;a href="https://medium.com/@Frevib" target="_blank" rel="noopener noreferrer"&gt;Hielke&lt;/a&gt;
 and I wrote one of the first blogs of this account about being &lt;a href="https://medium.com/ing-blog/introducing-kotlin-at-ing-a-long-but-rewarding-story-1bfcd3dc8da0" target="_blank" rel="noopener noreferrer"&gt;the first team to put Kotlin on production at ING&lt;/a&gt;
. The article generated some interest and to this day it is still present as one of the &lt;a href="https://kotlinlang.org/lp/server-side/case-studies/" target="_blank" rel="noopener noreferrer"&gt;Kotlin website case studies&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>[Unit] Testing Supabase in Kotlin using Test Containers - PART 2</title><link>https://foojayio.github.io/website/today/unit-testing-supabase-in-kotlin-using-test-containers-part-2/</link><pubDate>Wed, 13 Dec 2023 08:37:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/unit-testing-supabase-in-kotlin-using-test-containers-part-2/</guid><description>&lt;p&gt;&lt;em&gt;TL;DR : You can run a full Supabase instance inside Test Containers quite easily. &lt;a href="https://github.com/jlengrand/supabase-testcontainers-kotlin?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;See this repository&lt;/a&gt;
.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://foojayio.github.io/website/today/unit-testing-supabase-in-kotlin/"&gt;In my last article&lt;/a&gt;
, I was listing a few attempts I had done at running tests against my Kotlin Supabase application. The way the Supabase-Kt library is built makes it hard to mock, and I ended up building a minimal Docker Compose setup that was mimicking a Supabase instance.&lt;/p&gt;
&lt;p&gt;In this second part, we&amp;rsquo;re gonna push the madness further and actually run a FULL SUPABASE instance locally, still using &lt;a href="https://testcontainers.com/?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;Test Containers&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>[Unit] Testing Supabase in Kotlin using Test Containers</title><link>https://foojayio.github.io/website/today/unit-testing-supabase-in-kotlin/</link><pubDate>Wed, 15 Nov 2023 16:36:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/unit-testing-supabase-in-kotlin/</guid><description>&lt;p&gt;&lt;strong&gt;In this article, I&amp;rsquo;ll dive into several methods I&amp;rsquo;ve been looking into to unit test a Kotlin application using Supabase and why I finally decided to go for a Docker Compose / Test Containers solution.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;TL;DR : The easiest way I found to test my database service is to mimick Supabase using Docker Compose and Test Containers. &lt;a href="https://github.com/jlengrand/supabase-mock-demo-kotlin?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;Here&amp;rsquo;s the code&lt;/a&gt;
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In case you don&amp;rsquo;t know it, I&amp;rsquo;m a big fan of &lt;a href="https://supabase.com/?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;
. I love that they&amp;rsquo;re a viable alternative to Firebase. I love that they&amp;rsquo;re &lt;a href="https://github.com/supabase/supabase/blob/master/apps/docs/public/img/supabase-architecture.png?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;built on top of Open-Source&lt;/a&gt;
 pieces. I love &lt;a href="https://supabase.com/blog/chatgpt-supabase-docs?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;how innovative they are&lt;/a&gt;
, and &lt;a href="https://github.com/supabase/postgres_lsp?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;how much they give back to the community&lt;/a&gt;
. And as you already know it, I love &lt;a href="https://kotlinlang.org/?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;Kotlin&lt;/a&gt;
 as well.&lt;/p&gt;</description></item><item><title>OpenAPI Generator: From YAML to JetBrains HTTP Client</title><link>https://foojayio.github.io/website/today/creating-an-openapi-generator-from-scratch-from-yaml-to-jetbrains-http-client/</link><pubDate>Fri, 10 Nov 2023 10:41:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-an-openapi-generator-from-scratch-from-yaml-to-jetbrains-http-client/</guid><description>&lt;h3 id="h3-0-in-this-article-i-ll-be-implementing-an-openapi-generator-from-scratch-so-you-can-too-we-ll-be-creating-a-very-simple-generator-for-the-jetbrains-http-client"&gt;&lt;strong&gt;In this article, I&amp;rsquo;ll be implementing an OpenAPI generator from scratch so you can too! We&amp;rsquo;ll be creating a very simple generator for the Jetbrains HTTP Client.&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://lengrand.fr/content/images/2023/11/F9_7HZZW4AEvcHF.jpeg" alt="Creating an OpenAPI generator from scratch : From YAML to JetBrains HTTP Client" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;This is the online version of the article with the same name I wrote for the Dutch Java Magazine.&lt;/p&gt;
&lt;p&gt;In the previous edition of the magazine, we discussed how the &lt;a href="https://www.jetbrains.com/help/idea/http-client-reference.html?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;JetBrains HTTP Client&lt;/a&gt;
 could be used to run HTTP Queries, automate them and even use them in your CI/CD pipelines. Just like &lt;a href="https://www.postman.com/?ref=lengrand.fr" target="_blank" rel="noopener noreferrer"&gt;Postman&lt;/a&gt;
, but text based and can be part of your source code. Pretty cool.&lt;/p&gt;</description></item><item><title>Replacing Postman with the Jetbrains HTTP Client</title><link>https://foojayio.github.io/website/today/replacing-postman-with-the-jetbrains-http-client/</link><pubDate>Thu, 13 Apr 2023 06:59:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/replacing-postman-with-the-jetbrains-http-client/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;TL;DR: I&amp;rsquo;ve created the first version of an openapi-generator for the JetBrains HTTP Client, and together with the CLI runner it allows you to play against APIs without ever going out of your terminal and it can even run in your CI/CD pipeline.&lt;/strong&gt; &lt;a href="https://github.com/jlengrand/dotaClient" title="See repository here" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;See repository here&lt;/strong&gt;&lt;/a&gt;
&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I work a lot with APIs, whether for an app I develop myself, or to interact with others. Most people I know tend to use Postman for this. But &lt;a href="https://twitter.com/jlengrand/status/1620343955127689216" title="I personally don&amp;#39;t quite like the product any more" target="_blank" rel="noopener noreferrer"&gt;I personally don&amp;rsquo;t quite like the product any more&lt;/a&gt;
, and it forces me to move out of my IntelliJ environment which really kills my productivity.&lt;/p&gt;</description></item><item><title>Getting started with OpenAPI Generators : tips and tricks</title><link>https://foojayio.github.io/website/today/getting-started-with-openapi-generators-tips-tricks/</link><pubDate>Tue, 28 Mar 2023 15:50:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-openapi-generators-tips-tricks/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;TL;DR: In this article, I&amp;rsquo;m sharing some tips and tricks on how to get productive creating OpenAPI generators.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Lately, I&amp;rsquo;ve started dabbling more and more with &lt;a href="http://https://github.com/OAI/OpenAPI-Specification" title="OpenAPI" target="_blank" rel="noopener noreferrer"&gt;OpenAPI&lt;/a&gt;
. The OpenAPI specification is a super useful way to describe the API that you&amp;rsquo;re exposing to your users, both internally and externally.&lt;/p&gt;
&lt;p&gt;Some of you may also have heard about those under the name of &amp;ldquo;Swagger files&amp;rdquo;. They&amp;rsquo;re both kinda the same in the common speak, though OpenAPI is an open standard (lead with the OpenAPI Initiative) and Swagger is a set of tools built by a company (&lt;a href="https://smartbear.com/" title="SmartBear" target="_blank" rel="noopener noreferrer"&gt;SmartBear&lt;/a&gt;
).&lt;/p&gt;</description></item><item><title>Kover : Code Coverage plugin for Kotlin</title><link>https://foojayio.github.io/website/today/kover-code-coverage-plugin-for-kotlin/</link><pubDate>Mon, 28 Feb 2022 21:34:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/kover-code-coverage-plugin-for-kotlin/</guid><description>&lt;p&gt;&lt;em&gt;TL;DR: Kover is a code coverage tool for Kotlin. It&amp;rsquo;s still in incubator phase but I took it for a spin and it is already very useful as part of local or CI workflows! In this article I go through the setup and some of my favourite goodies of the tool. &lt;a href="https://github.com/jlengrand/spring-petclinic-kotlin/pull/1" target="_blank" rel="noopener noreferrer"&gt;You can see my experiment over here.&lt;/a&gt;
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;At the end of last year, the &lt;a href="https://blog.jetbrains.com/kotlin/2021/11/kotlin-1-6-0-is-released/" target="_blank" rel="noopener noreferrer"&gt;version 1.6.0 of Kotlin was officially released&lt;/a&gt;
! The release was packed with new language features, but also some very nice tooling and ecosystem goodies.&lt;/p&gt;</description></item><item><title>Measuring Time and Durations in Kotlin</title><link>https://foojayio.github.io/website/today/measuring-time-and-duration-in-kotlin/</link><pubDate>Fri, 25 Feb 2022 09:56:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/measuring-time-and-duration-in-kotlin/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;TL;DR : The &lt;code&gt;Duration&lt;/code&gt;API is coming out of its experimental stage and offers a nice DSL to easily work with time durations. If offers the obvious but also nice extra goodies, such as coercions and ISO/String conversions and is notably used to &lt;a href="https://github.com/Kotlin/KEEP/blob/master/proposals/stdlib/durations-and-time-measurement.md#measuretime-and-measuretimedvalue" target="_blank" rel="noopener noreferrer"&gt;calculate processing time&lt;/a&gt;
.&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;&lt;strong&gt;You can directly run the code I present below &lt;a href="https://pl.kotl.in/QwksQa5h1" target="_blank" rel="noopener noreferrer"&gt;in the Kotlin playground&lt;/a&gt;
!&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll be diving into one of the other news of the &lt;a href="https://blog.jetbrains.com/kotlin/2021/11/kotlin-1-6-0-is-released/" target="_blank" rel="noopener noreferrer"&gt;Kotlin 1.6 release&lt;/a&gt;
 : The &lt;code&gt;Duration&lt;/code&gt;API coming out of Experimental and is available for all flavours of Kotlin (so JS as well 😊)! Let&amp;rsquo;s look quickly together what it has to offer!&lt;/p&gt;</description></item><item><title>Building Command Line Interfaces with Kotlin using picoCLI</title><link>https://foojayio.github.io/website/today/building-command-line-interfaces-with-kotlin-using-picocli/</link><pubDate>Thu, 23 Sep 2021 07:05:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-command-line-interfaces-with-kotlin-using-picocli/</guid><description>&lt;p&gt;&lt;em&gt;TL;DR : We&amp;rsquo;ll dive into a few interesting bits about CLI applications and picoCLI. But you can directly &lt;a href="https://github.com/jlengrand/swacli" target="_blank" rel="noopener noreferrer"&gt;see the code here&lt;/a&gt;
, or view my related conference talk &lt;a href="https://www.youtube.com/watch?v=Rc_D4OTKidU&amp;amp;amp;t=460s" target="_blank" rel="noopener noreferrer"&gt;here&lt;/a&gt;
.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As a developer, there is a large chance that you use Command Line Interfaces (CLIs) every day. From Git, to kubectl or Maven, they are everywhere. In this article, we&amp;rsquo;ll look into use cases where CLIs are a great idea. We&amp;rsquo;ll also dive into best practises, and discover one of the most used library for CLIs in the JVM world: &lt;strong&gt;&lt;a href="https://picocli.info/" target="_blank" rel="noopener noreferrer"&gt;picoCLI&lt;/a&gt;
&lt;/strong&gt;.&lt;/p&gt;</description></item></channel></rss>