<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://archyoshi.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://archyoshi.github.io/" rel="alternate" type="text/html" /><updated>2026-09-07T09:14:55+00:00</updated><id>https://archyoshi.github.io/feed.xml</id><title type="html">ArchYoshi’s site</title><subtitle>Thami Inaflas aka Arch Yoshi, Software Craftsman</subtitle><entry><title type="html">🚨 Stop the Import Chaos 🚨</title><link href="https://archyoshi.github.io/programming/2026/08/21/import-chaos.html" rel="alternate" type="text/html" title="🚨 Stop the Import Chaos 🚨" /><published>2026-08-21T10:00:00+00:00</published><updated>2026-08-21T10:00:00+00:00</updated><id>https://archyoshi.github.io/programming/2026/08/21/import-chaos</id><content type="html" xml:base="https://archyoshi.github.io/programming/2026/08/21/import-chaos.html"><![CDATA[<h1 id="a-developers-guide-to-taming-your-ide">A Developer’s Guide to Taming Your IDE</h1>

<p><img src="/assets/images/imports_example.png" alt="Imports example" /></p>

<p><em>Because nobody wants to review a PR where half the diff is just import reshuffling.</em></p>

<hr />

<p>Have you ever proudly submitted a pull request, only for your reviewer to come back with: <em>“Why did all the imports change?”</em> You didn’t touch them. Or did you? Your IDE did. Silently. Ruthlessly. Without asking.</p>

<p>Fear not — In this blog post, I will show you how to configure IntelliJ IDEA and Eclipse so that your imports always follow a clean, consistent, agreed-upon layout across the whole team. One setup, no more import wars. 🕊️</p>

<p>*You can thank me with a coffee <a href="https://paypal.me/TInaflas">here</a> if this helped you saved time for you and your team ! * 😄</p>

<hr />

<h2 id="-the-target-import-layout">📐 The Target Import Layout</h2>

<p>This is the structure we all agree on. Tattoo it on your brain:</p>

<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// ✅ Block 1 — JDK standard libraries</span>
<span class="kn">import</span> <span class="nn">java.sql.Timestamp</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.util.List</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.util.Map</span><span class="o">;</span>

<span class="c1">// ✅ Block 2 — Third-party libraries (org.*)</span>
<span class="kn">import</span> <span class="nn">org.apache.commons.lang3.StringUtils</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.apache.commons.lang3.math.NumberUtils</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">com.fasterxml.jackson.databind.ObjectMapper</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.springframework.util.CollectionUtils</span><span class="o">;</span>

<span class="c1">// ✅ Block 3 — Internal / company packages (com.*)</span>
<span class="kn">import</span> <span class="nn">com.archyoshi.db.read.CommonOperations</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">com.archyoshi.db.read.FlatJsonBlob</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">com.archyoshi.db.write.GenericWriteOperation</span><span class="o">;</span>

<span class="c1">// ✅ Block 4 — Static imports (always last)</span>
<span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">assertj</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span><span class="o">.</span><span class="na">assertThat</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">mockito</span><span class="o">.</span><span class="na">ArgumentMatchers</span><span class="o">.</span><span class="na">anyString</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">mockito</span><span class="o">.</span><span class="na">Mockito</span><span class="o">.</span><span class="na">doCallRealMethod</span><span class="o">;</span>
</code></pre></div></div>

<hr />

<h2 id="-intellij-idea-setup">🧠 IntelliJ IDEA Setup</h2>

<h3 id="step-1--open-import-layout-settings">Step 1 — Open Import Layout Settings</h3>

<p>Go to:
<code class="language-plaintext highlighter-rouge">Settings (Ctrl + Alt + S / Cmd + ,)</code> → <code class="language-plaintext highlighter-rouge">Editor</code> → <code class="language-plaintext highlighter-rouge">Code Style</code> → <code class="language-plaintext highlighter-rouge">Java</code> → <code class="language-plaintext highlighter-rouge">Imports</code> tab</p>

<h3 id="step-2--configure-the-import-layout">Step 2 — Configure the Import Layout</h3>

<p>Scroll down to the <strong>Import Layout</strong> section and set it up <strong>in this exact order</strong>. Use the <code class="language-plaintext highlighter-rouge">+</code> button to add entries and the blank line button to add separators:</p>

<table>
  <thead>
    <tr>
      <th>Order</th>
      <th>Entry</th>
      <th>Type</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td><code class="language-plaintext highlighter-rouge">java.</code></td>
      <td>Import</td>
    </tr>
    <tr>
      <td>2</td>
      <td><code class="language-plaintext highlighter-rouge">javax.</code></td>
      <td>Import</td>
    </tr>
    <tr>
      <td>3</td>
      <td><em>(blank line)</em></td>
      <td>Separator</td>
    </tr>
    <tr>
      <td>4</td>
      <td><code class="language-plaintext highlighter-rouge">org.</code></td>
      <td>Import</td>
    </tr>
    <tr>
      <td>5</td>
      <td><em>(blank line)</em></td>
      <td>Separator</td>
    </tr>
    <tr>
      <td>6</td>
      <td><code class="language-plaintext highlighter-rouge">com.</code></td>
      <td>Import</td>
    </tr>
    <tr>
      <td>7</td>
      <td><em>(blank line)</em></td>
      <td>Separator</td>
    </tr>
    <tr>
      <td>8</td>
      <td><code class="language-plaintext highlighter-rouge">&lt;All other imports&gt;</code></td>
      <td>Import</td>
    </tr>
    <tr>
      <td>9</td>
      <td><em>(blank line)</em></td>
      <td>Separator</td>
    </tr>
    <tr>
      <td>10</td>
      <td><code class="language-plaintext highlighter-rouge">&lt;All static imports&gt;</code></td>
      <td>Static Import</td>
    </tr>
  </tbody>
</table>

<h3 id="step-3--recommended-supporting-settings">Step 3 — Recommended Supporting Settings</h3>

<p>Still in the <code class="language-plaintext highlighter-rouge">Imports</code> tab, make sure these are configured:</p>

<ul>
  <li><strong>Class count to use import with ‘*’:</strong> Set to a high number like <code class="language-plaintext highlighter-rouge">999</code> to <strong>disable</strong> wildcard imports.</li>
  <li><strong>Names count to use static import with ‘*’:</strong> Set to <code class="language-plaintext highlighter-rouge">999</code> as well.</li>
  <li>Uncheck <strong>“Layout static imports separately”</strong> — we handle static placement ourselves via the layout above.</li>
</ul>

<h3 id="step-4--apply--run">Step 4 — Apply &amp; Run</h3>

<p>Hit <strong>OK</strong>, then run <strong>Optimize Imports</strong> (<code class="language-plaintext highlighter-rouge">Ctrl + Alt + O</code> / <code class="language-plaintext highlighter-rouge">Cmd + Option + O</code>) on any file to see the magic. ✨</p>

<hr />

<h2 id="-eclipse-setup">🌑 Eclipse Setup</h2>

<p>Eclipse doesn’t have a native drag-and-drop import layout UI like IntelliJ, but it can be done cleanly via its <strong>Code Formatter</strong> and <strong>Organize Imports</strong> settings.</p>

<h3 id="step-1--open-import-order-settings">Step 1 — Open Import Order Settings</h3>

<p>Go to:
<code class="language-plaintext highlighter-rouge">Window</code> → <code class="language-plaintext highlighter-rouge">Preferences</code> → <code class="language-plaintext highlighter-rouge">Java</code> → <code class="language-plaintext highlighter-rouge">Code Style</code> → <code class="language-plaintext highlighter-rouge">Organize Imports</code></p>

<h3 id="step-2--configure-the-import-order">Step 2 — Configure the Import Order</h3>

<p>You will see an <strong>Import Order</strong> list. Clear the existing entries and recreate them in this order using the <strong>New</strong> button:</p>

<table>
  <thead>
    <tr>
      <th>Order</th>
      <th>Entry</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td><code class="language-plaintext highlighter-rouge">java</code></td>
    </tr>
    <tr>
      <td>2</td>
      <td><code class="language-plaintext highlighter-rouge">javax</code></td>
    </tr>
    <tr>
      <td>3</td>
      <td><code class="language-plaintext highlighter-rouge">org</code></td>
    </tr>
    <tr>
      <td>4</td>
      <td><code class="language-plaintext highlighter-rouge">com</code></td>
    </tr>
    <tr>
      <td>5</td>
      <td><em>(leave blank for “all others”)</em></td>
    </tr>
    <tr>
      <td>6</td>
      <td><code class="language-plaintext highlighter-rouge">static</code> (tick the <strong>Static</strong> checkbox on this entry)</td>
    </tr>
  </tbody>
</table>

<blockquote>
  <p>ℹ️ Eclipse automatically adds a blank line between each top-level group — no manual separator needed.</p>
</blockquote>

<h3 id="step-3--disable-wildcard-imports">Step 3 — Disable Wildcard Imports</h3>

<p>On the same screen, set:</p>
<ul>
  <li><strong>Number of imports needed for <code class="language-plaintext highlighter-rouge">.*</code>:</strong> <code class="language-plaintext highlighter-rouge">99</code></li>
  <li><strong>Number of static imports needed for <code class="language-plaintext highlighter-rouge">.*</code>:</strong> <code class="language-plaintext highlighter-rouge">99</code></li>
</ul>

<h3 id="step-4--apply--run-1">Step 4 — Apply &amp; Run</h3>

<p>Hit <strong>Apply and Close</strong>, then trigger <strong>Organize Imports</strong> (<code class="language-plaintext highlighter-rouge">Ctrl + Shift + O</code>) on any file to validate.</p>

<hr />

<h2 id="-sharing-the-config-with-the-team">🤝 Sharing the Config With the Team</h2>

<p>Rather than having every developer set this up manually (and inevitably someone getting it wrong), both IDEs support config export:</p>

<ul>
  <li><strong>IntelliJ:</strong> <code class="language-plaintext highlighter-rouge">File</code> → <code class="language-plaintext highlighter-rouge">Manage IDE Settings</code> → <code class="language-plaintext highlighter-rouge">Export Settings</code> → select <strong>Code Style schemes</strong> → share the <code class="language-plaintext highlighter-rouge">.zip</code>.</li>
  <li><strong>Eclipse:</strong> <code class="language-plaintext highlighter-rouge">File</code> → <code class="language-plaintext highlighter-rouge">Export</code> → <code class="language-plaintext highlighter-rouge">General</code> → <code class="language-plaintext highlighter-rouge">Preferences</code> → select <strong>Java Code Style</strong> → share the <code class="language-plaintext highlighter-rouge">.epf</code>.</li>
</ul>

<p>Import the file on your end, done. No excuses. 🎯</p>

<p>Don’t hesitate to comment with another subject you would like to see me post about !</p>

<hr />

<p><em>If after reading this guide your imports are still scrambled — that’s on you (or your teammates). At least, I tried.</em> 😄</p>]]></content><author><name></name></author><category term="programming" /><summary type="html"><![CDATA[A Developer’s Guide to Taming Your IDE]]></summary></entry><entry><title type="html">Retour sur l’après-midi du Domain-Driven Design - episode 2</title><link href="https://archyoshi.github.io/main/2019/06/22/rex-sur-am-ddd.html" rel="alternate" type="text/html" title="Retour sur l’après-midi du Domain-Driven Design - episode 2" /><published>2019-06-22T08:00:00+00:00</published><updated>2019-06-22T08:00:00+00:00</updated><id>https://archyoshi.github.io/main/2019/06/22/rex-sur-am-ddd</id><content type="html" xml:base="https://archyoshi.github.io/main/2019/06/22/rex-sur-am-ddd.html"><![CDATA[<p><img src="/assets/images/amddd_affiche.jpeg" alt="AM DDD Affiche" /></p>

<p>La seconde édition de l’après-midi du DDD ou <a href="https://twitter.com/hashtag/AMDDD?src=hash">#AMDDD</a> s’est déroulée le 20 juin 2019 dans les locaux de Microsfost à Issy-Les-Moulineaux. L’événement a été organisé par <a href="http://www.42skillz.com">42Skillz</a> avec, comme animateurs, <a href="https://twitter.com/brunoboucard">Bruno Boucard</a> et <a href="https://twitter.com/tpierrain">Thomas Pierrain</a>, à leurs côté plusieurs invités, je cite : Xavier DETANT, Chloé GRANDIN, Radwane HASSEN, Audrey NEVEU, Pablo PERNOT et Alexandre VICTOOR.</p>

<p>J’ai assisté a cet évènement très enrichissant, et je vais partager avec vous l’expérience que j’ai eu lors de cet event.</p>

<p>La présentation était très originale, car au lieu d’être un enchaînement de talks et de sessions de coding, c’était sous forme d’une pièce de théâtre. Chaque scène a mis en lumière un aspect de la vie quotidienne de développeurs d’une société fictive nommée TicketOffice.</p>

<p>Voici quelques problématiques mises en lumière par cette belle pièce de théâtre :</p>
<ul>
  <li>Le turn-over des employés les plus expérimentés sur une appli fais conduit fatalement a un échec si le code ne respecte pas les bonnes pratiques qui lui permettent d’être relus / compris et maintenu par d’autres développeurs.</li>
  <li>Quand la communication entre l’équipe de dev et leur client n’est pas assez poussée, les dév parfois se retrouvent à redévelopper des briques de code qui ne sont pas dans leurs cercle de responsabilité. Parfois même, ils se peut qu’ils codent des éléments qui ont toute une équipe dans la société dédiée mais qu’ils n’ont en tout simplement pas connaissance.</li>
  <li>Quand les discussions avec le métiers ne sont pas assez clarifiées et précisées on peut se retrouver avec des éléments (comme des règles métiers) très ambigüe ou parfois contradictoire.</li>
  <li>Quand on dépend d’autres équipes, et que notre base de code n’est pas assez “protégée”, on peut être victime de nos dépendances, il faut donc s’outiller correctement pour s’en prémunir.</li>
</ul>

<p>Quelques idées qui pour apporter des solutions à ces problématiques :</p>
<ul>
  <li>Quand on est face à un sujet de grande importance et qu’on souhaite réellement tout faire pour que ça marche, il faut également s’en donner les moyens, par exemple en s’assurant que les gens qui connaissent la base de code partage assez de connaissances avec ceux les nouveaux et qu’ils les fassent monté en compétence avec un accompagnement pour qu’ils deviennent fiable et capable de de contribuer efficacement au projet.</li>
  <li>Un des bons moyens d’être sur la même longueur d’onde que celle du client est de faire un atelier (ou plusieurs) atelier d’<a href="https://en.wikipedia.org/wiki/Event_storming">Event Storming</a>
en utilisant un maximum de moyens visuels afin d’illustrer correctement les idées et de les faire aboutir à un même concept clair pour tout le monde.</li>
  <li>La pratique du <a href="https://en.wikipedia.org/wiki/Domain-driven_design">Domain Driven Design</a> devient alors un bon moyen pour que le code représente un maximum le métier, donc s’accorder sur les termes métier employer pour désigner les mêmes éléments et d’une importance cruciale.</li>
  <li>Si on remarque que notre application est souvent hors service, et que la raison provient souvent de nos dépendances, il faut chercher différent moyens de s’en prémunir, il y a par exemple l’utilisation de l’<a href="https://java-design-patterns.com/patterns/hexagonal/">Architecture Hexagonale</a> d’un côté, mais encore une autre manière d’y remédier est le <a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/anti-corruption-layer">Anti Corruption Layer</a></li>
</ul>

<p>Je vous laisse donc redécouvrir cette belle après midi en vidéo ici:</p>
<div class="container">
  <iframe id="ytplayer" type="text/html" class="video" src="https://www.youtube.com/embed/PIo6jUl4VO8?autoplay=1&amp;origin=https://archyoshi.github.io" frameborder="0"></iframe>
</div>]]></content><author><name></name></author><category term="main" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Welcome</title><link href="https://archyoshi.github.io/main/2019/06/10/welcome.html" rel="alternate" type="text/html" title="Welcome" /><published>2019-06-10T08:00:00+00:00</published><updated>2019-06-10T08:00:00+00:00</updated><id>https://archyoshi.github.io/main/2019/06/10/welcome</id><content type="html" xml:base="https://archyoshi.github.io/main/2019/06/10/welcome.html"><![CDATA[<p>Welcome to my personal site, it’s still under construction though ^^!</p>

<p>meanwhile you can check the <a href="/about">About Me</a> page :)</p>]]></content><author><name></name></author><category term="main" /><summary type="html"><![CDATA[Welcome to my personal site, it’s still under construction though ^^!]]></summary></entry></feed>