<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom">
  <title>Thomasorus</title>
  <id>https://thomasorus.com/feed</id>
  <updated>2026-03-05T15:55:13+01:00</updated>
  <subtitle>The personal website of Thomasorus</subtitle>
  <link href="https://thomasorus.com/feed" rel="self"></link>
  <author>
    <name>Thomasorus</name>
    <email>contact@thomasorus.com</email>
  </author>
  <entry>
    <title>Now</title>
    <updated>2023-04-26T21:34:39Z</updated>
    <id>https://thomasorus.com/now</id>
    <content type="html">&lt;h1 id=&#34;now&#34; &gt;Now&lt;a href=&#34;#now&#34; aria-label=&#34;Now permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;What I&#39;m working on right now.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;tasks&#34; &gt;Tasks&lt;a href=&#34;#tasks&#34; aria-label=&#34;Tasks permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;code aria-hidden=&#34;true&#34;&gt;[@]&lt;/code&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Ongoing task&lt;/span&gt;  !!! Put plinths on walls&lt;/li&gt;&#xA;&lt;li&gt;&lt;code aria-hidden=&#34;true&#34;&gt;[@]&lt;/code&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Ongoing task&lt;/span&gt;  ! Finish porting my design system in the website&lt;/li&gt;&#xA;&lt;li&gt;&lt;code aria-hidden=&#34;true&#34;&gt;[ ]&lt;/code&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Opened task&lt;/span&gt;  !! Create a website rating fighting games by their features&lt;/li&gt;&#xA;&lt;li&gt;&lt;code aria-hidden=&#34;true&#34;&gt;[ ]&lt;/code&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Opened task&lt;/span&gt;  ! Design new furniture for the living room&lt;/li&gt;&#xA;&lt;li&gt;&lt;code aria-hidden=&#34;true&#34;&gt;[ ]&lt;/code&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Opened task&lt;/span&gt;  ! Frame pictures in the living room&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;[&lt;del&gt;] Cerca CSS&lt;/p&gt;&#xA;&lt;p&gt;[&lt;/del&gt;] An article about how to achieve 2D look in 3D&lt;/p&gt;&#xA;&lt;p&gt;[&lt;del&gt;] The lore of a story I had in mind for a long time&lt;/p&gt;&#xA;&lt;p&gt;[&lt;/del&gt;] Learning and using VIM&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;definition&#34; &gt;Definition&lt;a href=&#34;#definition&#34; aria-label=&#34;Definition permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;[ ]&lt;/dt&gt;&lt;dd&gt;Opened task&lt;/dd&gt;&lt;dt&gt;[@]&lt;/dt&gt;&lt;dd&gt;Ongoing task&lt;/dd&gt;&lt;dt&gt;[~]&lt;/dt&gt;&lt;dd&gt;Paused or abandonned task&lt;/dd&gt;&lt;dt&gt;[x]&lt;/dt&gt;&lt;dd&gt;Completed task&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/now" rel="self" type="text/html"></link>
    <summary type="html">What am I doing now?</summary>
  </entry>
  <entry>
    <title>Tools</title>
    <updated>2022-01-01T23:39:41Z</updated>
    <id>https://thomasorus.com/tools</id>
    <content type="html">&lt;h1 id=&#34;tools&#34; &gt;Tools&lt;a href=&#34;#tools&#34; aria-label=&#34;Tools permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;A collection of tools I use or made.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;why-i-make-my-own-tools&#34; &gt;Why I make my own tools&lt;a href=&#34;#why-i-make-my-own-tools&#34; aria-label=&#34;Why I make my own tools permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As software developers we are all the time required to follow the next big thing and use &lt;a href=&#34;the-soft-power-of-javascript.html&#34;&gt;new frameworks or libraries&lt;/a&gt;. It comes with a lot of code bloat, it requires to relearn everything from scratch and does not favors building strong fundamentals. It&#39;s also exhausting and maintains people into imposter syndrome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Creating my own instead of using other people&#39;s tools is a very appreciable exercise of self-discovery. It allows to ask, ala Marie Kondo, if these tools, frameworks, libraries I use all the time as a software developer bring me happiness. And if not, why do I keep using them?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coding my tools removes the notion of efficiency and productivity associated with software development. I don&#39;t know when the tool I build will be done and it doesn&#39;t matter, that&#39;s why it&#39;s relaxing. Instead of complying with other people way of doing, I discover my own and my software evolves with me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s a reappropriation of the means of production towards self-discovery.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/tools" rel="self" type="text/html"></link>
    <summary type="html">A collection of hardware and software tools I use or made</summary>
  </entry>
  <entry>
    <title>Keyboards</title>
    <updated>2023-03-03T16:22:26Z</updated>
    <id>https://thomasorus.com/keyboards</id>
    <content type="html">&lt;h1 id=&#34;keyboards&#34; &gt;Keyboards&lt;a href=&#34;#keyboards&#34; aria-label=&#34;Keyboards permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I use two keyboards: the &lt;strong&gt;Happy Hacking Keyboard&lt;/strong&gt; (HHKB) by PFU and a &lt;strong&gt;Happy Hacking Keyboard plate replica&lt;/strong&gt; made in China.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;happy-hacking-keyboard&#34; &gt;Happy Hacking Keyboard&lt;a href=&#34;#happy-hacking-keyboard&#34; aria-label=&#34;Happy Hacking Keyboard permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/hhkb.jpg&#34; alt=&#34;The happy hacking keyboard figcaption&#34;&gt;&lt;figcaption&gt;The happy hacking keyboard | &lt;small&gt;&lt;a href=&#34;/uploaded/hhkb.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Bought in 2016 at Akihabara in Japan, this HHKB had been my daily driver since. It took several weeks to get used to it as I learned both to write in QWERTY and the very special layout of this keyboard. It&#39;s currently customized with a &lt;a href=&#34;https://kbdfans.com/products/pre-orderelectrostatic-capacity-keyboard-japanese-keycaps?_pos=16&amp;_sid=098521c43&amp;_ss=r&#34;&gt;japanese keyset&lt;/a&gt;. As for all HHKBs, the switches are Topre.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;hhkb-plate-replica&#34; &gt;HHKB plate replica&lt;a href=&#34;#hhkb-plate-replica&#34; aria-label=&#34;HHKB plate replica permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/hhkb-plate.jpg&#34; alt=&#34;My plate replica of HHKB figcaption&#34;&gt;&lt;figcaption&gt;My plate replica of HHKB | &lt;small&gt;&lt;a href=&#34;/uploaded/hhkb-plate.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Bought in 2018 to have a second keyboard with the HHKB layout to drop at work. This keyboard initially had a rough CNC cut plate with Outemu Purple switches. I unsoldered the switches and replaced them with Cherry MX Silent Red. A friend also lubed them to avoid making noise. A vinyl like sticker was then applied to the plate to hide the rough metal.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/keyboards" rel="self" type="text/html"></link>
    <summary type="html">I use custom keyboards to write and work</summary>
  </entry>
  <entry>
    <title>Curriculum vitae</title>
    <updated>2021-11-12T15:47:35Z</updated>
    <id>https://thomasorus.com/curriculum-vitae</id>
    <content type="html">&lt;h1 id=&#34;curriculum-vitae&#34; &gt;Curriculum Vitae&lt;a href=&#34;#curriculum-vitae&#34; aria-label=&#34;Curriculum Vitae permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Writing in progress...&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/curriculum-vitae" rel="self" type="text/html"></link>
    <summary type="html">My curriculum vitae</summary>
  </entry>
  <entry>
    <title>Raspberry Pi</title>
    <updated>2023-03-03T16:22:26Z</updated>
    <id>https://thomasorus.com/raspberry-pi</id>
    <content type="html">&lt;h1 id=&#34;my-raspberry-pi-configuration&#34; &gt;My Raspberry Pi configuration&lt;a href=&#34;#my-raspberry-pi-configuration&#34; aria-label=&#34;My Raspberry Pi configuration permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve been trying to use  a Raspberry Pi as small development machine for personal projects. The overall goal is to spend less time on the computer by creating a distraction free machine with limited capabilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use a Raspberry Pi 4 with 8 gigs or ram and an aluminium heatsink.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/pi.jpg&#34; alt=&#34;Pi 4 with a heatsink&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/pi.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;After a lot of &lt;a href=&#34;raspberry-pi-distros.html&#34;&gt;testing&lt;/a&gt; I ended using &lt;strong&gt;Dietpi&lt;/strong&gt;. The install experience is poor but compensated by the large amount of tweaks and software proposed. It&#39;s probably better to create your own user experience by installing and tweaking the window manager and file manager that suits you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what is amazing with Dietpi is how responsive it is considering it&#39;s running on a Raspberry Pi. I installed i3 window manager and thunar and almost everything launches instantly. Even an Electron app like Visual Studio Code is usable as there&#39;s no lag when typing (but startup and syntax color can be a bit slow).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use the 32bit version as the 64bit has bugs.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/i3.jpg&#34; alt=&#34;A screenshot of my i3 Desktop&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/i3.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;dietpi-installation-guide&#34; &gt;Dietpi installation guide&lt;a href=&#34;#dietpi-installation-guide&#34; aria-label=&#34;Dietpi installation guide permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This guide is mostly for my own use but feel free to use it.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;basic-setup&#34; &gt;Basic setup&lt;a href=&#34;#basic-setup&#34; aria-label=&#34;Basic setup permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;If you are on Wifi, edit the &lt;code&gt;dietpi&lt;/code&gt; and &lt;code&gt;dietpi-wifi&lt;/code&gt; files in the boot folder before inserting the sd card, as dietpi will trigger &lt;code&gt;apt update&lt;/code&gt; and &lt;code&gt;apt upgrade&lt;/code&gt; on launch.&lt;/li&gt;&#xA;&lt;li&gt;Use &lt;code&gt;dietpi-config&lt;/code&gt; in the command line and activate the sound in the audio options and bluetooth (if needed) in the advanced options (note that activating bluetooth sometimes returns an error, but it&#39;s working).&lt;/li&gt;&#xA;&lt;li&gt;Configure the language, keyboard and locale.&lt;/li&gt;&#xA;&lt;li&gt;Using &lt;code&gt;dietpi-software&lt;/code&gt; from the command line launches a menu with ready to use software install. The &lt;code&gt;Optimized software&lt;/code&gt; contains the window managers, the &lt;code&gt;additional software&lt;/code&gt; contains things like &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;openssh&lt;/code&gt;, &lt;code&gt;vim&lt;/code&gt; and other tools.&lt;/li&gt;&#xA;&lt;li&gt;If you want to use i3, install &lt;code&gt;i3&lt;/code&gt;, &lt;code&gt;i3lock&lt;/code&gt;, &lt;code&gt;i3status&lt;/code&gt; and &lt;code&gt;suckless-tools&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;By default dietpi launches in the terminal. To launch to the window manager, use &lt;code&gt;dietpi-config&lt;/code&gt;, go to &lt;code&gt;autostart options&lt;/code&gt;. You&#39;ll see a list, go &lt;code&gt;Desktops&lt;/code&gt; and press Enter on &lt;code&gt;LightDM Login Mask&lt;/code&gt;, then select the user (probably dietpi) and exit. The next time you&#39;ll reboot you will boot on LightDM and will be able to choose your window manager.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;other-programs&#34; &gt;Other programs&lt;a href=&#34;#other-programs&#34; aria-label=&#34;Other programs permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;code&gt;thunar&lt;/code&gt; as a file manager.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;chromium-browser&lt;/code&gt; for browsing&lt;/li&gt;&#xA;&lt;li&gt;Hardware acceleration following this &lt;a href=&#34;https://www.dedoimedo.com/computers/rpi4-ubuntu-mate-hw-video-acceleration.html&#34;&gt;tutorial&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;blueman&lt;/code&gt; to manager bluetooth devices&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mps-youtube&lt;/code&gt; and &lt;code&gt;youtube-dl&lt;/code&gt; to play youtube music in the terminal. The &lt;code&gt;youtube-dl&lt;/code&gt; package is old, you have to update it using pip3: &lt;code&gt;pip3 install --upgrade youtube-dl&lt;/code&gt; and use your own Youtube V3 Api Key. Set it inside mps-youtube with &lt;code&gt;set api_key KEY&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;By default dietpi has no emoji support or foreign languages like Japanese, you might want to install fonts to support them.&lt;/li&gt;&#xA;&lt;li&gt;I use &lt;code&gt;feh&lt;/code&gt; to randomize wallpapers (it&#39;s inside my i3 config file)&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;chrome-extensions&#34; &gt;Chrome extensions&lt;a href=&#34;#chrome-extensions&#34; aria-label=&#34;Chrome extensions permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Ublock original&lt;/li&gt;&#xA;&lt;li&gt;Noscript&lt;/li&gt;&#xA;&lt;li&gt;Ninja cookie&lt;/li&gt;&#xA;&lt;li&gt;1PasswordX&lt;/li&gt;&#xA;&lt;li&gt;h264ify&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;i3-config-file&#34; &gt;i3 config file&lt;a href=&#34;#i3-config-file&#34; aria-label=&#34;i3 config file permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;My config file is available on &lt;a href=&#34;https://gist.githubusercontent.com/Thomasorus/89322ec9b0913e680616548265f5346f/raw/ccfd72704a6fced96ab6642477397c2ef6fa2efc/i3-config.txt&#34;&gt;github&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/raspberry-pi" rel="self" type="text/html"></link>
    <summary type="html">My Raspberry Pi configuration</summary>
  </entry>
  <entry>
    <title>Whiteboard</title>
    <updated>2022-08-28T11:34:05Z</updated>
    <id>https://thomasorus.com/whiteboard</id>
    <content type="html">&lt;h1 id=&#34;whiteboard&#34; &gt;Whiteboard&lt;a href=&#34;#whiteboard&#34; aria-label=&#34;Whiteboard permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This page references temporary things I need to store somewhere. Consider it like my post-it wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things I need to study or try:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=LnapsmokM_4&#34;&gt;Simulating color vision deficiencies in the Blink Renderer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://css-tricks.com/a-complete-guide-to-css-gradients/&#34;&gt;A complete guide to CSS Gradients&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://csswizardry.com/2020/11/site-speed-topography/&#34;&gt;Harry Roberts: Site Speed Topography&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://doodad.dev/pattern-generator/&#34;&gt;Pattern generator&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.capitalone.com/tech/software-engineering/wcag-accessiblity-guidelines-mobile/&#34;&gt;Web Content Accessibility Guidelines for Mobile&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=lFb7BOI_QFc&#34;&gt;Why do corporate art styles feel fake&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://medium.com/@mezoistvan/finally-a-css-only-solution-to-hover-on-touchscreens-c498af39c31c&#34;&gt;Finally, a CSS only solution to &lt;code&gt;:hover&lt;/code&gt; on touchscreens&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://egghead.io/courses/accessible-cross-browser-css-form-styling-7297&#34;&gt;Accessible Cross-Browser CSS Form Styling&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.bbc.co.uk/gel/articles/creating-a-design-system-for-bbc&#34;&gt;The lessons learnt creating a design system for BBC Online&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thoughtmaybe.com/cant-get-you-out-of-my-head/&#34;&gt;Can’t Get You Out of My Head&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://glassmorphism.com/&#34;&gt;glassmorphism&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/q&#34;&gt;The Inline Quotation element&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://rclone.org/&#34;&gt;rClone&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://css-tricks.com/video-screencasts/205-sticky-positioning-how-it-works-what-can-break-it-and-dumb-tricks/&#34;&gt;Sticky Positioning: How it Works, What Can Break It, and Dumb Tricks&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.maximeheckel.com/posts/the-power-of-composition-with-css-variables&#34;&gt;The Power of Composition with CSS Variables&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://doodad.dev/dither-me-this/&#34;&gt;Dither me this&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.smashingmagazine.com/2021/03/complete-guide-accessible-front-end-components/&#34;&gt;A Complete Guide To Accessible Front-End Components&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/paulirish/lite-youtube-embed&#34;&gt;Lite youtube embed&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://lea.verou.me/2021/03/inverted-lightness-variables/&#34;&gt;Dark mode in 5 minutes, with inverted lightness variables&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://component.gallery/&#34;&gt;Component gallery&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ishadeed.com/article/handling-&#34;&gt;Handling Text Over Images in CSS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gridjs.io/&#34;&gt;Grid.js Advanced Table Plugin&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://web.dev/cookie-notice-best-practices/&#34;&gt;Best practices for cookie notices&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://web.dev/state-of-css-2022/&#34;&gt;State of CSS 2022&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://daverupert.com/2022/08/modern-alternatives-to-bem/&#34;&gt;Modern alternatives to BEM&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gist.github.com/EllyLoel/4ff8a6472247e6dd2315fd4038926522&#34;&gt;CSS reset by Elly Loel&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.autoregex.xyz&#34;&gt;Autoregex&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://specbranch.com/posts/one-big-server/&#34;&gt;One big server&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ava.substack.com/p/modern-malaise&#34;&gt;Modern malaise&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.gawker.com/culture/failure-to-cope-under-capitalism&#34;&gt;Failure to cope under capitalism&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://webkit.org/blog/13096/css-has-pseudo-class/&#34;&gt;Using :has(&lt;/a&gt; as a CSS Parent Selector and much more)&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/whiteboard" rel="self" type="text/html"></link>
    <summary type="html">Where I put temporary informations</summary>
  </entry>
  <entry>
    <title>Arcade Stick</title>
    <updated>2023-03-03T16:22:26Z</updated>
    <id>https://thomasorus.com/arcade-stick</id>
    <content type="html">&lt;h1 id=&#34;arcade-sticks&#34; &gt;Arcade sticks&lt;a href=&#34;#arcade-sticks&#34; aria-label=&#34;Arcade sticks permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve been playing fighting game for 20 years now, but only started using an arcade stick in 2006. While I was at a tournament, I managed to play some games on an arcade cabinet (the famous &lt;a href=&#34;https://fr.wikipedia.org/wiki/Sega_Astro_City&#34;&gt;Sega Astro City&lt;/a&gt;) and discovered how comfortable and pleasant the experience was. I decided I wanted to play on an arcade stick.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/group-stick.jpg&#34; alt=&#34;A bunch of arcade sticks on a table figcaption&#34;&gt;&lt;figcaption&gt;Different models of arcade sticks during one of our local fighting game sessions. | &lt;small&gt;&lt;a href=&#34;/uploaded/group-stick.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Back in 2007 most arcade sticks were not even sold in Europe and needed to be imported. They were not that cheap for their poor quality, and building one meant buying it opening it, throwing away all parts and electronics, then adding your own parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the electronics during the PS2 era, most people would buy cheap controllers, open them and solder wires on the connectors and connect those to the buttons and the lever. When the Xbox 360 and Playstation 3 came out in 2005 and 2006, most people would then build &lt;em&gt;dual-mods&lt;/em&gt;. Two hackpads, both with a common ground, would be connected and powered at the same time (USB had one cable for power and one for ground). A manual switch was then added, whose role was to send the signal (green and white wires on an USB cable) to the desired controller.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/hackpad.jpg&#34; alt=&#34;A hackpad figcaption&#34;&gt;&lt;figcaption&gt;A typical hackpad from the Xbox 360 era. | &lt;small&gt;&lt;a href=&#34;/uploaded/hackpad.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Around the early 2010 with the rise of DIY electronics, people started building custom PCBs that contained the code for several consoles in a single board. Today this part is way easier than it used to be, with boards being affordable for custom builds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The three main quality brands for levers and buttons from Japan are Sanwa, Seimitsu and Hori. There are regional differences, with the US sometimes using HAPP models, or Korean players using Crown and Fanta models. All brands have different models, and all models have a different feeling. For most of my arcade sticks, I used the classic Sanwa JLF-TP-8YT lever and Sanwa OBS-30 buttons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had several models through the years.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/stick-lapin.jpg&#34; alt=&#34;An arcade stick figcaption&#34;&gt;&lt;figcaption&gt;For some reason I decided to do a Guilty Gear x Raving Rabbids arcade stick on a Namco PS1 base for my first build. Overall this stick never worked super well. | &lt;small&gt;&lt;a href=&#34;/uploaded/stick-lapin.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/piranese2.jpg&#34; alt=&#34;A custom arcade stick with an art on it figcaption&#34;&gt;&lt;figcaption&gt;This case was made by an artisan. I added a print of the famous Piranese prison on it for some reason. Note the manual switch for a dual mode. | &lt;small&gt;&lt;a href=&#34;/uploaded/piranese2.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/stick-glove.jpg&#34; alt=&#34;A boxing glove on an arcade stick figcaption&#34;&gt;&lt;figcaption&gt;This model is a Madcatz Standard Edition for the Wii, that was repurposed to to a trial-mod for the Playstation 2, Playstation 3 and Xbox 360. | &lt;small&gt;&lt;a href=&#34;/uploaded/stick-glove.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/stick-box.jpg&#34; alt=&#34;Several arcade sticks in a box figcaption&#34;&gt;&lt;figcaption&gt;Tree of my arcade sticks. During a period I wanted to do a Mortal Kombat mod on the small Namco Yellow model. Note the Hexagonal buttons. | &lt;small&gt;&lt;a href=&#34;/uploaded/stick-box.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/gamerfinger.jpg&#34; alt=&#34;A box of buttons figcaption&#34;&gt;&lt;figcaption&gt;There has been a few attempts to replace the classic buttons by using Cherry MX switches in buttons. Those are a set I imported from China, they were hexagonal in shape and were not working as well as I hoped due to poor wiring. | &lt;small&gt;&lt;a href=&#34;/uploaded/gamerfinger.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/ps2-hack.jpg&#34; alt=&#34;A cheap custom stick figcaption&#34;&gt;&lt;figcaption&gt;Around 2017 I re-did a Playstation 2 stick with a hackpad, using a cheap bootleg case and leftovers buttons. | &lt;small&gt;&lt;a href=&#34;/uploaded/ps2-hack.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/hori-small.jpg&#34; alt=&#34;Two sticks side by side, one of them is very small figcaption&#34;&gt;&lt;figcaption&gt;Ready-made arcade sticks prices have skyrocketed and are now luxury items, but sometimes you encounter some models that try to be cheap. They are often terrible, like this Hori Mini. | &lt;small&gt;&lt;a href=&#34;/uploaded/hori-small.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/hori-rap4.jpg&#34; alt=&#34;A hori rap 4 arcade stick figcaption&#34;&gt;&lt;figcaption&gt;I haven&#39;t done a custom stick in years now, and use a Hori Real Arcade Pro 4 first gen. It&#39;s affordable and has good Hori parts. | &lt;small&gt;&lt;a href=&#34;/uploaded/hori-rap4.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/arcade-stick" rel="self" type="text/html"></link>
    <summary type="html">Arcade sticks are pure digital fun</summary>
  </entry>
  <entry>
    <title>Aesthetics</title>
    <updated>2023-03-03T16:22:26Z</updated>
    <id>https://thomasorus.com/aesthetics</id>
    <content type="html">&lt;h1 id=&#34;aesthetics&#34; &gt;Aesthetics&lt;a href=&#34;#aesthetics&#34; aria-label=&#34;Aesthetics permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I&#39;m currently trying to define what my design aesthetics are. This page serves as a reference point that helps me find answers. My ultimate goal would be to create my own design system.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;software&#34; &gt;Software&lt;a href=&#34;#software&#34; aria-label=&#34;Software permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I like minimalist interfaces that work both in light and dark mode.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/aesthetics014.jpg&#34; alt=&#34;Left text editor by 100 rabbits figcaption&#34;&gt;&lt;figcaption&gt;Left text editor by 100 rabbits | &lt;small&gt;&lt;a href=&#34;/uploaded/aesthetics014.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/aesthetics016.jpg&#34; alt=&#34;Ronin image editor by 100 rabbits figcaption&#34;&gt;&lt;figcaption&gt;Ronin image editor by 100 rabbits | &lt;small&gt;&lt;a href=&#34;/uploaded/aesthetics016.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;color-and-visual-language&#34; &gt;Color and visual language&lt;a href=&#34;#color-and-visual-language&#34; aria-label=&#34;Color and visual language permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I like the idea of color and visual language (like icons) having  meaning all over the application. For example in my future program I have these data types:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Text&lt;/li&gt;&#xA;&lt;li&gt;Time&lt;/li&gt;&#xA;&lt;li&gt;Journal&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/aesthetics004.jpg&#34; alt=&#34;Dijo habbit tracker by NerdyPepper figcaption&#34;&gt;&lt;figcaption&gt;Dijo habbit tracker by NerdyPepper | &lt;small&gt;&lt;a href=&#34;/uploaded/aesthetics004.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/aesthetics015.jpg&#34; alt=&#34;Orca music programming tool by 100 rabbits figcaption&#34;&gt;&lt;figcaption&gt;Orca music programming tool by 100 rabbits | &lt;small&gt;&lt;a href=&#34;/uploaded/aesthetics015.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;presentation&#34; &gt;Presentation&lt;a href=&#34;#presentation&#34; aria-label=&#34;Presentation permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;For some reason I like it a lot when the capture subject is part of a grander interface. It gives context and intention, and helps to focus on what&#39;s important at the same time.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/aesthetics009.jpg&#34; alt=&#34;Fortunae finance tool by uonai figcaption&#34;&gt;&lt;figcaption&gt;Fortunae finance tool by uonai | &lt;small&gt;&lt;a href=&#34;/uploaded/aesthetics009.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/aesthetics008.jpg&#34; alt=&#34;The i3 window manager featuring the terminal RSS reader newsboat and the terminal music player MPSYT figcaption&#34;&gt;&lt;figcaption&gt;The i3 window manager featuring the terminal RSS reader newsboat and the terminal music player MPSYT | &lt;small&gt;&lt;a href=&#34;/uploaded/aesthetics008.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/aesthetics006.jpg&#34; alt=&#34;Fortunae finance tool by uonai figcaption&#34;&gt;&lt;figcaption&gt;Fortunae finance tool by uonai | &lt;small&gt;&lt;a href=&#34;/uploaded/aesthetics006.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;displaying-data&#34; &gt;Displaying data&lt;a href=&#34;#displaying-data&#34; aria-label=&#34;Displaying data permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I like the idea of retro computer aesthetics for displaying information instead of color (that I think should be used for visual language). It can be graphs, maps, icons, numbers, text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I&#39;m not really nostalgic of the aesthetic. It&#39;s just more functionnal.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/aesthetics002.jpg&#34; alt=&#34;Ronbun time tracking tool by me figcaption&#34;&gt;&lt;figcaption&gt;Ronbun time tracking tool by me | &lt;small&gt;&lt;a href=&#34;/uploaded/aesthetics002.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/aesthetics005.jpg&#34; alt=&#34;A capture of the Uxn virtual stack machine by 100 rabbits figcaption&#34;&gt;&lt;figcaption&gt;A capture of the Uxn virtual stack machine by 100 rabbits | &lt;small&gt;&lt;a href=&#34;/uploaded/aesthetics005.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/aesthetics003.jpg&#34; alt=&#34;A map figcaption&#34;&gt;&lt;figcaption&gt;A map | &lt;small&gt;&lt;a href=&#34;/uploaded/aesthetics003.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;abstract-animations&#34; &gt;Abstract animations&lt;a href=&#34;#abstract-animations&#34; aria-label=&#34;Abstract animations permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I like abstract animations that give visual identity to the rest of the program. They probably should not appear too much, but could be used in discreet places to make them more interesting (like a footer on a website);&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;video autoplay playsinline loop mute preload=&#34;metadata&#34; src=&#34;/uploaded/img/aesthetics010.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;/video&gt;&lt;figcaption&gt;Art by &lt;a href=&#34;https://twitter.com/lvl374&#34;&gt;lvl374&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&lt;video autoplay playsinline loop mute preload=&#34;metadata&#34; src=&#34;/uploaded/img/aesthetics012.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;/video&gt;&lt;figcaption&gt;Art by &lt;a href=&#34;https://twitter.com/lvl374&#34;&gt;lvl374&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;illustration&#34; &gt;Illustration&lt;a href=&#34;#illustration&#34; aria-label=&#34;Illustration permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I like a lot of illustrations styles but the one I feel works well for the web uses flat colors and lines. But I don&#39;t like the trend of vector illustration as a way to infantilize people like. They have to be eerie, complex and capture the intention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The added bonus: it&#39;s possible to animate them when they are in SVG, making the website more alive.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/aesthetics001.jpg&#34; alt=&#34;Art by @jellyflavor on twitter figcaption&#34;&gt;&lt;figcaption&gt;Art by @jellyflavor on twitter | &lt;small&gt;&lt;a href=&#34;/uploaded/aesthetics001.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/aesthetics007.jpg&#34; alt=&#34;Art by @jellyflavor on twitter figcaption&#34;&gt;&lt;figcaption&gt;Art by @jellyflavor on twitter | &lt;small&gt;&lt;a href=&#34;/uploaded/aesthetics007.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&lt;video autoplay playsinline loop mute preload=&#34;metadata&#34; src=&#34;/uploaded/img/aesthetics011.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;/video&gt;&lt;figcaption&gt;Art by &lt;a href=&#34;https://twitter.com/Gaako_illust&#34;&gt;Gaako_illust&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;objects&#34; &gt;Objects&lt;a href=&#34;#objects&#34; aria-label=&#34;Objects permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I like objects two ways:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Either they are minimalist and self explanoratory&lt;/li&gt;&#xA;&lt;li&gt;Or they are are complex and don&#39;t hide their complexity&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In both situation, I like that they are analogic. No touch screen for example, I prefer real buttons.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/aesthetics017.jpg&#34; alt=&#34;Radio by Dieter Rams figcaption&#34;&gt;&lt;figcaption&gt;Radio by Dieter Rams | &lt;small&gt;&lt;a href=&#34;/uploaded/aesthetics017.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/aesthetics018.jpg&#34; alt=&#34;Pocket operator music instrument figcaption&#34;&gt;&lt;figcaption&gt;Pocket Operator music instrument | &lt;small&gt;&lt;a href=&#34;/uploaded/aesthetics018.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/aesthetics" rel="self" type="text/html"></link>
    <summary type="html">A growing collection of images</summary>
  </entry>
  <entry>
    <title>Giveaway</title>
    <updated>2023-03-03T16:22:26Z</updated>
    <id>https://thomasorus.com/giveaway</id>
    <content type="html">&lt;h1 id=&#34;giveaway-list&#34; &gt;Giveaway list&lt;a href=&#34;#giveaway-list&#34; aria-label=&#34;Giveaway list permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;On this page are unused objects that I want to give away for free to members of the Merveilles community that may need them. My goal is to empower our members with tools so they can achieve a greater life, improve their artistic projects, or just have fun. I prioritize people in financial difficulty or in minority groups (POC, LGBTQA+, etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If one of those objects interested you, contact me on Merveilles. Shipping fees are on you, and I can send them to any part of the world (I&#39;m in Europe).&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;audigy-internal-soundcard&#34; &gt;Audigy internal soundcard&lt;a href=&#34;#audigy-internal-soundcard&#34; aria-label=&#34;Audigy internal soundcard permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I don&#39;t remember when I got this. It&#39;s Create Audigy sound card that is at least 10 years old. It has multiple ports, needs to be plugged to a PCI port. Not tested, so no guarantee it works perfectly.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/audigy1.jpg&#34; alt=&#34;Audigy card&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/audigy1.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/audigy2.jpg&#34; alt=&#34;Audigy card&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/audigy2.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;cheap-diy-ps2-arcade-stick&#34; &gt;Cheap DIY PS2 arcade stick&lt;a href=&#34;#cheap-diy-ps2-arcade-stick&#34; aria-label=&#34;Cheap DIY PS2 arcade stick permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;An arcade stick made of a cheap but sturdy plastic case. The parts are Sanwa and a bit worn out, but still work. It&#39;s compatible with Playstation 2 through a hackpad. Can be plugged to a computer using an adapter (see below) but remains a bit complicated to configure. It&#39;s probably better to buy a cheap board on ali-express and put it in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: if you are not interested in the case but want the part that&#39;s OK, I have some leftovers too.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/give-stick1.jpg&#34; alt=&#34;Cheap DIY PS2 arcade stick top&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/give-stick1.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/give-stick2.jpg&#34; alt=&#34;Cheap DIY PS2 arcade stick insides&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/give-stick2.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;telex-broadcast-xlr-helmet&#34; &gt;Telex broadcast XLR helmet&lt;a href=&#34;#telex-broadcast-xlr-helmet&#34; aria-label=&#34;Telex broadcast XLR helmet permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A vintage XLR Telex helmet. Super sturdy, gives you the look of an helicopter pilot. Has a nice sound but may need proper rewiring or customization.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/helicopter-helmet.jpg&#34; alt=&#34;Telex broadcast XLR helmet&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/helicopter-helmet.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;macbook-pro-13-inches-2013&#34; &gt;Macbook Pro 13 inches 2013&lt;a href=&#34;#macbook-pro-13-inches-2013&#34; aria-label=&#34;Macbook Pro 13 inches 2013 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A second hand Macbook Pro from 2013. It has an i5, 8gigs of ram and an SSD of 256gigabytes. The screen is still sharp, but suffers from a default of conception where air bubbles came between the glass and the LCD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s a bit on the slow side on the last MacOS version, so I suggest using an older version, or installing linux on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Comes with the magsafe charger and a plastic transparent protection. I can install a distribution on it if you have a sloppy internet connection or lack USB keys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please consider people in dire need of a computer before asking for this one.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/mbpro.jpg&#34; alt=&#34;Macbook Pro 13 inches 2013&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/mbpro.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;raspberry-pi-model-b-with-cables&#34; &gt;Raspberry Pi model B with cables&lt;a href=&#34;#raspberry-pi-model-b-with-cables&#34; aria-label=&#34;Raspberry Pi model B with cables permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This is a Raspberry Pi model B with a set of cables and a case. Cables included are DVI, jack to RCA, a charger with a button switch, a micro-usb to usb adapter and an SD card to SD mini adapter. Not SD card provided.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/pi2-1.jpg&#34; alt=&#34;Raspberry Pi model B with cables&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/pi2-1.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/pi2-2.jpg&#34; alt=&#34;Raspberry Pi model B with cables&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/pi2-2.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;ps2-adapter&#34; &gt;Ps2 adapter&lt;a href=&#34;#ps2-adapter&#34; aria-label=&#34;Ps2 adapter permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A simple Playstation 2 to USB adapter.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/ps2.jpg&#34; alt=&#34;Ps2 adapter&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/ps2.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;64-gigabytes-ssd&#34; &gt;64 gigabytes SSD&lt;a href=&#34;#64-gigabytes-ssd&#34; aria-label=&#34;64 gigabytes SSD permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A small SSD from when it was super expensive.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/ssd64.jpg&#34; alt=&#34;64 gigabytes SSD&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/ssd64.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;xbox-360-pad&#34; &gt;Xbox 360 pad&lt;a href=&#34;#xbox-360-pad&#34; aria-label=&#34;Xbox 360 pad permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;For games!&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/xbox360.jpg&#34; alt=&#34;Xbox 360 pad&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/xbox360.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/giveaway" rel="self" type="text/html"></link>
    <summary type="html">A list of objects I give away for free to some people</summary>
  </entry>
  <entry>
    <title>Art journey</title>
    <updated>2023-10-31T09:08:58Z</updated>
    <id>https://thomasorus.com/art-journey</id>
    <content type="html">&lt;h1 id=&#34;art-journey&#34; &gt;Art journey&lt;a href=&#34;#art-journey&#34; aria-label=&#34;Art journey permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This page is a personal summary up my art journey, written to help me reconnect with my roots by listing my influences as well as some of my projects.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;part-1-initial-inspirations&#34; &gt;Part 1: Initial inspirations&lt;a href=&#34;#part-1-initial-inspirations&#34; aria-label=&#34;Part 1: Initial inspirations permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I grew up in a 3000 souls town dedicated to copper craftsmanship. There was no museum and I was almost never exposed to something else that classical art. My family was upper middle class, my parents did minimal studies. My father didn&#39;t have a lot of interest in art, unlike my mother who in her teens wanted to go to an art school (and mocked for it) and by the end of her career became an art seller. She is the one who inspired my siblings and I to pursue our art hobbies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to my parents I was an impatient and perfectionist kid, who could not stomach making something that did not worked on the first try, and consequently, was giving up fast. All the drawings prior to my teenage years had to be thrown away in an emergency moving, so I have no traces or memories of what I was doing before this period.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what I remember was that both my parents loved movies (we had a ton of cassette tapes) and music, and that they had a nice collection of vinyls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s through the covers of their albums that I had some of the earliest visual shocks, mostly from covers of Pink Floyd and Supertramp.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/supertramp-cover.jpg&#34; alt=&#34;The cover of Supertramp album Crime of the Century. In space, two hands are holding prison bars as if they wanted to escape. figcaption&#34;&gt;&lt;figcaption&gt;This cover of Supertramp&#39;s album &#34;Crime of the Century&#34; by Paul Wakefield had a profound effect on me when I was a kid. I still love listening to this album. | &lt;small&gt;&lt;a href=&#34;/uploaded/supertramp-cover.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/wish.jpg&#34; alt=&#34;Two people in suits, one of them set on fire, are shaking hands. figcaption&#34;&gt;&lt;figcaption&gt;Pink Floyd&#39;s &#34;Wish You Were Here&#34; album cover created by Storm Elvin Thorgerson. | &lt;small&gt;&lt;a href=&#34;/uploaded/wish.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/lapse.jpg&#34; alt=&#34;On the beach, a multitude of steal frame beds are disposed, going as far as the horizon. A man sits on one of them, lost in thought. figcaption&#34;&gt;&lt;figcaption&gt;Pink Floyd&#39;s &#34;A Momentary Lapse of Reason&#34; album cover created by Storm Elvin Thorgerson. | &lt;small&gt;&lt;a href=&#34;/uploaded/lapse.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/division-bell.jpg&#34; alt=&#34;Two giant metallic profiles face each others in a field. Between their mouths we can see lights, and what seems to be a church or castle. figcaption&#34;&gt;&lt;figcaption&gt;Pink Floyd&#39;s &#34;The Division Bell&#34; album cover created by Storm Elvin Thorgerson. | &lt;small&gt;&lt;a href=&#34;/uploaded/division-bell.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I was also a big reader, mostly children novels (one of my favorites was &#34;Historia de una gaviota y del gato que le enseñó a volar&#34; by Luis Sepulveda), then gravitated towards science fiction, comics and mangas. I read a lot of the kid&#39;s French/Belgian classics, but among them my favorite was Gaston Lagaffe. Growing up I also remember enjoying Hugo Pratt&#39;s Corto Maltese for its black and white pages, which wasn&#39;t common as most European comics were in color.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/gaston.png&#34; alt=&#34;Gaston is sleeping into a shelter entirely made of books. His colleagues, who were searching him to scold him, look moved by the mood of this magical place. figcaption&#34;&gt;&lt;figcaption&gt;Franquin&#39;s Gaton Lagaffe was a comic depicting the life of Gaston, a terrible employee that never did his work and instead preferred inventing things, sleep, and care about his cat and seagull. The whole series mocks the absurdity of office jobs and adult life. This panel is one of the most memorable of the whole series. | &lt;small&gt;&lt;a href=&#34;/uploaded/gaston.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/corto.jpg&#34; alt=&#34;The sailor Corto Maltese reading in a sofa. In the background, palms and arches suggest a Caribbean location. figcaption&#34;&gt;&lt;figcaption&gt;Hugo Pratt&#39;s Corto Maltese series impressed me with its black and white renditions. | &lt;small&gt;&lt;a href=&#34;/uploaded/corto.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I was also reading science fiction and fantasy, and among all of them, Tolkien&#39;s Silmarilion and Frank Herbert&#39;s Dune were easily the most influential and forged my interest for gigantic sagas, immortal beings, epic story-lines, and cycles of destruction. As an added bonus, the covers of the French edition of Dune were paintings by Wojtek Siudmak and harbored a visual language I had never seen before.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/siudmak1.jpg&#34; alt=&#34;A surealist painting showing a kind of round mausoleum roof. It&#39;s sides are human faces. It is suspended on horse legs. It&#39;s front part is open and dark and inside, a fire colored body walks on giant lips. In the front bottom part, spiral staircase give access to the mausoleum to a golden draped figure. In the background, moon crashed on the ground. figcaption&#34;&gt;&lt;figcaption&gt;A Wojtek Siudmak painting. Siudmak qualifies his style as fantastic hyper-realism. | &lt;small&gt;&lt;a href=&#34;/uploaded/siudmak1.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/siudmak2.jpg&#34; alt=&#34;A woman is floating in the air in a curled up position. She has a long piece of fabric stuck around her legs, that barely hides what looks like a bicycle wheel that does not touch her directly, but seems to transport her. figcaption&#34;&gt;&lt;figcaption&gt;A Wojtek Siudmak painting. Siudmak was well known in France in the eighties and nineties for his covers of the Folio SF pocket editions. | &lt;small&gt;&lt;a href=&#34;/uploaded/siudmak2.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;In the mid nineties mangas started to get bigger editors and distributors, and like a lot of kids of my generation, I grew up with Dragon Ball, but also Gunnm and Akira.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/gally.jpg&#34; alt=&#34;Gally, a cyborg women, represented in her different bodies, from childhood to adulthood. figcaption&#34;&gt;&lt;figcaption&gt;Yukito Kishiro&#39;s Gunnm was an exploration of the concept humanity at the age of cyborgs through its main character Gally, who changed bodies at different moments of her life. The physicality of Gally was also a huge influence on me. | &lt;small&gt;&lt;a href=&#34;/uploaded/gally.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/akira.jpg&#34; alt=&#34;A gigantic and dark explosion that looks like a black hole is engulfing a megalopolis, completely destroying it. figcaption&#34;&gt;&lt;figcaption&gt;Katsuhiro Ōtomo&#39;s Akira, one of the most influential and visually impressive comics ever draw. The animated movie animation is also a masterpiece. | &lt;small&gt;&lt;a href=&#34;/uploaded/akira.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Around 2000, new and more obscure series started to appear, and among them I discovered BLAME!, which still remains the biggest artistic shock of my life.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/blame-1.jpg&#34; alt=&#34;A giant face is incrusted in a giant building, several pipes connecting it to the structure. In front of it, two robot knights guards. figcaption&#34;&gt;&lt;figcaption&gt;Tsutomu Nihei&#39;s BLAME! manga. | &lt;small&gt;&lt;a href=&#34;/uploaded/blame-1.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/blame-2.jpg&#34; alt=&#34;figcaption&#34;&gt;&lt;figcaption&gt;Tsutomu Nihei&#39;s BLAME! manga. | &lt;small&gt;&lt;a href=&#34;/uploaded/blame-2.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/blame-3.jpg&#34; alt=&#34;figcaption&#34;&gt;&lt;figcaption&gt;Tsutomu Nihei&#39;s BLAME! manga. | &lt;small&gt;&lt;a href=&#34;/uploaded/blame-3.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;It&#39;s obvious in retrospective how BLAME! united several things I already enjoyed into a package made for me. It&#39;s a manga ; in black and white ; a science fiction story lasting thousands of years ; it tackles with immortality, a topic that fascinates me ; its landscapes are both realistic and surrealist in the painterly sense ; its creatures are fantastic and gross ; its graphic style is rough ; and most of all, it&#39;s contemplative, silent, melancholic, and Sublime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All those influences were not really conscious at the time. I wasn&#39;t able of analyzing and identify what I actually liked about them from an artistic point. I had zero education around art, nor critical thinking. All I knew was that I enjoyed all that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a teenager, outside of uninspired doodles copying what I liked and done during math classes, there was nothing of notice to remember. I was starting to do some world building in my head, but could not get the reflex to actually dedicate time to it, too occupied to play video games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Art was always an afterthought, a dreamy escape from the annoyance of high school life in the pre-smartphone era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That changed a year later, after I graduated from high school.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/art-journey" rel="self" type="text/html"></link>
    <summary type="html">My influences and how they shaped my art journey</summary>
  </entry>
  <entry>
    <title>Kaku</title>
    <updated>2025-08-17T14:57:51+02:00</updated>
    <id>https://thomasorus.com/kaku</id>
    <content type="html">&lt;h1 id=&#34;kaku&#34; &gt;Kaku 書く&lt;a href=&#34;#kaku&#34; aria-label=&#34;Kaku 書く permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Kaku 書く (write) is my own markup language. It&#39;s inspired by Markdown with a few modification for quotes, links, images and lists handling. It was created to fit my needs and is currently used on this website.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;purpose-and-mission&#34; &gt;Purpose and mission&lt;a href=&#34;#purpose-and-mission&#34; aria-label=&#34;Purpose and mission permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Kaku was created as a replacement for Markdown in my own projects. There are two main reasons for its creation:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;I don&#39;t like some syntax choices of Markdown, for example the use of of square brackets both for images and links.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Markdown does not allow using some HTML tags like &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;video&gt;&lt;/code&gt;, &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;audio&gt;&lt;/code&gt; or &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;dl&gt;&lt;/code&gt;.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;h2 id=&#34;syntax&#34; &gt;Syntax&lt;a href=&#34;#syntax&#34; aria-label=&#34;Syntax permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;h3 id=&#34;typography&#34; &gt;Typography&lt;a href=&#34;#typography&#34; aria-label=&#34;Typography permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;h4 id=&#34;title-1&#34; &gt;Title 1&lt;a href=&#34;#title-1&#34; aria-label=&#34;Title 1 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h4&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# Title&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h1&gt;Title&lt;span&gt;&lt;&lt;/span&gt;/h1&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h1 id=&#34;title&#34; &gt;Title&lt;a href=&#34;#title&#34; aria-label=&#34;Title permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;h4 id=&#34;title-2&#34; &gt;Title 2&lt;a href=&#34;#title-2&#34; aria-label=&#34;Title 2 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h4&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;## Title 2&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h2&gt;Title 2&lt;span&gt;&lt;&lt;/span&gt;/h2&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2 id=&#34;title-2&#34; &gt;Title 2&lt;a href=&#34;#title-2&#34; aria-label=&#34;Title 2 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Same for titles 3 to 6...&lt;/p&gt;&#xA;&#xA;&lt;h4 id=&#34;bold&#34; &gt;Bold&lt;a href=&#34;#bold&#34; aria-label=&#34;Bold permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h4&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;*bold*&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;strong&gt;bold&lt;span&gt;&lt;&lt;/span&gt;/strong&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;br&gt;&#xA;&lt;strong&gt;bold&lt;/strong&gt;&#xA;&#xA;&lt;h4 id=&#34;emphasis&#34; &gt;Emphasis&lt;a href=&#34;#emphasis&#34; aria-label=&#34;Emphasis permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h4&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;_emphasis_&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;em&gt;emphasis&lt;span&gt;&lt;&lt;/span&gt;/em&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;br&gt;&#xA;&lt;em&gt;emphasis&lt;/em&gt;&#xA;&#xA;&lt;h4 id=&#34;code&#34; &gt;Code&lt;a href=&#34;#code&#34; aria-label=&#34;Code permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h4&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;`code`&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;code&gt;code&lt;span&gt;&lt;&lt;/span&gt;/code&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;br&gt;&#xA;&lt;code&gt;code&lt;/code&gt;&#xA;&#xA;&lt;h4 id=&#34;code-block&#34; &gt;Code Block&lt;a href=&#34;#code-block&#34; aria-label=&#34;Code Block permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h4&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;code block&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;pre&gt;&#xD;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;code&gt;code block&lt;span&gt;&lt;&lt;/span&gt;/code&gt;&#xD;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/pre&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;code block&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h4 id=&#34;strike-through&#34; &gt;Strike through&lt;a href=&#34;#strike-through&#34; aria-label=&#34;Strike through permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h4&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;~strike~&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;del&gt;strike&lt;span&gt;&lt;&lt;/span&gt;/del&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;br&gt;&#xA;&lt;del&gt;strike&lt;/del&gt;&#xA;&#xA;&lt;h3 id=&#34;quotes&#34; &gt;Quotes&lt;a href=&#34;#quotes&#34; aria-label=&#34;Quotes permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Quotes can take up to 4 arguments:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;The quote itself&#xD;&lt;/li&gt;&#xA;&lt;li&gt;The author&#xD;&lt;/li&gt;&#xA;&lt;li&gt;The source of the quote&#xD;&lt;/li&gt;&#xA;&lt;li&gt;The url of the quote&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(quote: I am the quoted text! author: Author of quote source: Source of quote link: url_of_quote)&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;figure&gt;&#xD;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;blockquote cite=&#34;url_of_quote&#34;&gt;&#xD;&#xA;        I am the quoted text! &#xD;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;/blockquote&gt;&#xD;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;figcaption&gt;—Author of quote, &lt;span&gt;&lt;&lt;/span&gt;a href=&#34;url_of_quote&#34;&gt; Source of quote&lt;span&gt;&lt;&lt;/span&gt;/a&gt;&lt;span&gt;&lt;&lt;/span&gt;/figcaption&gt;&#xD;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/figure&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;url_of_quote&#34;&gt;I am the quoted text!&lt;/blockquote&gt;&lt;figcaption&gt;— Author of quote, &lt;a href=&#34;url_of_quote&#34;&gt;Source of quote&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h3 id=&#34;links&#34; &gt;Links&lt;a href=&#34;#links&#34; aria-label=&#34;Links permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Links can take up to 3 arguments:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;The link url&#xD;&lt;/li&gt;&#xA;&lt;li&gt;The text of the link&#xD;&lt;/li&gt;&#xA;&lt;li&gt;The text for the accessibility label (optional)&#xD;&lt;/li&gt;&#xA;&lt;li&gt;The text for the title (optional)&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(link: https://thomasorus.com text: My link text label: My label title: My title)&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;a href=&#34;https://thomasorus.com&#34; aria-label=&#34;My label&#34; title=&#34;My title&#34;&gt;&#xD;&#xA;My link text&#xD;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/a&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;br&gt;&#xA;&lt;a href=&#34;https://thomasorus.com&#34; title=&#34;My title&#34; aria-label=&#34;My label&#34;&gt;My link text&lt;/a&gt;&#xA;&#xA;&lt;h3 id=&#34;images&#34; &gt;Images&lt;a href=&#34;#images&#34; aria-label=&#34;Images permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Images can take up to 3 arguments:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;The image name or url&#xD;&lt;/li&gt;&#xA;&lt;li&gt;The image alt text for accessibility&#xD;&lt;/li&gt;&#xA;&lt;li&gt;The image caption (optionnal, will create a figure and figcaption)&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Image with alt text : (&lt;code&gt;image: img_url, alt: the alternate text&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(image: sailor.jpeg alt: the alternate text)&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/sailor.jpg&#34; alt=&#34;the alternate text&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/sailor.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Image with caption :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(image: sailor.jpeg alt: the alternate text figcaption: the text under the image)&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;figure&gt;&#xD;&#xA;     &lt;span&gt;&lt;&lt;/span&gt;img src=&#34;/sailor.jpeg alt=&#34;the alternate text&#34;&gt;&#xD;&#xA;     &lt;span&gt;&lt;&lt;/span&gt;figcaption&gt;the text under the image&lt;span&gt;&lt;&lt;/span&gt;/figcaption&gt;&#xD;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/figure&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/sailor.jpg&#34; alt=&#34;the alternate text figcaption&#34;&gt;&lt;figcaption&gt;the text under the image | &lt;small&gt;&lt;a href=&#34;/uploaded/sailor.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h3 id=&#34;bullet-lists&#34; &gt;Bullet lists&lt;a href=&#34;#bullet-lists&#34; aria-label=&#34;Bullet lists permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;- AAA&#xD;&#xA;- BBB&#xD;&#xA;- CCC&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;ul&gt;&#xD;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;li&gt;AAA&lt;span&gt;&lt;&lt;/span&gt;/li&gt;&#xD;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;li&gt;BBB&lt;span&gt;&lt;&lt;/span&gt;/li&gt;&#xD;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;li&gt;CCC&lt;span&gt;&lt;&lt;/span&gt;/li&gt;&#xD;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/ul&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;AAA&#xD;&lt;/li&gt;&#xA;&lt;li&gt;BBB&#xD;&lt;/li&gt;&#xA;&lt;li&gt;CCC&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;ordered-lists&#34; &gt;Ordered lists&lt;a href=&#34;#ordered-lists&#34; aria-label=&#34;Ordered lists permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;+ Number 1&#xD;&#xA;+ Number 1&#xD;&#xA;+ Number 1&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;ol&gt;&#xD;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;li&gt;Number 1&lt;span&gt;&lt;&lt;/span&gt;/li&gt;&#xD;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;li&gt;Number 2&lt;span&gt;&lt;&lt;/span&gt;/li&gt;&#xD;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;li&gt;Number 3&lt;span&gt;&lt;&lt;/span&gt;/li&gt;&#xD;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/ol&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Number 1&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Number 1&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Number 1&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;h3 id=&#34;descriptive-lists&#34; &gt;Descriptive lists&lt;a href=&#34;#descriptive-lists&#34; aria-label=&#34;Descriptive lists permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;? Term 1 : definition 1&#xD;&#xA;? Term 2 : definition 2&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;dl&gt;&#xD;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;dt&gt;Term 1&lt;span&gt;&lt;&lt;/span&gt;/dt&gt;&#xD;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;dd&gt;definition 1&lt;span&gt;&lt;&lt;/span&gt;/dd&gt;&#xD;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;dt&gt;Term 2&lt;span&gt;&lt;&lt;/span&gt;/dt&gt;&#xD;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;dd&gt;definition 2&lt;span&gt;&lt;&lt;/span&gt;/dd&gt;&#xD;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/dl&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Term 1&lt;/dt&gt;&lt;dd&gt;definition 1&#xD;&lt;/dd&gt;&lt;dt&gt;Term 2&lt;/dt&gt;&lt;dd&gt;definition 2&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h3 id=&#34;hr&#34; &gt;HR&lt;a href=&#34;#hr&#34; aria-label=&#34;HR permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;----&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;hr&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3 id=&#34;videos-and-audios&#34; &gt;Videos and audios&lt;a href=&#34;#videos-and-audios&#34; aria-label=&#34;Videos and audios permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Videos can take up to 2 arguments:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;The video name or url (mp3 only for audio)&#xD;&lt;/li&gt;&#xA;&lt;li&gt;If a video you can add a &lt;code&gt;autoplay&lt;/code&gt; parameter to use the video as a gif&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Classic video:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(video: sailor-arcade.mp4 figcaption: My figcaption)&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;video controls=&#34;&#34; preload=&#34;metadata&#34; src=&#34;sailor-arcade.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;span&gt;&lt;&lt;/span&gt;/video&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;figure&gt;&lt;video controls playsinline preload=&#34;metadata&#34; src=&#34;/uploaded/sailor-arcade.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;/video&gt;&lt;figcaption&gt;My figcaption&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Video as gif:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(video: sailor-arcade.mp4 autoplay figcaption: My figcaption)&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;video autoplay=&#34;true&#34; playsinline=&#34;true&#34; loop=&#34;true&#34; mute=&#34;true&#34; preload=&#34;metadata&#34; src=&#34;sailor-arcade.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;span&gt;&lt;&lt;/span&gt;/video&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;figure&gt;&lt;video autoplay playsinline loop mute preload=&#34;metadata&#34; src=&#34;/uploaded/sailor-arcade.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;/video&gt;&lt;figcaption&gt;My figcaption&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Audio:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(audio: audioUrl)&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;audio controls=&#34;&#34; preload=&#34;metadata&#34; src=&#34;audioUrl&#34; type=&#34;audio/mpeg&#34;&gt;&lt;span&gt;&lt;&lt;/span&gt;/audio&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;figure&gt;&lt;audio controls src=&#34;/uploaded/elise.mp3&#34; type=&#34;audio/mpeg&#34; preload=&#34;metadata&#34;&gt;&lt;/audio&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Note: all audio and video elements come with the &lt;code&gt;preload=&#34;metadata&#34;&lt;/code&gt; attribute to help slower connections.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;side-note&#34; &gt;Side note&lt;a href=&#34;#side-note&#34; aria-label=&#34;Side note permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;{ Some text }&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;aside&gt;&#xD;&#xA;&lt;span&gt;&lt;&lt;/span&gt;p&gt;Side note&lt;span&gt;&lt;&lt;/span&gt;/p&gt;&#xD;&#xA;Some text&#xD;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/aside&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt; Some text &lt;/aside&gt;&#xA;&#xA;&lt;h3 id=&#34;details-summary&#34; &gt;Details / Summary&lt;a href=&#34;#details-summary&#34; aria-label=&#34;Details / Summary permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(details: This is the main text summary: This is the summary)&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;details&gt;&#xD;&#xA;&lt;span&gt;&lt;&lt;/span&gt;summary&gt;This is the summary&lt;span&gt;&lt;&lt;/span&gt;/summary&gt; &#xD;&#xA;This is the main text&#xD;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/details&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;details&gt;&lt;summary&gt;This is the summary&lt;/summary&gt; This is the main text &lt;/details&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/kaku" rel="self" type="text/html"></link>
    <summary type="html">Kaku is a markup language made to fit my needs.</summary>
  </entry>
  <entry>
    <title>Ronbun</title>
    <updated>2022-03-13T19:07:40Z</updated>
    <id>https://thomasorus.com/ronbun</id>
    <content type="html">&lt;h1 id=&#34;ronbun&#34; &gt;Ronbun 論文&lt;a href=&#34;#ronbun&#34; aria-label=&#34;Ronbun 論文 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Ronbun (&lt;em&gt;paper&lt;/em&gt;) is my &lt;strong&gt;static site generator&lt;/strong&gt;. It&#39;s built with nodejs and uses &lt;a href=&#34;/kaku.html&#34;&gt;Kaku&lt;/a&gt; as a markup language and imagemagick on the server to process images. It also process time tracking and presents it&lt;a href=&#34;time.html&#34;&gt;as graphics&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ronbun uses a single file as a source of content and a text file for time recordings. It parses files and generates HTML using a template. Ronbun and the &lt;a href=&#34;kaku.html&#34;&gt;Kaku&lt;/a&gt; parser try as much as possible to provide light and accessible pages by using &lt;a href=&#34;html-tips.html&#34;&gt;standard HTML techniques&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ronbun was created as a self discovery project following my &lt;a href=&#34;tools.html&#34;&gt;philosophy&lt;/a&gt; about personal projects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ronbun&#39;s repo is on &lt;a href=&#34;https://github.com/Thomasorus/Ronbun&#34;&gt;github&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next features:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Add sitemap&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Global goals:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Provide more stats on the tracker&lt;/li&gt;&#xA;&lt;li&gt;Full rewrite in a more generally available language (C, Python...)&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/ronbun" rel="self" type="text/html"></link>
    <summary type="html">Ronbun is my static site generator and time tracking system</summary>
  </entry>
  <entry>
    <title>Moyo</title>
    <updated>2025-09-01T22:04:48+02:00</updated>
    <id>https://thomasorus.com/moyo</id>
    <content type="html">&lt;p&gt;# Moyō 模様&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moyō 模様 (pattern) is a collection of patterns in CSS I use for my website. Most of them were created as the months passed and I tweaked them for my &lt;a href=&#34;time.html&#34;&gt;time tracker&lt;/a&gt; tool.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moyo comes as a single SVG file containing all the patterns. If you are not familiar with SVG, an SVG file can use a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;defs&gt;&lt;/code&gt; tag to store graphical objects that you will use later. Each pattern is defined inside the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;pattern&gt;&lt;/code&gt; tag and each one has an id attribute. Those ids can then be used inside other SVGs.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;how-to-use&#34; &gt;How to use&lt;a href=&#34;#how-to-use&#34; aria-label=&#34;How to use permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Copy paste the &lt;a href=&#34;https://raw.githubusercontent.com/Thomasorus/Moyo/main/dist/moyo.svg&#34;&gt;content&lt;/a&gt; of this file inside your template and use the desired pattern.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&#xD;&#xA;&amp;nbsp;&lt;span&gt;&lt;&lt;/span&gt;rect style=&#34;fill: url(#checks);&#34; height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;span&gt;&lt;&lt;/span&gt;/rect&gt;&#xD;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/svg&gt;&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Colors are automatically defined by two CSS rules: the color value of the text (aka &lt;code&gt;currentColor&lt;/code&gt;) and the background value on the div containing them (if none, the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;body&gt;&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two patterns (&lt;code&gt;seigaiha&lt;/code&gt; and &lt;code&gt;yinyang&lt;/code&gt;) default to a white background, which can be changed by using a css custom property.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#seigaiha, #yinyang {&#xD;&#xA;    --background: red;&#xD;&#xA;}&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2 id=&#34;demo&#34; &gt;Demo&lt;a href=&#34;#demo&#34; aria-label=&#34;Demo permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;div class=&#34;svg-demo&#34;&gt;&#xA;&lt;div&gt;&lt;em&gt;#checks&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#checks);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#checks-diagonal&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#checks-diagonal);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#grid&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#grid);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#grid-medium&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#grid-medium);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#cross-dots&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#cross-dots);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#vertical-lines&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#vertical-lines);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#horizontal-lines&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#horizontal-lines);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#diagonal-lines-left&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#diagonal-lines-left);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#diagonal-lines-right&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#diagonal-lines-right);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#vertical-stripes&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#vertical-stripes);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#horizontal-stripes&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#horizontal-stripes);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#diagonal-stripes-left&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#diagonal-stripes-left);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#diagonal-stripes-right&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#diagonal-stripes-right);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#double-diagonal-stripes&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#double-diagonal-stripes);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#zig-zag&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#zig-zag);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#zig-zag-3d&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#zig-zag-3d);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#triangles&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#triangles);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#quarter-circles&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#quarter-circles);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#seigaiha&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#seigaiha);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#wave&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#wave);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#yinyang&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#yinyang);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#circles-small&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#circles-small);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#circles-medium&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#circles-medium);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#circles-large&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#circles-large);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#stars&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#stars);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#squares&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#squares);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#paper&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#paper);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;#cubes&lt;/em&gt;&lt;svg height=&#34;100&#34; width=&#34;100&#34;&gt;&lt;rect style=&#34;fill: url(#cubes);&#34; height=&#34;100%&#34; width=&#34;100%&#34;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/moyo" rel="self" type="text/html"></link>
    <summary type="html">Moyō 模様 (pattern) is a collection of patterns in CSS I use for my websites.</summary>
  </entry>
  <entry>
    <title>Ryuko</title>
    <updated>2024-10-20T17:09:59Z</updated>
    <id>https://thomasorus.com/ryuko</id>
    <content type="html">&lt;h1 id=&#34;ry-k&#34; &gt;Ryūkō 流行&lt;a href=&#34;#ry-k&#34; aria-label=&#34;Ryūkō 流行 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Ryūkō is my design system, currently powering this website. It was created as a way to organize and reuse design elements.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/ryuko" rel="self" type="text/html"></link>
    <summary type="html">The design system powering this website</summary>
  </entry>
  <entry>
    <title>Design tokens</title>
    <updated>2024-11-19T14:26:18Z</updated>
    <id>https://thomasorus.com/design-tokens</id>
    <content type="html">&lt;h1 id=&#34;design-tokens&#34; &gt;Design tokens&lt;a href=&#34;#design-tokens&#34; aria-label=&#34;Design tokens permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Design tokens are single units of design reusable in several parts of the website. They can be spaces, font sizes, lines, colors, font families. Basically, if it can&#39;t be divided into a smaller unit, it&#39;s probably a design token.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;fonts&#34; &gt;Fonts&lt;a href=&#34;#fonts&#34; aria-label=&#34;Fonts permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;div&gt;&#xA;&lt;p style=&#34;font-family: &#39;Editorial New Regular&#39;; font-size:20px;&#34;&gt;Editorial New Regular is for titles.&lt;/p&gt;&#xA;&lt;p style=&#34;font-family: &#39;Inter var&#39;;&#34;&gt;Inter is the default font for most texts.&lt;/p&gt;&#xA;&lt;p style=&#34;font-family: &#39;IBM Plex Mono&#39;;&#34;&gt;IBM Plex Mono is for code blocks.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;spacings&#34; &gt;Spacings&lt;a href=&#34;#spacings&#34; aria-label=&#34;Spacings permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Spacings are used to determine space between elements. They can be used both in CSS margins and paddings.&lt;/p&gt;&#xA;&#xA;&lt;div style=&#34;padding:var(--margin-l); border:1px solid black;&#34;&gt;&#xA;&lt;p&gt;This is a large margin/padding&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div style=&#34;padding:var(--margin-s); border:1px solid black;&#34;&gt;&#xA;&lt;p&gt;This is a small margin/padding&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;animations&#34; &gt;Animations&lt;a href=&#34;#animations&#34; aria-label=&#34;Animations permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Animations are used either to convey information or for styling reasons.&lt;/p&gt;&#xA;&#xA;&lt;p class=&#34;glitch-text&#34; style=&#34;text-transform: uppercase; font-size: 20px; whitespace:nowrap;&#34; data-text=&#34;Glitch effect&#34;&gt;Glitch effect&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The glitch effect is used on the website title. Its goal is to provide a feeling of strangeness and discomfort that contrasts with the slick design of the website.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;border-radius&#34; &gt;Border Radius&lt;a href=&#34;#border-radius&#34; aria-label=&#34;Border Radius permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Two styles of rounded corners, used mainly on buttons and forms.&lt;/p&gt;&#xA;&#xA;&lt;div&gt;&#xA;&lt;span style=&#34;border-radius: var(--radius-sm); padding:10px; margin:10px; border:1px solid;&#34;&gt;Radius small&lt;/span&gt;&#xA;&lt;span style=&#34;border-radius: var(--radius-md); padding:10px; margin:10px; border:1px solid;&#34;&gt;Radius medium&lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;colors&#34; &gt;Colors&lt;a href=&#34;#colors&#34; aria-label=&#34;Colors permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Colors are used for specific content of pages in correlation with black and white. They are balanced using &lt;a href=&#34;https://accessiblepalette.com/?lightness=97,93,85,79,63,54,48,32,14,8&amp;db3000=0,-8&amp;ffd500=0,-6&amp;86d5a9=0,0&amp;4b3bde=0,0&amp;ffadc9=0,0&amp;808080=0,0&#34;&gt;the accessible palette tool&lt;/a&gt; to ensure they have the consistent lightness and contrast.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Teal is for projects&lt;/li&gt;&#xA;&lt;li&gt;Yellow is for journal&lt;/li&gt;&#xA;&lt;li&gt;Red is for the portfolio&lt;/li&gt;&#xA;&lt;li&gt;Blue is for knowledge&lt;/li&gt;&#xA;&lt;li&gt;Purple and pink are for personal&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Colors should not be mixed in unrelated categories. Only the home page is allowed to use different colors. Colors are defined as custom elements in CSS using hex codes, as HSL format cannot be used in SVG files.&lt;/p&gt;&#xA;&#xA;&lt;div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--black); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&lt;code&gt;--black: #000000;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--white); height:20px; width:20px; border:1px dotted black;&#34;&gt;&lt;/div&gt;&lt;code&gt;--white: #ffffff;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--grey); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&lt;code&gt;--grey: #eeeeee; &lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--grey-dark); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&lt;code&gt;--grey-dark: #aaaaaa;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--grey-darker); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&lt;code&gt;--grey-darker: #555555;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--grey-pitchblack); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&lt;code&gt;--grey-pitchblack: #222222;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--yellow); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&lt;code&gt;--yellow: #f2d336;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--yellow-dark); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&lt;code&gt;--yellow-dark: #dfc130;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--yellow-darker); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&lt;code&gt;--yellow-darker: #98841f;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--teal); height:20px; width:20px; border:1px dotted black;&#34;&gt;&lt;/div&gt;&lt;code&gt;--teal: #70eba7;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--teal-dark); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&lt;code&gt;--teal-dark: #5fc88f;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--teal-darker); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&lt;code&gt;--teal-darker: #479e6d;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--pink); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&#xA;&lt;code&gt;--pink: #ffadc9;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--pink-dark); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&#xA;&lt;code&gt;--pink-dark: #ff85ad;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--pink-darker); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&lt;code&gt;--pink-darker: #d6245f;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--blue); height:20px; width:20px;&#34;&gt;&#xA;&lt;/div&gt;&lt;code&gt;--blue: #f37149;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--blue-dark); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&#xA;&lt;code&gt;--blue-dark: #dd5d36;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--blue-darker); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&#xA;&lt;code&gt;--blue-darker: #c93d13;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--red); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&#xA;&lt;code&gt;--red: #9094fe;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--red-dark); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&#xA;&lt;code&gt;--red-dark: #767aef;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;div style=&#34;display:flex; align-items:center;&#34;&gt;&#xA;&lt;div style=&#34;background-color: var(--red-darker); height:20px; width:20px;&#34;&gt;&lt;/div&gt;&#xA;&lt;code&gt;--red-darker: #595fd9;&lt;/code&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;themes&#34; &gt;Themes&lt;a href=&#34;#themes&#34; aria-label=&#34;Themes permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Themes are how colors are organized and used semantically. New custom properties are used to determine which colors take which role depending of the parent class. The custom properties names are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;--text&lt;/li&gt;&#xA;&lt;li&gt;--background&lt;/li&gt;&#xA;&lt;li&gt;--accent&lt;/li&gt;&#xA;&lt;li&gt;--background-dark&lt;/li&gt;&#xA;&lt;li&gt;--border&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;div class=&#34;portfolio&#34;&gt;&#xA;&lt;p&gt;{ .portfolio parent class }&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;projects&#34;&gt;&#xA;&lt;p&gt;{  .projects parent class }&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;journal&#34;&gt;&#xA;&lt;p&gt;{ .journal parent class }&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;knowledge&#34;&gt;&#xA;&lt;p&gt;{ .knowledge parent class }&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;about&#34;&gt;&#xA;&lt;p&gt;{ .about parent class }&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;icons&#34; &gt;Icons&lt;a href=&#34;#icons&#34; aria-label=&#34;Icons permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Each section of the website has its own icon illustrating its content. All icons are organized following these rules:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;color is the individual&lt;/li&gt;&#xA;&lt;li&gt;white is the unknow&lt;/li&gt;&#xA;&lt;li&gt;black is the action&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All icons consume colors defined in the themes.&lt;/p&gt;&#xA;&#xA;&lt;svg class=&#34;project-icon&#34; height=&#34;300&#34; viewBox=&#34;-10 0 501.94 520.22&#34;&gt;&#xA;&lt;polygon class=&#34;projects-icon__1&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;10px&#34; stroke=&#34;var(--border)&#34; points=&#34;145 111.18 345 11.18 245 211.18 45 311.18 145 111.18&#34; /&gt;&#xA;&lt;polygon class=&#34;projects-icon__2&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;10px&#34; stroke=&#34;var(--border)&#34; points=&#34;5 11.18 255 61.18 205 211.18 5 311.18 5 11.18&#34; /&gt;&#xA;&lt;polygon class=&#34;projects-icon__3&#34; fill=&#34;var(--text)&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;10px&#34; stroke=&#34;var(--text)&#34; points=&#34;65 81.18 165 81.18 265 281.18 65 181.18 65 81.18&#34; /&gt;&#xA;&lt;polygon class=&#34;projects-icon__4&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;10px&#34; stroke=&#34;var(--accent)&#34; points=&#34;425 411.18 225 511.18 275 261.18 475 261.18 425 411.18&#34; /&gt;&#xA;&lt;circle fill=&#34;var(--text)&#34; class=&#34;projects-icon__5&#34; cx=&#34;385&#34; cy=&#34;201.18&#34; r=&#34;25&#34; /&gt;&#xA;&lt;/svg&gt;&#xA;&#xA;&lt;svg class=&#34;knowledge-icon&#34; height=&#34;300&#34;  viewBox=&#34;0 0 520 510&#34;&gt;&#xA;&lt;rect class=&#34;knowledge-icon__1&#34; stroke=&#34;var(--border)&#34; stroke-width=&#34;10px&#34; stroke-miterlimit=&#34;10&#34; stroke-linecap=&#34;round&#34; fill=&#34;none&#34; x=&#34;5&#34; y=&#34;5&#34; width=&#34;300&#34; height=&#34;300&#34;/&gt;&#xA;&lt;rect class=&#34;knowledge-icon__2&#34; stroke=&#34;var(--accent)&#34; stroke-width=&#34;10px&#34; stroke-miterlimit=&#34;10&#34; stroke-linecap=&#34;round&#34; fill=&#34;none&#34; x=&#34;215&#34; y=&#34;205&#34; width=&#34;300&#34; height=&#34;300&#34;/&gt;&#xA;&lt;circle stroke=&#34;var(--accent)&#34; cx=&#34;385&#34; cy=&#34;385&#34; r=&#34;50&#34; fill=&#34;var(--accent)&#34;/&gt;&#xA;&lt;polygon class=&#34;knowledge-icon__3&#34; fill=&#34;var(--text)&#34; points=&#34;55 485 105 335 255 285 255 485 55 485&#34;/&gt;&#xA;&lt;polygon class=&#34;knowledge-icon__4&#34;  fill=&#34;var(--border)&#34; points=&#34;45 65 245 165 245 265 45 365 45 65&#34;/&gt;&#xA;&lt;/svg&gt;&#xA;&#xA;&lt;svg class=&#34;portfolio-icon&#34; height=&#34;300&#34; viewBox=&#34;-20 0 470 425&#34;&gt;&#xA;&lt;circle fill=&#34;var(--border)&#34; cx=&#34;180&#34; cy=&#34;400&#34; r=&#34;25&#34;/&gt;&#xA;&lt;polygon class=&#34;portfolio-icon__1&#34; fill=&#34;var(--text)&#34; points=&#34;100 100 300 0 200 200 0 300 100 100&#34;/&gt;&#xA;&lt;circle class=&#34;portfolio-icon__2&#34; stroke=&#34;var(--accent)&#34; stroke-width=&#34;10px&#34; stroke-miterlimit=&#34;10&#34; stroke-linecap=&#34;round&#34; fill=&#34;none&#34; cx=&#34;360&#34; cy=&#34;170&#34; r=&#34;75&#34;/&gt;&#xA;&lt;rect fill=&#34;var(--text)&#34; x=&#34;110&#34; y=&#34;160&#34; width=&#34;100&#34; height=&#34;100&#34;/&gt;&#xA;&lt;rect class=&#34;portfolio-icon__2&#34; fill=&#34;var(--border)&#34; x=&#34;40&#34; y=&#34;90&#34; width=&#34;200&#34; height=&#34;200&#34;/&gt;&#xA;&lt;/svg&gt;&#xA;&#xA;&lt;svg class=&#34;journal-icon&#34; height=&#34;300&#34;  viewBox=&#34;0 -100 550 550&#34;&gt;&#xA;&lt;polygon class=&#34;journal-icon__2&#34; fill=&#34;var(--border)&#34;  points=&#34;400 360 250 410 200 160 450 210 400 360&#34;/&gt;&#xA;&lt;polygon class=&#34;journal-icon__1&#34; fill=&#34;var(--text)&#34; points=&#34;0 0 250 50 300 300 100 200 0 0&#34;/&gt;&#xA;&lt;circle fill=&#34;none&#34; stroke=&#34;var(--accent)&#34;  stroke-width=&#34;10px&#34; stroke-miterlimit=&#34;10&#34; stroke-linecap=&#34;round&#34; cx=&#34;310&#34; cy=&#34;370&#34; r=&#34;75&#34;/&gt;&#xA;&lt;/svg&gt;&#xA;&#xA;&lt;svg class=&#34;journal-icon&#34; height=&#34;300&#34; viewBox=&#34;-20 0 443.09 464.04&#34;&gt;&#xA;&lt;polygon fill=&#34;none&#34; fill=&#34;none&#34; stroke=&#34;var(--border)&#34; stroke-width=&#34;10px&#34; stroke-miterlimit=&#34;10&#34; stroke-linecap=&#34;round&#34; points=&#34;35 109.04 235 9.04 185 259.04 35 209.04 35 109.04&#34;/&gt;&#xA;&lt;polygon fill=&#34;none&#34; stroke=&#34;var(--border)&#34; stroke-width=&#34;10px&#34; stroke-miterlimit=&#34;10&#34; stroke-linecap=&#34;round&#34; points=&#34;415 459.04 115 459.04 165 209.04 315 259.04 415 459.04&#34;/&gt;&#xA;&lt;circle fill=&#34;var(--text)&#34; cx=&#34;75&#34; cy=&#34;159.04&#34; r=&#34;75&#34;/&gt;&#xA;&lt;circle class=&#34;about-icon__1&#34; fill=&#34;var(--accent)&#34; cx=&#34;75&#34; cy=&#34;179.04&#34; r=&#34;25&#34;/&gt;&#xA;&lt;circle class=&#34;about-icon__2&#34; fill=&#34;var(--accent)&#34; cx=&#34;75&#34; cy=&#34;309.04&#34; r=&#34;50&#34;/&gt;&#xA;&#xA;&lt;/svg&gt;&#xA;&#xA;&lt;style&gt;&#xA;&lt;p&gt;article &gt; svg {&lt;/p&gt;&#xA;&lt;p&gt;margin: 30px;&lt;/p&gt;&#xA;&#xA;&lt;/style&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/design-tokens" rel="self" type="text/html"></link>
    <summary type="html">The design tokens of this website</summary>
  </entry>
  <entry>
    <title>Age of Trial</title>
    <updated>2020-11-23T00:00:00Z</updated>
    <id>https://thomasorus.com/age-of-trial</id>
    <content type="html">&lt;h1 id=&#34;age-of-trial&#34; &gt;Age of Trial&lt;a href=&#34;#age-of-trial&#34; aria-label=&#34;Age of Trial permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The Age of Trial is the age kids are sent to participate into the War on Brambles. They have to serve for two cycles before going home. Depending on their social standing they are given different roles. The most fortunate are given strategist and secure positions to ensure their families won&#39;t lose them. The common people are trained to battle and a lot of them never goes back home.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/age-of-trial" rel="self" type="text/html"></link>
    <summary type="html">The explanation about the age of trial</summary>
  </entry>
  <entry>
    <title>Bas Gros Poing</title>
    <updated>2023-03-03T16:22:26Z</updated>
    <id>https://thomasorus.com/bas-gros-poing</id>
    <content type="html">&lt;h1 id=&#34;bas-gros-poing-is-a-website-and-podcast-dedicated-to-fighting-games&#34; &gt;Bas Gros Poing is a website and podcast dedicated to fighting games&lt;a href=&#34;#bas-gros-poing-is-a-website-and-podcast-dedicated-to-fighting-games&#34; aria-label=&#34;Bas Gros Poing is a website and podcast dedicated to fighting games permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/bgp.png&#34; alt=&#34;Bas Gros Poing Logo&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/bgp.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Bas Gros Poing was created in 2009 as a podcast to talk about fighting games. The goal at the time was to educate a new crowd of fighting game fans that just joined the community with the release of Street Fighter 4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was the first niche boom of podcast in France, and we still were in the blog frenzy, so Bas Gros Poing also became a blog. A logo was made, news and analysis were written, the team grew and at its peak, Bas Gros Poing had several thousands visitors each day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The project was halted around 2014, and relaunched in 2017. Several people came to help, with the initial core team still present for podcasts recordings.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://basgrospoing.fr/&#34;&gt;Bas Gros Poing&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://twitter.com/basgrospoing&#34;&gt;Twitter Account&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://patreon.com/basgrospoing&#34;&gt;Patreon Account&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/bas-gros-poing" rel="self" type="text/html"></link>
    <summary type="html">A website and podcast dedicated to fighting games</summary>
  </entry>
  <entry>
    <title>Art Eater</title>
    <updated>2023-03-03T16:22:26Z</updated>
    <id>https://thomasorus.com/art-eater</id>
    <content type="html">&lt;h1 id=&#34;art-eater-provides-in-depth-discussion-about-visual-art-in-contemporary-culture&#34; &gt;Art Eater provides in depth discussion about visual art in contemporary culture&lt;a href=&#34;#art-eater-provides-in-depth-discussion-about-visual-art-in-contemporary-culture&#34; aria-label=&#34;Art Eater provides in depth discussion about visual art in contemporary culture permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/arteater.jpg&#34; alt=&#34;Logo for the Art Eater Project&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/arteater.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Art Eater was initially the personal blog of &lt;a href=&#34;https://twitter.com/Richmond_Lee&#34;&gt;Richmond Lee&lt;/a&gt;, where he published posts about animation and cultural influences in video games. He was well known for his article about &lt;a href=&#34;https://art-eater.com/articles/darkstalkers-and-the-twelve-principles-of-animation&#34;&gt;the animation of Darkstalkers&lt;/a&gt;, or his series &#34;&lt;a href=&#34;ttps://art-eater.com/articles/a-buddhist-s-guide-to-asura-s-wrath-part-1-buddhist-cyborgs-and-the-story-of-the-asura&#34;&gt;Buddhist&#39;s Guide to Asura&#39;s Wrath&lt;/a&gt;&#34;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a few years of blogging Richmond got caught up by life and lacked time to continue. The website also started to decay due to lack of updates, and in the end disappeared from the internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Art Eater was one of my favorite websites ever, so I contacted Richmond and proposed to redo the website for free, because &lt;em&gt;it has to be on the internet&lt;/em&gt;. We dug into Richmond&#39;s archives, the Archive.org Web Machine, and managed to salvage almost everything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The website was back online in 2020, ten years after its initial release. The crew also grew, with a podcast covering multiple subjects. It&#39;s now a very active project for which I act as the webmaster and a guest member.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Visit the &lt;a href=&#34;https://art-eater.com/&#34;&gt;Art Eater website&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/art-eater" rel="self" type="text/html"></link>
    <summary type="html">A website and podcast dedicated to in depth discussion of visual art in contemporary culture</summary>
  </entry>
  <entry>
    <title>Tracking</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/tracking</id>
    <content type="html">&lt;h1 id=&#34;tracking&#34; &gt;Tracking&lt;a href=&#34;#tracking&#34; aria-label=&#34;Tracking permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I track &lt;a href=&#34;time.html&#34;&gt;time&lt;/a&gt; spent on my hobbies. First I hated the idea. I saw it as self-surveillance, as an intrusion of accounting and management in my personal space where precisely, you don&#39;t count your time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After two months I realized I had the wrong feeling. Tracking hours has become a tool for self-discovery. It allows me to take a huge step back and to be more careful about my well-being. It also helps making connections between what I do and what I feel every day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, for the first two months of 2020 I spent around 70 hours on personal projects. It&#39;s 7.8 hours a week, which means I overall worked a day more each week on personal stuff. It made me realize I was on the wrong path to accomplish one of my goals, which is to be less productive and more creative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For people like me who wonders where their free time disappears, tracking time helps. My advice however, is to find a personal way of tracking time instead of using apps, bullet journals or stuff related to productivity. Finding your own way of tracking your own time is also part of the self-discovery thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To me tracking time doesn&#39;t mean trying to be more productive, but the opposite.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/tracking" rel="self" type="text/html"></link>
    <summary type="html">An explanation about why I track some stuff in my life</summary>
  </entry>
  <entry>
    <title>2019</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/2019</id>
    <content type="html">&lt;h1 id=&#34;2019-overview&#34; &gt;2019 Overview&lt;a href=&#34;#2019-overview&#34; aria-label=&#34;2019 Overview permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;h2 id=&#34;readings-of-2019&#34; &gt;Readings of 2019&lt;a href=&#34;#readings-of-2019&#34; aria-label=&#34;Readings of 2019 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;All the things I read in 2019.&lt;/p&gt;&#xA;&#xA;&lt;code&gt;...&lt;/code&gt; Means the series is still ongoing but that I started it in 2019&#xA;&#xA;&lt;h3 id=&#34;novels&#34; &gt;Novels&lt;a href=&#34;#novels&#34; aria-label=&#34;Novels permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;The Remembrance of Earth&#39;s Past trilogy - Liu Cixin&lt;/li&gt;&#xA;&lt;li&gt;The unfathomable depth of loneliness - Hao Jinfang&lt;/li&gt;&#xA;&lt;li&gt;The Book of the New Sun Vol.1 - Gene Wolf&lt;/li&gt;&#xA;&lt;li&gt;Viking Mythology - Neil Gamain&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;mangas&#34; &gt;Mangas&lt;a href=&#34;#mangas&#34; aria-label=&#34;Mangas permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Beastars...&lt;/li&gt;&#xA;&lt;li&gt;Vinland Saga...&lt;/li&gt;&#xA;&lt;li&gt;Kingdom...&lt;/li&gt;&#xA;&lt;li&gt;Yagate Kimi ni Naru (Bloom into You)&lt;/li&gt;&#xA;&lt;li&gt;Shamo&lt;/li&gt;&#xA;&lt;li&gt;Sun Ken Rock&lt;/li&gt;&#xA;&lt;li&gt;Kusuriya no Hitorigoto...&lt;/li&gt;&#xA;&lt;li&gt;Goblin Slayer...&lt;/li&gt;&#xA;&lt;li&gt;Blame! (reprint)&lt;/li&gt;&#xA;&lt;li&gt;Aposimz...&lt;/li&gt;&#xA;&lt;li&gt;No gun&#39;s life...&lt;/li&gt;&#xA;&lt;li&gt;At the Mountains of Madness (Lovecraft by Gou Tanabe)&lt;/li&gt;&#xA;&lt;li&gt;In the abyss of time (Lovecraft by Gou Tanabe)&lt;/li&gt;&#xA;&lt;li&gt;Shishunki Renaissance! David-kun&lt;/li&gt;&#xA;&lt;li&gt;Gunnm (reprint)&lt;/li&gt;&#xA;&lt;li&gt;Gunnm Last Order&lt;/li&gt;&#xA;&lt;li&gt;Gunnm: Mars Chronicles...&lt;/li&gt;&#xA;&lt;li&gt;Blue Giant&lt;/li&gt;&#xA;&lt;li&gt;Saltiness&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;comics&#34; &gt;Comics&lt;a href=&#34;#comics&#34; aria-label=&#34;Comics permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Shangri La&lt;/li&gt;&#xA;&lt;li&gt;Mécanique Céleste&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;art-books&#34; &gt;Art books&lt;a href=&#34;#art-books&#34; aria-label=&#34;Art books permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Gustave Doré (Catalogue d&#39;exposition Gustave Doré - Musée d&#39;Orsay)&lt;/li&gt;&#xA;&lt;li&gt;Katsuya Terrada Real Size&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;magazines&#34; &gt;Magazines&lt;a href=&#34;#magazines&#34; aria-label=&#34;Magazines permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;L&#39;étiquette 1 &amp; 2&lt;/li&gt;&#xA;&lt;li&gt;Atom Magazine&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;notable-articles&#34; &gt;Notable articles&lt;a href=&#34;#notable-articles&#34; aria-label=&#34;Notable articles permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://www.newyorker.com/magazine/2019/12/16/how-william-gibson-keeps-his-science-fiction-real&#34;&gt;How William Gibson Keeps His Science Fiction Real&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://paulgraham.com/genius.html&#34;&gt;The Bus Ticket Theory of Genius&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.slate.fr/story/184164/boulangeries-guerre-culturelle-pain-adieu-baguette-disparition-petit-commerce&#34;&gt;La France du pain est coupée en deux&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.nytimes.com/interactive/2019/11/16/world/asia/china-xinjiang-documents.html&#34;&gt;Absolutely No Mercy: Leaked Files Expose How China Organized Mass Detentions of Muslims&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.forbes.com/sites/johnkoetsier/2019/09/02/hong-kong-protestors-using-mesh-messaging-app-china-cant-block-usage-up-3685/&#34;&gt;Hong Kong Protestors Using Mesh Messaging App China Can&#39;t Block&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://matthiasott.com/articles/into-the-personal-website-verse&#34;&gt;Into the Personal-Website-Verse&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.gamekult.com/actualite/une-petite-histoire-du-jeu-de-baston-en-dix-morceaux-3050819125.html&#34;&gt;Une petite histoire du jeu de baston en dix morceaux&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.newyorker.com/magazine/2019/04/08/the-day-the-dinosaurs-died&#34;&gt;The Day the Dinosaurs Died&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kotaku.com/how-biowares-anthem-went-wrong-1833731964&#34;&gt;How BioWare&#39;s Anthem Went Wrong&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;writings-of-2019&#34; &gt;Writings of 2019&lt;a href=&#34;#writings-of-2019&#34; aria-label=&#34;Writings of 2019 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;All the things I wrote in 2019.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;wrote&#34; &gt;Wrote&lt;a href=&#34;#wrote&#34; aria-label=&#34;Wrote permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://www.redbull.com/fr-fr/evo-2019-tournois-esport-infos&#34;&gt;L’EVO 2019, le plus gros tournoi esport du monde&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.redbull.com/fr-fr/lethal-league-blaze-esport&#34;&gt;Lethal League Blaze, l’autre jeu de combat qui ne dit pas son nom&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.redbull.com/fr-fr/samurai-shodown-esport-jeu-combat&#34;&gt;Samurai Showdown, l’original outsider de l’esport baston&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://twitter.com/Thomasorus/status/1144623832587821056&#34;&gt;Embrasser, étendre, étouffer le podcast&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://basgrospoing.fr/fr/articles/la-schizophrenie-street-fighter-iii-third-strike&#34;&gt;La schizophrénie Street Fighter III: Third Strike&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.redbull.com/fr-fr/mortal-kombat-pro-kompetition&#34;&gt;Premières fatalities sur Mortal Kombat XI&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.redbull.com/fr-fr/rza-mortal-kombat?linkId=65552039&#34;&gt;RZA : une main de velours dans un gant de ninja&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;interviewed&#34; &gt;interviewed&lt;a href=&#34;#interviewed&#34; aria-label=&#34;interviewed permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://twitter.com/Vincent_Jule/status/1144341580771409921&#34;&gt;Samurai Showdown: Le retour d&#39;une franchise culte... et un nouvel âge d&#39;or du jeu de combat?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;published&#34; &gt;Published&lt;a href=&#34;#published&#34; aria-label=&#34;Published permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://basgrospoing.fr/fr/articles/theorie-ruissellement-jeu-de-combat-esport&#34;&gt;Trickle-Down Economics in the FGC and E-Sports&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;played&#34; &gt;Played&lt;a href=&#34;#played&#34; aria-label=&#34;Played permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Flappy Fighter&lt;/li&gt;&#xA;&lt;li&gt;Untitled Goose Game&lt;/li&gt;&#xA;&lt;li&gt;Mortal Kombat XI&lt;/li&gt;&#xA;&lt;li&gt;Samurai Showdown 2019&lt;/li&gt;&#xA;&lt;li&gt;Apex Legends&lt;/li&gt;&#xA;&lt;li&gt;Furi&lt;/li&gt;&#xA;&lt;li&gt;Thumper&lt;/li&gt;&#xA;&lt;li&gt;Céleste&lt;/li&gt;&#xA;&lt;li&gt;Hollow Knight&lt;/li&gt;&#xA;&lt;li&gt;The Red Strings Club&lt;/li&gt;&#xA;&lt;li&gt;Tekken 7&lt;/li&gt;&#xA;&lt;li&gt;Disco Elysium&lt;/li&gt;&#xA;&lt;li&gt;A Plague Tale: Innocence&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;coded&#34; &gt;Coded&lt;a href=&#34;#coded&#34; aria-label=&#34;Coded permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://podcastouvert.fr/&#34;&gt;Podcast Ouvert&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://claviers-mecaniques.fr/&#34;&gt;Claviers mécaniques&lt;/a&gt; - Frontend&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://happy-tereshkova-b21ae0.netlify.com/&#34;&gt;Art Eater&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/Thomasorus/Podcast-player&#34;&gt;A podcast player&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/Thomasorus/UI-concept-tests&#34;&gt;Some concepts for UIs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/Thomasorus/wiki-engine&#34;&gt;My wiki engine&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;A ton of interfaces at work with accessibility&lt;/li&gt;&#xA;&lt;li&gt;Web components with accessibility&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;watched-in-2019&#34; &gt;Watched in 2019&lt;a href=&#34;#watched-in-2019&#34; aria-label=&#34;Watched in 2019 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;All the things I watched in 2019.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... Means the series is still ongoing but that I started it in 2019&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;anime&#34; &gt;Anime&lt;a href=&#34;#anime&#34; aria-label=&#34;Anime permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Carole &amp; Tuesday&lt;/li&gt;&#xA;&lt;li&gt;Sailor Moon S1 (original show)&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;movies&#34; &gt;Movies&lt;a href=&#34;#movies&#34; aria-label=&#34;Movies permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Promare&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;documentaries&#34; &gt;Documentaries&lt;a href=&#34;#documentaries&#34; aria-label=&#34;Documentaries permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;10 years with Hayao Miyazaki&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;series&#34; &gt;Series&lt;a href=&#34;#series&#34; aria-label=&#34;Series permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Mindhunter&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;tv-shows&#34; &gt;Tv shows&lt;a href=&#34;#tv-shows&#34; aria-label=&#34;Tv shows permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Terrace House&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;notable-videos&#34; &gt;Notable videos&lt;a href=&#34;#notable-videos&#34; aria-label=&#34;Notable videos permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;How Mind Control Saved Oddworld: Abe&#39;s Odyssey&lt;/li&gt;&#xA;&lt;li&gt;The Real Fake Cameras Of Toy Story 4&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/2019" rel="self" type="text/html"></link>
    <summary type="html">All things I read, watched in 2019</summary>
  </entry>
  <entry>
    <title>My ideal phone</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/my-ideal-phone</id>
    <content type="html">&lt;h1 id=&#34;my-ideal-phone&#34; &gt;My ideal phone&lt;a href=&#34;#my-ideal-phone&#34; aria-label=&#34;My ideal phone permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The advancement in do it yourself and open source electronics for phone parts made me think about what would be my ideal phone. What I&#39;d love is a productivity phone with a touch of audio capabilities for leisure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally the hardware would have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;A physical keyboard like the Blackberry phones&lt;/li&gt;&#xA;&lt;li&gt;An energy efficient and readable small screen&lt;/li&gt;&#xA;&lt;li&gt;A 4G antenna to allow sharing connections&lt;/li&gt;&#xA;&lt;li&gt;An USB-C port for charging and data transfer&lt;/li&gt;&#xA;&lt;li&gt;A headphone jack for music and microphone&lt;/li&gt;&#xA;&lt;li&gt;A big storage capacity&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;On the software side:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Phone calls and texts of course&lt;/li&gt;&#xA;&lt;li&gt;The ability to use contacts, calendars and notes from a third party provider instead of storing it locally&lt;/li&gt;&#xA;&lt;li&gt;A podcast app with search on the Apple directory, download and play&lt;/li&gt;&#xA;&lt;li&gt;A music application that can play local files but also download them from a private library&lt;/li&gt;&#xA;&lt;li&gt;A few utility and productivity apps like calendar, calculator, notes, etc...&lt;/li&gt;&#xA;&lt;li&gt;A few discussion apps for open source services like signal and connections&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And that&#39;s it. Not having a browser would be a huge change as I am addicted to distractions coming from it. No camera is not a huge deal as I would probably buy a dedicated camera instead. The lack of GPS could be bothersome but I don&#39;t often travel that much.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/my-ideal-phone" rel="self" type="text/html"></link>
    <summary type="html">What I wish from a phone</summary>
  </entry>
  <entry>
    <title>The soft power of JavaScript</title>
    <updated>2022-03-13T19:07:40Z</updated>
    <id>https://thomasorus.com/the-soft-power-of-javascript</id>
    <content type="html">&lt;h1 id=&#34;the-soft-power-of-javascript&#34; &gt;The soft power of JavaScript&lt;a href=&#34;#the-soft-power-of-javascript&#34; aria-label=&#34;The soft power of JavaScript permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve been thinking a lot about JavaScript lately. Not about the language itself but about the ecosystem, the economics and politics of it and how, like the United States movie industry or the K-pop music industry, it became a soft power tool that we&#39;re forced to consume and use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I feel it works this way:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Big Tech releases &lt;strong&gt;thing.js&lt;/strong&gt; and people who worked on it promote it in conferences&lt;/li&gt;&#xA;&lt;li&gt;Tech influencers see &lt;strong&gt;thing.js&lt;/strong&gt; as a new revenue opportunity that may stick on the long run and start investing in it&lt;/li&gt;&#xA;&lt;li&gt;They publish books, record courses, write blog posts and create a lot of noise around &lt;strong&gt;thing.js&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Tech leads around the world are tasked to make technical stacks decisions, they look on the internet and see there&#39;s a lot of noise surrounding &lt;strong&gt;thing.js&lt;/strong&gt; and that it&#39;s a big tech product&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;thing.js&lt;/strong&gt; is now chosen as the corner stone of the stack and developers have to learn it to find jobs: they buy courses, go to boot-camps, watch videos, read blog posts, giving money to influencers&lt;/li&gt;&#xA;&lt;li&gt;Rince and repeat&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;To me this spiral of events narrows our ability to think outside this ecosystem. It gives us the illusion of choice (&lt;em&gt;React, Vue, Angular, Svelte?&lt;/em&gt;) and simplicity (&lt;em&gt;just npm install!&lt;/em&gt;) and automatically makes us mold projects to the ecosystem (&lt;em&gt;it&#39;s an app not a website&lt;/em&gt;) and increases the overall complexity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this very reason and for the same project scope than a previous classic front-end tech stack, small teams then need to grow in size. Suddenly you need a dev ops for builds, a design system lead, more people to slice everything in components, you deport parts of what was usually a backend work to front-end work. But is the output and the durability of the project proportional to the number of people added to the team? I don&#39;t think it is.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote &gt;But jquery was all spaghetti code and manual dom updates! MVC had ugly templates and massive, messy controllers! All this was hard to maintain and hard to evolve!&lt;/blockquote&gt;&lt;figcaption&gt;— Someone, somewhere&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I know about this, having worked on a few projects of this kind. And obviously when you are big tech and have thousands of developers you need to slice everything into bits so people can work. But for us, the normal day developers in small to medium technical departments in small to big companies, what&#39;s the benefit? It&#39;s hard to compare if the &lt;em&gt;old way&lt;/em&gt; of doing things made it harder to maintain and evolve the front-end of a project. But what I&#39;m seeing right now is dozens of job offers in digital services companies for migrations of hundreds of AngularJS components into another framework to basically do the same thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally this whole soft power thing increases my imposter syndrome and makes me numb. Always catching up with the next big thing, I didn&#39;t asked myself for years if I actually like what I&#39;m using or if it&#39;s justified to use it in the first place. The question is not if we should use &lt;strong&gt;thing.js&lt;/strong&gt; but if &lt;strong&gt;other-thing.js&lt;/strong&gt; is better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;m happy I met alternative coding scenes where people ask themselves if what they are doing is sustainable and necessary. I&#39;m happy about what I do at least for personal projects. I know better how, why and where I want to do development in the future.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course I may be wrong about all this. But what I am sure is that this soft power ecosystem is exhausting my love for front-end work, one project at a time.&lt;/p&gt;&#xA;&#xA;&lt;em&gt;21/10/2020&lt;/em&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/the-soft-power-of-javascript" rel="self" type="text/html"></link>
    <summary type="html">A reflection on how JavaScript self-sustains itself through never-ending novelty</summary>
  </entry>
  <entry>
    <title>I removed the computer</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/i-removed-the-computer</id>
    <content type="html">&lt;h1 id=&#34;i-removed-the-computer&#34; &gt;I removed the computer&lt;a href=&#34;#i-removed-the-computer&#34; aria-label=&#34;I removed the computer permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;My family had its first computer 20 years ago. Each day I would come back from school to spend hours on it. When I turned eighteen I bought my first computer. I installed it on my desk where I usually did homeworks, and since that time a computer has always been on my desk. I coded, wrote, recorded podcasts, read, played... It didn&#39;t change during my art school years, as I had a dedicated desk to paint at school. Once I graduated, I basically stopped painting because I was fed up with art. I started many projects that were exclusively made on a computer and had a lot of fun. I thought it would be this way forever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But one day, it changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sitting at as desk never bothered me that much. It was a position where I could watch a movie, play video games or write, and feel comfortable. Five years ago I went from working in a shop, standing all day, to being a web developer, sitting all day. From this moment onward sitting at a desk felt like a &lt;em&gt;work position&lt;/em&gt;. It wasn&#39;t a problem when I was doing &lt;em&gt;productive&lt;/em&gt; hobbies like recording, writing or coding, but it became harder to play video games, and impossible to watch a movie or a show. Due to chronicle occipital neuralgia I can&#39;t be in a relaxed position while sitting at a desk, I need to sit straight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The desire to draw and paint also came back and with it, the constant frustration of not having a dedicated space for these activities. Mixing electronics and art furniture (ink, water, giant sheets of paper) is a bad idea when you are as clumsy as I am. Cables from peripherals are on the way. When I lean to draw the screen is in my face. You can&#39;t have both in the same space unless you have a giant desk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And there&#39;s this procrastination problem. When I don&#39;t feel like doing anything, I sit at my desk, and I &lt;em&gt;use&lt;/em&gt; it. I refresh my feeds, I launch programs, I mindlessly seek &lt;em&gt;something&lt;/em&gt; that could free me from this anxious state I&#39;m in. Of course it never works and I sometimes leave the desk frustrated. &lt;em&gt;I had free time and did nothing, I didn&#39;t even relax&lt;/em&gt; is a common feeling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So today I removed the computer from my desk. It is now in the living room, under the TV, with a wireless keyboard and trackpad. I plan to use a gamepad to play, in a relaxing position, all these games I accumulated. As I needed a way to write, code and record podcasts, I bought a Raspberry Pi and took several hours to &lt;a href=&#34;raspberry-pi.html&#34;&gt;create a setup&lt;/a&gt; that is both productive and limited. I can code, write and record (even if I still have sound issues). But being a 32bit ARM computer, I can&#39;t install Slack, Discord, Steam or anything else. The only source of distraction is the browser and it can barely run a 1080p video and navigate the web without struggling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hid the Raspberry Pi behind the screen, who now floats above the desk thanks to an arm support. Most importantly, it can be moved out to the side in a few seconds to regain the full depth of the desk. I installed my pencils, brushes and notebooks and hope that, in the future, if I feel the need to procrastinate, I will do it with paper instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Changing a 16 year old habit isn&#39;t easy. I don&#39;t know if that will work. I fear that the Raspberry Pi might be too limited for some of my projects, but using a more powerful computer brings the risk of more distraction. We&#39;ll see how it works.&lt;/p&gt;&#xA;&#xA;&lt;em&gt;15/11/2020&lt;/em&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/i-removed-the-computer" rel="self" type="text/html"></link>
    <summary type="html">I removed my main computer from my desk</summary>
  </entry>
  <entry>
    <title>Renovation journal</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/renovation-journal</id>
    <content type="html">&lt;h1 id=&#34;renovation-journal&#34; &gt;Renovation journal&lt;a href=&#34;#renovation-journal&#34; aria-label=&#34;Renovation journal permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This is the journal of my apartment renovation.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;november-16th-2020&#34; &gt;November 16th 2020&lt;a href=&#34;#november-16th-2020&#34; aria-label=&#34;November 16th 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;First day of renovations!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This day was one made for discovery. First I went to the do-it-yourself store. I bought gloves, scrappers, glue solvent, ground protection canvas, a bucket, masks and several other little things I needed to start. I spent more time in the store than I wanted and arrived mid-afternoon in the apartment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had to remove plates of polystyrene glued to the entrance and the corridor ceiling and remove the wallpaper from the entrance hall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started with the ceiling plates, removing them one by one and stuffing them inside a trash bag. The risk with the ceiling was that the glue used to stick the plates would rip off the plaster. Fortunately for me, coating was used as glue and most polystyrene plates came off easily, only leaving coated dots. I did the entrance hall and the whole corridor. Once I was finished my arms hurt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To recover some strength I decided to continue with the entrance wallpapers. I pierced little holes in it with a special tool. Then I soaked the wall with a glue solvent, using a sponge. Most of the paper came off easily but some parts needed two passes. Under it, the wall is in a correct state but obviously it will need a new plaster before painting. I removed the paper from the first wall, finding my marks as I was doing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While doing this, I worried about the ceiling&#39;s coated dots. I tried to sand them but it was too hard, nothing came off. Discouraged, I took a metal scraper and a hammer and started going under. It took some trials and errors but I found a good technique: bend the scraper at 45 degrees, hammer once, then go closer to the ceiling little by little, each time hammering. This way the whole coated dots came of in one to three parts. Doing it this way added marks and little holes in the ceiling but it will be faster to re-coat the holes than sand what&#39;s there. I removed half of the dots in the entrance all this day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I spent around 3 hours and half between the store and the work this day. I went home happy but a bit worried about the time needed to do the ceiling.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;november-17th-2020&#34; &gt;November 17th 2020&lt;a href=&#34;#november-17th-2020&#34; aria-label=&#34;November 17th 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Second day of work! This time I came earlier in the afternoon and continued the work in the entrance hall. I had to remove the interphone, the ring bell, an electricity box, curtains that were hiding the entrance door, as well as the curtains bar. It took a bit of time, as well as removing the paper around the door.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started feeling dizzy, soaking some wall there, another one there, forgetting about scrapping the first one and having to soak it again. Overall I wasn&#39;t happy it took me so much time to do this, I felt it was supposed to go faster. I finished removing the dots from the ceiling in the entrance hall and went home exhausted with arms hurting.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;november-19th-2020&#34; &gt;November 19th 2020&lt;a href=&#34;#november-19th-2020&#34; aria-label=&#34;November 19th 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I didn&#39;t go to the apartment yesterday as I was sick. I arrived defeated and felt I was not going to be able to do anything. I decided to put some music to help me focus and started listening to &lt;em&gt;L&#39;école du micro d&#39;argent&lt;/em&gt; from &lt;strong&gt;IAM&lt;/strong&gt;. The &lt;a href=&#34;https://www.youtube.com/watch?v=x4uHgwHdXOA&#34;&gt;first song&lt;/a&gt; starts this way:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Assis en tailleur, voilà des heures que je médite&#xA;Sur ma montagne et je n&#39;arrive pas à faire le vide&#xA;Je focalise sur le diaphragme, j&#39;augmente mon énergie&#xA;Réveille la bête qui dans mon âme est tapie&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This song gave me a burst of motivation and confidence and I decided I wasn&#39;t going let a damn ceiling dictate my life! &lt;em&gt;Eat that frog&lt;/em&gt; they say, so I was going to eat this damn ceiling. I moved my stepladder in the corridor and started going hard on the coating dots while singing. It took me almost 2 hours with a few breaks to rest my harms but in the end I did it, the ceiling is now free of coating dots!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Feeling confident, I decided I should try removing the corridor wallpaper. I picked a little piece in my hand, pulled it and... Everything came off easily, in a single pull, without any glue solvent! The sound of wallpaper being teared off from the wall is so satisfying. The larger the piece, the deeper the sound, the most satisfaction it procures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In around 30 minutes the whole corridor was wallpaper free. It felt sooooo good to see it naked! I thought I would spend two days on this, and I was already done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I managed to talk with the renovation contractor to fix a date for the walls demolition. He said to me &lt;em&gt;is Saturday ok&lt;/em&gt; and I answered &lt;em&gt;wait what this Saturday&lt;/em&gt; and eventually that&#39;s how I learned three men were coming the day after tomorrow to smash the wall in my new apartment. Knowing how noisy it would be, I knocked to the door of all my neighbors to warn them that Saturday wasn&#39;t a good day for a morning sleep-in.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;november-20th-2020&#34; &gt;November 20th 2020&lt;a href=&#34;#november-20th-2020&#34; aria-label=&#34;November 20th 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This day I wasn&#39;t alone! Coralie wasn&#39;t working and came to help. We decided she would tear off some wallpaper while I was preparing the place for the contractors. She started peeling the paper in my future bedroom while I was removing electrical outlets, light switches and more wallpaper. Since the contractors are going to remove walls and then fix the walls, ceilings and grounds, I try to remove anything that would slow them down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also wrote notes on paper to warn the neighbors I could not meet. The most important one, right below my apartment, wasn&#39;t there again and stuck a note in his door basically saying &lt;em&gt;SORRY IT&#39;S GONNA BE NOISY AS HELL FOR A DAY&lt;/em&gt;. We went home and eat soba.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;november-21th-2020&#34; &gt;November 21th 2020&lt;a href=&#34;#november-21th-2020&#34; aria-label=&#34;November 21th 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;My alarm wakes me at 7am. I haven&#39;t woken up so early in months and I feel like sleeping more. Coralie came to check I was awake, admitting that she was very stressed by the idea of me not waking up. I took a breakfast and prepared a thermos of coffee for the contractors. A friend who renovated his house gave me some advices: be clear in your instructions, stay calm if something goes wrong, stay firm if contractors try to negotiate. And that bringing some coffee was always welcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I met them at the apartment, and they were nice folks. One of them is around 30 and the other is older, around 45 if I have to guess. We talked a bit, drank coffee, discussed the remodeling and what I was planning for the apartment. They grab a lot of tools, put blankets on the ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, one of them picked a hammer and started smashing on a wall. That was both frightening and super cool. Friends asked me why I didn&#39;t try it myself but I didn&#39;t want to exhaust myself as I had a lot to do today too. The second contractor started smashing the walls too. I was in the kitchen, disassembling furniture and hearing the sound of bricks, stones, plaster raining on the floor. It was quite something!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When they stopped I opened the kitchen door and saw... nothing. There was no wall left, only the door frame. I could see the whole living room from the kitchen. The whole thing was so spacious and luminous, it was amazing! I was relieved seeing it was as good as I hope. The contractors then started the hard work of removing the debris from the ground. They filled around then 100 litters garbage bins and took them down by the stairs. The poor guys were sweating hard. We took another coffee and discussed the result. I apologized for making them suffer like this. They said it was ok and that they were used to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once they were done they smashed another wall. The corridor ends with a big, two meters square closet that is right next the smallest bedroom. I wanted it removed, as well as the door frames. Another door will be added at the end of the corridor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lunchtime arrived, they went to eat something and I went home. All morning I was texting photos and videos of the remodeling to Coralie and my family. I added some details in message apps, rested a little, then went back around 2pm. The contractors were, once again, filling garbage bins and taking them down by the stairs. On my side of things I managed to remove all kitchen cabinets from the walls and the ground. The previous owner was the uncle Scrooge type. To avoid buying enough metal feet for the cabinets, he only gave two to each and then fixed all the cabinets together with &lt;em&gt;dozens&lt;/em&gt; of screws! It took me hours to remove them all!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the middle of the afternoon the contractors were done moving debris and went to the bathroom to empty it. They removed the furniture and struggled with the tub. Meanwhile, I went to the now extended room and decided it was time to remove this ugly wood paneling. Wood paneling is often serves two purposes: first it isolates the room by creating a small space between the wood and the wall ; and secondly it hides ugly walls. It was the only unknown in the apartment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And &lt;em&gt;oh boy&lt;/em&gt;. As I was removing the wood panels, I discovered an ugly and humid wall, with swelling plaster all around it. The wall is basically unusable and cannot be re-plastered directly. It needs scraping, a lot of it, to go back to reach the concrete wall behind. The fake wooden floor isn&#39;t even going to the wall! There&#39;re 3 centimeters between the floor and the wall! I became super worried about the time and cost those walls were going to cost me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I asked the contractors about it, and they said it was probably wiser and cheaper to clean the wall a bit then glue plasterboard. They explained some types came with an insulation layer that prevents humidity from reaching the plaster side and the painting. I phoned the company, explaining them my discovery. They took measures and then updated the invoice, which grew by a substantial margin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already knew when I started this project that &lt;em&gt;things don&#39;t go as planned and always cost more than you think&lt;/em&gt;, so I wasn&#39;t that angry or stressed. Plus adding an insulation layer will reduce the heating cost so in the long run it&#39;s worth it. I asked for advice to friends and family who were in this situation before and all said the same ting: do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I went home around 6pm, showered, took the car again to get us Bò Búns. We started watching my &lt;em&gt;Yamada neighbors&lt;/em&gt;, but I was so tired I went to bed in the middle. I fell asleep instantly.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;november-22-2020&#34; &gt;November 22 2020&lt;a href=&#34;#november-22-2020&#34; aria-label=&#34;November 22 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I woke up late after a strange dream where a long-time lost friend and I were kidnapping Trump and evacuating him from a location (a golden maze like mansion, very fitting) using exhaust pipes. I remember he stayed stuck inside, so we had to flush several toilets to make him go down. It was very satisfying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My body was numb and painful. The day before was hard and I wasn&#39;t doing any sport before this so it was kind of logical. Got up and went to the bakery by a fresh charcoal baguette for me, buckwheat bread for Coralie and chocolate viennese for the two of us. Also bought eggs and crêpes. We had breakfast while watching The Mandalorian, then went back to the apartment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coralie was frustrated she could not help yesterday because of her handicap. She came determined to be useful and started peeling the kitchen wallpaper (she loves doing it, she says it&#39;s like removing dead skins). Meanwhile, I started removing all the electrical gutters. There were so many of them! Some of them were even empty! What happened in this place before?!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But removing them allowed me to make a wonderful discovery! The building is from the sixties and in this period, they didn&#39;t have ground connection. When buying an apartment of this period, it&#39;s always the lottery. I knew the kitchen and bathroom had the ground connection because that&#39;s mandatory, but I wasn&#39;t sure about the other rooms. Well turns out all of them have it!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The apartment is on the last floor and the previous owner used the attic to pass a ground cable from the fuse box to all the rooms. It was done poorly and cheaply, with holes in the ceilings and cables hidden in ugly plastic electrical gutters. If I&#39;m not happy about the ugliness, I&#39;m super happy I won&#39;t have to do it myself. Now all I have to do to make it pretty is adding hollow plinths to hide the cables. I&#39;ll also try to add gigabit Ethernet cables and sockets in each room.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coralie managed to finish peeling the kitchen walls and targeted a new victim: the last bedroom. This one was frightening to us. A thick wallpaper that was repaint loosely. I managed to catch a little piece, pulled and... &lt;em&gt;EVERYTHING CAME IN A SINGLE SHEET&lt;/em&gt;. Apparently the wallpaper and glue were the same as in the corridor. We removed everything in 20 minutes then went to toilets and started doing the same. Unfortunately it wasn&#39;t as easy but most of it came off nicely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, we discussed our discoveries of the day. When removing the wallpaper, we realized there was moisture traces on the plaster in the last bedroom. Not on all walls, only the one facing the outside. It was the same traces as the wood paneled wall. Worried, I went to the second bedroom that I thought was in correct shape. I started knocking at the walls and realized that one of them made a hollow sound. Using a flat screw diver, I dig a little in the wall and realized it had the same problem, only minimized by a second plaster coat and paint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This room is oriented to the north and already had mild moisture traces in a ceiling corner. We knew this room was a bit cold and humid, because the previous owner added a controlled mechanical ventilation to the ceiling. I started asking myself if we shouldn&#39;t isolate and plasterboard all the bedroom walls facing outside. Between the first room and this one, it would probably double the initial invoice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I asked my father about it, and he said I should do it. He was right to say that once we will be installed, if we feel the cold, we&#39;re not going to empty the room again to plasterboard it, and we&#39;ll end up not liking the apartment. Adding insulation will also reduce the cost of heating the rooms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now I feel like a builder in the &lt;em&gt;Grand Design&lt;/em&gt; show. In this show each time people go over budget and feel terrible about it. Fortunately for me, I knew it would happen and planned it, but it&#39;s still a shock. We&#39;ll see with the contractor tomorrow.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;november-23-2020&#34; &gt;November 23 2020&lt;a href=&#34;#november-23-2020&#34; aria-label=&#34;November 23 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Woke up early again and went to the apartment to meet with the main contractor. We made a tour and talked about the need to insulate the walls, he agreed with me it would probably be better. I also explained I needed time to check the electrical installation with a pro before positioning the plasterboard. It annoyed him a little bit, but he accepted that we postpone the rest of the renovation when I told him we could continue either in December or January as I&#39;m not moving in until February.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He called an electrician he works with regularly, who accepted to meet with me tomorrow. I went back home around 10am for a video call. Once it was done I made lunch and suddenly felt super tired. I decided I should rest today and go back tomorrow. I have to make phone calls to get electricity anyway.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;november-24-2020&#34; &gt;November 24 2020&lt;a href=&#34;#november-24-2020&#34; aria-label=&#34;November 24 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I have electricity! It was quick and everything is working fine. I went to the apartment at 1pm to meet with the electrician. He was recommended to me by two persons and after seeing ground connection cables in all rooms, I felt it was going to be fine. Turns out I should not have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The electrician was supposed to stay 30 minutes, he stayed more than one hour. The electricity in my apartment is a freaking mess. First, I have two electrical systems! The old one dating from construction is used for light switches and some electrical outlets. The new one, redid later, is used for the other electrical outlets. But here&#39;s the problem: all heaters are connected to the same circuit as the outlets instead of their own. Which means if a heater takes a lot of juice and other electrical items do it too, the circuit breaker will be triggered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Except it might not! Because apparently the person that did the electrical box choose a too high amperage compared to the electricity consumption (the stuff he used is not even available in public store, where did he get that?!). That means that cables, who are too thin to take such a charge, would melt before the circuit breaker cuts the juice. It&#39;s the same for other parts of the apartment: the oven has excessively thin wire, the induction cooker too, and so on...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering we don&#39;t know which parts of the old system are still in use, that we can&#39;t know for sure, and that the most recent one is garbage... everything has to be redone. Of course that means more money. If I&#39;m not running short at the moment, with the electrician and insulation bill, half of my reserves will be gone. I know it&#39;s an investment and that it will pay itself the day I sell the apartment. But this will also drastically reduce the freedom of choice for the bathroom and the kitchen, and I wanted to customize them to our needs to feel right at home. Or I can extend the budget in exchange for more freelance work? We&#39;ll see.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the plus side, doing this electrical upgrade would mean a new and cleaner electrical box, displacing some light bulbs to better places, having more electrical outlets in some rooms. I also plan to work at home as much as I can in the future, so moving the modem to a more secure and accessible place as well as adding Ethernet cables to each room at the same time of electricity might be handy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the saddest part is that we probably won&#39;t be able to enter the apartment in March like we wanted. Electricity has to be done before the insulation and the electrician is a busy man. He might not be available until the end of January, and we expected to move mid-February. With the time needed to finish renovations, install the bathroom and kitchen, that means moving in April or May.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I brooded all afternoon after the electrician left. I spent the rest of the day cutting the paneling boards in two, so I can transport them into my car. While doing, I realized the apartment was full of light and even a little warm as the sun was passing through the windows. It felt good and reminded me why I was doing all this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the way home I went to the post office to send some paperwork, and to the bank to pay the first part of the construction workers&#39; bill. I bought a muffin at the bakery and ate it in the sofa.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;november-25th-2020&#34; &gt;November 25th 2020&lt;a href=&#34;#november-25th-2020&#34; aria-label=&#34;November 25th 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Today was probably the shortest time I spent in the apartment but also the most exhausting. I went there with a simple idea: remove all the mess that had accumulated. I brought a big 100 liters sturdy bin to facilitate transportation. Then I prepared Yaya (the affective nickname we give to our ugly 2005 Toyota Yaris Verso) for transportation by folding the seats under the floor. &lt;em&gt;My body is ready&lt;/em&gt; I thought while I was climbing to the fourth floor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh jeez my body was so &lt;em&gt;NOT&lt;/em&gt; ready! First I charged the bin with the paneling boards. Probably overly optimistic, I put a &lt;em&gt;little too much&lt;/em&gt; in and when I lifted it I remember saying &#34;Ooooh shit&#34; out loud. Nevertheless, I went down with this massive amount of wood in my arms, stopping every two floor. I filled Yaya with the planks, then went back up there and started again. Just the wood panels took me 4 round trips! I was so tired but it wasn&#39;t over. I also had to get the plastic gullies down, as well as steel frame parts, a gigantic roll of wallpaper and five more bags filled of wallpaper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last round trip was super painful with one of my knees making me suffer a lot, something that never happened before. Exhausted I just grabbed my jacket, went down again and unable to do anything, went back home where I showered, eat and went to sleep.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;november-26th-2020&#34; &gt;November 26th 2020&lt;a href=&#34;#november-26th-2020&#34; aria-label=&#34;November 26th 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Quite a busy but satisfying day! I took Yaya to the waste disposal in the morning, it took me some time, but I was happy that I had sorted everything right, a skill I sort of acquired while we emptied the family house last summer and I acted as the garbage collector!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the car empty I went to the DIY store to buy some furniture: a broom, ground protection sheets, a big brush, masking tape and a humidity treatment for my walls. I went home to eat lunch and had a very hard time getting out of the sofa with my body hurting from yesterday.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I finally managed to go to the apartment around 3pm. My original plan was to dismantle the kitchen cabinets and charge them into the car. But once I was there, I felt a bit demotivated by the state of the apartment. It was a mess! There was broken plaster everywhere, white dust is covering the black floor, pieces of wood, electric cables and screws. It was so dirty!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to regain some motivation I decided I was going to clean this place (and also because it was less exhausting). So I swept the floor for something like two hours, removing everything I could remove. I also took the time to empty the holes in the wood floor created by the absence of the walls we removed. It&#39;s in this situation I really appreciated buying working gloves. After doing the bedrooms and the bathroom I stopped to dismantle the kitchen cabinet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I was doing it I thought to myself there were in good shape and that they could be useful. I texted a friend that is almost done renovating his apartment. He was interested but had to ask his girlfriend, who is apparently a bit bothered by his habit of bringing furniture from nowhere. While I waited for his answer, I decided it was time to empty the kitchen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I moved the last cabinets and the oven in the living room. Then I started unscrewing the counter-top to the wall. I was worried I would break the plasterboard it was glued to while trying to move it. As with many things in the apartment, the whole thing was so old that I could remove it easily, with glue breaking instantly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sink had been fitted inside the counter-top and the counter-top on a cupboard. My goal was to saw the extremities of the counter-top but I didn&#39;t have to: by just pressing a little the chipboard inside the counter-top broke! I was surprised but apparently the wood had rotten and was more brittle than I expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When looking inside the cupboard I finally realized how &lt;em&gt;old&lt;/em&gt; all this kitchen installation was. The cupboard was customized with a small hole for the gas conduct! But the building abandoned gas more than twenty years ago! How old is this thing?! Since the gas tap was added after putting the conduct in the hole, I had to saw a part of the cupboard to then move it away from the wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cleaned the kitchen and received a text message. It was my friend saying his girlfriend say &lt;em&gt;NO&lt;/em&gt;. I&#39;ll have to move the cabinets down by myself, &lt;em&gt;sigh&lt;/em&gt;. But looking at them, I thought it was probably stupid to put them into the trash, so I&#39;ll see if I can give them to a charity once the lock-down is over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was still motivated to do something, so I looked in the kitchen and thought... that I really didn&#39;t like this glass fabric on the ceiling. It&#39;s gross with, with traces of fat. The painting is flaking off when I touch it... &lt;em&gt;Yeah, I should remove it&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now with glass fabric, either you are lucky and everything comes off gently. Or you are doomed and the glue is too strong and you have to peel it. And I was super lucky! But while tearing it, all the paint started to flake off and it was suddenly &lt;em&gt;snowing dry paint&lt;/em&gt; in the kitchen I just finished cleaning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once I was done I realized that there was a lot of paint and glue particles left on the ceiling and, just moving inside the room made them fall. Suddenly I was like the purple thing in Alex Norris comics saying &lt;em&gt;Oh no&lt;/em&gt; out loud. So I took the broom and undertook the absolutely relaxing, not arm hurting at all task of sweeping my kitchen ceiling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It took me around 20 minutes and time for cleaning afterwards. Once I was done I texted Coralie _How about pizza :smirk_emoji:_ and she texted back &lt;em&gt;I already bought one&lt;/em&gt;. This woman can anticipate my needs like no one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I went home, showered, fell into the sofa, ate pizza, drank a local beer made with alga (did I mention I live nearby the sea?), watched &lt;em&gt;Grand Design&lt;/em&gt; on Youtube. In this episode a couple overspends while renovating a chapel. &lt;em&gt;Wow they&#39;re crazy&lt;/em&gt; I thought while gluttonously eating a pizza slice.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-2-2020&#34; &gt;December 2 2020&lt;a href=&#34;#december-2-2020&#34; aria-label=&#34;December 2 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It&#39;s been a few days since I went to the apartment. After the previous week and I felt extremely tired and physically broken. I decided I should rest a little bit. My plan was to go on Monday to clean the last things left as, on Tuesday, I was starting a new exciting mission at work. In my mind it was settled: after this monday, I would only work in the apartment on the weekends.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I learned that my mission was postponed, which hit me harder than I thought. Then the invoice for the electrical renovation came in and it was way larger than what I expected. I asked a friend about it and he told me it was overpriced and that I should ask someone else. He gave me a number and I called. I also called the first electrician to bargain a little bit but it&#39;s not really in my nature to bargain when I don&#39;t have the keys to understand the values of things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On Tuesday I was supposed to go but decided not to. I was demotivated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And today on Wednesday, I finally found some motivation and went. Well most of it came from the rendez-vous with the new electrician. He seems like a nice guy, he gave good advices. He&#39;ll do his own invoice soon. What relieved me is that he can start working much sooner than the first electrician. If the invoice is in my range, I may have electricity done sooner than I envisioned!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After the rendez-vous I went home to eat, then came back one again in the apartment. I felt completely lost to be honest. There&#39;s so much to do I didn&#39;t know where to start. I still have some bookshelves to remove but screws are stuck. I have furniture leftovers to walk down, the charity to call for the kitchen cabinets. And so many walls in a bad state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not knowing exactly what to do, I decided I should start with the humidity traces on the walls. I picked a scraper and a hammer, and started removing plaster that had separated from the walls. I don&#39;t want the future plasterboard to be glued to volatile plaster. I brushed the walls in one of the bedroom to clean them a bit, and then sprayed a special product for humidity stains. A few minutes later I cleaned everything but some stains are still there. I&#39;ll have to redo it another time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also finally took the time to go inside the attic. It&#39;s clean and there&#39;s a kind of wool insulation everywhere. I could barely distinguish the internet fibre cable and the electrical sheaths. It probably won&#39;t be easy to pass electrical cables there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My original plan was to stay a little bit more but my phone lost the internet connection. With no way to listen to music or podcasts, the cold weather even inside, and my motivation reaching new bottoms, I decided to call it a day and went home.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-4-2020&#34; &gt;December 4, 2020&lt;a href=&#34;#december-4-2020&#34; aria-label=&#34;December 4, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A few days ago I mailed the co-ownership syndicate to inform them I wanted to use the attic. I received a mail from them and they were a bit shocked to learn there was a ventilation and electrical system there. Looks like the previous owner never bothered to warn the other co-owners that he was using the common parts of the building to install off-standards systems for himself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They agreed to my demand, so I can use the attic. But the installation has to be done by a professional, I will have to pay if we damage the insulation and if anything should happen due to my installation, it will be my responsibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well at least that&#39;s cleared!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-9-2020&#34; &gt;December 9, 2020&lt;a href=&#34;#december-9-2020&#34; aria-label=&#34;December 9, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I had a hard time finding motivation all weekend and it lasted until Monday, woops. On Tuesday I had to drive Coralie to a rendezvous at the hospital in the middle of the afternoon, so no work. I took this opportunity to buy the next things I needed to continue the renovation: renovation coating, coating knifes and WD40.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wednesday I went to the apartment and started renovating the entrance walls. A lot of small holes and scratches to fill if I want a flat wall to paint later. It was my first time doing the coating with knifes, so I watched youtube tutorials to understand how to do it. Fortunately, for me, it&#39;s a renovation coating, not a smoothing one. Seeing how hard it is already to just fill holes, I hope sanding will be enough to get a flat wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I spent around two and a half hours doing the entrance. It was a very enjoyable and meditative task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once done I went into the attic again. You can&#39;t walk on the floor because of the insulation. I had to go from one beam to another. I discovered a mess with abandoned cables, sheaths and electric boxes. But the biggest mess is the ventilation system, which is suspended to the beams and breathes out inside the attic! All the humidity, grease and dirt was ending there! What was the previous owner thinking?!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason I went there was to judge if I was going to pay for a new ventilation system. My initial renovation invoice had doubled with the insulation. Now with the electricity and the ventilation, it quadrupled. I had to really think about it and make a choice.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-11-2020&#34; &gt;December 11, 2020&lt;a href=&#34;#december-11-2020&#34; aria-label=&#34;December 11, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I was called in a hurry by my father to help him move to his new house. I arrived a bit after the movers were done and helped him setting up furniture, especially the office of my step-mother. She is an independent scenographer and needs her office quick. So we built the shelves, installed the desks, a heater, a whiteboard and several other things. It was cool doing this together and I could feel he needed help and felt a bit overwhelmed so I&#39;m glad I cam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I&#39;m not glad I did was badly wounding my back. I forced too much and was unable to walk correctly for one hour. After that it was impossible to bend over, I was stuck. Nevertheless, we kept going and I arrived back home at 10 pm, feeling like my body was a boulder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So of course, this Friday 9, I could not do any renovation. I stayed in bed most of the day, studying the quotes. In the end I decided we should redo everything. The new electrician is the same price as the first one (whom I haven&#39;t heard of again by the way) but had better ideas on how to do all this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We&#39;re going to centralize the whole electrical system inside the kitchen, as well as the internet. A specialized box will contain all the circuit breakers, the Ethernet cables, the optic fibre cable and the modem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the ventilation, we&#39;re going to remove the old system from the attic. If we were to keep using it, we would have to drill a hole and add a chimney on the roof. Instead, we&#39;ll put the ventilation engine inside the toilets, using a fake ceiling to hide it. The toilets are between the bathroom and the kitchen, and next to the building natural ventilation conduct. We&#39;re going to move the ventilation from the ceiling to the walls, connecting the three rooms together and exhaust the air through the building conduct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way there will be nothing inside the attic anymore except for the low voltage cables. I signed the quote and paid the deposit. Adil, the new electrician, will start early in January. I&#39;m worried about the cost but relieved everything is settled now. I now have a goal, which is finishing the walls at the same time Adil finishes the electricity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once that&#39;s done, the insulation will come and the last renovations should go fast. Next steps: ordering a kitchen and drawing plans for the bathroom. I have a good feeling about the latter.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-14-2020&#34; &gt;December 14, 2020&lt;a href=&#34;#december-14-2020&#34; aria-label=&#34;December 14, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Today I went to check the result of my coating in the entrance. And I&#39;m glad, it&#39;s not bad! I&#39;ll have to check how it looks once it&#39;s sanded but I&#39;m happy with the result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought I had filled all the holes and scratches in the entrance but turns out there&#39;s more. So I spent quite some time fixing them. I went faster than before now that I have more experience. Once it was done, I went into the corridor to begin a big coating job: an interior corner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The previous owner had an electric cable going there, then through a wall to power an electric heater located in the next room. I removed the cable as it&#39;s going to be replaced, but the sheath was partly inside the plaster. This interior corner being on the opposite of a wall we removed, it was kind of frail and a lot of debris came off. No choice but to fill it with a lot of coating and try to make a ninety degree corner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I asked myself what I could do next and focused on preparing the kitchen walls. There was a TON of wall plugs (Is that how they are called?) and I think I spent more than half an hour removing them all. Some were so stuck I had to cut them.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-15-2020&#34; &gt;December 15, 2020&lt;a href=&#34;#december-15-2020&#34; aria-label=&#34;December 15, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Went to see my friend Marc to borrow two important pieces of equipment: a construction site vacuum cleaner and a giraffe sander. He was in the middle of painting a room (he&#39;s almost done renovating his own apartment) so I could not stay long. Went to the DIY store and bought glasses and a noise reduction helmet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was feeling good, so I thought &lt;em&gt;come on, why not start with a ceiling&lt;/em&gt;?! I connected everything and started and &lt;em&gt;omagad this thing is heavy and looking at the ceiling for so long hurts my neck so much and I have less strength in my arms than I thought&lt;/em&gt;. I had to go little by little, resting 5 to 10 minutes between each passage, but I made it! It took me around one hour I think. I&#39;m happy with the result. This ceiling had had glass fabric before I removed it, and it left a lot of glue and paint chips. Everything is gone and outside a plaster rift I don&#39;t think I&#39;ll have a lot to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I went into the entrance to sand the walls I carefully coated the previous days. It... didn&#39;t go as well as I wanted. The previous owner probably put wallpaper because in some parts, the coating crackled and fell, revealing the plaster. I wanted to remove all traces of coating to have a clean plastered wall, but even the sanding machine could not remove it. The result is not that great: in some places even after sanding I have a thin thickness. I&#39;m not sure if it will be visible once everything is painted or if I have to redo a full wall smooth coat before painting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The place was a mess after all this sanding so I took some time to vacuum and clean. Overall I&#39;m happy with all this but damn, it&#39;s going to be a long journey to sand all the ceilings and walls.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-16-2020&#34; &gt;December 16, 2020&lt;a href=&#34;#december-16-2020&#34; aria-label=&#34;December 16, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I originally planned to continue sanding today but my muscles were sore. We decided to go kitchen hunting with Coralie. Marc&#39;s partner Swenn explained to me they bought their kitchen at Leroy Merlin, so I proposed we went and take a look. We spent some time there checking lights, paintings, showers, and of course kitchens. I found something I really like, Coralie, not that much but she doesn&#39;t hate it. It&#39;s dark flat panels with a wood worktop and overall wood pieces there and there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seeing different styles made us realize a thing we actually don&#39;t want: cabinets going from the ground to almost the ceiling. It feels too big, it makes us suffocate. We&#39;ll try having the cabinets to go higher than 1,6 to 1,8 meters. We&#39;ll be able to put plants and bottles on top of them. We still have to really think about all this as for now, we only choose the style and not the configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ikea was nearby so we went there too. In the end none of the kitchens pleased me. There&#39;s something I felt for the first time: it&#39;s so easy to identify their furniture that if I took their kitchen, it would not be &lt;em&gt;my&lt;/em&gt; kitchen but &lt;em&gt;an Ikea kitchen inside my house&lt;/em&gt;. Maybe that&#39;s because of how mainstream the brand is now? Maybe because it&#39;s the default place everyone (including us) go? Either way, I don&#39;t want them even if they are good on the practical side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We spent little time in Ikea, but it exhausted us. These shops are intentionally designed as mazes and it&#39;s incredibly taxing mentally. We got out as quick as possible and went home.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-17-2020&#34; &gt;December 17, 2020&lt;a href=&#34;#december-17-2020&#34; aria-label=&#34;December 17, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I was still feeling tired today and decided to not sand another ceiling. Instead I moved to the first bedroom, which is fully painted in grey. I was determined to sand the walls as it seemed to me this room was one of the easiest to deal with and I wanted a victory!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Surprise! I didn&#39;t get one! I started sanding and the paint would not come off the all. I know you are not supposed to totally remove it, just scratch so the new paint will stick. But these walls were badly painted and appear to have a big grain. I wanted to sand it off to have a flat surface and even with the girafe and an 60 millimeters grain, I could only scratch the surface. I also removed the plinths and discovered broken plaster everywhere. I managed to sand all the walls, brush and clean them after.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I turned my attention to this damn corridor. Again, using a cutter and a brush, I cleaned the holes and cracks. The ceiling has a lot of them, particularly because of the polystyrene plates that were glued with coat. I coated as much as I could for more than hour, then fatigue from having the arms up hit me like a truck. I think I did not more than a fifth of the corridor and it made me mad it was so slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ended up thinking I should maybe just plasterboard the whole ceiling. I have dozens and dozens of holes to fix, plus the cracks. It&#39;s going to take me hours. I could just drive to the next DIY shop, buy a plasterboard and some glue and with the help of a friend, have it done in one to two hours. I&#39;ll think about it.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-19-2020&#34; &gt;December 19, 2020&lt;a href=&#34;#december-19-2020&#34; aria-label=&#34;December 19, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;My arms and back hurt so much yesterday! It felt like having ants in the hands for the whole day, so I stayed at home. Today Coralie decided to join me to finish her most favorite activity: pealing wallpaper! I&#39;m glad she enjoys this, as I hate it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We worked for around 4 hours. She managed to do almost all the kitchen, as well as the last bedroom. On my side, I started fixing the plaster at the wall&#39;s bottom in the bedroom and I sanded two days ago. It took quite some time and when I was done, I proceeded to fix the little holes and cracks in the walls. But I soon discovered that... I was NOT going to enjoy these walls if they stayed this way. So I decided to remove the paint grain by coating the entire walls with a very thin layer of plaster. I only managed to do one of the walls but I was happy with the result. Now the surface doesn&#39;t show any grain or roughness. I&#39;ll sand them with a thin grain to make sure it stays flat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While Coralie was finishing her job, I went to the kitchen and finally removed the last glass wallpaper, feeing the last wall. Again, it took time as some parts were heavily glued and hard to access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When we went home Coralie was satisfied but exhausted. Her back and arms hurt. She went to take a shower, I cooked dinner and she went to bed at 9am.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-20-2020&#34; &gt;December 20, 2020&lt;a href=&#34;#december-20-2020&#34; aria-label=&#34;December 20, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Back again today with Coralie. She was determined to finally remove all the wallpaper in the last corners of walls. She also fought her fear of heights and used the stepladder to get at the top of walls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for me, I sanded the walls in the bedroom I plastered yesterday. I used a smaller grain and it worked well, I now have a smooth wall. We went home quite early as we were tired from yesterday and wanted to have some tea.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-21-2020&#34; &gt;December 21, 2020&lt;a href=&#34;#december-21-2020&#34; aria-label=&#34;December 21, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Today I stayed at home! I was tired and wanted to work on the kitchen plans. I think I spent something like 2 and a half hours just drawing plans and checking furniture? I&#39;m kinda lucky overall: the kitchen is 3 meters by 3 meters and most standard furniture is 60 centimeters wide. So I know I have 5 units to chose for each wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But that&#39;s not so easy! Should I put the fridge on this side or this side? Is this dishwasher small enough to fit? In the end I&#39;m starting to have an idea of how we&#39;ll occupy the space. I don&#39;t want a kitchen with furniture going all over the walls. I want them to be around 1,7 meters tall, add some pretty wood on top and finally some plants. But I&#39;m still unsure we&#39;ll have enough storage if we don&#39;t add cupboards to the walls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;ll have to take an appointment with a seller. Maybe there are obvious solutions I&#39;m not seeing.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-22-2020&#34; &gt;December 22, 2020&lt;a href=&#34;#december-22-2020&#34; aria-label=&#34;December 22, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Alone today! I want to finish the bedroom and to do so, I inspected the paint and plaster cracks in the ceiling. First it wasn&#39;t so bad. The building is 60 years old, so of course things moved and cracked. But then I found another crack, and this one... was not a crack, it was an entire one square meter of plaster that was not glued to the wall at all. So I had to remove all of it and I&#39;ll need to re-plaster it. &lt;strong&gt;I&#39;M SO SICK OF PLASTER&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This ceiling was full of cracks and is now full of holes. Then I sanded it and it went OK. No other major discovery outside some humidity traces but I&#39;m not surprised, I&#39;ll treat them later.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-23-2020&#34; &gt;December 23, 2020&lt;a href=&#34;#december-23-2020&#34; aria-label=&#34;December 23, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Home alone again today. My friend Philippe agreed to help and will come tomorrow so instead of finishing the bedroom ceiling, I sanded the other bedroom. Ceiling, walls, everything! I also removed screws and plinths and cleaned everything. I inspected the ceiling in our future office. Some placed seemed cracked, but it was in fact paper! Finally a room with something made correctly. The previous owner applied a ready to paint wallpaper on this ceiling before painting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I decided to not remove it and just fix the small holes there and there, if that&#39;s possible of course.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-24-2020&#34; &gt;December 24, 2020&lt;a href=&#34;#december-24-2020&#34; aria-label=&#34;December 24, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Went to the DIY store to buy more plaster, masks and cutters. Philippe joined me early in the afternoon and started to fix all the little holes and scratches in the second bedroom. As for me, I geared up again and sanded the ceiling of the bathroom. This one was easy and allowed me to check the humidity problems. Overall everything seems ok except for one corner where the bath was. I treated it with a special product and outside one or two paint cracks, I won&#39;t have a lot to do, which is a relief!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I moved to the office and removed screws and plinths. Once again the plaster behind the plinths is very old and breaks easily, so I&#39;ll have to fix it. I scratched it as much as I could to avoid falling pieces. Then I cleaned everything and we stopped early to go home and prepare dinner!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was so happy to have help today. It&#39;s not that I mind being alone but being two, one sanding and the other plastering, makes the whole renovation project go super fast.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-26-2020&#34; &gt;December 26, 2020&lt;a href=&#34;#december-26-2020&#34; aria-label=&#34;December 26, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Small day! Since it&#39;s the holydays, I wanted to avoid mankind noise on a Saturday so I just went to do some plastering. I don&#39;t think I&#39;ve mentioned it before but I&#39;ve been listening to &lt;em&gt;Darknet Diaries&lt;/em&gt; while working, an amazing podcast telling stories about hackers, penetration testing and many other things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, while listening, I plastered the holes in the first bedroom. The small ones, that are mostly paint or cracks, went ok. The big one, almost a square meter large and half a centimeter profound was super hard to work on. The bucket of plaster I bought on the 24 is almost empty and I&#39;m not sure I made it correctly since it&#39;s hard to make a flat surface when it&#39;s so large.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also treated again the mold traces there and there. They went easily in the kitchen where the plasterboard is easy to clean. It&#39;s more complicated in angles and plaster where some of them went off, but not all. I&#39;ll have to redo it again next time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Went home to learn that a storm named &lt;em&gt;Bella&lt;/em&gt; will hit our city tonight. Unfortunately I didn&#39;t close the shutters so I had to go back and seal everything.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-28-2020&#34; &gt;December 28, 2020&lt;a href=&#34;#december-28-2020&#34; aria-label=&#34;December 28, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The clock is ticking! I have the giraffe and the vacuum cleaner until January 5 so I need to get all the walls and ceilings done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today I started with the third bedroom, our future office. The fixes I did on the ceiling seemed OK. I filled all the screw holes and redid all the plaster at the bottom of walls, where the plinths were. Those plasters parts were among the most broken I&#39;ve seen in the apartment and it took me around an hours to do everything in the room.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I sanded the ceiling in the second bedroom, as well as the walls. Those are the walls Philippe worked on and I was eager to see them sanded as... It makes the walls feel so clean! It&#39;s such a joy to witness walls without holes inside them, totally smooth! But still, there were some work left to do. First, some holes escaped our vigilance, so I filled them. I also redid the plaster where the old plinths were, fixed a corner and a small crack at the ceiling. I&#39;ll probably do a smoothing plaster on these walls tomorrow as they are almost ready for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I finished my day with the first bedroom and was quite relieved. Most of the plaster I added to fix cracks on the ceiling is OK. The only problem is, I did not put enough, which creates some dips. It was to be expected since some parts were almost a centimeter deep. After sanding again, I cleaned with a broom and redid plaster to achieve a flat surface. I&#39;m not 100% sure it will be good enough, maybe I&#39;ll have other fixes to do before calling it done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall a productive day, which quite surprisingly I spent without listening to any music or podcast. I also finally &lt;em&gt;got&lt;/em&gt; the moves to work with plaster, and understood the importance of mixing it to make it more sticky and easy to work. Oh, talking about plaster, I&#39;m almost at 15 kilograms of hole fixing plaster since I started the project. If I had know I would use so much, I would have bought a big bucket from the start.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-29-2020&#34; &gt;December 29, 2020&lt;a href=&#34;#december-29-2020&#34; aria-label=&#34;December 29, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I was feeling a bit weak today and decided to move forward some tasks that didn&#39;t involved wearing a mask and carrying a gigantic sanding machine. First I tried the smoothing plaster on a wall and... it went OK I guess? This plaster is way more liquid and dries super fast, making it hard to do some corrections. I tried only applying a small coat on the first wall, and a more thick one on the second. We&#39;ll see once sanded what is the result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After this I moved to the living room and started enlarging the ceiling cracks. There were a lot of them but fortunately, there were no big plaster surface detached from the wood blanks that compose the basis of the ceiling. I detected two huge cracks going from one side of the room to the other and enlarged them. I&#39;ll plaster them soon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I did the same in the kitchen. There was a crack that went from the window to behind the door. It was only fixed on the surface by the previous owner. I digged deeper inside it to be sure we well have enough depth so it won&#39;t crack again. The crack also went through the light location and almost all the plaster around it came off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cleaned everything while listening to the Haven soundtrack by Danger, it was super cool. I also listened to the Full Stack Radio episode with DHH talking about their new web stack, it was interesting. Tomorrow I&#39;ll go buy more filling plaster (a big bucket this time!) and will restart the sanding process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;December 30, 2020&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A productive day!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It all started with a trip to the DIY shop, a trip that led to many interrogations. You see I&#39;ve been using filling plaster for weeks now, always the same brand and type. Each time I thought &lt;em&gt;ok this is enough&lt;/em&gt; and each time I had to go back and buy more. So this time I was determined to buy the &lt;em&gt;BIG BUCKET&lt;/em&gt;. So I arrived at the stored, rushed straight for it and, took the bigger bucket and... it was &lt;em&gt;light&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like, incredibly lighter than the previous bucket I bought. I thought what the hell, is this a demo bucket? So I picked another. Light too. Is it a version where you have to put water in? No, it&#39;s written on it, paste plaster. I thought I was going nuts, so I weighed another bucket from another brand. This 3 kilograms bucket was heavier than this supposed 5 litters bucket. &lt;em&gt;WHAT IS GOING ON&lt;/em&gt;. I thought forget about the bigger bucket, take the usual one... But there were none left.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suddenly someone from the shop comes around and said &#34;I think you have questions about plaster&#34;. So I took the bigger bucket, showed it to him and murmured &lt;em&gt;why is it so light I don&#39;t understand&lt;/em&gt;. He laughs and told me it was a lighter version of the plaster. A more modern one, made of micro balls, easier to use. So I took it (it wasn&#39;t more expensive) and went to the apartment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was so curious I wanted to see what it looked like so I opened the bucket and found something that looked like... &lt;em&gt;Coconut foam dessert&lt;/em&gt;?! I stared at this thing for almost 10 seconds in disbelief. How was this thing supposed to replace traditional plaster? But well, that&#39;s all I had so I grabbed the stepladder and decided to fill the cracked I expended on the living room ceiling. And it was... interesting? It&#39;s way easier to apply and it sticks a bit better. You also don&#39;t have to mix it as much as traditional plaster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I filled all the cracks in the living room, then moved to the kitchen where I did the same. On large cracks, this type of plaster is way easier to use and I was done super fast. I then moved to the bedroom with problematic ceilings, started the sander and sanded again the plaster from my previous attempts at making a flat surface. It was, again, not good on the 1 square meter part and this ceiling is starting to drive me nuts. So again, I had to re-plaster it (this time with the coconut foam type) and I hope that tomorrow, when I sand it, again, it will be the last time I have to do this (I&#39;m angry at a ceiling, yes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moved to chamber 2 and started sanding the walls I plastered with smoothing plaster. I had to use a smaller grain with the sander in order to remove the small edges and holes. And it turns out the better strategy was a thin layer of this plaster, not a thick one. The thicker one had too many hollows due to my lack of skill with the spatulas. The good news is: I now have &lt;strong&gt;my first smooth and ready to paint wall&lt;/strong&gt;! And it&#39;s so smooooooth when you touch it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Galvanized by this incredible win, I smooth plastered the other walls of the room with a thin layer. It was hard, as the walls were way bigger and the plaster kept drying. I moved fast and was able to finish everything when the night fell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I spent the whole day listening to a &lt;a href=&#34;https://haven-game.bandcamp.com/track/08-16-home&#34;&gt;single song&lt;/a&gt; from the Haven soundtrack. First, it was because I enjoyed it. Then because I was stuck with my gloves, my helmet, glasses and equipment and could not reach my phone in my pocket. But it didn&#39;t really bothered me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tomorrow: I&#39;ll probably prepare more walls for smoothing plaster. As I&#39;m not supposed to do noisy renovation work on January first, I&#39;ll prepare as many walls as I can and sand them on saturday.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;december-31-2020&#34; &gt;December 31, 2020&lt;a href=&#34;#december-31-2020&#34; aria-label=&#34;December 31, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Today my goal was to prepare as much walls as I could for future coating. But first, I wanted to see the result of the previous walls, so I sanded them and I was quite happy with the result. Even if there&#39;s a few scratches left in some places it&#39;s such a huge progress compared to the initial state of the walls. The damn square meter ceiling hole is getting &lt;em&gt;better&lt;/em&gt; but after sanding it, I could see it wasn&#39;t quite there too, so I had to re-plaster it again. I hope this time will be the last. As for the other ceilings, I sanded them all and except for one part where the coconut foam plaster was not dry and came off, the rest is good. I only patched a few scratches that I missed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After this I kept sanding everything I could find. I sanded the last bedroom walls, the corridor walls, the corridor ceiling as well as the entrance. This way I&#39;ll have enough surface to plaster tomorrow. Came home earlier than I expected to celebrate the new year.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;january-1-2021&#34; &gt;January 1, 2021&lt;a href=&#34;#january-1-2021&#34; aria-label=&#34;January 1, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Happy new year! It&#39;s plaster day! And damn, I had no stamina or energy when I arrived at the apartment. I was thinking of doing at least one room and the corridor, but ended up with only &lt;em&gt;one wall&lt;/em&gt;. The plaster was drying faster than I could apply it, the wall being clearer than the others, it was hard to see where I already applied plaster. In some cases, I undid what I previously did and it made me angry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After one hour and one wall I called it a day and came back home. I was tired, hungry and demotivated. I called Marc and he assured me I could probably keep the sander and the vacuum cleaner until Tuesday next week, and also take them again later if needed. I&#39;ll try to finish everything and clean by Tuesday. I want the place clean for when the electrician starts his work.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;january-3-2021&#34; &gt;January 3, 2021&lt;a href=&#34;#january-3-2021&#34; aria-label=&#34;January 3, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I took a few days to rest and recharge and now... I&#39;m okay I guess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So today I went back and started a &lt;em&gt;plastering extravaganza&lt;/em&gt;. My goal was simple: plaster as much walls as I can to be able to sand them the next day and return the vacuum cleaner to Marc on Tuesday evening. First I finished the the last bedroom walls. It took more time than I expected but overall it went well. I&#39;m still finding this smoothing plaster hard to work sometimes. It&#39;s not liquid enough to do a small layer without, sometimes, making several layers when I scrape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once I was done with this room I attacked the corridor, doing all the walls, corners, door frames. Some parts needed filling plaster before smoothing but I was so bored I decided to give it a go and see later. It took again more time than I wanted and when I finished the night was coming and I still had the entrance to do. I was starting to run out of plaster again and felt it was maybe better to stop there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I listened to the last episode of the very good podcast &lt;em&gt;Les démons du midi&lt;/em&gt; which is about video game music. It was a very good choice.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;january-4-2021&#34; &gt;January 4, 2021&lt;a href=&#34;#january-4-2021&#34; aria-label=&#34;January 4, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Today was a sanding day! The goal? Sand everything that needs it in the bedrooms and corridor and achieve a milestone. So of course I went, of course I put all my equipment, and of course I sanded the last bedroom and the corridor. I don&#39;t know if I&#39;m getting used to it and built some muscles but I can sand for a longer period now. It&#39;s cool but at the same time it makes more muscles strains than when I was making pauses more often.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used a small manual sander my father gave me to clean the door frames and corners, as well as some parts where I added too much plaster yesterday. The result is... not as good as the previous rooms I think. I was probably more impatient when I did the last one and the corridor. We&#39;ll see how it goes during the painting phase. If there are too much traces, I&#39;ll fix them independently instead of plastering all the wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I went back to this damn square mater of ceiling and this time, I gently hand sanded it. I feel the plaster if fragile and that I probably didn&#39;t employ the best method to fix this. Once I removed most of the holes and bumps, I thought... It was starting to be good. When I entered the room and look at this specific part of the ceiling, it didn&#39;t struck me as a big patch of mess like before. Still, it&#39;s not perfect yet! So I applied a thin layer of smoothing plaster on it. Maybe it will be the last coat. Crossing fingers!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I was DONE with the global sanding and plastering for the bedrooms and the corridor. There&#39;s still some things to fix there and there but overall, all walls and ceilings are ready for painting. But before that, the whole place needed a good cleaning. There was plaster dust everywhere. So much that I realized the windows where dirty and that I wrote &#34;LOL&#34; in the dust on one of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And all this dust, it gave me a feeling of... underachievement? It didn&#39;t felt like I achieved a milestone. So I decided to clean all those rooms. I cleaned all the walls with a broom, then vacuumed all the rooms. When I did the first aspiration of dust, I realized &lt;em&gt;oh my, it&#39;s true that I bought an apartment with a black floor&lt;/em&gt;. I quickly realized that, since I didn&#39;t protect the floor, I had splashes of plaster everywhere. It gave me a feeling of &lt;em&gt;undone&lt;/em&gt; that bothered my achievement sense!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So &lt;em&gt;of course&lt;/em&gt; I took a mop, water and soap, and mopped all the floors, scratching all those plaster stains. It felt like a battle, me versus those little bastards preventing me to achieve my glorious moment of finish! The mop had a too short stick and it broke my back. I think it took me around one hour and three water changes?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BUT THIS IS IT. I HAVE CLEAN WALLS. CLEAN FLOORS. CLEAN CEILINGS. I AM THE KING OF THE WORLD!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;january-5-2020&#34; &gt;January 5, 2020&lt;a href=&#34;#january-5-2020&#34; aria-label=&#34;January 5, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This is Tuesday and I have to give back the vacuum cleaner to Marc tomorrow! I decided to finish it once and for all and sanded the whole living room ceiling. It took quite some time but went way more smoothly than I thought, I was happy! I sanded the entrance ceiling too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once I was done I added water to my almost finished plaster bucket to make it more liquid, then plastered the entrance walls to hide the various holes and scratches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And now for a perfect finish... I went to the infamous bedroom with it&#39;s square meter of plaster. I once again hand sanded it to erase all traces and bumps and I was left with... a finished ceiling. I was so happy and relieved to finally be done with this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the end of the day the electrician called me. He will start his work Thursday next week. I can ask for the renovators to come at the end of June to put the plasterboard and finish the walls. Everything seems to be fine!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;january-6-2020&#34; &gt;January 6, 2020&lt;a href=&#34;#january-6-2020&#34; aria-label=&#34;January 6, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Last day before I take a break! Sanded the entrance walls and cleaned the whole living room area, the entrance and the kitchen. It took a while, as there were a lot of furniture still hanging there. I started moving them downstairs in order to put them at the recycling center.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But after 4 back and forth of 4 floors, I was totally beaten. I knew I should not have done that but my knee started to hurt, so I left old furniture in the staircase near my door. I hope won&#39;t bother the neighbor as it&#39;s not in his way, but I should have clean this anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;m thinking of asking friend to come and help put everything down and then I&#39;ll drive all this once and for all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But here we are, I&#39;m done with sanding and plaster! At least until I start doing the kitchen and bathroom. It&#39;s such a milestone and I&#39;m so happy.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;january-8-2020&#34; &gt;January 8, 2020&lt;a href=&#34;#january-8-2020&#34; aria-label=&#34;January 8, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve been resting a lot for two days. I&#39;m a little sick but today we decided to go back to the kitchen stores to make our final choice. We have to decide where we&#39;ll put everything and tell the electrician so he can add the power sockets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, we went back to the kitchen I liked. I found nothing new about it but Coralie was... reluctant! She really changed her mind about it. She found it felt cheap. I agree it&#39;s not the best kitchen in the world but since we can&#39;t spend too much, that&#39;s the best we can do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;She wanted to try other handles to see if it was better. It actually worked better for her but not for me. I think we tried or checked almost a dozen handles with different shapes, colors and sizes but something was not working. I can&#39;t believe I&#39;m writing this. I feel so OLD with my kitchen handles problem, omagad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We went out and concluded the best kitchen was probably a fire camp in the middle of the room with a suspended pot and laugh a lot. We didn&#39;t know what to do and Coralie needed a frame for a custom print she bought from one of our artist friend, so we went, again, to Ikea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that&#39;s when the most strange thing of the day happened. We went by the kitchens again, initially to see if we could combine our kitchen choice with Ikea handles. And then, while watching, we stopped by a demo kitchen that was &lt;em&gt;the total opposite&lt;/em&gt; of our tastes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was a clearer model, with green doors and light wood. There were no handles but knobs, in full wood. We were initially watching the knobs and suddenly we realized... this kitchen was &lt;em&gt;relaxing&lt;/em&gt;. It felt lighter, gentler. We were going for anthracite doors with metal handles and now we&#39;re here with green doors and wooden knobs? What was going ong?!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We sit there in the demo space and started talking. We realized we were in a full &lt;em&gt;brutalist paradox&lt;/em&gt;. It&#39;s an expression I found, mocking the fact that a lot of people like brutalist architecture (me included) but few people would be able to live in them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have a kitchen with a single window on the north wall. It&#39;s one of the darkest places of the apartment and yes, adding black and anthracite furniture on two walls might make it oppressive. On the opposite side of the kitchen demo at Ikea, there was another demo place, full black with a lot of angles, straight lines. I already decided I didn&#39;t wanted this but Coralie initially liked it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now she looked at it and said &#34;If I was in this kitchen during breakfast, I would have the feeling of making breakfast for the ambassador&#34;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So there we are, stuck between what we like with our brains and what we like with our guts. Now we have to decide which side to go. That means... we still don&#39;t know which kitchen to take.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;january-9-2020&#34; &gt;January 9, 2020&lt;a href=&#34;#january-9-2020&#34; aria-label=&#34;January 9, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;We went &lt;em&gt;kitchen hunting&lt;/em&gt; today. Thanks to the kitchen gods, it look like all kitchen stores are located in the same area, so we decided to go. What should have been equal time spent in all the store turned into something else. Basically we went to the first one, that is more high end than the others, to get the feeling of what is the top and compare more easily after. But we were met by a seller, a young man that was very polite and natural. A former woodworker that chronic pain in hands forced him to stop, and now he sells kitchen, quite the journey. he asked for a budget. I told him one and he said it was probably not doable for his standards. So we rose the standard a bit just to see what was possible. Oh boy I was not expecting this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He made us take the grand tour. He described &lt;em&gt;everything&lt;/em&gt;. From hinges to laser soldered wood to... waterproof plinths? Everything was top quality (the furniture is guaranteed 10 years, the hinges 20 years) and he demonstrated it by literally standing inside a drawer (he was probably around 70 kilograms) and explaining other things like how everything is more sturdy thanks to specific fabrication, how everything is solvent free, and many, many other things. For a seller he was more genuine than I thought he would be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We sat and discussed plans, electronics and other things. I explained how our main problem was having enough counter space and storage while conserving low profile furniture. I also wanted things like the oven to not be near the ground, as I&#39;m tall and fed up about crouching all the time. He proposed to make us a plan and a 3D visualization for the next Saturday and we accepted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This non-planned meeting took us over 2 hours! So, when we were finally out, we were exhausted and we were running out of time. The curfew was starting at 6pm, we had less than one hour to visit the other stores. So we rushed all of them, took a bit of time to discuss with people there when we could, and collect catalogs. We discovered that most sellers had the same basic prices but that options could raise the price significantly from one store to the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most important discovery, I felt, was that most people going to IKEA could actually afford more original and quality products if they just took the time to visit specific stores. It look like either IKEA is more expensive than before, or kitchen makers lowered their prices.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;january-14-2020&#34; &gt;January 14, 2020&lt;a href=&#34;#january-14-2020&#34; aria-label=&#34;January 14, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;First day of electricity, I was excited! Excited but tired, as I had to wake up at 7pm to open the door at 8pm. These days I usually wake up at... 11am.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the three electricians arrived. We went to each room, placed every electric socket, light switch and Ethernet plugs! And right after, they started removing old sockets, cutting old wires... The metal tubes with the original electrical installation were removed and it was so satisfying. I could see the rooms without those rusted pipes, which made me feel much closer to the end of renovations (it&#39;s just a feeling, it&#39;s not done lol).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I stayed with them all morning to do more plaster. The entrance ceiling holes were filled, as well as the part of the corridor ceiling that will soon be in one of the chambers. I plan to sand them soon and maybe I&#39;ll add smooth plaster. I also fixed little things while answering questions about the apartment.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;january-15-2020&#34; &gt;January 15, 2020&lt;a href=&#34;#january-15-2020&#34; aria-label=&#34;January 15, 2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Small day today! We went with Coralie, so she could finish peeling the wallpapers inside the toilets. Meanwhile I started sanding the kitchen door frame and plinths to see how they reacted. My initial goal was to try to sand until the wood was visible. No luck, the wood was covered by a resin, and this resin was then painted several times over the years, resulting in a supet thick coat that all plinths and door frames have. It will be a nightmare to sand all these frames, especially because some have sculptural details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I was pesting and wasting sanding paper, I asked Coralie to plaster the holes inside the toilets. She was... reluctant. Actually no, she was not enjoying plaster. She accepted and finished, but when we went home I could feel she was still bothered by it. I asked and she told me she &lt;em&gt;hated&lt;/em&gt; doing plaster. It was like a gut hate!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;january-16-2021&#34; &gt;January 16, 2021&lt;a href=&#34;#january-16-2021&#34; aria-label=&#34;January 16, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Today was the big meeting to see what the kitchen maker decided. We had a meeting at 2pm and left at 5:30 pm, so it took quite a time! First he presented us with a general look and he made some changes we were surpised about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest change between my plans and his was the induction cooker and extractor hood. He positioned them on the right side, while I was putting them on the left side to keep more counter space. His idea was that the cooker plate was that it made more sense to be able to prepare your food and just reach out directly to cook them. He also made the counter go upside the drying dryer, which added counter space. The only non-counter space is the fridge in the corner near the window, the place with the least amount of light. Of cours he added several drawers, and also a free space to put the cat litter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other side, there&#39;s a cellar type column 160 tall, with internal drawers to put all our food and bottles. Next to it is another column with the microwave and the oven. Both are at the top of the column, which mean I won&#39;t have to crouch to use the oven. And of course there&#39;s a sink with space on each side (nice) and under it, a closet and the dishwasher. The counter goes to the wall, between the hot water tank and the washing machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the presentation was done, we travelled through the shop to see each piece individually. I also suggested we changed the wood aspect to something clearer. The wood tone was too noisy to my taste. We also had to choose handles. I&#39;ve never so &lt;em&gt;old&lt;/em&gt; than when it took us 20 minutes to choose handles for kitchen cabinets. We also saw the oven, extractor and other things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally, the price. It was, of course, expensive. Not much more than going to IKEA, probably a quarter more expensive I think. I was prepared for the price and overall the maker respected our budget. But I wasn&#39;t sure. It felt like a caprice to spend more money than necessary. It felt unreasonable. We had to take some time with Coralie to talk about this, which the kitchen maker agreed. She told me deciding right now, without going to other shops to ask for more quotes, was probably not the right thing to do. And of course she was right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I liked it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s stupid, we&#39;re talking about a kitchen. But I felt this proposal would make this space practical and relaxing. I liked this idea. I&#39;ve always had this issue that I feel I don&#39;t deserve better, just the norm. That I should not even try making it better, and accept that this is how things are. A kitchen is just the place where you cook, why bother making it better? An old habit of my money-less days of thinking about practicality without considering my own well-being, tastes and desires. At this moment, I felt I should not fall into this self-deprecation trap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the kitchen maker took time and found solutions to most of our problems while respecting the budget I asked. He exceeded my expectations. I felt his professionalism and service deserved payment. Thanks to him, we knew how to fix our problems. Leaving and asking the same thing to someone else for cheaper using his expertise would be extremely unrespectful. As a former seller that had his fair share of bad clients, and as a professional that thinks expertise and service deserves payment, I didn&#39;t want to this kind of people I despise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know a lot of people don&#39;t have this chance, but I can do freelancing, high paying work when I need money. I prefer working a few days more to earn money, instead of losing several hours in different stores, create a contest between them, waste everyone&#39;s time, compare quotes, hunt for the lowest price on the internet, and finally announce who is the &lt;em&gt;winner&lt;/em&gt;. Organizing a competition to save a bit of money is not my thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally, I decided upfront when I bought the apartment that this whole project should be done respecting my own standards, way of thinking, physical and mental capabilities. I&#39;ve spent a lot of time and money already to do things in what I consider is the right way of renovating this place. I did not cover broken walls, I fixed them. I decided to insulte to prevent humidity problems, not hide them with paint. I&#39;m fixing the electricity so it can last and be safe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why was I trying to compromise for the kitchen?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So yeah, I went back and accepted the quote. The maker will come monday to make measurements. I&#39;ll have a green tea, long lasting, eco-friendly, made in France kitchen. I felt it was the right choice.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;january-18-2021&#34; &gt;January 18, 2021&lt;a href=&#34;#january-18-2021&#34; aria-label=&#34;January 18, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I went to the apartment this morning to open the door for the kitchen maker so he can take measurements for the furniture. While he was working I started removing plinths from the door frames. Behind them I found the junction between the walls and the wooden door frame. It&#39;s most of the time in good shape but the wood clearly moved in some parts, leading to gaps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I removed the frame inside the kitchen, sanded it and plastered it. I&#39;m not sure how it will look like so I&#39;ll let it rest for two days and then go back and sand and see if I enjoy the result. I hope I will, as I don&#39;t want to sand all those door frame plinths.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the kitchen maker was done I left.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;january-26-2021&#34; &gt;January 26, 2021&lt;a href=&#34;#january-26-2021&#34; aria-label=&#34;January 26, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I came back from a family reunion (the first since August) with a new tool: a small electric sander! I borrowed it from my mother. It&#39;s the type that looks like a small iron. I was skeptical but it was suuuuuuuuuch a good tool!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today I went to the apartment with the goal of sanding door frames. I finished the kitchen&#39;s frame and doors, it went way smoothly than before. I then proceeded to the corridor door and door frame. It takes a lot of time and sandpaper but it&#39;s actually not hard on the muscles and it vibrates way less than with the previous sander.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also removed more plinths around the door frames and added or sanded plaster. Overall it&#39;s starting to look great and I think once painted with the same color as walls, everything will look super fresh. Well, I still have 5 doors to do but that&#39;s a start!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;january-28-2021&#34; &gt;January 28, 2021&lt;a href=&#34;#january-28-2021&#34; aria-label=&#34;January 28, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Today I went while the electricians were present. They are progressing well and doing a very nice job. Almost all trenches are done, a lot of them already have the cables in and all the light holes are done in the ceilings. While they were working I sanded the entrance door, removed cleats from walls in the living room, fixed several cracks I missed there and there and continued sanding more door frames or plastering them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When we all left (curfew is 6pm due to COVID) I was happy with the progress we all made. It also gives more courage when not working alone. I&#39;ve felt a bit down these past few weeks, which explains why I did not work as much as I should have in the apartment. But seing the electricity getting done is really boosting me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the other trouble is actually having the artisans come back for the walls, the door frame, the tiling and other things. Without their work done, I can&#39;t start painting and I want to get it done by mid-February and focus on the bathroom before March comes. It&#39;s going to be tight.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;february-4-2021&#34; &gt;February 4, 2021&lt;a href=&#34;#february-4-2021&#34; aria-label=&#34;February 4, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;So, where to begin...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I finally managed to get the artisans on the phone on Monday 1st. Turns out they were ready and were going to come on Thursday! I told the electricians that everyone would be here on the same day and would finally be able to discuss how to finish the walls!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Comes Thursday and I&#39;m there around 8am. One of the electricians has come to take some tools and needs to leave for another house (they are so busy it&#39;s frightening). The plasterer, his apprentice and the project manager were also there, so I opened the doors and they started bringing their tools and huge swats of plaster. We made another tour to check everything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We were supposed to remove tiles from a wall in the kitchen. The project manager did not know it was plaster behind and told me it was going to destroy the wall to remove them. He proposed we glue new plaster on top of the existing tiles. I said no, what the hell, no, I don&#39;t want to hide mess, I want it fixed. Then he concluded, removing the plaster and adding a new one is the only option. He agrees to put new plaster for the same initial price of removing the tiles, but I have to remove the existing wall and the tiles by myself. I agree and around 9:30am I leave, go home and ate breakfast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My mission of the day was to find doors for a closet we are building in the entrance. I wanted folding doors and had a hard time finding affordable ones as it sometimes went up to 400 euros for two doors! So I went to two furniture stores and found literally nothing. IKEA was near, I drove there and discovered the entire store was closed because of COVID restrictions (the store is 23k square meters, 3k meters too much).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disappointed, I went back to my car, grabbed my phone, texted my partner that &lt;em&gt;doors are a pain&lt;/em&gt; and then visited IKEA&#39;s website. I found was I was looking for, went back to the store and it turns out even the drive had to close and only deliveries were possible. Even more disappointed, I went back to the apartment to see how things were going and warn them we might not have a door quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were so many people! Three artisans and two electricians were working at the same time, gluing plaster walls, filling trenches... It was crazy! And quite cool, it motivated me! After explaining my door problems to the plasterer, he suggested I went back to the furniture shops to see if they had normal 63 centimeters doors (it&#39;s a standard) with framing. We could use this instead of creating the whole thing ourselves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I went home to eat lunch, I also checked a bit more the IKEA store but could not find the right size. So, again, back to the furniture store. Went directly to the carpentry part and discovered there were... no more doors to sell. &lt;em&gt;WHY ARE DOORS SO HARD TO BUY???&lt;/em&gt;. I went to another store, no doors left too. Finally, I went to a third store and no more luck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While doing this, I was also trying to find clipsable laminated floor tiles to fill holes in the floor and it turns out my color does not exist, that there is no standard for the clipsable part and that, if you are not lucky, they won&#39;t have the same width.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, I went back to the apartment to see the progress to fix my mood. They were going so fast! Half of the rooms were done. Suddenly I realized that tomorrow morning, the plastered had to &lt;em&gt;add a freaking door in my corridor and there was no door in sight&lt;/em&gt;. I asked if he wanted me to bring a door with a frame, he said well yeah, why not, a door with a frame is easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I drove home and booted my computer, thinking that if there was no doors in my city, there might be some doors in the nearest one. At this point my brain had stopped functioning properly, I was exhausted and &lt;em&gt;I NEEDED DOORS&lt;/em&gt;. Well guess what? I found them! Turns out there was some stock of other models in two different stores, a bit more expensive than the ones I wanted, but not by much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Feeling lucky, I clicked to order, choose the drive pickup for the next morning. One door at 10am, the other at 10:30am. Relieved, I went to shower and told my partner &lt;em&gt;I found doors&lt;/em&gt;. Then she reminded me I had to drive her somewhere at 11am. And that I can&#39;t store two doors in the car with her sitting on the passenger seat. So, I&#39;ll have to deliver my doors &lt;em&gt;before&lt;/em&gt; driving her.&lt;/p&gt;&#xA;&#xA;&lt;em&gt;BUT WAIT THERE&#39;S MORE&lt;/em&gt;.&#xA;&#xA;&lt;p&gt;I have a broken built-in oven in the back of the car already. I can&#39;t store an oven, two doors and a girlfriend in my car, it&#39;s not going to fit. So first thing in the morning, I have to drive to the recycling center to drop this oven, drive to the first shop to pick a door, to the second shop to pick a second door, drop the doors at the apartment and &lt;em&gt;then&lt;/em&gt; I&#39;ll drive my partner. All this in less then two hours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And what does my non-functioning, door-obsessed brain concludes from thi situation? &lt;em&gt;This is fine&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I go to bed exhausted.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;february-5-2021&#34; &gt;February 5, 2021&lt;a href=&#34;#february-5-2021&#34; aria-label=&#34;February 5, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I wake up at 1am. I think about my doors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a sudden realization: I picked the wrong door for the closet. I picked a left opening door but the door is turned 180 degrees in the closet, so I needed a right opening door. I have to change my order quickly. I boot my phone. An updated was installed. I have to enter my pin code. I mess up my pin code 3 times, now my sim card is blocked. I go on wifi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Turns out I can&#39;t cancel my order. I have to make a phone call for this. The shop opens at 9am. But I won&#39;t be able to make a phone call, I blocked my phone sim card. So I have to login to my phone&#39;s carrier website to find the recovery phone. While trying to access the section of the website, a popup asks me to change my password. I don&#39;t want to change my password, but there&#39;s nothing to close the popup. I try several times but I can&#39;t close it. I changed my password. I access my PUK code. I enter the PUK code. My sim card is unlocked. I&#39;ll be able to phone the store tomorrow. I change the alarm hour to 9am to sleep a bit more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wake up at 8:30am. I think about my doors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I call the shop and cancels the door order. The lady is super nice, it&#39;s done in five minutes. I&#39;m ready to order a door that opens to the right. But wait. Is this kind of door &lt;em&gt;really&lt;/em&gt; what I want. I&#39;ll have visible hinges. I don&#39;t want visible hinges. Hinges are ugly. I should not order a new door. I should go back to my initial IKEA plan. Yes, that&#39;s it, I&#39;m doing this. I&#39;ll order a door without frame on IKEA&#39;s website and have it delivered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I&#39;m trying to make coffee, I start to realize this whole plan of oven dropping, door picking, door dropping, girlfriend picking, girlfriend dropping might be a little too complicated to do in two hours (and that&#39;s with one door removed from the equation). So I cancel my drive picking for the second door, thinking I&#39;ll phone them to change the hour. While bread is toasting, I try to call the shop, but nobody answers. I decide I&#39;ll go ask them directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coralie wakes up while I&#39;m trying to order a door on IKEA&#39;s website for the closet. When I&#39;m ready to checkout, the delivery date indicates February 17. 17 like in two weeks. BUT I NEED A DOOR &lt;em&gt;NOW&lt;/em&gt;. The website indicates me the nearest opened IKEA. It&#39;s a two and half hour drive. Still not fully woken, I conclude that, &lt;em&gt;this is fine&lt;/em&gt;. When I explain this to my partner, she looks at me without understanding everything except I&#39;m planning to drive 5 hours to pick &lt;em&gt;a door&lt;/em&gt;. So she asks, &lt;em&gt;why don&#39;t you just buy a wood plank?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I look at her in disbelief for a moment then realize: she is a &lt;em&gt;GENIUS&lt;/em&gt;. I can sand and paint this wood plank. This is it! Now all I have to do is just drive her to her appointment, drop the oven, drive her back, pick and deliver my door and my wood plank. Bingo! What an organized person I am! I drive her and go to the recycling center. I drop the oven (actually there was &lt;em&gt;two&lt;/em&gt; ovens but that&#39;s a long story, don&#39;t ask please) and drive to the apartment. I want to ask the plasterer if a wooden plank is OK for him. I park, walk through the stairs and open the door...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I walk in at 11:30. I find a door lying on the ground of my apartment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this very moment, my mind froze. There&#39;s a door. The exact same one I have to pick. It&#39;s already there. Why is it there? I walk to the plasterer and asks him why there&#39;s a door. He says the project manager dropped it in the morning. Didn&#39;t I received a text with a picture of the door? No I did not. I explain to him I already bought a door. He says this is unfortunate. Oh and by the way, the plaster in my bathroom was rotten so he had to remove it and re-plaster. Since it&#39;s out of the contract and took too much time, he asks me to move down the rubble for him so he can finish what was planned today. I accept.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I drive to the store. I&#39;m still in shock. I go to the reception and explains to them I have too many doors. They are not sure what I&#39;m talking about. I say I need to cancel my door order. They accept and say there&#39;s no problem. The lady is funny, she walks to the storage to cancel my order. When she gets back, she says it took 45 minutes to find this door in the storage. I tell her that contrary to me, at least they found the right door and now they know where it is. She laughs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I go back inside the shop to buy my floor tiles. I pick the closest color. The demo tile says it&#39;s 19 centimeters wide. I have to bother someone to get a packet of them. I buy it. When I go back to the car, I think to myself that &lt;em&gt;those tiles actually don&#39;t look super wide&lt;/em&gt;. I measure them. They are 16 centimeters wide. I picked the wrong size. I resist the urge to kick my car.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s too late to change the tiles, I go pick Coralie. While driving I explain something about doors and tiles. She&#39;s not sure she understands what&#39;s going on. I drop her home and go eat with friends. We pick burgers. I&#39;m with my dirty, working clothes. I look tired. They ask me how renovations are going.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tell them I ordered two doors, ended up with three doors but that I actually needed one door.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They look at me and laugh. We go eat on a public place with stairs. We talk about work and stuff. It&#39;s cool to eat outside and feeling the sun on my skin. I relax a little bit. They have to go back to work. I&#39;m a bit sad, it was too short. I drive home and pick my 100 liters trash can. Coralie comes with me to the apartment. She wants to see the progress, and will then be on her way to buy some stuff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the visit is done and she&#39;s gone, I start picking the rubble and dropping it my trash can. Turns out plaster and tiling is &lt;em&gt;heavy&lt;/em&gt;. I think I did 5 or 6 trips from the fourth floor to bring everything down. I did not have anything else than paper grocery store bags, so I put the rubble there. Around 4:30pm I&#39;m done and prepare myself to go to the recycling center.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We talk about the closet and, knowing I will use a wood plank for the door, the project manager asks me to buy cleats to reinforce the rails that will support the door. It&#39;s not like I have any choice, so I agree, of course. I go to the recycling center and drops everything into the right containers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s almost curfew time. I use the last remaining minutes to go to the store and buy a big hammer and check for the wood planks. There are no wood planks left. I can&#39;t make my closet door. I have no energy left to change my floor tiles, that will wait. I go out with my hammer, drive to the apartment. I&#39;m tired and frustrated. I pick the hammer and punches a few holes in the kitchen wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I drive home. Coralie is there. She bought beer and snacks so we could relax together in the sofa. I shower and we drink together. She says she doesn&#39;t understand anything about my current door situation. &lt;em&gt;It&#39;s okay&lt;/em&gt; I say. &lt;em&gt;I&#39;ll find a wood plank tomorrow&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no door and I must scream.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;february-06-2021&#34; &gt;February 06, 2021&lt;a href=&#34;#february-06-2021&#34; aria-label=&#34;February 06, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;After a small breakfast I talk about the wood plank problem with Coralie. We think about a way of doing a lighter door and decide we could probably use slim MDF to sandwich a polystyrene plank, and reinforce all this with a wood frame. I like this idea and around 1pm I go to the furniture store and buy everything I need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once I&#39;m in the apartment I prepare everything. I lay down the MDF plank, cut wood lintels the right size, add glue and put everything together. I lay a plaster board plank on it and go searching for anything heavy. Plaster bags, trash bags, a vacuum cleaner, a cupboard. I lay everything on it and turn my attention to the kitchen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I start hammering the wall and it goes down fairly well. The parts with tiles are more solid but overall, everything goes according to plan. What takes more time is filling the trash can with rubble and walking it down, then transfering it into bags and into the car. I think I did 500 liters of rubble with this wall, so five up and downs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Around 4:30pm I prepared the polystyrene and added it to the door, using a special glue. Then of course, more wood glue on the frame, the next MDF plank, and more weight on top of everything. I&#39;m a little worried the weight might not be enough but we&#39;ll see.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Around 5:15pm all the ruble was in my car, I left for the recycling center. On the road my phone played &lt;em&gt;Don&#39;t stop believing&lt;/em&gt; by Journey and I started singing like a maniac. On the way back I felt I needed something to give me energy until I crossed the finish line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I blasted Nickelback.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;february-8-2021&#34; &gt;February 8, 2021&lt;a href=&#34;#february-8-2021&#34; aria-label=&#34;February 8, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Woke up early as plasterers were supposed to come today. They did not show up except for gathering equipment and go to another construction site, which made me quite mad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But well, I had my fair share of work. When I arrived my main problem was to get rid of the wood beams fixed to walls. I tried unscrewing them with no luck, everything was too tight. I tried cutting them with my saw, they were too hard. So I did what every person in this kind of situation do: I phoned my dad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next thing I know, I was in my car for one hour and a half, playing Rage Against The Machine, en route to my dad&#39;s place to gather some tools. I arrived right for lunch. We ate all together and right after I took some of his tools. We discussed the possibility to do the plumbing together and he agreed to help on Wednesday. I went back home and started cutting everything with the angle grinder. Most of the beams came off pretty easily! Turns out having good equipment helps when doing renovation!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While cutting the beams I also gained access to the old gaz conducts. I thought about cutting them but was unsure. What if by &lt;em&gt;any chance&lt;/em&gt; there was some gaz left? I could blow up the apartment! And die! I was already tired and my anxiety started to peek.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I went to see my neighbor to ask him about the gaz. Turns out it&#39;s illegal to have electric heating in this building because the wiring is not strong enough to support all the apartments using electric heating. I didn&#39;t know that, and can now add it to my list of illegal things the previous owner did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But well, actually there was no gaz going to my apartment anymore of course. The main pipe in the staircase was not connected to a gas meter. There was a giant &lt;strong&gt;CONDEMNED DEVICE&lt;/strong&gt; on the pipe. And the other pipe that was supposed to be connected to a gas meter and go to my apartment was also closed. There was also a number, 54, to indicate the number of the apartment. 54 is mine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I went on, took the angle grinder and cut the pipe that was coming in my corridor. It was actually the only visible pipe left visible so I was glade to remove it. My anxiety started to play with me while I was cutting. Cutting copper produces a smell, and my brain kept confusing it with a gaz smell. So right after cutting, I was half-panicking, thinking &lt;em&gt;gaz is leaking I&#39;m gonna die and kill everyone in the building&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course there was no gaz. But I was so panicked I used some hardened plaster and filled the gaz pipes, &lt;em&gt;just in case&lt;/em&gt;. When I was done I went home and during the evening I kept wondering &lt;em&gt;if I come back tomorrow and the building exploded it&#39;s gonna be my fault&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;february-9-2021&#34; &gt;February 9, 2021&lt;a href=&#34;#february-9-2021&#34; aria-label=&#34;February 9, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Super tired. Nothing fancy today. It was super cold so I just went to the apartment to take detailed pictures of the pipes for my dad. I also cleaned a little bit and fixed holes between cinder blocks to avoid air flows.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;february-10-2021&#34; &gt;February 10, 2021&lt;a href=&#34;#february-10-2021&#34; aria-label=&#34;February 10, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;My dad arrived around 9am. He had all the equipment needed including a soldering station. If you don&#39;t know, a soldering station is composed of a bottle of acetylene, a bottle of oxygen, pipes and a torch (there&#39;s actually more things than that). Most plumber have portable kits. My father use his soldering station in his own workshop with a chariot. So his bottles are around 1,2 meter tall. And they weight a ton. And my apartment is on the fourth floor. And there&#39;s no elevator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Surely you know what that means right? Yup, moving two steel bottles in a row. It was &lt;em&gt;hard&lt;/em&gt;. Worse of all, if I can endure some physical pain because I&#39;m young despite being as muscular as a shrimp, my dad is 64 years old, worked manually for 50 years, and now has half of his body broken. The reason we decided to do this so suddenly is because of a chirurgical intervention he&#39;ll endure the next week, which will force rest on him for two months.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So we had to take care of each other and we had to finish today. First we made a plan about the setup I wanted. Basically I want every water supply pipe under the sink, so you don&#39;t have to move home appliances to access them. That means grouping everything inside a 60 centimeters place. I also wanted two new supply pipes in the bathroom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the plans were set, we went to the furniture shop and picked everything we needed. Most of it was copper joints and pipes, as well as wall fixations. I was initially planning to do all this by myself and I realize now how foolish I was to just think about this. You need experience to avoid basic mistakes. There are several type of connectors, in different sizes. Some require soldering, others don&#39;t.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We went back home and started cutting and soldering. My dad did most of the soldering while I was keeping pipes straight for him. It went pretty well, we only missed a few pieces to close old supply pipes. The furniture store didn&#39;t have them, so we had to go to another one, wasting a bit of time. On the way back we bought some sandwiches. Overall we were having a good time, things were moving as we expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But after eating, everything changed. We had ONE pipe to solder left. And that&#39;s when the oxygen bottle was empty. The flame became pure acetylene, burning the pipe. We tried to finish, but it didn&#39;t worked out. We were supposed to finish at 4pm so my dad could go home before curfew. It was 2:30pm and we didn&#39;t have anything to solder. So where do you find oxygen bottles here?!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I searched and found a supplier. As with traditional gaz bottles, we had to move the empty bottle down. Then we went to the supplier location but they were not selling directly. They gave us the a store address, on the other side of the city. We went there, bought the new bottle and went back home. Of course we had, AGAIN, to move the bottle in the stairs up to the fourth floor. For ONE weld.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once everything was connected, we cleaned the pipes and welded the last pipe. We put water back in the system. The weld was leaking. My dad was super mad! He was already feeling exhausted and his body hurt. While he was finishing the bathroom he made a mistake a cut the wrong pipe, which gave him extra work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I left him there and rushed to the furniture store again. I bought an extension pipe called a police hat. We cut and put it in position. Everything seemed ok. Except it was now past curfew time. My dad could not go home and we had two more welds to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We were tired so I told him to just come and sleep at home. He agreed, we went home, had a nice dinner. He talked about how it was going to be super hard to move in by the end of march, considering the plasterers were late on schedule, that the bathroom was not done and the kitchen not finished. I agreed, called my current landlord to ask him if we could stay one more month. He said no problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here we go, we now have one more month to finish this. I&#39;m both relieved and annoyed.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;february-11-2021&#34; &gt;February 11, 2021&lt;a href=&#34;#february-11-2021&#34; aria-label=&#34;February 11, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;We woke up early, ate breakfast and went to the apartment. There we met with the electricians. They were removing the excess electric pipes and doing plaster in the trenches. I asked them to put a mask on while my dad was here, as he cannot have the operation if he has COVID. They all agreed, and we all went back to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Soldering went... super great actually. In 20 minutes everything was done. We put the water in the pipes and no leaks! It&#39;s done! I was so happy!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just when we were celebrating our victory, we looked outside and discovered... snow. It was snowing. HARD. Like *&lt;strong&gt;VERY HARD&lt;/strong&gt;*. Sticking to the road snowing. We grabbed all my father tools (including those two damn bottles!), charged his truck and on the road he went! I asked him to be careful and thanked him.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I went up, we discussed renovations with the electrician. I thanked them about not making a fuss for the masks. I was tired by feeling quite fresh for some reason. I cleaned my tools and went home. It was Thursday and I had a technical test to deliver on Friday. I was working on it in the evenings during the week and decided I should give it more thought while I had time.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;february-12-2021&#34; &gt;February 12, 2021&lt;a href=&#34;#february-12-2021&#34; aria-label=&#34;February 12, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Today I went back to the apartment in the middle of the afternoon, after sending my technical assignement, to work on the exhaust pipes. I took some time to make plans and went to the furniture store, again. I bought all I needed and went back home directly.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;february-13-2021&#34; &gt;February 13, 2021&lt;a href=&#34;#february-13-2021&#34; aria-label=&#34;February 13, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I went to another furniture store to buy fixation clips for my exhaustion pipes. I accidentally met with a good friend and we discussed renovations and took news from each other. It was good to see a familiar face, I miss friends so much. I took my clips and went home.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thing I did was fixing the supply pipes on the walls. Everything was wobbling and that&#39;s not something you want as it produces loud sounds when pouring water. It took me around one hour to secure all the pipes. Then I started working on this thing and... well I won&#39;t make a very good plumber because my original plans did not take the supply pipes into account.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall I managed to do two thirds of an initial installation. I had a hard time finding space to make everything fit in those 60 centimeters. It was also complicated to have a steep enough main exhaust pipe. The previous owner made a mess with a pipe laying on the ground and water had to go up to reach the building exhaust pipe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I&#39;m good but I was starting to feel tired and cold, and had a hard time visualizing how everything was going to fit together with the new plaster wall that will eventually cover all this. If the pipes bump out too much I could lose a lot of space. I&#39;ll finish tomorrow or the day after tomorrow.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;february-15-2021&#34; &gt;February 15, 2021&lt;a href=&#34;#february-15-2021&#34; aria-label=&#34;February 15, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Back to pipe problems! By looking at them again I thought about putting the evacuation pipe below the water pipes and went to by some angled pipes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when I came back I realized that this idea wasn&#39;t good at all. It was bumping out of the wall way too much. So I totally shifted ideas and added the evacuation pipe higher than the supply pipes. It was a bit tricky had they had to cross each others eventually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a few hours of work I glued everything in place and crossed fingers for no leaks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other thing that happened today was the lack of any plasterer coming. I was told he would come this monday and he did not show up at all and no news from the project manager. I was furious as it already happened the week before without any explanation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I texted the project manager saying to him I waited a big part of the day and nobody came. He explained the plasterer&#39;s daughter was sick and he had to stay home. I get it, but at least &lt;strong&gt;tell me&lt;/strong&gt; what&#39;s going on!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;february-16-2021&#34; &gt;February 16, 2021&lt;a href=&#34;#february-16-2021&#34; aria-label=&#34;February 16, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Today I just went to the apartment to check if the pipes were leaking or not. I tried the whole system several times and... no leaks! I was so happy it was finally done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The plaster project manager gave me a rendez-vous to check what needed to be done next. There&#39;s still a lot to do: fix the broken walls, the strips between plaster boards, the entrance closet, the kitchen wall... We discussed planning and he guaranteed everything would be done by the end of the month.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had joint pains in my hands and overall felt super tired and tense even if I was a bit relieved that things were again moving forward. I went home.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;february-17-2021&#34; &gt;February 17, 2021&lt;a href=&#34;#february-17-2021&#34; aria-label=&#34;February 17, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A contractor is coming today to work on the kitchen wall! I went to the store to buy a filling foam can, as I have useless ventilation pipes in my kitchen wall that I want to be closed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While waiting for the contractor to come I filled them and with the leftovers, filled a joint on one of the windows. When the contractor came we explained everything and while he was working, I started some cleaning. There was dust and plaster stains on the ground and I wanted it cleaned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don&#39;t know how I did but after less than one hour of cleaning, I suddenly felt a very strong pinch in my back. I could not pull weight on my left leg, walk correctly or bend down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried laying down but the cold ground was not helping. I told the contractor I had to leave and asked him if he had any question. He said no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After going home I layed on the sofa for hours, half stuck and in pain. That was not how I had planned this week.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;february-19-2021&#34; &gt;February 19, 2021&lt;a href=&#34;#february-19-2021&#34; aria-label=&#34;February 19, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;My back is a bit better so today, we decided to go and see how the kitchen and the closet were going. Turns out they were almost finished!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that we went to a store to see what was available for shower trays. Our future bathroom is super small, around 4 to 5 square meters. It&#39;s hard to find furniture that fits in and is still comfortable enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We went home empty handed after being unable to find something that pleased us.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;february-25-2021&#34; &gt;February 25, 2021&lt;a href=&#34;#february-25-2021&#34; aria-label=&#34;February 25, 2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I get a text message from the project manager. He tells me they put the water on and that it flooded the kitchen, ignoring or forgetting that I told him all water pipes were not closed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Went in the afternoon and saw plasterers finishing the plasterboards in-between. They explained to me that due to pressure, water went up to the ceiling and then down. It soaked the inside the plaster, that already started to dry. But the power socket probably took some water.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I took my electric cutter and cut the plaster where the water pipes were. I tried pluging in the flexibles pipes from the sink to finally close everything. Long story short my pliers were shit and I could not have an enough tight grip, so I had to go and by a new one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I finished everything and cleaned a little bit. Then noticed that one of the plasterers did not cut a small pipe coming out of the ceiling, he just... plastered around it? I was angry, took my electric cutter and cut the pipe. A small bit fell on my arm and burned my sweatshirt, making me even more angry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Went home, angryness started to leave me and I was just disillusioned. I just want them to finish and get out of my apartment, I&#39;m tired.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/renovation-journal" rel="self" type="text/html"></link>
    <summary type="html">A journal about the restoration of my apartment</summary>
  </entry>
  <entry>
    <title>2020</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/2020</id>
    <content type="html">&lt;h1 id=&#34;2020-year-review&#34; &gt;2020 Year review&lt;a href=&#34;#2020-year-review&#34; aria-label=&#34;2020 Year review permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;2020 was one of the best years I experienced in recent memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering everything that happened, it might sound rude or tactless. But in the middle of the mess, I evolved as a person like I never did before. I faced and solved problems I was burying inside of me for years. I reconnected with my partner. I coded personal projects that helped me question my field. I shared my knowledge with others. I bought an apartment and am still renovating it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When 2020 started my goals were:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Stop helping others with their websites&lt;/li&gt;&#xA;&lt;li&gt;Discover leaner stacks for web development&lt;/li&gt;&#xA;&lt;li&gt;Redo my website as a personal journal or wiki&lt;/li&gt;&#xA;&lt;li&gt;Write articles, guides, fictions&lt;/li&gt;&#xA;&lt;li&gt;Draw&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But my ultimate goal was to get out of a &lt;em&gt;productivity mindset&lt;/em&gt; and switch to a &lt;em&gt;self-discovery mindset&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;https://twitter.com/Thomasorus/status/1212451154422116352&#34;&gt;I hope next year instead of a display of &lt;strong&gt;work&lt;/strong&gt;, I&#39;ll be able to do a display of &lt;strong&gt;creations&lt;/strong&gt;.&lt;/blockquote&gt;&lt;figcaption&gt;— Me, &lt;a href=&#34;https://twitter.com/Thomasorus/status/1212451154422116352&#34;&gt;Last Year&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I wanted to question the value, benefits and enjoyment of &lt;em&gt;everything&lt;/em&gt; I did, used or saw.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;time-tracking-as-self-discovery&#34; &gt;Time tracking as self-discovery&lt;a href=&#34;#time-tracking-as-self-discovery&#34; aria-label=&#34;Time tracking as self-discovery permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Considering I have bad memory and do way too much stuff, my first move of 2020 was to start tracking the time spent on personal projects. I was inspired to do it by several people I met in the &lt;a href=&#34;https://merveilles.town&#34;&gt;Merveilles community&lt;/a&gt; who use such tools as a way to reflect on themselves. But I didn&#39;t want to use an app or someone else system. So I just... wrote down my time in a text file following this format:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//year week activity project hours&#xA;2020 1 Development Website 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I didn&#39;t have any idea how I would exploit this data. Actually, I only finished the visualization in July 2020. But having it readable allowed me to self-reflect and understand why I was feeling tired or restless. In early 2020 we worked with my friends Sword and Pr0sk on the translation and publication of a &lt;a href=&#34;https://basgrospoing.fr/fr/articles/le-netcode-des-jeux-de-combat&#34;&gt;massive article about netcodes&lt;/a&gt; in fighting games. At the same time I was upgrading our CMS to the latest version. All this took me around 40 hours in the first two months of the year. At the same time I was still recording podcasts, developing stuff for me and of course, going to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So on week 9 of 2020, I was exhausted and at the same time I was feeling guilty of not working. Looking at my time tracker, I realized how stupid I was. I decided I had &lt;em&gt;earned&lt;/em&gt; to do nothing. And so I did. It was the first of several similar cycles. Work on something, then rest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of course right after this, lock-down started in France.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;lock-down-rhymes-with-breakdown&#34; &gt;Lock-down rhymes with breakdown&lt;a href=&#34;#lock-down-rhymes-with-breakdown&#34; aria-label=&#34;Lock-down rhymes with breakdown permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Lock-down &lt;del&gt;was&lt;/del&gt; is still a &lt;em&gt;mess&lt;/em&gt; in France. And it was even worse with my client. We were supposed to work from home and told it could happen anytime. For the first two weeks of lock-down, I was up every morning to check my emails in the wait of my access. I was extremely stressed. Finally we had found a way of working with difficult people. Projects were moving forward under my guidance. But the access to work from home? They never came.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my partner was working, and I was not. To keep me occupied I broke my first engagement and started doing a website for someone else. I redid the whole &lt;a href=&#34;https://art-eater.com/&#34;&gt;Art Eater&lt;/a&gt; website. Saying I did it for others is a bit lying. I wanted this website online for myself, because I loved it and it went offline years ago, leaving a big hole on the internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when the second month of lock-down started I collapsed. As the days went by, each day seemed more and more like the day that preceded. Anxiety spikes, characterized by tetany crisis, became common. I gradually had more difficulties getting out of bed. Depression symptoms appeared.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I did something I never dared to do. I asked my partner for help. I asked her to read my journal, as I was unable to speak. She said nothing, didn&#39;t judge, and helped me get back on my feet. We made a program to keep me occupied. Sport, reading, studying, coding. Little by little I was able to get my head out of the water, but remained fragile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there was a benefit from this. I finally stopped lying to myself. I am depressive and anxious and I have been escaping this state with work and social gatherings. Lock-down removed my escape roads and I had to learn to live with myself. This realization profoundly changed me. When not in shape, just go to bed, cry, and wait for it to pass. When you feel like doing nothing, just sleep. The goal now isn&#39;t to suppress feelings, but to let them flow in me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I explained to my partner, I am sometimes feeling terrible. But I am now in a better place, because I &lt;em&gt;feel&lt;/em&gt; things. I am now way more honest with myself.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-birth-of-my-tools&#34; &gt;The birth of my tools&lt;a href=&#34;#the-birth-of-my-tools&#34; aria-label=&#34;The birth of my tools permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This change in mindset actually helped with my personal projects. I was already working on my static site generator for a while, exploring different roads. But when lock-down ended and I went back to work, I was hitting a dead-end. I had too much text files, I had redone this thing 3 times (even one time in Python). My problem? I was still following other people rules and way of thinking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I re-started from the beginning. What is a website? An accumulation of text. What am I using to write text? A text editor and the Markdown language. Do I like using them? Actually, no! I hate writing in Markdown! So why do I use it? Because there&#39;s nothing else available! If it doesn&#39;t exists, why not create it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it clicked. I was terrified and felt I was not capable of doing it, but went for it anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I explored different syntaxes for a new and personal markup language. I called it &lt;a href=&#34;kaku.html&#34;&gt;Kaku&lt;/a&gt; and I wrote a parser in JavaScript to convert its text to HTML. It took a lot of time, as I rewrote it 3 or 4 times, each time exploring a new approach and making it more robust. I now write everything in Kaku and &lt;strong&gt;I love it&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My static site generator &lt;a href=&#34;ronbun.html&#34;&gt;Ronbun&lt;/a&gt; also found it&#39;s final form during this period (it&#39;s now using a single text file for all pages and has no external dependencies), as well as my &lt;a href=&#34;time.html&#34;&gt;time tracker&lt;/a&gt; tool. In the span of a few months I created my own ecosystem of tools that fit my needs. Using them feels &lt;em&gt;natural&lt;/em&gt;. Of course there were bugs and limitations I didn&#39;t saw coming. But that&#39;s the beauty of it: the projects evolved at the same time as my needs and tastes.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;all-i-want-is-dark-nails&#34; &gt;All I want is dark nails&lt;a href=&#34;#all-i-want-is-dark-nails&#34; aria-label=&#34;All I want is dark nails permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;During this exploratory period right after lock-down, my partner was exhausted. Working and taking care of me was asking a lot. One evening we ended up talking for hours. We confessed we were exhausted by years of efforts to grow into &lt;em&gt;adults&lt;/em&gt; as society expects us, and that it made us miserable. She has no desire to be a &lt;em&gt;woman&lt;/em&gt; and bear the responsibilities it implies in our society. I have no desire to be a &lt;em&gt;man&lt;/em&gt; and apply the behaviors expected of them, like control an strength. I realized that &lt;strong&gt;all I want is dark clothes, dark nails, a sensible life made of creative doubts and enraging blockades&lt;/strong&gt;. So I did. I painted my nails. I bought women clothes because I liked them. I now dress entirely in black. I&#39;ll have new piercings soon. I have never felt as whole as today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I went back to work from May to June, it was also the moment we bought an apartment. We were searching for a long time and finally found something we loved. I decided I would do this whole operation &lt;em&gt;my way&lt;/em&gt;. Which meant a low stress, un-destructive way. I hired a broker as I was not feeling capable of meetings half a dozen bankers (not did I want to &lt;em&gt;prove&lt;/em&gt; I was capable of doing it). He made the deal for me. My notary was recommended by a friend. Same for the artisans and the electrician. I made a deal with my banker to not have repayment during the renovations, and took several months for them so I would not feel pressured. I didn&#39;t want to turn this into a demonstration of control and strength. Until now, it has been working great.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn&#39;t without challenges though. As I tried to take more responsibilities at home I felt it was not going to work. I was not able to manage unexpected problems, even the smallest ones. I had trouble focusing. Muscular pain. And worst of all, the unstoppable feeling that something terrible was going to happen. I needed help and counseling was not enough. As my mission was over and I was not working, I decided it was a good opportunity to get medication. My doctor was super helpful and found the right treatment right away. I have been feeling great for months now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In September we took a few weeks of vacations and explored the nearest region. It felt good. I was happy like I haven&#39;t be for a long time.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;all-they-want-is-javascript&#34; &gt;All they want is JavaScript&lt;a href=&#34;#all-they-want-is-javascript&#34; aria-label=&#34;All they want is JavaScript permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;From July to December I was not working due to the pandemic. I took the time to explore a lot of things related to my field, frontend web development. First, I wrote an &lt;a href=&#34;html-tips.html&#34;&gt;extensive guide&lt;/a&gt; on HTML. I wanted to share knowledge with the Merveilles community, but also felt it was time to use my personal wiki for, well, wiki things!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also continued studying JavaScript using the very good &lt;a href=&#34;https://beginnerjavascript.com/&#34;&gt;Wes Bos course&lt;/a&gt;. I like this language, all my tools are built with it. But I really dislike the way we are doing web development using JavaScript frameworks like React, Angular or Vue. A monoculture emerged around them, pushed by companies using &lt;a href=&#34;the-soft-power-of-javascript.html&#34;&gt;soft power tactics&lt;/a&gt;to make them unquestionable in web development. So I compiled &lt;a href=&#34;list-of-javascript-frameworks.html&#34;&gt;a list of alternatives&lt;/a&gt; to study them a little bit. The act of creating my own tools with little time and without external ressources reinforced my feeling that the field is moving towards too much complexity. I feel we are bending the projects needs to the framework or libraries needs and that instead of solving problems related to the project, we assemble kits and solve problems related to them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which leads me to my current problem: work. My employer can&#39;t find a job that suits me. When I tried finding one myself, I only got negative answers. I don&#39;t &lt;em&gt;fit&lt;/em&gt; in the definition of frontend developer, which now seems to mean &lt;em&gt;backend developer in the browser for over-complex technical stacks in JavaScript&lt;/em&gt;. I&#39;m a frontend developer specialized in design systems, UX and accessibility. In half of the job interviews I did I could see why they should hire me. But they did not. I know too well why: people only hire my profile when everything is a mess and needs to be rebooted, which leads to incredible pourparlers between dozens of people questioning your expertise, making the project near to impossible to finish.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what should I do? I really don&#39;t know! Either I become the frontend developer everyone wants me to be, or I continue to wipe everybody&#39;s mess when it&#39;s already too late. What I would actually love to do is develop art directed pages for magazines. Replicate bold or original print layouts. I love writing, I love design, I love frontend technology. But making a living from this is probably impossible. What a headache!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;2021-goals&#34; &gt;2021 Goals&lt;a href=&#34;#2021-goals&#34; aria-label=&#34;2021 Goals permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This post has been far too long already so let&#39;s wrap this up with 2021 projects and goals. Here&#39;s the list:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Work on art directed articles&lt;/dt&gt;&lt;dd&gt;I love this, so why not try making more? It would step up my knowledge in an area of frontend that I actually care about!&lt;/dd&gt;&lt;dt&gt;A new portfolio&lt;/dt&gt;&lt;dd&gt;During my job interviews I had to explain what my specialty was. I&#39;m bored repeating it, so I&#39;ll make a portfolio website and join it in my job applications so people understand more easily what I do.&lt;/dd&gt;&lt;dt&gt;Write CSS guidelines&lt;/dt&gt;&lt;dd&gt;I really enjoyed writing my HTML tips and tricks pages. I&#39;ll do something for CSS, probably related to the different methodologies. I love this stuff. I love CSS.&lt;/dd&gt;&lt;dt&gt;Code less&lt;/dt&gt;&lt;dd&gt;Yeah that doesn&#39;t sound logical but I actually want to code less. I won&#39;t change my tools in 2021 or only make small evolutions. I wanted to redo them in C, but it will have to wait because I have to...&lt;/dd&gt;&lt;dt&gt;MAKE ART&lt;/dt&gt;&lt;dd&gt;That&#39;s the thing I could not do in 2020. I want to do it. I know I will suck for a long time, but I want to untie this knot that has been bothering me for years. I have ideas to do some with friends. Why not do a comics of a dozen pages?&lt;/dd&gt;&lt;dt&gt;WRITE FICTION&lt;/dt&gt;&lt;dd&gt;The second thing I want to tackle this year. I&#39;m only able to draw things I wrote before, so I&#39;ll have to finally put on paper this lores that I have in my head.&lt;/dd&gt;&lt;dt&gt;Be responsible&lt;/dt&gt;&lt;dd&gt;Being responsible at home and in life frees my partner and helps her moving forward. I want to help her.&lt;/dd&gt;&lt;dt&gt;Relax&lt;/dt&gt;&lt;dd&gt;Yeah, I love relaxing. I&#39;ve already started. Never spent that much time in my sofa.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;And that&#39;s all!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What a strange year. A global tragedy was the trigger of a massive personal renewal that left me feeling better, more sensible and authentic. Of course the state of the world outside my window worries me and I will not isolate myself from it. I will participate as much as I can, as long as I can.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See you next year!&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/2020" rel="self" type="text/html"></link>
    <summary type="html">2020 Year review</summary>
  </entry>
  <entry>
    <title>Lost in the dev world</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/lost-in-the-dev-world</id>
    <content type="html">&lt;h1 id=&#34;lost-in-the-dev-world&#34; &gt;Lost in the dev world&lt;a href=&#34;#lost-in-the-dev-world&#34; aria-label=&#34;Lost in the dev world permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I worked for money only 4 months in 2020.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First because of lockdown, then because my mission ended and my employer could not find a new one (well they found some, but the client cancelled at the last moment).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve been waiting since July and as I explained in my &lt;a href=&#34;2020.html&#34;&gt;2020 restrospective&lt;/a&gt;, this free time allowed me to move forward on the personal side, as well as building my own &lt;a href=&#34;tools.html&#34;&gt;tools&lt;/a&gt;, &lt;a href=&#34;knowledge.html&#34;&gt;writing a lot&#34;&lt;/a&gt; and &lt;a href=&#34;renovation-journal.html&#34;&gt;renovating my apartment&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But on the profesionnal side, I&#39;m in a dead end.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote &gt;I don&#39;t &lt;em&gt;fit&lt;/em&gt; in the definition of frontend developer, which now seems to mean &lt;em&gt;backend developer in the browser for over-complex technical stacks in JavaScript&lt;/em&gt;.&lt;/blockquote&gt;&lt;figcaption&gt;— Me, Earlier this year&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Then I discovered &lt;a href=&#34;https://www.sarasoueidan.com/hire/&#34;&gt;Sara Soueidan great &#39;hire me&#39; page&lt;/a&gt;. I was relieved to see that the role I try to explain to others is called &lt;em&gt;Design Engineer&lt;/em&gt;. People like me &lt;em&gt;do exist&lt;/em&gt; after all!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;but-wait-are-design-engineers-that-needed&#34; &gt;But wait, are design engineers &lt;em&gt;that&lt;/em&gt; needed?&lt;a href=&#34;#but-wait-are-design-engineers-that-needed&#34; aria-label=&#34;But wait, are design engineers &lt;em&gt;that&lt;/em&gt; needed? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;But I quickly realized that my employer&#39;s clients (and probably the vast majority of companies that are not startups) have no idea that people like us exist. Those companies started hiring UX designers 3 years ago. They just discovered design systems. And when they agree to make one, it&#39;s always to make the current designs fit inside it instead of starting over and ask the good questions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, they sometimes care about accessibility, but not that much. That&#39;s a public posture, how can you be against accessibility? When they have a designer, he might see a design system as a constraint and blocks its adoption (been there, saw that).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may think &lt;em&gt;&#34;What&#39;s the problem, can&#39;t you just change jobs?!&#34;&lt;/em&gt; and you are right! I tried and did around ten jobs interviews mostly with modern startups or companies. But for two teams in need of someone like me there was eight &lt;a href=&#34;https://twitter.com/heydonworks/status/1349077285232648193/&#34;&gt;graphql perverts&lt;/a&gt; trying to corner me into a role I didn&#39;t want to play.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the remaining teams, they considered they could need me, but not now. They see design engineering as a cost, not as a benefit. I suppose they will only consider it when everything is a mess and they want to start over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To escape this situation, I thought about freelancing. Maybe design engineering is better suited for freelancers as you start projects or fix them, then leave it to in-house developers?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve considered it seriously, looked into it, and decided it wasn&#39;t for me (yet). You see, France&#39;s digital world (even the infamous &lt;em&gt;FrenchTech&lt;/em&gt;) is not only late in technologies and development practices, &lt;strong&gt;it&#39;s also super late at paying bills&lt;/strong&gt; (and very, &lt;em&gt;very&lt;/em&gt; insistant at lowering rates).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve heard horror stories about 12 to 24 months late payments. So most freelancers I know try to avoid working with French companies now, and focus on US clients.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I don&#39;t have the mental fortitude to deal with this or build a new US based network.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;it-s-not-the-code-it-s-the-environment&#34; &gt;It&#39;s not the code, it&#39;s the environment&lt;a href=&#34;#it-s-not-the-code-it-s-the-environment&#34; aria-label=&#34;It&#39;s not the code, it&#39;s the environment permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;So salaried employment is my only solution!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve had a proprosition to become a teacher for a bootcamp. Considering I wrote a &lt;a href=&#34;html-tips.html&#34;&gt;massive HTML guide&lt;/a&gt;, &lt;a href=&#34;css-good-practices.html&#34;&gt;CSS good practices&lt;/a&gt; and &lt;a href=&#34;css-methodologies.html&#34;&gt;methodologies&lt;/a&gt; as well as &lt;a href=&#34;the-soft-power-of-javascript.html&#34;&gt;an analysis about the JavaScript ecosystem&lt;/a&gt; and keeps a page about &lt;a href=&#34;list-of-javascript-frameworks.html&#34;&gt;alternative frameworks&lt;/a&gt;, I might be a good fit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should probably apply. But I enjoy coding HTML, CSS and JavaScript sooooo much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just don&#39;t enjoy &lt;em&gt;the environment&lt;/em&gt; in which I do it anymore. Rich but cheap companies, change aware managers, agile methodologies as a justification for bad project management, massive technical debt piloting the roadmap. I&#39;m fed up. All of this makes me want to give back my keyboard and call it a day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What blocks from doing it (and accepting this teaching job) is an absurd feeling that it would mean &lt;em&gt;giving up&lt;/em&gt; and I&#39;m not desperate enough to give up yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you are &lt;strong&gt;not&lt;/strong&gt; a cheap, organisational change aware, &lt;em&gt;yolo&lt;/em&gt; agile, &lt;em&gt;Javascript evangelical tech bro spirit&lt;/em&gt; company and need a design engineer, feel free to contact me using the links below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;d love to hear that you exist.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/lost-in-the-dev-world" rel="self" type="text/html"></link>
    <summary type="html">Wondering where to go from now</summary>
  </entry>
  <entry>
    <title>Personal systems productivity and slippers</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/personal-systems-productivity-and-slippers</id>
    <content type="html">&lt;h1 id=&#34;personal-systems-productivity-and-slippers&#34; &gt;Personal systems, productivity, and slippers&lt;a href=&#34;#personal-systems-productivity-and-slippers&#34; aria-label=&#34;Personal systems, productivity, and slippers permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I was recently talking with a very busy friend about personal tooling. He&#39;s a freelancer that also manages several hobby projects. As a busy person, he tries to have a kind of &lt;em&gt;system&lt;/em&gt; that speeds up his tasks and eases his work day. I&#39;m a bit the same, so we dug deeper into the subject, until I came to a realization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, we use tools to achieve the same goal, but we have very different relationships with them.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;our-personal-systems&#34; &gt;Our personal systems&lt;a href=&#34;#our-personal-systems&#34; aria-label=&#34;Our personal systems permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This friend is a smart, very intellectual guy capable of self-reflection. He often changes the way his system works to try to achieve automations. But at some point, managing and self-reflecting on this system has become another task in itself that seems to add work to his already busy schedule.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since he can&#39;t program, he has to tinker inside existing apps and follow this field evolution. Else, if another tool comes out and is doing exactly whan he needs, he could miss it! He uses things like the Shortcut app in iOs to automate tasks. He tracks his time, both for profesionnal and personal projects, through a service like Toggle. I don&#39;t know his whole setup but I&#39;m sure that if something is considered top notch, he&#39;s using it!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, let&#39;s compare to my own kinda &lt;em&gt;yolo&lt;/em&gt; system. I have a single text file that serves as a journal, a wiki and a bookmarking tool. A program I made turns it into a website. I created my own &lt;a href=&#34;time.html&#34;&gt;time tracking system&lt;/a&gt; that uses another text file. My own &lt;a href=&#34;kaku.html&#34;&gt;markup language&lt;/a&gt; is used to write those text files, while my &lt;a href=&#34;moyo.html&#34;&gt;pattern library&lt;/a&gt; allows me to decorate things. I use a salvaged computer that runs a very specific linux distribution named &lt;a href=&#34;https://regolith-linux.org/&#34;&gt;Regolith&lt;/a&gt;, and use very few external services outside of Github and a chat programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So there&#39;s quite a difference between us. But what I feel is the biggest one is how, at first sight, my tools are very personal but unproductive. Meanwhile, my friend&#39;s tools seem super productive but very generic.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;features-versus-pleasure&#34; &gt;Features versus pleasure&lt;a href=&#34;#features-versus-pleasure&#34; aria-label=&#34;Features versus pleasure permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Let&#39;s take our time tracking systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With just a shortcut on his phone, my friend can start and stop a timer. The data will be added to his Toggle account, that will produce a nice report, shared on all his devices. He can probably program time for each task, get alerts when he exceeds the time allowed. Installing and configuring all this probably took him no more than an hour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My time tracking system is a text file. It&#39;s the most unprecise clocking system you can think of. There&#39;s no app to launch a timer, it counts only in hours and only serves data by week. If I forgot to fill time and how much a task took me, I have to remember and estimate. Data is only visible on a &lt;a href=&#34;time.html&#34;&gt;page&lt;/a&gt;, and only if I rebuild and re-publish it. It took me dozens of hours to create all the parts involved and it doesn&#39;t even do a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don&#39;t know for my friend about his, but &lt;strong&gt;I LOVE my time tracking system&lt;/strong&gt;. It&#39;s so &lt;em&gt;me&lt;/em&gt;. It&#39;s carefree. A little bit irresponsible. It sets boundaries. It allows self-reflection, yet does not allow micro-analysis. Its design is funky and weird. Outsiders told me they found it fascinating, which I think is &lt;em&gt;so cool&lt;/em&gt;. How many people can say a time tracking system is &lt;em&gt;cool&lt;/em&gt;?&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;removing-annoyances&#34; &gt;Removing annoyances&lt;a href=&#34;#removing-annoyances&#34; aria-label=&#34;Removing annoyances permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It&#39;s the same for my website and my markup language. It took me around 150 hours to code those two things. I redid both 3 times. I could just have taken a simple static site generator like &lt;a href=&#34;https://www.11ty.dev/&#34;&gt;Eleventy&lt;/a&gt; and write in &lt;a href=&#34;https://fr.wikipedia.org/wiki/Markdown&#34;&gt;Markdown&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if Eleventy is super cool, I &lt;strong&gt;hate&lt;/strong&gt; the NPM ecosystem that supports it because it&#39;s fragile and &lt;em&gt;alive&lt;/em&gt;. There are notifications in the terminal telling me this thing is deprecated, this thing has a vulnerability. this one needs funding. And Eleventy will evolve, which means I&#39;ll have to do... updates?! Gosh, the horror! The last thing I want when I sit to write in my own space is some outsider telling me to do things!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s the same for Markdown. I like inline Markdown! But I hate writing Markdown links! Using &lt;code&gt;[Text of link](Link to image)&lt;/code&gt; for a link does not work for me. When I decide to post a link, I often already have it copied. So &lt;em&gt;I need to paste this thing as fast as possible&lt;/em&gt; and I will decide what text to use after. Markdown asks for the text before the link, that means I have to write all those characters, paste my link, then come back to the square brackets to write my text, then go back at the end to continue my sentence. Ugh, &lt;em&gt;procedures&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this can sound as minor inconveniences, and they are. But they add up, and their sum will lead to an interruption of my workflow and, eventually, to procrastination.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;tools-as-slippers&#34; &gt;Tools as slippers&lt;a href=&#34;#tools-as-slippers&#34; aria-label=&#34;Tools as slippers permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If the tools I use while working create friction, the time I need to do the work will increase, and time will be wasted, not saved. Imagine having a hammer with a squared handle. You can still hammer things, but that will be very unpleasant and will make you want to quit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can, why not change the hammer handle? Even model it to your own hand? That&#39;s what I consider an exercise in self-discovery, as noted in my &lt;a href=&#34;tools.html&#34;&gt;tools page&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If, one day, I need a precise client oriented time tracking system like my friend&#39;s one, I will build it. It probably won&#39;t be available on all platforms. It will miss features that many people feel are important. It might be awkward to use. The style will probably be weird to others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I&#39;ll make sure that, when I use it, it feels like I&#39;m wearing my favorite pair of slippers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if you excuse me, I have to ask my partner at which hour I started writing this, because I forgot to look at the time but still need to input it.🙈&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/personal-systems-productivity-and-slippers" rel="self" type="text/html"></link>
    <summary type="html">A reflection on personal tooling and how people have different expectations about them</summary>
  </entry>
  <entry>
    <title>One year with antidepressants</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/one-year-with-antidepressants</id>
    <content type="html">&lt;h1 id=&#34;antidepressants-can-t-change-the-world-but-they-made-it-tolerable-for-me&#34; &gt;Antidepressants can&#39;t change the world, but they made it tolerable for me&lt;a href=&#34;#antidepressants-can-t-change-the-world-but-they-made-it-tolerable-for-me&#34; aria-label=&#34;Antidepressants can&#39;t change the world, but they made it tolerable for me permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve been taking antidepressants for a year now, and I wanted to write a kind of note about how it went. France is known for prescribing a lot of antidepressants, and it&#39;s often seen as a kind of morale or motivational failure (&#34;Man up!&#34;) that can or should be fixed with a rest (&#34;Go to the beach!&#34;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result, the first time I talked about it, my partner was suddenly alarmed. We were out of the first Covid lockdown in France, and it seemed I was doing better after I broke two months prior. Or, should I say, the work of &lt;em&gt;re-sensibilization&lt;/em&gt; I was gradually doing with my therapist (allowing myself to listen to my physical and mental sensations) broke loose. The dam that was preventing the feels to overflow me broke, and it took quite some time for everything to settle down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So two months later, I didn&#39;t know what my profesionnal future was going to be, I was buying an apartment, I could not see my therapist to talk about all this. Nor do I wanted to see my therapist. I had already told her I was fed up with fighting for control, that I wanted the &lt;em&gt;easy mode&lt;/em&gt; for a moment. So, in a very pragmatic approach, I wrote down on paper what I was feeling and went to see my doctor, and read in front of her what I had written.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall, my symptoms were:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;An inabiliby to manage unexpected problems. Even the smallest ones took gigantic proportions, made me feel overwhelmed and created panic crisis.&lt;/li&gt;&#xA;&lt;li&gt;Fatigue. Fortunately, not a massive fatigue that made me unable to socialize. But just getting up in the morning was a chore.&lt;/li&gt;&#xA;&lt;li&gt;The inabiliby to focus on mentally uncomfortable tasks. It made starting new things very difficult.&lt;/li&gt;&#xA;&lt;li&gt;Physical pain in the neck, but not entirely due to work desk. My muscles were getting tense for no reasons during conversations.&lt;/li&gt;&#xA;&lt;li&gt;A feeling of a fear that everything could suddenly collapse. Like, as if something catastrophic was about to happen. It was not very conscious, it just manifested every so often.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And so, because of all the uncertainties related to my career and all the work that was coming with the apartment that I didn&#39;t know how to handle, I suggested I could, maybe, start taking antidepressants. She agreed and, seeing it was more an anxious depressive disorder than a fully fledged depression, decided to give me a very mild one dosage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It turned out to be a very nice move from her. It removed almost all the symptoms I listed earlier, but didn&#39;t make me dull, more tired or unable to feel. As a result, I have never felt so good in years. I have never felt so &lt;em&gt;myself&lt;/em&gt;. Turns out it wasn&#39;t just a feeling. My partner said something that really touched me, she said she felt I was &lt;em&gt;more like the old me, the one when we met&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result, I&#39;ve made considerable progress on many things in the last year. I&#39;m more focused, anxiety and physical pain are gone, as well as the feeling of catastrophe. The considerable amount of work I did in my apartment made me extremely more relaxed about maintaining unexpected problems too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, after renewing my prescription, my doctor talked to me about the future. Am I ready to stop taking antidepressants? At the moment, no. I don&#39;t even want to, as I am making huge progress into discovering myself, at the right pace. A moment will inevitably come, when I will have to stop, but... &lt;em&gt;waves at everything bad that is currently happening in the world&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, that&#39;s my personal testimony about taking antidepressants. Please don&#39;t take it as a medical advice. Antidepressants are not a magic pill, it&#39;s just that &lt;strong&gt;for me&lt;/strong&gt;, they worked and since there&#39;s a stigma around them, I wanted to encourage people that have the same symptoms as me to, maybe, try talking about them with their doctor, and see how it goes from there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take care.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/one-year-with-antidepressants" rel="self" type="text/html"></link>
    <summary type="html">I&#39;ve been taking antidepressants for a year now, and I wanted to write a kind of testify about what it was.</summary>
  </entry>
  <entry>
    <title>About the no-js mindset</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/about-the-no-js-mindset</id>
    <content type="html">&lt;h1 id=&#34;too-much-javascript-is-bad-no-javascript-isn-t-better&#34; &gt;Too much JavaScript is bad, no JavaScript isn&#39;t better&lt;a href=&#34;#too-much-javascript-is-bad-no-javascript-isn-t-better&#34; aria-label=&#34;Too much JavaScript is bad, no JavaScript isn&#39;t better permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I&#39;m currently working on a proposal to revamp the design and user experience of the &lt;a href=&#34;https://sourcehut.org/&#34;&gt;Sourcehut&lt;/a&gt; open source project. One of the most common feedbacks I got from its users was to not add JavaScript to the project. It was not a surprise, as I am spending a lot of time on the fediverse with &lt;del&gt;nerds&lt;/del&gt; people who rely on second hand electronics, bad/expensive internet connection, or are just non-wasteful by philosophy and aren&#39;t keen to see any JavaScript loom into their favorite websites or projects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And sincerely, despite being a front-end web developer that likes this language, I totally get why it gets such bad press.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the last ten years, the JavaScript powered websites methodology (as in: &lt;em&gt;HTML is generated by JavaScript&lt;/em&gt;) was used in situations where it was stupid and unproductive. Way too many people confused &lt;em&gt;applications&lt;/em&gt; (example: Google Maps) with &lt;em&gt;interactive documents&lt;/em&gt; (example: Twitter), creating heavy, under-performing, battery draining websites ; especially on aging computers and phones, forcing hardware replacement for no reason (and let&#39;s not talk about tracking and ads, &lt;em&gt;uh&lt;/em&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quite logically, an &#34;anti-JS&#34; sentiment took form, with people wanting websites without JavaScript &lt;em&gt;at all&lt;/em&gt;, as it makes those more usable on their older hardware and software (and for some, more secure).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But despite understanding the feeling, I can&#39;t really agree with the conclusion. Despite my job title, I don&#39;t love &lt;code&gt;npm install&lt;/code&gt;-ing gigs of code from the internet and serving you loading spinners while I rage against my &lt;code&gt;package.json&lt;/code&gt; updates. I&#39;m not the developer advocate of an evil corporation &lt;a href=&#34;the-soft-power-of-javascript.html&#34;&gt;soft powering you&lt;/a&gt; into my monopolistic tribe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I disagree because I feel this &#34;anti-JS&#34; idea is as exclusive as the &#34;pro-JS&#34; side that birthed it, and because both sides disregard either the technical or human capabilities of their users by taking a scorching earth approach at solving their own issues.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;javascript-is-a-double-edged-sword&#34; &gt;JavaScript is a double edged sword&lt;a href=&#34;#javascript-is-a-double-edged-sword&#34; aria-label=&#34;JavaScript is a double edged sword permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The web has been widely available for twenty years, but they are still a lot of people who did not get used to it. Digital divide is a real thing, with a lot of users struggling when using our websites, both on computers or phones. And if we decided to totally ban JavaScript from the web, those people would have an even harder time than they do now due, to a massive degradation of their user experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let&#39;s take a few examples.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;A simple JavaScript shopping cart is easier to use and requires less resources than automatically being redirected to a cart page each time you add something into it by pressing a button.&lt;/li&gt;&#xA;&lt;li&gt;A tax calculator that updates in real time when you enter data, and tells you in real time what you&#39;re going to pay, is less stressful, more efficient and requires less back and forth than a page based experience.&lt;/li&gt;&#xA;&lt;li&gt;An insurance company offering a complex subscription tunnel composed of a dozen of pages is a non-ending, unnavigable mess ; that could be replaced by several smaller forms, stacked onto each others, which can be saved, edited and reduced on the fly, all in a single page.&lt;/li&gt;&#xA;&lt;li&gt;Someone with dyslexia that needs an adapted design would have to go into its configuration panel to select a dyslexia mode in a form, then validate it, which would reload the whole website with a new stylesheet. It could be replace by a simple toggle button, without reload, in any page.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A &lt;em&gt;one size fits all&lt;/em&gt; JavaScripty solution like we have today excludes people economically, promotes environmental waste and capitalism. But a &lt;em&gt;one size fits all&lt;/em&gt; non-JavaScripty solution is ableism disguised as techno resistance. You could think that the latter is better than the former, but in reality &lt;strong&gt;we can solve both problems by making JavaScript not be mandatory on interactive documents and using it as a user experience enhancement tool&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That&#39;s what &lt;a href=&#34;https://rb.gy/qkqokj&#34;&gt;progressive enhancement&lt;/a&gt; and &lt;a href=&#34;https://rb.gy/fa0uaa&#34;&gt;graceful degradation&lt;/a&gt; are made for, and they already work very well. You should equally be able to get housing benefits by struggling one hour &lt;a href=&#34;https://shkspr.mobi/blog/2021/01/the-unreasonable-effectiveness-of-simple-html/&#34;&gt;on your Playstation Portable&lt;/a&gt; with a basic user experience if that&#39;s all you have, or in five minutes on a recent iPhone by using an automatic form filler that picks your data locked with your fingerprint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Websites that find the right balance between user experience and technical capabilities are already a thing. Promoting a &lt;em&gt;pro&lt;/em&gt; or &lt;em&gt;anti&lt;/em&gt; JavaScript sentiment is a retrograde approach at a time when we have the tools and knowledge to do better. And it&#39;s not just me thinking this. The mindset around JavaScript usage is already shifting in the industry, with more people promoting a more responsible approach, and tools adapting to this new reality.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;javascript-evolves-towards-less-javascript&#34; &gt;JavaScript evolves towards less JavaScript&lt;a href=&#34;#javascript-evolves-towards-less-javascript&#34; aria-label=&#34;JavaScript evolves towards less JavaScript permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Most of the frontend frameworks &lt;em&gt;à la mode&lt;/em&gt; are now used in &lt;em&gt;meta-frameworks&lt;/em&gt; (with &lt;a href=&#34;ttps://nextjs.org/&#34;&gt;Next&lt;/a&gt; being the leader) that provide server side rendering with interactions (yes, they are recreating PHP and Jquery &lt;em&gt;duh&lt;/em&gt;), thus working on older hardware. Some of those frameworks are not even libraries anymore, but compilers (like &lt;a href=&#34;https://svelte.dev/&#34;&gt;Svelte&lt;/a&gt;) that outputs super tiny and efficient code, far from the bloat we currently experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We&#39;ve seen the rise of &lt;em&gt;micro-frameworks&lt;/em&gt; that work exactly like their fatter counterpart, but are 10 times smaller (&lt;a href=&#34;https://preactjs.com/&#34;&gt;Preact&lt;/a&gt; vs &lt;a href=&#34;https://reactjs.org/&#34;&gt;React&lt;/a&gt;) and most of them are even faster. We&#39;re even witnessing the creation of Frameworks that compile to HTML and create &#34;islands&#34; of JavaScript interactions, combining the best of both world (that&#39;s &lt;a href=&#34;https://astro.build/&#34;&gt;Astro&lt;/a&gt;), even if all of them don&#39;t yet have an answer when JavaScript is disabled (but &lt;a href=&#34;https://remix.run/&#34;&gt;Remix&lt;/a&gt; does and seems impressive on this aspect).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course all those previously mentioned frameworks rely heavily on a massive ecosystem of tooling which is still problematic, unsecured, brittle and way too heavy (and most of it, owned by Microsoft now). But at least the user experience they output is starting to empower their users instead of their developers. And for folks that don&#39;t like NPM but still want to compile JavaScript, there are single binaries like (&lt;a href=&#34;https://esbuild.github.io/&#34;&gt;esbuild&lt;/a&gt;) that you can just install on your system and use &lt;a href=&#34;https://jvns.ca/blog/2021/11/15/esbuild-vue/&#34;&gt;the way you want&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally, if you truly &lt;em&gt;hate&lt;/em&gt; JavaScript to the point you don&#39;t even want to write it for the sake of your users, there are great libraries who can manage interactions through HTML attributes (&lt;a href=&#34;https://htmx.org/&#34;&gt;HTMX&lt;/a&gt;, &lt;a href=&#34;https://alpinejs.dev/&#34;&gt;Alpine&lt;/a&gt;) for Ajax calls or dom interactions. They already have a lot of success in non-JS culture teams like Python, Ruby or even JAVA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not to say that everything is perfect. It&#39;s still gonna take years to undo the damage that Angular and React did to the web while keeping their benefits. But things are progressing in the right direction and maybe, soon, we&#39;ll be able to have websites that don&#39;t look and feel like a 2005 page, while visiting them on a 2005 computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So yes, please, let&#39;s use JavaScript. But responsibly.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/about-the-no-js-mindset" rel="self" type="text/html"></link>
    <summary type="html">Too much JavaScript is bad, no JavaScript isn&#39;t better</summary>
  </entry>
  <entry>
    <title>2021</title>
    <updated>2024-01-01T16:49:15Z</updated>
    <id>https://thomasorus.com/2021</id>
    <content type="html">&lt;h1 id=&#34;2021-year-review&#34; &gt;2021 Year review&lt;a href=&#34;#2021-year-review&#34; aria-label=&#34;2021 Year review permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;2021 was both the more exhausting and relaxing year I experienced in my life.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did so much stuff I&#39;m not even sure I can list them all. Just with my renovation work, I had to learn sanding, plastering, painting, plumbing, electricity, heating, woodworking ; and use several tools I never heard of before. I automated podcasts, built open source tools, hired one designer and two artists to work on my own website, wrote articles about chairs, JavaScript and depression. I even took a client for freelance work, a first!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And on the other side, I spent several weeks doing almost nothing at all. Not even working for money. Because, for 96% of the year &lt;strong&gt;I was payed an almost full salary by my company without working as single hour&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;renovation-conflicts-and-the-diabolic-wooden-floor&#34; &gt;Renovation conflicts and the diabolic wooden floor&lt;a href=&#34;#renovation-conflicts-and-the-diabolic-wooden-floor&#34; aria-label=&#34;Renovation conflicts and the diabolic wooden floor permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;When 2020 finished I was two months into renovating an apartment I just bought. Overall it was going alright despite some bad surprises and a lot of work. But what I did not expect was how my relationship with the project manager handling some of the renovation was going to degrade. This guy was the most unreliable, unclear and dishonest person I ever worked with. He announced dates without respecting them. Promised to finish some work so electricians could do theirs, and did not deliver. And his guys were terrible. A door was badly positioned and is now askew. All the drywall they added was bulging. They added an entire drywall on rails &lt;strong&gt;and the wall was moving and trembling when pressed on.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the worst thing is, they were the dirtiest people I ever met. They ruined the laminated floor by not protecting it. Plaster crusts everywhere, that took hours to be removed. When I told the project manager it was unacceptable, they cleaned it, but also completely soaked the floor, resulting in the floor bulging. When their work was finished I did not accept the reception PV and we had to find a middle ground to protect each of our sides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, upon discovering a wooden floor under the damaged laminated one, I decided to remove the latter. Which meant removing 60 square meters of planks from the fourth floor to my car. And then moving up by hand a 50kg sanding machine and spending a full day sanding the floor. And after that, once moved in, the floor was squeaking so much that my downstairs neighbor came to complain. So I had to drill dozens of holes in the floor, to then cut it where slats where rubbing each other. And then putting expansive foam under it so it stops moving and muffles the sound of the remaining squeaking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s 2022 and I haven&#39;t finished doing this for the whole apartment, which say how painfully slow this process is. And the plinths. The damn plinths.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-renovation-benefactors&#34; &gt;The renovation benefactors&lt;a href=&#34;#the-renovation-benefactors&#34; aria-label=&#34;The renovation benefactors permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Fortunately, it wasn&#39;t just incompetent workers and unreliable project managers. My electrician and his guys were the kindest and more professional people ever. They redid the entire electric installation of the apartment on budget and on time despite several setbacks. They made extremely good suggestions, came to fix what was not working and overall, just rocked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another person that helped a lot was our... kitchen designer. I must admit that prior to this, &lt;em&gt;kitchen hunting&lt;/em&gt; was not an activity I ever envisioned doing. Spending an afternoon going from one kitchen shop to another is not exactly fun, but we had the chance to meet a young seller/kitchen designer. Despite our limited budget he agreed to take on the project and did a very good job of balancing our demands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trusting him was one of the best decisions I made this year. He came, took measurements, prevented us from doing mistakes, quickly provided plans for the electricians so they could work without delay. When delivered (on the fourth floor, my god the poor delivery guys), the kitchen furniture was already assembled, which meant way less work. Everything was also super high quality and will last for at least a decade, maybe even two. Not going the cheap route bought me time, effort and peace of mind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, several friends came in. They helped sanding, moving super heavy things on the fourth floor. One of them even came a whole week to help me install a wooden floor on the balcony. Without them I would not have been able to achieve this.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;dads-truly-are-something&#34; &gt;Dads truly are something&lt;a href=&#34;#dads-truly-are-something&#34; aria-label=&#34;Dads truly are something permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;But, if I have to be honest, the best man of my benefactors list was none other than my own dad. It sounds cliché that a dad would know how to do everything in a house. But damn, my dad really knows how to do everything in a house. Yet, he&#39;s a physically broken man. They had to operate his hands, reattach his shoulder, remove part of his spine, two times. So when he came to help me, I supposed we were going to take it slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh boy, that was not his plan at all. We did two 50 plus hours weeks of manual work. We installed the kitchen furniture and home appliances for three whole days. We spent all the rest doing the bathroom. Soldering pipes, gluing water evacuations, cutting cinder blocks, laying down the shower base, tiling walls, installing the furniture and sink, and so many other things I don&#39;t even remember.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if not for him pushing me like this, this apartment would never have been ready for when we moved in. I expected this to took no more than a week and it took two plus several extra days after. Despite tiredness I enjoyed it a a lot. We had very good weather and spent our breaks on the balcony, eating and drinking under the sun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We never spend so much time together since I was a kid and I think we both enjoyed it a lot.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-gautoz-project&#34; &gt;The Gautoz project&lt;a href=&#34;#the-gautoz-project&#34; aria-label=&#34;The Gautoz project permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;What I did not explain before is how physically violent all this renovation work was. I hurt myself a lot during all those weeks. My back got blocked two times, my hands were damaged (the left one still is), my neck was sore all the time. I was often in pause due to physical or mental pain and in those moments is when I pursued some personal projects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early in the year I created &lt;a href=&#34;chisai.html&#34;&gt;Chisai&lt;/a&gt; for &lt;a href=&#34;ttps://gautoz.cool&#34;&gt;Gautoz&lt;/a&gt;. Gautoz is a former video game journalist extremely respected in the French industry. He decided to go independent on Twitch in 2021 and, outside of his stream, seemed to have nothing prepared. As I am not a big fan of streaming but enjoy a lot the way he covers video games, I offered to build him a website.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chisai was originally built for him, but was then open sourced, given a name and even got a mascot that I commissioned to &lt;a href=&#34;ttps://www.artstation.com/chlowski&#34;&gt;Chloé Stawski&lt;/a&gt;. It was the first time I was paying an artist for art and I&#39;m glad it was her. Chisai has been adopted by a few people here and there, and I&#39;m happy if it served them well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I was handling the website side of things, my good friend &lt;a href=&#34;http://www.yannrieder.com/&#34;&gt;Yann Rieder&lt;/a&gt; took upon himself to create a podcast version of Gautoz livestreams (the fact that Yann, one if not the most respectful person in the French podcast scene, decided to help, says a lot about how valuable Gautoz&#39;s work is).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the pandemic started, and I thought that I should probably try to speed up things for Yann, who was getting way too much work during this period. &lt;a href=&#34;botoz.html&#34;&gt;Botoz&lt;/a&gt;, a set of Python scripts that create RSS feeds and mp3 files was born from this. Yann beta tested it for a few weeks and, later in the year, I totally automated the process.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;calling-it-done-mid-year&#34; &gt;Calling it done mid-year&lt;a href=&#34;#calling-it-done-mid-year&#34; aria-label=&#34;Calling it done mid-year permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;We moved in the new apartment in late April, and I have to give credit to my partner for preparing it alone while juggling with work. We hired professional movers, as we knew we would not be able to move an entire apartment from the second to the fourth floor, without elevators, even with friends, in a reasonable time frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What followed were a few weeks of cleaning our old apartment, installing our stuff, getting used to live here, finishing touches there and there. I worked on Botoz, then started working on something I wanted for a long time: my own website redesign, and a design system!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hired &lt;a href=&#34;https://merveilles.town/@atari&#34;&gt;Atari&lt;/a&gt; to propose a few direction, we agreed on one, and then he went on designing while I started coding. The result, still ongoing, is the website you are looking at right now. I also add to rework &lt;a href=&#34;ronbun.html&#34;&gt;Ronbun&lt;/a&gt; a few times to implement this new design. Later on, I commissioned &lt;a href=&#34;https://sasj.nl/&#34;&gt;Saskia Freeke&lt;/a&gt; to create some quirky icons, that I haven&#39;t had the time to implement yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also mentored someone while doing a website for a friend, and also did some writing during this period and then...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I stopped. I just stopped.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;relaxing-and-finding-a-new-job&#34; &gt;Relaxing, and finding a new job&lt;a href=&#34;#relaxing-and-finding-a-new-job&#34; aria-label=&#34;Relaxing, and finding a new job permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In late July and early August, I did nothing. Suddenly I am in &lt;em&gt;my house&lt;/em&gt; and there&#39;s nothing critical left to do. I adapted this place to my needs, it&#39;s quiet, practical and comfy. I feel at ease here, in a way I haven&#39;t felt before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I relaxed instead of keeping myself busy. I read books, I played video games in the couch (something that was impossible before because of the proximity between the living room and the bedrooms). I even took naps and spent some hours daydreaming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quite logically, relaxing means doing less personal projects. It shows in my &lt;a href=&#34;ime.html&#34;&gt;time tracker&lt;/a&gt;. Once summer was over, the time I allocated to my projects decreased significantly. Outside of a big refactoring of Ronbun to mix content and time entries, most of the work I did was split in little chunks there and there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Outside of a freelance gig I took for a few weeks (mostly because it was on the amazing &lt;a href=&#34;https://getkirby.com/&#34;&gt;Kirby CMS&lt;/a&gt; and I liked the client), and doing self teaching for my new job (that I got by &lt;a href=&#34;https://twitter.com/Thomasorus/status/1435908199929065475&#34;&gt;shitposting on Twitter&lt;/a&gt;) I did almost nothing but having fun and relaxing until the end of the year.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it felt &lt;em&gt;so good&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;did-i-achieved-my-goals&#34; &gt;Did I achieved my goals?&lt;a href=&#34;#did-i-achieved-my-goals&#34; aria-label=&#34;Did I achieved my goals? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Most of them, yes!&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Work on art directed articles&lt;/dt&gt;&lt;dd&gt;I did not, but worked on my own design system and content, so I take it as a success.&lt;/dd&gt;&lt;dt&gt;A new portfolio&lt;/dt&gt;&lt;dd&gt;I &lt;a href=&#34;portfolio.html&#34;&gt;did it&lt;/a&gt; and it was a waste of time since it did not convince anyone.&lt;/dd&gt;&lt;dt&gt;Write CSS guidelines&lt;/dt&gt;&lt;dd&gt;&lt;a href=&#34;css-methodologies.html&#34;&gt;Done&lt;/a&gt;!&lt;/dd&gt;&lt;dt&gt;Code less&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;FAILED&lt;/strong&gt;. I coded almost twice as much in 2021 than in 2020. If I have to work on something in 2022 it would be a way to post more easily on my website. Things like my drawings, thoughts, or evolve my time tracking system.&lt;/dd&gt;&lt;dt&gt;MAKE ART&lt;/dt&gt;&lt;dd&gt;I DID IT! I started taking Live model drawing lessons in Septembre, and it&#39;s been a blast. That&#39;s the most fun I have each week, my skills are improving and I even started drawing a little bit outside of lessons. Probably the biggest personal success of the year!&lt;/dd&gt;&lt;dt&gt;WRITE FICTION&lt;/dt&gt;&lt;dd&gt;I did some, but not much. Still, it&#39;s a start and I hope I can continue.&lt;/dd&gt;&lt;dt&gt;Be responsible&lt;/dt&gt;&lt;dd&gt;I think I succeeded. My partner had to handle a lot in 2020 and I think I managed to help her back in 2021. She&#39;s been improving and achieving her goals too, and also started to relax a lot more since we moved in.&lt;/dd&gt;&lt;dt&gt;Relax&lt;/dt&gt;&lt;dd&gt;Oh &lt;em&gt;yeah&lt;/em&gt;, don&#39;t worry, I relax.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h2 id=&#34;2022-goals&#34; &gt;2022 Goals&lt;a href=&#34;#2022-goals&#34; aria-label=&#34;2022 Goals permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Draw more&lt;/dt&gt;&lt;dd&gt;That&#39;s the one. I want to install a drawing corner in my home and draw more. I want to do more human bodies, muscles, portrait and erotica.&lt;/dd&gt;&lt;dt&gt;Write more&lt;/dt&gt;&lt;dd&gt; For now I&#39;m only developing characters. I think it&#39;s more about thinking about doing it, because each time I engage in this activity it&#39;s actually going well.&lt;/dd&gt;&lt;dt&gt;Engage in more unproductive activities&lt;/dt&gt;&lt;dd&gt;My book and steam backlogs are ready and waiting for me, I&#39;m not worried.&lt;/dd&gt;&lt;dt&gt;Code less&lt;/dt&gt;&lt;dd&gt;Since I have a new job that involves coding all day, I&#39;ll probably code less anyway. Most of it will be devoted to continuing my design system and my website.&lt;/dd&gt;&lt;dt&gt;Explore more&lt;/dt&gt;&lt;dd&gt;I want to continue growing into a more peculiar adult. Discover new things in life, dare to go out of bounds, and have fun.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;See you next year!&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/2021" rel="self" type="text/html"></link>
    <summary type="html">2021 Year review</summary>
  </entry>
  <entry>
    <title>Drawing</title>
    <updated>2023-03-03T16:22:26Z</updated>
    <id>https://thomasorus.com/drawing</id>
    <content type="html">&lt;h1 id=&#34;drawing&#34; &gt;Drawing&lt;a href=&#34;#drawing&#34; aria-label=&#34;Drawing permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;em&gt;(The drawings in this page were made between September 2021 and February 2022)&lt;/em&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve been drawing since I was a kid, but was never very talented at it. My parents explained that, when I was very young, my perfectionist nature would make me trash almost all drawings I was making due to frustration. Perhaps for this reason I stopped and only started drawing again in high school to pass time in lessons I was not interested in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To me, drawing was, more than anything else, the thing you do to create comics. I&#39;ve grown up reading a ton of French, Belgian and Japanese comics, but not so much fine art outside of a art history school lessons. Comics are what built my visual culture growing up. I think my first important visual shock was the discovery of BLAME! by &lt;a href=&#34;https://en.wikipedia.org/wiki/Tsutomu_Nihei&#34;&gt;Tsutomu Nihei&lt;/a&gt;. Even today there&#39;s nothing that looks like it.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/march-2022-1.jpg&#34; alt=&#34;Drawing made between September 2021 and February 2022&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/march-2022-1.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I went to art school during the mid-2000. At this period, art teachers hated that students were either inspired by Tim Burton aesthetics or manga aesthetics. I mostly draw there, and I already had trouble with shadows and shades. But according to my teachers, I had a good sense for lines and volumes. I was (and am still) terrible with colors. I don&#39;t know how they work. I don&#39;t know how to mix paint, color pens. I was an absolute disaster during the very short color lesson I had.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I just kept drawing in black and white, because that&#39;s what my aesthetics are. I discovered a lot of artists that I adore. Unsurprisingly, my favorite painter is &lt;a href=&#34;https://en.wikipedia.org/wiki/Pierre_Soulages&#34;&gt;Pierre Soulages&lt;/a&gt;. I had several difficult art crisis and blocks in art school, trying to find my voice and my process. When I graduated in 2009, this research wasn&#39;t finished or had enough roots to continue to grow. Also, I was so frustrated with art that I entirely stopped doing any.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/march-2022-2.jpg&#34; alt=&#34;Drawing made between September 2021 and February 2022&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/march-2022-2.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;The pause turned into a 13 years struggle. I would start drawing again, be unsatisfied, not able to find my roots, that were dried at this point, and give up. Also I had no idea what to draw, or in which conditions. The only thing that made me draw in art school was writing stories and depicting them. Comics basically wired my brain in this strange way. I require context to find a subject and get the desire to draw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not so surprisingly, the trigger came again from comics. In 2021 I started watching &lt;a href=&#34;https://www.naokiurasawa.com/&#34;&gt;Manben&lt;/a&gt;, a series by manga artist &lt;a href=&#34;https://en.wikipedia.org/wiki/Naoki_Urasawa&#34;&gt;Naoki Urasawa&lt;/a&gt;, that documents how manga artists work by filming them for days. This series is probably the biggest art un-blocker you can find. Some of those artists strive for the perfect line. Others will redo drawings ten times, making a crust of white eraser on their paper. Others use photos, scanners, lousy brush strokes, or even photoshop version 4.0 and can&#39;t draw a line correctly 9 times out of 10 after 30 years of career.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was a trigger for me to understand that drawing, like most craftsmanship, is about figuring out a process you find interesting and feel like doing thousands of times without getting bored. The result may not look like what you strive for or the artists your admire, but will be the pure, unfiltered result of who you are.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/march-2022-3.jpg&#34; alt=&#34;Drawing made between September 2021 and February 2022&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/march-2022-3.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;So, I&#39;ve started drawing again in 2021. I go to live model drawing lessons, again in an art school. It&#39;s a ton of fun, probably because I&#39;m now in a situation where I can do whatever I want and answer to nobody but myself. Drawing isn&#39;t linked to grades, or a future career. It&#39;s all about finding what I enjoy doing while doing it, and seeing an often unexpected result at the end. It never ceases to surprise me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My favorite tools are gray pens, markers and black ink with brushes. I draw on large paper, most of the time on 50 by 60 centimeters sheets. I feel constrained by small paper sizes, as I can&#39;t draw with my arm and need to use only my wrist, which tends to frustrate me. I also have hard time drawing with models far from me, or for long sessions. It&#39;s actually super hard for me to last more than 20 minutes on a drawing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today my favorite drawers are probably &lt;a href=&#34;https://en.wikipedia.org/wiki/Hiroaki_Samura&#34;&gt;Hiroaki Samura&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Takehiko_Inoue&#34;&gt;Takehiko Inoue&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Katsuya_Terada&#34;&gt;Katsuya Terada&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Shin-ichi_Sakamoto&#34;&gt;Shin&#39;ichi Sakamoto&lt;/a&gt;. Unsurprisingly, all of them are or were manga artists, all of them depict humans, animals and surroundings in expressive strokes and expressions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I like drawing people, and the expression that shows through their bodies and faces.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/march-2022-4.jpg&#34; alt=&#34;Drawing made between September 2021 and February 2022&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/march-2022-4.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/drawing" rel="self" type="text/html"></link>
    <summary type="html">My thoughs about drawing</summary>
  </entry>
  <entry>
    <title>Recovering from depression</title>
    <updated>2022-04-13T18:01:33Z</updated>
    <id>https://thomasorus.com/recovering-from-depression</id>
    <content type="html">&lt;h1 id=&#34;recovering-from-depression&#34; &gt;Recovering from depression&lt;a href=&#34;#recovering-from-depression&#34; aria-label=&#34;Recovering from depression permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Last year I wrote about &lt;a href=&#34;one-year-with-antidepressants.html&#34;&gt;how and why I started taking antidepressants&lt;/a&gt; to better manage depression and anxiety. My commitment to normalize talking about mental health issues has not changed, so here&#39;s an update on where I am right now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time of writing, I no longer take antidepressants and have been somehow managing. One of the reasons I started taking them was because both my physical and mental feelings were going wild and I was unable to control them into something positive. I needed to be a bit insensitive. Not much, but just enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last December I started a new job, and despite me liking it, it&#39;s still work and work makes tires you by design. The combination of long hours and antidepressants shifted the balance go on the opposite side. I was getting too desensitized, and wondering what I should do about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That&#39;s when I encountered a conference talk on depression by &lt;a href=&#34;https://yapko.com/michael-yapko/&#34;&gt;Michael Yapko&lt;/a&gt;. It&#39;s called &lt;em&gt;How to recover from depression&lt;/em&gt; and it&#39;s available on &lt;a href=&#34;https://www.youtube.com/watch?v=TVgQ_tgWMyU&#34;&gt;Youtube&lt;/a&gt; and in &lt;a href=&#34;ttps://psychlopaedia.org/health/how-to-prevent-depression-full-transcript/&#34;&gt;text format&lt;/a&gt;. Yapko identifies risk factors (&lt;em&gt;&#34;anything that increases the likelihood of somebody suffering a particular disease or condition&#34;&lt;/em&gt;) that increase your chances to have depression. For example, children of depressed parents have three to six times more chance to be depressed, making depression a contagious social disease.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Learning about those risks factors was a huge help in stopping antidepressants and I wanted, both as a reminder for myself and for others, to write them down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please be aware that again, this is not a medical advice and that if you need one, you should seek help form a professional.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;depression-risk-factors&#34; &gt;Depression risk factors&lt;a href=&#34;#depression-risk-factors&#34; aria-label=&#34;Depression risk factors permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Risk factors can be extremely personal, or quite the opposite, shared by a lot of people. And that&#39;s those more common ones that Yapko describe in his talk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He explains five of them:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Internal orientation&lt;/li&gt;&#xA;&lt;li&gt;Stress generation&lt;/li&gt;&#xA;&lt;li&gt;Rumination&lt;/li&gt;&#xA;&lt;li&gt;Global thinking&lt;/li&gt;&#xA;&lt;li&gt;Unrealistic expectations&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;h3 id=&#34;internal-orientation&#34; &gt;Internal orientation&lt;a href=&#34;#internal-orientation&#34; aria-label=&#34;Internal orientation permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Internal orientation is the act of using yourself as the reference point. It&#39;s using feelings to make decisions, and using feelings to interpret what you are interpreting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The internal orientation drives people inwardly. It&#39;s a narcissistic self-absorption attitude driven by the &lt;em&gt;&#34;Trust your feelings&#34;&lt;/em&gt; advice (which according to Yapko is a very &lt;em&gt;very&lt;/em&gt; bad advice). The problem is, feelings are deceiving and can make things look way worse, or way better, than what they really are.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;https://www.youtube.com/watch?v=TVgQ_tgWMyU&#34;&gt;If you look at the times that people get in the most trouble, it&#39;s when they get wrapped up inside in whatever they happen to believe that may have next to nothing to do with what&#39;s actually going on out there. Clinicians call this cognitive rigidity.&lt;/blockquote&gt;&lt;figcaption&gt;— Michael Yapko, &lt;a href=&#34;https://www.youtube.com/watch?v=TVgQ_tgWMyU&#34;&gt;How to recover from depression&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Depressed people think things and then make the mistake of actually believing themselves. To try to get out of this subjective mindset, they have to learn to reality test. Going outside of themselves to better understand what&#39;s really happening and generate multiple explanations to an event that is triggering depression.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;stress-generation&#34; &gt;Stress generation&lt;a href=&#34;#stress-generation&#34; aria-label=&#34;Stress generation permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Internal orientation, among other things, can lead to bad decision making. And bad decision making complicates and exacerbates depression by creating stress. Yapko takes the simple example of exercising. It has the same success rate as a treatment as antidepressants. But someone listening to their feelings won&#39;t do it. Same for going to the doctor, or a therapist, or stopping alcohol.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;https://www.youtube.com/watch?v=TVgQ_tgWMyU&#34;&gt;What stress generation speaks to is how people make decisions that complicate their depression, exacerbate their depression. They don’t do it intentionally, but it speaks to the quality of their decision-making strategies, and when people don’t have good decision-making strategies, when they just follow their heart, just follow their feelings, they’re going to make mistakes.&lt;/blockquote&gt;&lt;figcaption&gt;— Michael Yapko, &lt;a href=&#34;https://www.youtube.com/watch?v=TVgQ_tgWMyU&#34;&gt;How to recover from depression&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Feelings come and go, but consequences of our actions last. To get out of these stressing loops, depressed people need to take actions that are consistent with their personal goals, and avoid taking actions consistent with their feelings. It&#39;s particularly important to not take decisions without a balanced mood, as its state influences the perceptions and the quality of decisions.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;rumination&#34; &gt;Rumination&lt;a href=&#34;#rumination&#34; aria-label=&#34;Rumination permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Rumination is the act of spinning around the same thoughts and endlessly analyzing at the expense of taking action. Rumination increases anxiety and depression by making basic things, like sleeping, difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ruminators are often trying to figure out what to do next based on what happened before. They use the past to predict the future, an habit called &lt;em&gt;past orientation&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;https://www.youtube.com/watch?v=TVgQ_tgWMyU&#34;&gt;So they say things like, “I&#39;ll never be happy.” Prediction for the future. “Why not?” “Because I never have been.” “I&#39;ll never get a good job.” “Why not?” “Because I&#39;ve never had one.” ” I&#39;ll never have a good relationship.” “Why not?” “Because I&#39;ve never had one.” [...] For as long as somebody gets caught up in that loop, they&#39;re not going anywhere, why it becomes so incredibly important to convert to action.&lt;/blockquote&gt;&lt;figcaption&gt;— Michael Yapko, &lt;a href=&#34;https://www.youtube.com/watch?v=TVgQ_tgWMyU&#34;&gt;How to recover from depression&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;To get out of this loop, it&#39;s important to not define itself by the unchangeable history. For survivors of a traumatic event, it&#39;s important to recognize it, but not let it orientate the future as it will close the field of possibilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the cures of rumination taking action in a timely and effective manner. Another one is to learn the difference between useful analysis and useless rumination.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;global-cognition-or-thinking&#34; &gt;Global cognition or thinking&lt;a href=&#34;#global-cognition-or-thinking&#34; aria-label=&#34;Global cognition or thinking permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Global cognition is the act of generalizing instead of problem solving. It&#39;s the unfamous &lt;em&gt;&#34;Men/Women are all the same&#34;&lt;/em&gt; after a breakup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Being a global thinker prevents from achieving goals by forbidding going into specifics. It doesn&#39;t mean that people are globally thinking every aspect of their life. They can be very good at problem solving specific things, and unable to do the same into other areas without even acknowledging it.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;https://www.youtube.com/watch?v=TVgQ_tgWMyU&#34;&gt;They say to me, “Well, all I want is to be happy. Is that too much to ask? All I want is a good relationship. Is that too much to ask?” Then I&#39;ll ask the specifics. “So, what do you think it takes to build a good relationship?” And the person comes back with an equally global response when they say, “Chemistry”. If you think in those global terms, metaphorically you see the forest, but you don&#39;t see the trees, then you can&#39;t be an effective problem solver.&lt;/blockquote&gt;&lt;figcaption&gt;— Michael Yapko, &lt;a href=&#34;https://www.youtube.com/watch?v=TVgQ_tgWMyU&#34;&gt;How to recover from depression&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Global thinking takes time to fix as it requires exercising with a therapist to sequence the steps needed to achieve a desired goal. It&#39;s basically learning to flow chart and micro-analyzing life.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;unrealistic-expectations&#34; &gt;Unrealistic expectations&lt;a href=&#34;#unrealistic-expectations&#34; aria-label=&#34;Unrealistic expectations permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Having unrealistic expectations is a recipe for hurt and disappointment. The main problem is, do people know that they have unrealistic expectations?&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;https://www.youtube.com/watch?v=TVgQ_tgWMyU&#34;&gt;You&#39;ve got to know who you&#39;re dealing with and whether the expectations are realistic before you walk into a situation that&#39;s charged, before you walk into a job interview, before anything. Lay it out. What are your expectations? How do you know whether this is realistic or not? If you get good at doing that, you will save yourself a lot of disappointment.&lt;/blockquote&gt;&lt;figcaption&gt;— Michael Yapko, &lt;a href=&#34;https://www.youtube.com/watch?v=TVgQ_tgWMyU&#34;&gt;How to recover from depression&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Basic examples could be expecting repeated signs of affection from a partner that has never been very demonstrative to begin with. It can also be not expecting unrealistic things from others when they don&#39;t have any control on those things, like winning the lottery. It&#39;s not that expecting things is bad, just that those things have to be in line with reality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking a step back to reality check expectations is also a skill that can be learned.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;working-against-those-risk-factors&#34; &gt;Working against those risk factors&lt;a href=&#34;#working-against-those-risk-factors&#34; aria-label=&#34;Working against those risk factors permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Reading about those risk factors and how it can be socially contagious was eye opening. Rumination and unrealistic expectations are common in my family and were transmitted to my siblings and I. The generated stress often leads to a destructive attitude that is shared by several members. Fortunately, most of us in the family identified those patterns pretty early in adult life and worked to mitigate them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;m a bit inclined to internal orientation and I ruminate &lt;em&gt;a lot&lt;/em&gt; instead of taking action. What surprised me was that my previous therapist did not thought about rumination as something dangerous. She said that sometimes, it&#39;s good to imagine how things could have turn out or fantasize to relieve stress, so I never interpreted it as something negative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After watching the video and thinking it through, I stopped taking my antidepressants. Despite being at a very, very low dosage, withdrawal symptoms were brutal for two weeks. But having read about them and remembering to not listen to myself too much, I passed through it and came out clean.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I quickly realized that I had other habits feeding my depression that I needed to eliminate. Among them, I  stopped bringing my phone inside my bedroom, and bought a sunlight alarm clock. Removing my phone was actually the biggest and quickest benefit I felt. It significantly reduced my ruminations. It also leveled up my mood in the morning because, &lt;em&gt;shocked-pikachu.jpg&lt;/em&gt;, getting up and opening shutters before seeing a screen is good for humans.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, there was last one thing. I got used to drink alcohol, even in small quantities, as was a way to relieve stress after work.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;https://www.youtube.com/watch?v=TVgQ_tgWMyU&#34;&gt;Why do I say stop drinking? If you are depressed, if you are vulnerable to depression, your alcohol intake should be zero. Alcohol is a bad drug for people who are depressed or prone to depression. It has been shown to aggravate the same neuro pathways as depression. If you are a depressed person, your alcohol consumption should be zero. [...] When I say alcohol&#39;s a bad drug, I am understating it.&lt;/blockquote&gt;&lt;figcaption&gt;— Michael Yapko, &lt;a href=&#34;https://www.youtube.com/watch?v=TVgQ_tgWMyU&#34;&gt;How to recover from depression&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Seeing how Yapko insisted alcohol was a terrible mistake, I packed all the bottles of my house into bags and dropped them to a friend&#39;s, to its delight. I didn&#39;t drink for a month, then relaxed my rules to allow myself a beer under conditions: no alcohol in the house, no alcohol outside the house during working days.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I compensate the lack of alcohol with two things, ginger ale and sport. I registered to a gym two months ago and am now trying to go two times a week. It&#39;s expensive and I dislike the place, the effort and the overall experience so much it turns into a battle against internal orientation every time. But I try to remember it&#39;s a mean that aligns to my goals, and the dopamine rush during the after workout shower is real.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall it&#39;s been working well for those last two months. I still ruminate, I still listen to myself a little bit too much, but I&#39;m starting to identify those moments and mentally push them away. It&#39;s probably going to take months, if not years, before I can say I recovered from depression and anxiety, but I&#39;m happy to finally having this goal in my life, and taking action to achieve it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take care.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/recovering-from-depression" rel="self" type="text/html"></link>
    <summary type="html">Learning about depression risk factors and how to mitigate them</summary>
  </entry>
  <entry>
    <title>Every web stack is a product now</title>
    <updated>2023-01-06T16:18:29Z</updated>
    <id>https://thomasorus.com/every-web-stack-is-a-product-now</id>
    <content type="html">&lt;h1 id=&#34;every-web-stack-is-a-product-now&#34; &gt;Every web stack is a product now&lt;a href=&#34;#every-web-stack-is-a-product-now&#34; aria-label=&#34;Every web stack is a product now permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;When I write &lt;em&gt;web development&lt;/em&gt; below, I mostly mean &lt;em&gt;front-end web development&lt;/em&gt;, so things that relate to HTML, CSS and JavaScript.&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;When I started web development seven years ago, I was in survival mode after years of low paying wages and unemployment. It &lt;em&gt;had&lt;/em&gt; to work, and for it to work, I &lt;em&gt;had&lt;/em&gt; to always learn more, read and listen about web development all the time, monitor the field, socialize as much as possible with my peers. This way, I would not get disposable and lose my job. I would build a network. I would be safe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some aspects, it worked. I saw the adoption of JavaScript based tech stacks coming, and jumped onboard. I found places that made good use of my skills in code and visual design, and worked there. I built a network. Everything worked out as planned. And I enjoyed doing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But lately, everything related to web development feels stale and toxic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it&#39;s because this whole ecosystem is currently shifting to a new paradigm, which turns frameworks, libraries and people who make them into marketed, vertically integrated, growth oriented, open sourced, &lt;strong&gt;products&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result, nothing feels genuine anymore. Almost every article, newsletter or podcast feels like an ad. The tone and content are streamlined to avoid discomfort and controversy. Everybody oozes fake positivity about how great web development is, or will be, by using their framework (which works best when coupled with the products its sponsoring company does, of course).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As critical voices are categorized as downers, sometimes even harassed (especially if they are women), the field turns into an ever-increasing technical mono-culture. Old concepts are re-branded and sold as novelty. The developer experience is considered more important than user experience or the website&#39;s performances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Way often these tools, products and services don&#39;t make sense in real life. They are either too expensive in the long run, vendor locked-in traps, or over-engineered and thus too complex for small to medium average teams. And yet, they still are picked, as alternatives are made invisible by the marketing noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Monitoring the field doesn&#39;t feel like learning new things anymore. It feels like reading a never ending flow of brand content updates similar to consumer tech products. Like smartphones, it&#39;s all about this new feature nobody asked for, the % of power/speed gained compared to the last model, all presented during keynotes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I think it&#39;s time for me to let go and stop caring about this nonsense. Delete social media lists, unsubscribe from podcasts and newsletters. Remove this mental charge from my brain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I ever lack a skill or specific knowledge, I&#39;ll learn it when I need it. If my company needs me to learn something new, it will be done on company time. As it should be.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/every-web-stack-is-a-product-now" rel="self" type="text/html"></link>
    <summary type="html">Monitoring the field doesn&#39;t feel like learning new things anymore. It feels like reading a never ending flow of brand content updates similar to consumer tech products.</summary>
  </entry>
  <entry>
    <title>2022</title>
    <updated>2024-01-01T16:49:15Z</updated>
    <id>https://thomasorus.com/2022</id>
    <content type="html">&lt;h1 id=&#34;2022&#34; &gt;2022&lt;a href=&#34;#2022&#34; aria-label=&#34;2022 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;It pains me to report that 2022 was quite a shitty year. Not everything was bad, but most of it was. I&#39;m quite tired and frustrated, so please excuse the disjointed nature of this recap.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-positive&#34; &gt;The positive&lt;a href=&#34;#the-positive&#34; aria-label=&#34;The positive permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The new job is going great. I have zero personal interest in the project itself, only professional interest, which is actually great as I don&#39;t self-pressure myself into work. It&#39;s challenging, in a good way. Some parts are going too slowly, which frustrates me, but that&#39;s the way things are, especially this year with the recession.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The job forces me to go to Paris every month which tires me, but it&#39;s actually worth the time. I work with great humans, which makes our encounters pleasant. I also reconnected with a lot of old Parisian friends, some of them not seen for years. It&#39;s been such a pleasure to catch on with everyone. I also made new friends, which is always great.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the first half of the year I also did some freelance work for a nice client. The project was cool, on a topic I enjoyed working on. But it was also bigger and took more time than all of us involved expected. Still a very positive experience in the end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I went to a meetup with the European members of the &lt;a href=&#34;ttps://merveilles.town&#34;&gt;Merveilles&lt;/a&gt; community. It happened on an island near Venice, so I took the time to visit the city! It was beautiful, my first true vacation since 2019, as well as my first solo travel for a very long time. And the folks were exactly the kind of splendid human beings I expected them to be. I&#39;m glad I met them and I can&#39;t wait to go back again this year&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I draw a lot this year during my drawing classes! I have a ton of paper sheets I need to order, a lot of them will go to the trash as the drawings are terrible, but that was such an joyfull experience. I wrote about &lt;a href=&#34;drawing.html&#34;&gt;my relationship&lt;/a&gt; with drawing, and how I see it. I also started taking online lessons and writing &lt;a href=&#34;drawing-notes.html&#34;&gt;notes&lt;/a&gt; on the topic, but did not progress as much as I wanted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally, I made some progress on personal issues. As I &lt;a href=&#34;recovering-from-depression.html&#34;&gt;wrote last January&lt;/a&gt; I managed to recover from depression and stopped taking antidepressants. I also worked with my partner to evolve our relationship, which she accepted and I&#39;m grateful.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-negative&#34; &gt;The negative&lt;a href=&#34;#the-negative&#34; aria-label=&#34;The negative permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Health.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got COVID in August. I coughed for two months and had to stop going to the gym, which resulted in terrible mood swings. COVID also reactivated my asthma and weakened me a lot. My partner still has long COVID, among several other health issues, that requires my help from time to time, but mostly it hurts morale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I was just recovering from COVID, I caught the flu. A strange kind of flu that lasted for weeks, once again preventing me from doing any exercise, social activities, personal projects like going to my drawing lessons, which I had to quit for months.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And now I have osteoarthritis on my thumbs, as well as inflamed hands, which is not a good things when your job depends on them. It was triggered by a caulk silicone gun, and since that time it&#39;s been progressing, slowly but surely, to the point where some mundane everyday actions now hurt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve always been someone that could physically do almost anything in a carefree manner, and coming to the realization that those times are now over has been hard. I can still do most things, but I need specialized tools to avoid forcing. At 36, it hurts morale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What also hurt morale was seeing my grandmother slowly but surely losing her independence, to the point where she had to be placed in an retirement house. She feels better now, but it triggered a chain of events that took a toll on everyone involved, and also conversations with parents about that to do about them when it happens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, finally, when I thought the year was finally ending and nothing bad could happen in the last short few days of the year, a friend died from a stroke on Christmas day. It&#39;s the third person I know, in tree years, that suffers from a stroke due to stress, and the second to die from it, and I don&#39;t like this trend.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was the final trigger that made me choose to stop freelancing. I&#39;ve transferred my clients to colleagues, and will solely focus on my daily job and hobbies from now on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also:&lt;/p&gt;&#xA;&lt;ul&gt;&lt;li&gt;French people almost elected fascists to power this year, the alternative being reincarnated Margaret Thatcher in a smoking.&lt;/li&gt;&#xA;&lt;li&gt;Social services are being destroyed by our government, to the point where it&#39;s almost not functioning anymore.&lt;/li&gt;&#xA;&lt;li&gt;The ocean was on fire, we hit temperature records, the heatwaves almost killed a family member.&lt;/li&gt;&#xA;&lt;li&gt;I stopped &lt;a href=&#34;very-web-stack-is-a-product-now.html&#34;&gt;caring web development&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;did-i-achieved-my-2021-goals&#34; &gt;Did I achieved my 2021 goals?&lt;a href=&#34;#did-i-achieved-my-2021-goals&#34; aria-label=&#34;Did I achieved my 2021 goals? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Details for 2021 goals are written &lt;a href=&#34;2021.html#2022-goals&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Draw more&lt;/dt&gt;&lt;dd&gt;Success! I installed a drawing corner, and I definitely draw more. I&#39;ve done mostly human bodies, muscles, portraits, but no erotica. I&#39;m probably too shy.&lt;/dd&gt;&lt;dt&gt;Write more&lt;/dt&gt;&lt;dd&gt;Failed! I should start writing fiction again, but I&#39;m tired.&lt;/dd&gt;&lt;dt&gt;Engage in more unproductive activities&lt;/dt&gt;&lt;dd&gt;Mixed bag! I worked during the first six months, but played a lot of video games during the rest of the year.&lt;/dd&gt;&lt;dt&gt;Code less&lt;/dt&gt;&lt;dd&gt;Failed! Again because of freelance work, but I also started a new personal project with a friend and did some things there and there.&lt;/dd&gt;&lt;dt&gt;Explore more&lt;/dt&gt;&lt;dd&gt;Success! I&#39;ve been coming into terms with a lot of things, dared to try several others, and will continue in 2023.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h2 id=&#34;2023-goals&#34; &gt;2023 goals&lt;a href=&#34;#2023-goals&#34; aria-label=&#34;2023 goals permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;They are basically the same, but refined:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Draw better&lt;/dt&gt;&lt;dd&gt;I need to focus on my own process this year, and work on some long term, finished pieces that require thinking.&lt;/dd&gt;&lt;dt&gt;Engage in more unproductive activities&lt;/dt&gt;&lt;dd&gt;Big focus on my pile of comics and books. So many books to read!&lt;/dd&gt;&lt;dt&gt;Code for fun&lt;/dt&gt;&lt;dd&gt;I&#39;ll continue this personal project I mentioned before, and probably work on new personal tools for habit tracking and time tracking.&lt;/dd&gt;&lt;dt&gt;Self exploration&lt;/dt&gt;&lt;dd&gt;That will be the more challenging one, but it&#39;s also very personal, so I won&#39;t go into details here.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;See you next year!&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/2022" rel="self" type="text/html"></link>
    <summary type="html">My 2022 year review</summary>
  </entry>
  <entry>
    <title>From static site generator to static site processor</title>
    <updated>2023-03-06T09:28:34Z</updated>
    <id>https://thomasorus.com/from-static-site-generator-to-static-site-processor</id>
    <content type="html">&lt;h1 id=&#34;from-static-site-generator-to-static-site-processor&#34; &gt;From static site generator to static site processor&lt;a href=&#34;#from-static-site-generator-to-static-site-processor&#34; aria-label=&#34;From static site generator to static site processor permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;My website was in a state of rotting for a year, but I&#39;m finally happy to report it&#39;s fixed now! The various changes made will allow me to write, update and publish way more easily than before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It took some time as I felt kinda stuck in the clumsiness of the project. It had become a mix of JavaScript for the data processing and page generation ; and of bash scripts for tasks related to assets and development. The whole thing was failing very often, to the point I was not feeling any joy using it. If you&#39;ve not been following for a long time, building this website has been one of the joyous experiences of my career on the past 3 years, so I felt terrible to have this playground kinda broken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I needed a change of mindset. I already had several JavaScript modules for parsing my text files, my markup language, processing data from them. I wanted to continue to use those modules, as I think they are the real value of my project. They reflect how I work and think, they are representative of my journey.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, I thought about what constitutes a personal static site generator, and came to the conclusion it&#39;s not what spits the HTML and CSS, but the data processing happening before the generation that delivers an array of items that will be turned into a website. Maybe I should not do a full static site generator, but a static site processor that delivers data that can be transformed into a website.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way, I could continue having fun by plugging new ideas into my &lt;em&gt;brain machine&lt;/em&gt;, and disregard the actual generation of files, the optimization of assets. But as a web developer specialized in coding interfaces, I cannot not care, I have &lt;em&gt;standards&lt;/em&gt;. I want a fast, cohesive, fun and accessible experience. And for this I need tools to process the parts that I don&#39;t want to manage myself anymore.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;finding-a-good-html-printer&#34; &gt;Finding a good HTML printer&lt;a href=&#34;#finding-a-good-html-printer&#34; aria-label=&#34;Finding a good HTML printer permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;So I decided to look again at existing static site generators for Node. To please me, it had to satisfy those needs:&lt;/p&gt;&#xA;&lt;ul&gt;&lt;li&gt;It needs to be a basic HTML printer, not a framework with front-end libraries.&lt;/li&gt;&#xA;&lt;li&gt;It must be opinionated enough on its tool chain so I don&#39;t have to add config files to process assets and pages.&lt;/li&gt;&#xA;&lt;li&gt;It mustn&#39;t be opinionated on the data source and allow pre-processing of the source files.&lt;/li&gt;&#xA;&lt;li&gt;Easy to maintain, update and run.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And of course, I found nothing. &lt;a href=&#34;ttps://www.11ty.dev/&#34;&gt;Eleventy&lt;/a&gt; is probably the closest to my needs, but it still hasn&#39;t migrated to ES modules ; its documentation is complete but somehow, I find it confusing and messy and can hardly find what I&#39;m looking for ; and you still have to configure a lot of stuff for the assets processing, thus are stuck in the &lt;em&gt;fabulous world of the JavaScript ecosystem&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was disappointed for a few weeks, until I saw &lt;a href=&#34;https://toot.cafe/@baldur&#34;&gt;Baldur&lt;/a&gt; talk about its experience with &lt;a href=&#34;https://deno.land/&#34;&gt;Deno&lt;/a&gt;. Deno is a JavaScript runtime equivalent to Node, but with several differences that instantly satisfied my laziness:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;It has its own shell to run scripts which makes it environment independent.&lt;/li&gt;&#xA;&lt;li&gt;There&#39;s no package manager, just imports using URLs, so no &lt;code&gt;node_modules&lt;/code&gt; madness (but you can store your modules for offline use if you want).&lt;/li&gt;&#xA;&lt;li&gt;Its JavaScript API is the closest as it can be to the browser JavaScript API, which is good to me as a front-end developer.&lt;/li&gt;&#xA;&lt;li&gt;It&#39;s a full tool chain that comes with a linter, a test runner, a formater, so there&#39;s no time wasted on this.&lt;/li&gt;&#xA;&lt;li&gt;It has a no-dependency external stdlib for more complex needs.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And it turned out that &lt;a href=&#34;ttps://mastodon.gal/@misteroom&#34;&gt;Óscar Otero&lt;/a&gt;, who really enjoys Eleventy, made its own version of it for Deno, called &lt;a href=&#34;https://lume.land/&#34;&gt;Lume&lt;/a&gt;. It follows Deno principles of being near zero configuration, non-opinionated about the source of data, and comes with a set of official, easy to use plugins, and a clear, concise documentation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I grabbed my modules, made them even more modular and oriented towards data processing, and connected them to Lume through the config file, and it... worked. There isn&#39;t a lot to say, I just imported the modules I needed, configured the process and copy for the assets ; created a for loop into a template file ; split my template into layout partials for more clarity ; and the website was generated.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;simplifying-the-project&#34; &gt;Simplifying the project&lt;a href=&#34;#simplifying-the-project&#34; aria-label=&#34;Simplifying the project permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Seeing this tooling part was done, I could then go back to what I wanted: fixing stuff in my static site processor, ease the writing and modifying of the website.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here&#39;s a list of changes for the data processing:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;The builder can now take several content files instead of one, which should allow me to group content in separated files. For example, I could group all the journal entries into a single file, or use a file per page if I wanted. I really like this flexibility.&lt;/li&gt;&#xA;&lt;li&gt;I added creation date to all posts. With my website in this current form turning 4 years old, I felt some pages needed time contextualization. Some information could be outdated, and dates help to make sense of what you read. I did not have any dates prior to this, so I used the git history to catch the oldest commit for each page, and updated the content files.&lt;/li&gt;&#xA;&lt;li&gt;I also added a generation date, updated when the content changes. This part isn&#39;t perfect, as it uses the live RSS file as a source of truth and compare markups, not the content itself. Inline markup changes (for example image sizes) can then trigger a date change, but that&#39;s a sacrifice I&#39;m OK with. This part was the trickiest to get right.&lt;/li&gt;&#xA;&lt;li&gt;Added the ability to exclude pages from the RSS Feed. Since some pages are just automatic listings of other pages, they did not provide any value for RSS users and polluted their feeds without giving anything valuable when updated.&lt;/li&gt;&#xA;&lt;li&gt;Redid the whole RSS feed in ATOM, as I felt its specs made more sense to me.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For the design and tooling:&lt;/p&gt;&#xA;&lt;ul&gt;&lt;li&gt;The design system powering this website was a different project in a different repository. Each time I changed something I had to open it, make a change, then move the processed file into the SSG. It made me mad every time, so I imported all the CSS files inside Lume, it processed them without trouble, and I can now experiment live with my CSS in a single place. I&#39;m also porting the design system documentation on the website.&lt;/li&gt;&#xA;&lt;li&gt;The templating that was done in my modules is now almost entirely done using nunjucks files. I like nunjucks, it&#39;s an easy to use and understand syntax.&lt;/li&gt;&#xA;&lt;li&gt;I removed the icons from the footer. We are so used to use basic icons for everything that I never questioned the fact they did not fit in the style of the website. And text is more clear for readers.&lt;/li&gt;&#xA;&lt;li&gt;I moved the configuration panel to the footer instead of the main menu. I felt it was out of place, as the other elements of the menu are navigation links.&lt;/li&gt;&#xA;&lt;li&gt;In the configuration panel, I removed the ability to change fonts. I initially added them for accessibility purposes, but this effort was misguided. You can read more about fonts and accessibility &lt;a href=&#34;https://www.nngroup.com/articles/best-font-for-online-reading/&#34;&gt;in this research&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Drastically reduced the size of fonts from 300kb to 65kb using sub-setting. It&#39;s the only thing I could not fully automate as it takes a lot of time to scan the site.&lt;/li&gt;&#xA;&lt;li&gt;Fixed image generation sizes to only three: mobile, desktop, full-size. Visitors on mobile should have a better experience now. Also I don&#39;t have to run a separate script and it takes way less time after caching.&lt;/li&gt;&#xA;&lt;li&gt;Fixed a lot of small visual annoyances and bugs, most you probably never noticed.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I&#39;m probably forgetting a lot of stuff, and I still have many things left to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;m happy to be in a place where it&#39;s now possible to just open my code editor, write or code, save and publish without stressing about something breaking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, many thanks to all the people who created the tools I&#39;m now using, especially to Óscar Otero who created lume.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/from-static-site-generator-to-static-site-processor" rel="self" type="text/html"></link>
    <summary type="html">How I found a good balance between wanting to do everything myself and accepting tooling that works well.</summary>
  </entry>
  <entry>
    <title>Design and disappointment</title>
    <updated>2023-04-26T08:22:15Z</updated>
    <id>https://thomasorus.com/design-and-disappointment</id>
    <content type="html">&lt;h1 id=&#34;design-and-disappointment&#34; &gt;Design and disappointment&lt;a href=&#34;#design-and-disappointment&#34; aria-label=&#34;Design and disappointment permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;After I became a front-end developer, I thought liking design could differentiate me from others in my field. After all, finding a front-end developer who cares when something looks bad is hard, and I was told those kind of people were valuable. So I doubled down on the &lt;a href=&#34;ttps://www.trysmudford.com/blog/design-foundations/&#34;&gt;Design Engineer&lt;/a&gt; role and learned quite a few things about design, systems, accessibility, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But after more than seven years working in all types of companies, I feel like I wasted my time and energy trying to be in a position that ultimately leads to disappointment and yield no results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my experience, when time or money are missing, design is the first thing to get cut in favor of business features. And that&#39;s normal. A pretty page that does nothing is useless, an ugly page that gets the job done is better. You have to improvise, and constraints can make the job interesting. I&#39;m not mad about this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But where I worked, design was underfunded &lt;em&gt;every time&lt;/em&gt;, in &lt;em&gt;every company&lt;/em&gt; no matter its size, business field, or claim of being &lt;em&gt;design centric&lt;/em&gt; or not. And once again, I learned to deal with it. I can adapt and compose with low budgets. It&#39;s not about being fancy, it&#39;s about having standards to compose great websites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then every time, non-designers meddled in and turned everything into a shit show.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sales, marketers, CEOs, careerist managers ; they all had &lt;em&gt;opinions&lt;/em&gt; on design, despite most of them having zero or dated experience in the field. They acted as thought leaders and requested changes so they could justify their yearly bonuses, ask for promotions, boost their egos, or display leadership ; dispossessing me of the authority over my work in the process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a common issue in many corporations, where value is measured by the number of projects you push in production each year. In this kind of environment, successfully bootstrapping a design system is almost impossible, as it doesn&#39;t bring a fast enough return on investment (and no &lt;em&gt;WOW&lt;/em&gt; effect) for the yearly rewards of those supervising it. And if you get it started, avoiding the destruction of its rules by outsiders is an already lost battle that eventually leads to burnout (been there, done that).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Companies claim that design matters, but if they don&#39;t relinquish their power over it and entrust it to their team, they are just posturing. In the end it&#39;s a governance issue, and breaking a cycle of vertical domination takes more effort than a line in a job offer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so, here I am, in the middle of this mess. A stooge pushing my UX/UI/A11Y/code gospel like Sisyphus pushes its boulder. All my time is spent extinguish fires in design committees, or twisting ready-made designs in my code editor to make them usable in an existing project not ready to receive them. It&#39;s heartbreaking, and not the experience I was expecting when I started walking this path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;m seriously considering stopping with the Design Engineer role, and just be a common front-end developer that just writes JavaScript for a living (I honestly enjoy &lt;a href=&#34;https://svelte.dev/&#34;&gt;Svelte&lt;/a&gt;). Or do back-end web development in a new, very foreign language, like &lt;a href=&#34;https://elixir-lang.org/&#34;&gt;Elixir&lt;/a&gt; or &lt;a href=&#34;ttps://elm-lang.org/&#34;&gt;Elm&lt;/a&gt;. Or completely change field and do programming outside the web.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recently found out about &lt;a href=&#34;https://janet.guide&#34;&gt;Janet&lt;/a&gt;. It looks fun. Maybe I&#39;ll be a Janet developer.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/design-and-disappointment" rel="self" type="text/html"></link>
    <summary type="html">It seems impossible for me to find a company who cares about design</summary>
  </entry>
  <entry>
    <title>Fighting games tournaments can still be great</title>
    <updated>2023-11-18T23:57:54Z</updated>
    <id>https://thomasorus.com/fighting-games-tournaments-can-still-be-great</id>
    <content type="html">&lt;h1 id=&#34;fighting-games-tournaments-can-still-be-great&#34; &gt;Fighting games tournaments can still be great&lt;a href=&#34;#fighting-games-tournaments-can-still-be-great&#34; aria-label=&#34;Fighting games tournaments can still be great permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Last week I took a plane to Lyon, France, to participate in a Street Fighter 3: Third Strike tournament. You might have notice that I wrote a &lt;a href=&#34;fighting-games.html&#34;&gt;a few notes&lt;/a&gt; about the game recently, but I also wanted to write my feelings about the tournament.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;video controls playsinline preload=&#34;metadata&#34; src=&#34;/uploaded/img/sf3-intro.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;/video&gt;&lt;figcaption&gt;The introduction of Street Fighter 3: Third Strike.&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Street Fighter 3 is a very peculiar game in all its aspects. First of all, it doesn&#39;t feel, play or even functions like a traditional Street Fighter game, even according to its creators:&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;https://www.polygon.com/2020/12/8/22151873/street-fighter-3-an-oral-history&#34;&gt;There&#39;s competitive games like that, where the match is essentially a confrontation of theoretical knowledge that each player has built up. But Street Fighter 3 is a game that, by design, doesn&#39;t have a fixed answer to those questions. There is no &#34;best&#34; tactic; you can spend your whole life trying to find the perfect theoretical approach to a situation in SF3, but it will never be quite right. You always have to be reading your opponent in the moment; you can&#39;t just fall back on your theories. It&#39;s a game that lets you search for answers forever. And that was the opposite of Street Fighter 2.&lt;/blockquote&gt;&lt;figcaption&gt;— Shinichiro Obata - Street Fighter 3 planner, &lt;a href=&#34;https://www.polygon.com/2020/12/8/22151873/street-fighter-3-an-oral-history&#34;&gt;Street Fighter 3: An oral history&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Its first version (New Generation) had a very rocky development (as narrated in &lt;a href=&#34;https://www.polygon.com/2020/12/8/22151873/street-fighter-3-an-oral-history&#34;&gt;this article&lt;/a&gt;) and the last one, Third Strike was purposely a swan song of the Capcom fighting game arcade era, with the next entry in the series only releasing almost 10 years later.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;https://shmuplations.com/sfiii/&#34;&gt;The subtitle “Fight for the Future” [...] we wanted to signal to players that this was a game you could only play at game centers, and convey our hope that the tradition of live arcade FTG matches will continue for a long time to come.&lt;/blockquote&gt;&lt;figcaption&gt;— Capcom, &lt;a href=&#34;https://shmuplations.com/sfiii/&#34;&gt;Gamest magazine translated by shmuplations&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Surprisingly, 24 years later, its creators hopes are realized. We still play it on arcade cabinets and had more than 100 players at the tournament (a first in Europe!) ; and if the game is kind of &#34;solved&#34; and well discovered and documented, players keep looking for answers and solutions on their own personal journey with the game!&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I&#39;m not a serious Third Strike player, I just have fundamentals in fighting games, but I love playing this game in a tournament setting even if I lose all the time. There are multiple reasons for why specifically this game, and that&#39;s what I wanted to write about today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all, the game is fun. The parry mechanic is intoxicating and makes you want to bet your whole life bar on a single risky read. The characters are diverse and charming, both in look and &lt;a href=&#34;https://www.youtube.com/playlist?list=PLPDk6gzWmX91cP0kQEXEBLQDES2o2Tt-H&#34;&gt;gameplay&lt;/a&gt;. Also the game is incredibly well animated, pretty, and its &lt;a href=&#34;https://www.youtube.com/playlist?list=PL2D4C428C2C10BCFF&#34;&gt;soundtrack&lt;/a&gt; is a banger.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;audio controls src=&#34;/uploaded/img/nyc-99.mp3&#34; type=&#34;audio/mpeg&#34; preload=&#34;metadata&#34;&gt;&lt;/audio&gt;&lt;figcaption&gt;Alex &amp; Ken&#39;s Stage - Jazzy NYC &#39;99&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Secondly, the game is notoriously known for its unbalanced roster. What could be an issue actually acts as a filter. In recent years complaining about perceived &lt;em&gt;unfair&lt;/em&gt; game balance has become standard due to social media, consumer culture and professionalization (it&#39;s always capitalism). It undermines my enjoyment of this whole genre of games, and going to a tournament knowing that &lt;strong&gt;noboby&lt;/strong&gt; will complain about it felt &lt;em&gt;super great&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other thing that felt great are the side effects of the hardware. Most fighting games tournaments are run on consoles provided by the tournament organizers, and each player brings its controller. When the tournament is not running, players &lt;em&gt;freeplay&lt;/em&gt; on available stations. But it takes a bit of time: players have to plug their controller, go back to the character select screen, check if their buttons are configured properly, pick a character, and finally the match starts. It may not sound much, but it takes usually 2 to 5 minutes, and a fighting game fight rarely lasts longer than that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So quite logically, people run sets. First to 3 or 5, best of 3 or 5. The players waiting behind have to announce they will play the winner of the set, or the already installed players won&#39;t move. Newcomers often find this situation anxiety-inducing, as you are interrupting people who are often better than you and asking a person to leave.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But Third Strike has not satisfactory console ports, so all tournaments are held on arcade cabinets (most of the time the &lt;a href=&#34;https://wiki.arcadeotaku.com/w/Sega_Astro_City&#34;&gt;Sega Astro City&lt;/a&gt;) running the 1999 &lt;a href=&#34;https://en.wikipedia.org/wiki/CP_System_III&#34;&gt;original dedicated arcade boards&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quite logically, nobody brings a controller, everyone has the same button config, and the game automatically falls back to the character select screen after each match. You just sit, pick the character and play. And in a true arcade culture fashion, you only have a single chance to prove you&#39;re the best. If you win, you stay and play against a new opponent. If you lose, you stand up, go back in line and wait for your turn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That may sounds harsh but it&#39;s actually a blessing in disguise. The dynamics of play are very different. You have to get into the game fast, commit on your actions, reflect on what went wrong or you&#39;ll lose all the time. But even when I lost, I did not wait long to play again due to the 20 (!) arcade cabs. It actually was one of the fighting games events where I played the most &lt;em&gt;in my entire life&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/tsb1.jpg&#34; alt=&#34;The TSB event, with a lot of arcade cabs lined one after the other. figcaption&#34;&gt;&lt;figcaption&gt;The arcade cabs are connected together in &#34;Versus Mode&#34;, providing each player with a screen and a panel to play. | &lt;small&gt;&lt;a href=&#34;/uploaded/tsb1.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;And finally, it was not an e-sport event, which means it excluded a whole bunch of annoying things that became standard when capitalism immersed itself into fighting games tournaments. There was no money to win, no sponsor to announce, no ad breaks, no ugly jerseys, no external pressure to perform, no fanboys, no autograph sessions. The tournament was self-funded and organized by two non-profits, but still managed to bring an impressive production value to the table with an amazing scene, a stream that regularly rolled commentators from different countries so everyone felt included, and prestigious guest players from Japan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going there, I was not expecting much. I just wanted to hang out with friends and see folks I missed for years, maybe visit the city. But when the first day ended, my roommates and I talked at length during the night about &lt;em&gt;how fun and great fighting games are&lt;/em&gt;. It was a feeling of enjoyment I had forgotten, as if I had finally reconnected with a lost friend.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sudden realization that yes, fighting games tournaments can still be great, and that I missed them so much.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/tsb2.jpg&#34; alt=&#34;The screen of an arcade cab with Street Fighter playing. figcaption&#34;&gt;&lt;figcaption&gt;Preparing for a fight on the arcade cab. | &lt;small&gt;&lt;a href=&#34;/uploaded/tsb2.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/tsb3.jpg&#34; alt=&#34;Two arcade cabs under a movie screen. There are decorations and a red light. figcaption&#34;&gt;&lt;figcaption&gt;Finals were played in a separated room, decorated for the occasion. | &lt;small&gt;&lt;a href=&#34;/uploaded/tsb3.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;video controls playsinline preload=&#34;metadata&#34; src=&#34;/uploaded/img/tsb-match.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;/video&gt;&lt;figcaption&gt;When the organizers were packing up things they left us with a single setup to play, which was turned into a team tournament between the two sides of the room. One of the most amazing moments of my already long fighting game life. Video courtesy of &lt;a href=&#34;https://twitter.com/Pr0sk_/&#34;&gt;Pr0sk&lt;/a&gt;.&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/tsb4.jpg&#34; alt=&#34;A group of around 100 persons taking a picture together. figcaption&#34;&gt;&lt;figcaption&gt;The family photo at the end of the tournament. | &lt;small&gt;&lt;a href=&#34;/uploaded/tsb4.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/fighting-games-tournaments-can-still-be-great" rel="self" type="text/html"></link>
    <summary type="html">Last week I took a plane to Lyon, France, to participate in a Street Fighter 3: Third Strike tournament.</summary>
  </entry>
  <entry>
    <title>2023</title>
    <updated>2024-03-09T17:28:39Z</updated>
    <id>https://thomasorus.com/2023</id>
    <content type="html">&lt;h1 id=&#34;2023&#34; &gt;2023&lt;a href=&#34;#2023&#34; aria-label=&#34;2023 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Yes, it&#39;s a year recap &lt;em&gt;two months&lt;/em&gt; after the year ended. You can probably guess a two month delay means a lot of things happened.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TL;DR is that I finished the year on sick leave due to burnout. At the moment of writing I am unemployed and recovering. I also decided to become a freelancer (&lt;a href=&#34;portfolio.html&#34;&gt;check my portfolio&lt;/a&gt; and hire me!). On the personal side, I broke many barriers that were dragging me down, evolved immensely on the emotional side, which led to new encounters, new experiences. I came to peace with leaving behind old hobbies, and created a space around drawing that bring me immense joy.&lt;/p&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt; All titles of this recap are songs I listened way too much this year. Can you identify them? &lt;/aside&gt;&#xA;&#xA;&lt;h2 id=&#34;bien-cordialement&#34; &gt;Bien cordialement&lt;a href=&#34;#bien-cordialement&#34; aria-label=&#34;Bien cordialement permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;So, about work. My realization this year, after burning out for the third time in 8 years, was how alone employment in tech is. In a year that saw the biggest strikes in France since World War 2 and incredible inflation, I was alone going on strike and publicly challenging management about raises. Tech workers don&#39;t have any class consciousness, don&#39;t fight for their rights, and don&#39;t get involved in companies, preferring to job hop. In these circumstances, social progress at work is near impossible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I doubt it will be different in any other company I could join, so I decided to stop looking for one and become a freelancer. Workers rights are getting destroyed in France, and it&#39;s probably the last period where I can benefit from unemployment benefits to start my own thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;m both happy and deeply annoyed by this decision. Happy because I can finally end this infantilizing relationship employment creates. I may have more varied and interesting work coming, and I can have some leverage about who I work for, and how.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am not blind. I know that, while trying to better my situation, I am doing exactly what the shitheads that govern us want: increase workers atomization and de-socialization, make them give up on class warfare, enslave them in closed platforms and algorithms, and make them carry all the risks and costs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remembering this, and being lucky to be safe on the financial side for a while, I&#39;ll try to build an organic and direct customer base without relying on platforms. Get in touch if you like my work and think I could fit in your projects!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;such-small-hands&#34; &gt;Such small hands&lt;a href=&#34;#such-small-hands&#34; aria-label=&#34;Such small hands permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;On the personal side the year started pretty badly. I turned 37 and I did not like it. My beard and hair had started to turn white. I felt that my self-discovery years were behind me. I felt disconnected from people my age and their lives, and outside of the internet, I had not found peers I could freely speak with. I lacked a connection with folks in real life who could help me grow as a person.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I&#39;m not 100% satisfied as I haven&#39;t found an IRL community I can 100% thrive in, my efforts to socialize, meet new people, experience new things, are slowly but surely bearing fruits. This year felt like awakening to new sensations, mental and physical states, after being numb for years. I feel alive and in the moment, but also relieved and detached. It’s great. I feel like I am breaking out of my shell, slowly revealing my true self, one I had never allowed myself to show to anyone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet, I still have work to do on myself. Most notably, opening myself up to feel also means experiencing the world in a more direct, violent way, which is very anxiety inducing. It requires being more strict with things like sleep, diet and exercise. It&#39;s hard but I don&#39;t regret it. I&#39;d rather feel alive even in the bad moments than numb like before.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-moth-and-the-flame&#34; &gt;The moth and the flame&lt;a href=&#34;#the-moth-and-the-flame&#34; aria-label=&#34;The moth and the flame permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;On hobby side, things are moving in the right direction. I consciously decided to stop anything that felt too close to hustle culture. It was a sad realization, but fighting games and programming, two of my favourite activities in the past years, started to feel like job related hobbies. They felt like a &lt;em&gt;productive&lt;/em&gt; way of spending my free time, because they benefited my professional carrier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it was so exhausting and pervasive it drained me. &lt;em&gt;Don&#39;t play this game when you haven&#39;t tried the last entry of TEKKEN! Don&#39;t read this comic when you could read a programming book instead! Why learn about this topic when you could learn about computer science?! &lt;strong&gt;Be productive on your free time! BETTER YOURSELF!!&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The discourse and changes emanating from the professionalization of the fighting games scene (&lt;a href=&#34;fighting-games-tournaments-can-still-be-great.html&#34;&gt;I briefly talked about it here&lt;/a&gt;), as well as the &lt;a href=&#34;very-web-stack-is-a-product-now.html&#34;&gt;debilitating productization&lt;/a&gt; (is that a word?) of the web development scene drained the fun out of them for me. I felt I had to move away from them before I started hating them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so I did, and it felt great. I spent hours on my sofa, dozing off, reading comics and books, watching anime, playing video games, drawing. I&#39;m not entirely free of this productivity mindset, but I&#39;m getting there.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;down-by-the-river&#34; &gt;Down by the river&lt;a href=&#34;#down-by-the-river&#34; aria-label=&#34;Down by the river permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A thing I totally nailed this year is drawing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I drew erotica for this first time, deep dived into surrealist pieces, experimented with my tools, re-connected with my inspirations, salvaged and triaged all my previous works, and even started writing about &lt;a href=&#34;art-journey.html&#34;&gt;my art journey&lt;/a&gt;. Writing this has been among the most interesting and positive things I did this year, and I can&#39;t wait to continue exploring my past self and reflect on who I am and why I do the things I do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Among the other things I nailed is the decision to never force myself to draw, and especially to absolutely never think about, or act, as if my art was &lt;em&gt;content&lt;/em&gt; that should be monetized. I created an &lt;a href=&#34;http://instagram.com/sorus_draws&#34;&gt;instagram account&lt;/a&gt; to share my art with family and friends, but that&#39;s it, there won&#39;t be any hustle. No obligatory daily story. No urgent weekly post. No considerations for my &#34;audience&#34;. No twisting of an idea to make it work better on social media. No prints until I want to to do it for myself. No big plans or overthought subjects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Drawing is now the ultimate hustle-free corner of my life, and I enjoy it immensely. And it&#39;s not just the act of drawing. I started to experience comforting feelings from my tools. I like manipulating them. The weight of my mechanical pens in my hand ; the grain of paper under the pulp of my finger ; the sound they make when tracing ; the smell. I now keep my favorite mechanical pencil and notebook with me, even when going outside, and I don&#39;t even draw outside of my house! I just like having them around me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All those aspects of &lt;em&gt;drawing&lt;/em&gt; bring me so much joy now. I don&#39;t even draw very often or for very long. Some pieces stay on the table for weeks. But every time I see them I feel joy, not pressure, failure or urgency. I know I will go back to them eventually. This feeling is the best.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;did-i-achieved-my-2023-goals&#34; &gt;Did I achieved my 2023 goals?&lt;a href=&#34;#did-i-achieved-my-2023-goals&#34; aria-label=&#34;Did I achieved my 2023 goals? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Draw better&lt;/dt&gt;&lt;dd&gt;Yes.&lt;/dd&gt;&lt;dt&gt;Engage in more unproductive activities&lt;/dt&gt;&lt;dd&gt;Yes.&lt;/dd&gt;&lt;dt&gt;Code for fun&lt;/dt&gt;&lt;dd&gt;No.&lt;/dd&gt;&lt;dt&gt;Self exploration&lt;/dt&gt;&lt;dd&gt;Yes.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h2 id=&#34;2024-goals&#34; &gt;2024 goals&lt;a href=&#34;#2024-goals&#34; aria-label=&#34;2024 goals permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Take care of my loved ones.&lt;/li&gt;&#xA;&lt;li&gt;Go on vacation both alone, and with my partner.&lt;/li&gt;&#xA;&lt;li&gt;Continue my personal explorations.&lt;/li&gt;&#xA;&lt;li&gt;Take action towards curing my anxiety.&lt;/li&gt;&#xA;&lt;li&gt;Be a responsible self-employed adult.&lt;/li&gt;&#xA;&lt;li&gt;Update myself on what I missed in web dev, but only one time in the year.&lt;/li&gt;&#xA;&lt;li&gt;Build bridges between my drawings and my influences to refine my style.&lt;/li&gt;&#xA;&lt;li&gt;Be more experimental in my art.&lt;/li&gt;&#xA;&lt;li&gt;Participate in at least one zine or expo.&lt;/li&gt;&#xA;&lt;li&gt;Be even more unproductive on my free time.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;See you next year!&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/2023" rel="self" type="text/html"></link>
    <summary type="html">My 2023 year review.</summary>
  </entry>
  <entry>
    <title>Where do I code from here</title>
    <updated>2024-05-07T10:50:12Z</updated>
    <id>https://thomasorus.com/where-do-i-code-from-here</id>
    <content type="html">&lt;h1 id=&#34;where-do-i-code-from-here&#34; &gt;Where do I code from here?&lt;a href=&#34;#where-do-i-code-from-here&#34; aria-label=&#34;Where do I code from here? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;It&#39;s been almost 4 years since Tom MacWright wrote his very good essay &lt;a href=&#34;https://macwright.com/2020/05/10/spa-fatigue.html&#34;&gt;Second-guessing the modern web&lt;/a&gt;, which questioned the norms we had in web development at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Spoiler alert: we are still into the JS frontend stack consuming micro-services JSON API backends. But the economical and societal contexts in which we work &lt;em&gt;have&lt;/em&gt; changed. A pandemic happened, then several hype tech cycles, followed by a harsh recession with inflation, and even war in Europe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this context, and for many other reasons, I think frontend web development will shrink, and fall back to more reasonable and maintainable technical stacks and philosophies.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-causes-of-my-concern&#34; &gt;The causes of my concern&lt;a href=&#34;#the-causes-of-my-concern&#34; aria-label=&#34;The causes of my concern permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;The recession we live in might force (is probably already forcing) teams to do more with less&lt;/strong&gt;, make hard choices on what to prioritize. In every job I had, a lack of money meant focusing on backend business features instead of design and user experience, and hiring in consequence, which means not hiring frontend developers.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;I think JavaScript frontends aren&#39;t super well perceived anymore&lt;/strong&gt;. After ten years, most orgs know about their lack of performance, cost of maintenance, reduced benefits, knowledge checks, dangerous and numerous dependencies ; and that could encourage teams to abandon them.&lt;/li&gt;&#xA;&lt;li&gt;Point 1 and 2 could also mean &lt;strong&gt;stopping with the separated frontend that consumes an API, and going back to backend monolithic stacks&lt;/strong&gt;. They often are sufficient for most projects and prevent from building premature optimizations.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;A lot of backend frameworks have catched up&lt;/strong&gt;. They have new features that swap HTML snippets or update values automatically with websockets, without writing any JavaScript (I kept a list &lt;a href=&#34;list-of-javascript-frameworks.html#inline-replacement-of-components&#34;&gt;here&lt;/a&gt;). Agnostic libraries that can do the same also exist, and are far easier to use than current frontend web stacks. Backend developers plebiscite them, which add to point 1, 2 and 3.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Browser have new features that reduces the need of JavaScript stacks for user experience improvements&lt;/strong&gt;: &lt;a href=&#34;https://developer.chrome.com/blog/paint-holding/&#34;&gt;paint holding&lt;/a&gt;, &lt;a href=&#34;https://web.dev/articles/bfcache&#34;&gt;back and forward cache&lt;/a&gt;, &lt;a href=&#34;https://web.dev/learn/pwa/service-workers/&#34;&gt;service workers&lt;/a&gt;, and soon the &lt;a href=&#34;https://developer.chrome.com/docs/web-platform/view-transitions/&#34;&gt;view transition api&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Ready-made UI components libraries are often preferred to hiring a dedicated developer to build them&lt;/strong&gt;, which is specifically my role. When I was looking for a job back in 2021/2022, at the height of the hiring craze, I got several rejections for this reason.&lt;/li&gt;&#xA;&lt;li&gt;With the rise of video, enclosed platforms, and chatGPT spam, &lt;strong&gt;it feels like the web is dying&lt;/strong&gt;, and that my role as someone building content driven websites is disappearing.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Let&#39;s be clear: &lt;strong&gt;frontend developers won&#39;t be out of jobs tomorrow&lt;/strong&gt;. There are thousands of projects to build, maintain, and update ; places where separation of frontend and backend is desirable ; big companies in need design systems ; and situations where a single page applications, or server side rendering with JavaScript routing and state make sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But still! I feel frontend web development as we do it now with its gigantic JavaScript stacks is not sustainable, especially in small to medium teams and projects, and they are my favorite projects and places. &lt;strong&gt;It just costs too much for very little benefits&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;A list of great articles that fueled my thinking around this topic is available &lt;a href=&#34;questioning-the-js-frontend-paradigm.html&#34;&gt;here&lt;/a&gt; if you want to pursue further.&lt;/aside&gt;&#xA;&#xA;&lt;h2 id=&#34;so-what-now&#34; &gt;So what now?&lt;a href=&#34;#so-what-now&#34; aria-label=&#34;So what now? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As a result, I&#39;m seriously considering slowly but surely steering my career to a more full-stack role. I never liked the full-stack denomination, because nobody can really be 100% competent on such a wide array of topics, a part of the stack is &lt;em&gt;always&lt;/em&gt; neglected. But, at the start of my career, I worked with backend oriented full-stack developers, and they loved having a frontend oriented full-stack colleague.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I doubt it has changed, too many places struggle with design, usability, HTML/CSS/JS, but don&#39;t have a big enough workload on these topics to hire a specialist full time. Doing backend code in-between would fill this need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fortunately, I don&#39;t feel bad about this idea. Quite the opposite, it&#39;s exciting! I&#39;m at a place today where I want to grow my fundamentals and discover new things that are not frontend related. I&#39;m probably romanticizing it, but I want to understand how things work under the hood in a more &lt;em&gt;computer science&lt;/em&gt; way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve never had the time, opportunity, or necessity to train my brain at things like abstractions, algorithms, design patterns, and I want to do it now. I also want to try new programming languages with stricter rules, to force me to think and plan ahead. I want static types, a bit of memory management, maybe functional programming, and let&#39;s be bold, why not a Lisp flavor, or totally go out of web related projects?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just finished my first full time freelance gig and I plan to take a break for a few weeks. I&#39;ll try to devise a plan to achieve these goals during this period, and work from there. I&#39;m probably gonna start with golang as the language of choice for my formation, but I doesn&#39;t mean I won&#39;t try other things. If you have suggestions of courses and books, feel free to send them to me!&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/where-do-i-code-from-here" rel="self" type="text/html"></link>
    <summary type="html">I&#39;m seriously considering slowly but surely steering my career to a more full-stack role</summary>
  </entry>
  <entry>
    <title>2024</title>
    <updated>2025-08-14T23:45:59+02:00</updated>
    <id>https://thomasorus.com/2024</id>
    <content type="html">&lt;h1 id=&#34;2024&#34; &gt;2024&lt;a href=&#34;#2024&#34; aria-label=&#34;2024 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;A terribly hard year that was made tolerable thanks to creative work and wonderful encounters! I also feel it was  one of those moments in life where the hardships give you a new perspective and force you to change for the better.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;hyper-ballad&#34; &gt;Hyper - Ballad&lt;a href=&#34;#hyper-ballad&#34; aria-label=&#34;Hyper - Ballad permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I don&#39;t want to expose her private life, so let&#39;s just say my partner had an accident this year. Something that wasn&#39;t life threatening, but disabling enough to make everyday life very hard for both of us.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am used to being a caregiver, but even by my standards, it was too hard. I had to take a step back and admit that taking full care of others was at the expense of my health, my happiness, and my future ; and also a guilt trap I had to exit before it was too late.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s underway, and I already feel better! I also think it will allow me to grow in unexpected ways and shape a better future for both of us. I&#39;m happy I could find a positive outcome from all this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;m still in burnout tho, but my relationship to work is getting better and I should be able to work again soon (see below). I probably have a generalized anxiety disorder and I am also addressing it. Oh and I may have ADHD, so I&#39;ll be diagnosed this year. In the meantime, I do lists on &lt;a href=&#34;https://merveilles.town/@thomasorus/113673857658490712&#34;&gt;cute B7 Japanese notebooks&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;freelancing-didn-t-work-out&#34; &gt;Freelancing didn&#39;t work out&lt;a href=&#34;#freelancing-didn-t-work-out&#34; aria-label=&#34;Freelancing didn&#39;t work out permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I worked as a freelance web developer in April May, September and December, totalling around 8 weeks of work and 20k of revenue before taxes. Which is obviously not enough to make a living.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite my best efforts to get the word out (social media, emails, contacts, freelancing platforms, applying to job postings, asking for recommendations) I couldn&#39;t find new clients, and for a while I didn&#39;t understand why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then around November when I was starting to get really nervous, I found out about this &lt;a href=&#34;https://spreyd.com/tracker-freelance-it/&#34;&gt;French freelance job tracker&lt;/a&gt;. I learned from it that the minimum daily rate plummeted in 2024. Only 5% of missions accept full remote work and the rest requires hybrid, closing access to non-local candidates. And 50% of missions are in Paris. Also part-time is non-existent.&lt;/p&gt;&#xA;&#xA;&lt;details&gt;&lt;summary&gt;There are too many freelancers&lt;/summary&gt; In early November I was accepted in a &#34;select&#34; freelancing platform. I learned that the acceptation rate was only 10% and despite that, we were 20k registered users, with at least half looking for missions. I also learned that the open, smaller freelancing platforms, had around 200k users, and that the big ones like Malt had over a million. On Malt I only appeared a dozen times in searches each month despite an extensive list of experiences spanning 9 years and in various technologies, plus two recommendations from clients. &lt;/details&gt;&#xA;&#xA;&lt;p&gt;That&#39;s just my analysis, but I think companies imposed their employees return to office policies on their freelancers to prevent a disparity between workers who, at the surface level, are doing the same job. With the recession and the influx of new freelancers (both confirmed looking for better working conditions, and unemployed new grads), companies regained the upper hand in negotiations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so, like that, my goal of going freelance to better my work/life balance was dead. Fortunately, I was offered a new opportunity at a local company I worked for a few years ago. I&#39;ll talk about it once all papers are signed, but I have a good feeling about it!&lt;/p&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;If you are looking for work, read Baldur&#39;s &lt;a href=&#34;https://www.baldurbjarnason.com/2024/the-one-about-the-web-developer-job-market/&#34;&gt;piece&lt;/a&gt; on the job market, and Josh Collinsworth&#39;s advice &lt;a href=&#34;https://joshcollinsworth.com/blog/fwiw&#34;&gt;page&lt;/a&gt; on the topic.&lt;/aside&gt;&#xA;&#xA;&lt;details&gt;&lt;summary&gt;I wrote a few things about web development this year&lt;/summary&gt; I kept a sane distance with the web dev hype machine, but still enjoyed updating my knowledge around &lt;a href=&#34;new-css-that-can-actually-be-used-in-2024.html&#34;&gt;CSS&lt;/a&gt;. I &lt;a href=&#34;where-do-i-code-from-here.html&#34;&gt;asked myself&lt;/a&gt; where I should go as a professional, centralized articles &lt;a href=&#34;questioning-the-js-frontend-paradigm.html&#34;&gt;questioning the JS frontend paradigm&lt;/a&gt;, and partially re-learned React and wrote &lt;a href=&#34;notes-on-react.html&#34;&gt;some notes&lt;/a&gt; about it. &lt;/details&gt;&#xA;&#xA;&lt;h2 id=&#34;shifting-to-new-projects&#34; &gt;Shifting to new projects&lt;a href=&#34;#shifting-to-new-projects&#34; aria-label=&#34;Shifting to new projects permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;My goal in 2024 was to slowly disengage from responsibilities and projects to have the bandwidth to start new ones that are more in line with my current motivations. I reduced my involvement in non-profit orgs, events, tutoring, social obligations, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Among those, I decided to end my podcast and website about fighting games, &lt;a href=&#34;bas-gros-poing.html&#34;&gt;Bas Gros Poing&lt;/a&gt;, that had been running for 15 years. The team and I had lost motivation, and we thought that closing it properly instead of letting it die was a better outcome, and a symbolic way of moving on. We had a final episode where we exchange stories and anecdotes. We received sweet messages from people who had been following us for years. It was a good ending. And it doesn&#39;t mean I don&#39;t like fighting games anymore, I just intend to just enjoy them casually (I just went to a tournament this weekend!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A thing I did not stop this year is drawing. Compared to previous years, I drew a lot! I did a few big pieces that are still unfinished, finally beat Drawtober and grew a lot as an artist. I also wrote a bit more about &lt;a href=&#34;drawing-notes.html&#34;&gt;drawing theory&lt;/a&gt;, participated in art gatherings, and registered to expose in a local art fare in 2025.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All year long I wanted to share galleries of my drawings. But having to transfer images to the computer, copy them in a folder, write a page to list them... It bothered me too much. As drawing and drawing adjacent topics will be my main focus in 2025, I started rebuilding my website, this time as a CMS, with Golang and SQlite (so I can learn more backend!). I have ideas to keep the simplicity of text files and avoid admin panel bloat. I&#39;ll go into details in another post once I have something to show!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;other-notable-things&#34; &gt;Other notable things&lt;a href=&#34;#other-notable-things&#34; aria-label=&#34;Other notable things permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;I loved &lt;a href=&#34;https://avanier.dev/drawtober&#34;&gt;Josh&#39;s Inktober&lt;/a&gt;.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;I was very impressed by the projects made by Paloma for their &lt;a href=&#34;https://palomakop.tv/zine-club/&#34;&gt;Zine Club&lt;/a&gt;.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Anh redid her website  &lt;a href=&#34;https://anhvn.com/&#34;&gt;homepage&lt;/a&gt; again and it rules, as always. Also her &lt;a href=&#34;https://anhvn.com/posts/2025/media-recap-2024/&#34;&gt;media recap&lt;/a&gt; is beautiful.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;My favorite pixel artist I discovered this year was &lt;a href=&#34;https://mastodon.art/@6VCR&#34;&gt;6VCR&lt;/a&gt;.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;My favorite software discovery of the year was &lt;a href=&#34;https://github.com/jesseduffield/lazygit&#34;&gt;lazygit&lt;/a&gt;.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;My favorite design trend of the year was the niche comeback of monospace: &lt;a href=&#34;https://owickstrom.github.io/the-monospace-web/&#34;&gt;The Monospace Web&lt;/a&gt;, &lt;a href=&#34;https://usgraphics.com/products/berkeley-mono&#34;&gt;The Berkeley Mono Font&lt;/a&gt;.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;My favorite manga this year was &lt;a href=&#34;https://www.animenewsnetwork.com/encyclopedia/manga.php?id=10450&#34;&gt;Bakuon Retto&lt;/a&gt; by Tsutomu Takahashi.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Baldur took awesome photos of &lt;a href=&#34;https://www.baldurbjarnason.com/notes/photos/photos-13/&#34;&gt;crows&lt;/a&gt;.1&#xD;&lt;/li&gt;&#xA;&lt;li&gt;I bought jewelry from &lt;a href=&#34;https://www.soid.com.tw/&#34;&gt;soid studio&lt;/a&gt;, I will buy more and take more time to build my own fashion identity.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;We went to the coast in the middle of the night to see aurora borealis.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;France almost went full fascist this year. AGAIN. We are still very far to the right. The political landscape is terrifying.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;It took 9 months but I finally got internet back after a fire destroyed it. Made me aware of how dependant we are.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;did-i-achieved-my-2024-goals&#34; &gt;Did I achieved my 2024 goals?&lt;a href=&#34;#did-i-achieved-my-2024-goals&#34; aria-label=&#34;Did I achieved my 2024 goals? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Take care of my loved ones&lt;/dt&gt;&lt;dd&gt;Yes&#xD;&lt;/dd&gt;&lt;dt&gt;Go on vacation both alone, and with my partner&lt;/dt&gt;&lt;dd&gt;No&#xD;&lt;/dd&gt;&lt;dt&gt;Continue my personal explorations&lt;/dt&gt;&lt;dd&gt;Yes&#xD;&lt;/dd&gt;&lt;dt&gt;Take action towards curing my anxiety&lt;/dt&gt;&lt;dd&gt;Yes&#xD;&lt;/dd&gt;&lt;dt&gt;Be a responsible self-employed adult&lt;/dt&gt;&lt;dd&gt;Yes&#xD;&lt;/dd&gt;&lt;dt&gt;Update myself on what I missed in web dev, but only one time in the year&lt;/dt&gt;&lt;dd&gt;Yes&#xD;&lt;/dd&gt;&lt;dt&gt;Build bridges between my drawings and my influences to refine my style&lt;/dt&gt;&lt;dd&gt;No&#xD;&lt;/dd&gt;&lt;dt&gt;Be more experimental in my art&lt;/dt&gt;&lt;dd&gt;Yes&#xD;&lt;/dd&gt;&lt;dt&gt;Participate in at least one zine or expo&lt;/dt&gt;&lt;dd&gt;No&#xD;&lt;/dd&gt;&lt;dt&gt;Be even more unproductive on my free time&lt;/dt&gt;&lt;dd&gt;Yes&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h2 id=&#34;2025-goals&#34; &gt;2025 Goals&lt;a href=&#34;#2025-goals&#34; aria-label=&#34;2025 Goals permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Take equally care of myself and my loved ones&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Draw more and better, make a plan about it&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Participate in an art fare or expo&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Participate in a fanzine&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Rebuild my website to fit my needs&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Go back to the gym with a proper musculation program&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Read books and watch movies&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Get diagnosed for ADHD, keep using notebooks&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Finally finish my apartment and buy new furniture&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Do another single self-update on Web Dev novelties&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Be a responsible and pragmatic developer at my future job&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Go on vacation both alone, and with my partner&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Use my newly gained freedom to explore even more personal things&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;see-you-next-year&#34; &gt;See you next year!&lt;a href=&#34;#see-you-next-year&#34; aria-label=&#34;See you next year! permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/2024.jpg&#34; alt=&#34;A photo of my surrounded by my art. We can see three types of drawing: on pencil, orange, and green&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/2024.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/2024" rel="self" type="text/html"></link>
    <summary type="html">My 2024 year review.</summary>
  </entry>
  <entry>
    <title>Blog Questions Challenge</title>
    <updated>2025-02-02T14:31:16Z</updated>
    <id>https://thomasorus.com/blog-questions-challenge</id>
    <content type="html">&lt;h1 id=&#34;blog-questions-challenge&#34; &gt;Blog Questions Challenge&lt;a href=&#34;#blog-questions-challenge&#34; aria-label=&#34;Blog Questions Challenge permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I’ve been tagged by &lt;a href=&#34;ttps://gosha.net/2025/blog-questions-challenge/&#34;&gt;Gosha&lt;/a&gt; to answer the Blog Questions challenge! So here goes!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;why-did-you-start-blogging-in-the-first-place&#34; &gt;Why did you start blogging in the first place?&lt;a href=&#34;#why-did-you-start-blogging-in-the-first-place&#34; aria-label=&#34;Why did you start blogging in the first place? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I started writing on the web in the early 2000, mostly on skyblog and in forums. I started my first blog with a friend in the mid 2000 when Wordpress became a bit more popular. I had several websites since, but most of them are dead now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started writing to share my hobbies and what I find interesting. But today I mostly write to remember valuable information I know I will forget, and I happen to do it publicly so others can benefit from it. Writing on a topic helps processing it in my brain, so I also use it as a way to think. And finally, it serves as a timestamp for the writing period. I can go back to it and compare what I remember from a period to how I felt about it in the moment.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;what-platform-are-you-using-to-manage-your-blog-and-why-did-you-choose-it&#34; &gt;What platform are you using to manage your blog and why did you choose it?&lt;a href=&#34;#what-platform-are-you-using-to-manage-your-blog-and-why-did-you-choose-it&#34; aria-label=&#34;What platform are you using to manage your blog and why did you choose it? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I write in text files which are transformed into webpages by any &lt;em&gt;html printer&lt;/em&gt;. Those text files possess a specific syntax that I created to split pages, insert links, images, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wrote the code that parses the text files, and it return an array of pages. I can chose if I want a page to be private or public, appear in the RSS feed or not, show subpages or not. It&#39;s flexible and easy to modify (for me).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From there, I can give this array to any static site generator (currently it&#39;s &lt;a href=&#34;https://11ty.dev&#34;&gt;Eleventy&lt;/a&gt;) that will do things like write the pages, process images, run a local server to preview, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I&#39;m done I run the build script. The website is then transferred to a git repo, and I manually update the site on the live server. My hosting provider is &lt;a href=&#34;https://uberspace.de/&#34;&gt;Uberspace&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;have-you-blogged-on-other-platforms-before&#34; &gt;Have you blogged on other platforms before?&lt;a href=&#34;#have-you-blogged-on-other-platforms-before&#34; aria-label=&#34;Have you blogged on other platforms before? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I wrote on way too many things. PHPBB forums, Wordpress, Mediawiki, Kirby, just to name a few. They all served me well in their own way, but for a long time I wasn&#39;t a web developer and I did not know how to properly host, update, maintain them. I had to support and keep alive way too many projects, and I&#39;m glad I exported most of them into static exports to get rid of it.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;how-do-you-write-your-posts-for-example-in-a-local-editing-tool-or-in-a-panel-dashboard-that-s-part-of-your-blog&#34; &gt;How do you write your posts? For example, in a local editing tool, or in a panel/dashboard that’s part of your blog?&lt;a href=&#34;#how-do-you-write-your-posts-for-example-in-a-local-editing-tool-or-in-a-panel-dashboard-that-s-part-of-your-blog&#34; aria-label=&#34;How do you write your posts? For example, in a local editing tool, or in a panel/dashboard that’s part of your blog? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I write essentially in Sublime Text, a basic code editor, because it has a built-in spell checker, I can use my favorite fonts and themes. I can transfer files inside, edit the code of the website if I find a bug, etc.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;when-do-you-feel-most-inspired-to-write&#34; &gt;When do you feel most inspired to write?&lt;a href=&#34;#when-do-you-feel-most-inspired-to-write&#34; aria-label=&#34;When do you feel most inspired to write? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It comes and go. It&#39;s mostly project based. If I have to write something I&#39;ll take time in the week to do it, and that&#39;s it. I don&#39;t overthink it as I have little time constraints.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;do-you-publish-immediately-after-writing-or-do-you-let-it-simmer-a-bit-as-a-draft&#34; &gt;Do you publish immediately after writing, or do you let it simmer a bit as a draft?&lt;a href=&#34;#do-you-publish-immediately-after-writing-or-do-you-let-it-simmer-a-bit-as-a-draft&#34; aria-label=&#34;Do you publish immediately after writing, or do you let it simmer a bit as a draft? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I always let it simmer when the topic is complex or requires nuance. As a former professional writer, I can say the rule that says &lt;em&gt;write, then delete 50% of it&lt;/em&gt; is often true.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I&#39;ve been writing less in the past years, I tend to forget how to be effective while writing. I should re-read my &lt;a href=&#34;writing-tips.html&#34;&gt;writing tips&lt;/a&gt; more often.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;what-are-you-generally-interested-in-writing-about&#34; &gt;What are you generally interested in writing about?&lt;a href=&#34;#what-are-you-generally-interested-in-writing-about&#34; aria-label=&#34;What are you generally interested in writing about? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I like writing bits of knowledge I find useful or interesting but will forget eventually. I don&#39;t have great memory but I still want to pursue different hobbies and ideas.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;who-are-you-writing-for&#34; &gt;Who are you writing for?&lt;a href=&#34;#who-are-you-writing-for&#34; aria-label=&#34;Who are you writing for? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Myself. And if it can serve others, the better.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;what-s-your-favorite-post-on-your-blog&#34; &gt;What’s your favorite post on your blog?&lt;a href=&#34;#what-s-your-favorite-post-on-your-blog&#34; aria-label=&#34;What’s your favorite post on your blog? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I like the page about the &lt;a href=&#34;chemical-love-combo.html&#34;&gt;Chemical Love Combo&lt;/a&gt;. It&#39;s a bit of knowledge that is both nerdy, instructive, and useless. It&#39;s also my favorite combo in any fighting game.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;any-future-plans-for-your-blog-maybe-a-redesign-a-move-to-another-platform-or-adding-a-new-feature&#34; &gt;Any future plans for your blog? Maybe a redesign, a move to another platform, or adding a new feature?&lt;a href=&#34;#any-future-plans-for-your-blog-maybe-a-redesign-a-move-to-another-platform-or-adding-a-new-feature&#34; aria-label=&#34;Any future plans for your blog? Maybe a redesign, a move to another platform, or adding a new feature? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I&#39;ll probably remove some pages first, among them my portfolio. I&#39;ll keep them private so links don&#39;t die, but they won&#39;t be visible in menus. I feel some of them are outdated and useless now, and only contribute in making noise. Then I&#39;ll move platforms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put it simply, I currently want to spend as little time as possible in front of my computer but still be able to share things on my website. I want to write a page in a few minutes without going through 4 build and upload steps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I&#39;m building a new system that will live on a server, with a database. I want to be able to use on my phone, and be able to extend it with new features, to make it as painless as I can for me to post.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s still early, but I&#39;m refining ideas and hope to achieve it this year. I&#39;ll share it once it&#39;s done.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;tag-em&#34; &gt;Tag ‘em.&lt;a href=&#34;#tag-em&#34; aria-label=&#34;Tag ‘em. permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Nah! I enjoy participating but I don&#39;t like asking people to do things.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/blog-questions-challenge" rel="self" type="text/html"></link>
    <summary type="html">I’ve been tagged by Gosha to answer the Blog Questions challenge! So here goes!</summary>
  </entry>
  <entry>
    <title>2025 first quarter</title>
    <updated>2025-04-07T22:15:55Z</updated>
    <id>https://thomasorus.com/2025-first-quarter</id>
    <content type="html">&lt;h1 id=&#34;2025-first-quarter&#34; &gt;2025 first quarter&lt;a href=&#34;#2025-first-quarter&#34; aria-label=&#34;2025 first quarter permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve wanted to write a few posts in the last three months, but never had the opportunity. Now that March is over and I have some time and brain availability, let&#39;s do a recap for the first quarter of the year.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;about-art&#34; &gt;About art&lt;a href=&#34;#about-art&#34; aria-label=&#34;About art permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;David Lynch died mid-January. Despite not being deep into his work I was deeply afflicted by his death. In the age of art made to fill social media, where artists need to become brands and act as influencers, Lynch felt to me like a beacon of creative sincerity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I watched documentaries and interviews he gave, and loved every one of them. He spoke in such a positive and practical way of the joys of doing art. Write ideas before your forget them. Suffering doesn&#39;t make it better. Art requires time and space, and so it will preclude some things in our lives. Daydreaming is important.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;m trying to remember and apply all this while time pushes me closer to late May where I will expose my work publicly for the first time. I&#39;ve been randomly drafted for the &#34;scab fair&#34; in my city and since, I haven&#39;t done a lot of progress on the dozen of pieces I want to expose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;m not pressuring myself too much, but at the same time I kinda want to expose my &lt;em&gt;universe&lt;/em&gt; and it won&#39;t happen if I don&#39;t push myself a little bit. Oh well, we&#39;ll see.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;spaces&#34; &gt;Spaces&lt;a href=&#34;#spaces&#34; aria-label=&#34;Spaces permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Mid-February I took a solo vacation, almost two weeks in a small cottage in one of the prettiest parts of France. Almost everything was closed or empty, which gave an eerie feeling, but also felt very relaxing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I visited a few things, eat good meals, walked on forestry hills, and rested a lot. I prepared the list of pieces I want to expose in an excel file, draw a little bit, read a book, took coffees under the pale and cold winter sun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I came back home, I felt extremely overwhelmed and overstimulated by the number of &lt;em&gt;things&lt;/em&gt; in my environment, and I needed space. We emptied cabinets and wardrobes, got rid of furniture, did some renovation. It felt good. It&#39;s not over yet, but will be soon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also went back to the gym with a strength dedicated program. It gave my whole body a physical shock (and the pain associated) that lasted for weeks. I&#39;m feeling good now, my back and shoulders are less painful than they used to be. I&#39;m also changing physically, which feels strange and pleasant a the same time. And for some reason, the gym as a space feels less alienating when you visit it with a clear goal.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;new-job-new-me&#34; &gt;New job, new me&lt;a href=&#34;#new-job-new-me&#34; aria-label=&#34;New job, new me permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve been working as an employee again since early March and it&#39;s going well. I went back to the first company I worked for when I started web development in 2015. They needed someone with my skills, I needed a job, both of us didn&#39;t want to do job interviews and technical tests, perfect fit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of my job for the first month has been documenting, fixing and helping my colleagues on UI and UX issues. I barely wrote code, but wrote a lot of documentation and guidelines. It&#39;s been strange to go back to the same place with mostly the same people, and see how everything is mostly the same, and that I am the one who has changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back then I was an enthusiastic idealist junior dev/designer who would push its unreasonable design and tech expectations to projects and people not always fit to receive them, to the point of hurting myself and others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I&#39;m the pragmatic senior dev/designer just trying to add a little bit of ergonomics and visual cohesion in projects who have budgets for it, while taking steps to avoid any misunderstanding or conflict with my colleagues, and training others in my expertise, slowly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yeah, I&#39;ve changed quite a bit.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;ai-storm-is-coming&#34; &gt;AI storm is coming&lt;a href=&#34;#ai-storm-is-coming&#34; aria-label=&#34;AI storm is coming permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve long been against AI, even for coding. But in the last few months, even non-influencers developers I follow and respect had to bend and use it. Nolan Lawson&#39;s &lt;a href=&#34;https://nolanlawson.com/2025/04/02/ai-ambivalence/&#34;&gt;testimony&lt;/a&gt; is a prime example of the positive (productivity) and negative (it sucks out the joy) sides of the experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is coming at my new job too, and I understand the argument. We&#39;re a small agency. Clients want more code for less time. Other agencies might go full AI and cut prices, leaving us behind. We &lt;em&gt;have&lt;/em&gt; to at least try it, and we will. I&#39;m glad I&#39;ll do it in my terms, surrounded by skilled engineers who, I hope, will be able to asses if it really helps us as a company.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, I can&#39;t help to be worried. Even Microsoft admitted that &lt;a href=&#34;https://techstory.in/microsoft-admits-that-ai-is-making-us-dumb-alarming-study-reveals/&#34;&gt;AI is making us dumb&lt;/a&gt; and we&#39;re losing skill. What about the tech dependency? Juniors training? What if prices become unreasonable? Social warfare on workers? Data security? Ethical issues? So many unknowns and yet we have to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It truly feels like a race to the bottom we are all forced to run.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;other-things&#34; &gt;Other things&lt;a href=&#34;#other-things&#34; aria-label=&#34;Other things permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Stopped my freelance shop, I won&#39;t take clients for side gigs while I am employed due to my contract, not that I particularly want to.&lt;/li&gt;&#xA;&lt;li&gt;My partner is now recognized as disabled person, she will get a pension from the state, and thus will focus on healing.&lt;/li&gt;&#xA;&lt;li&gt;I broke up with a lover. It was painful, messy, even ugly in the end but necessary. Learned a lot and won&#39;t do the same mistakes.&lt;/li&gt;&#xA;&lt;li&gt;I have to use Windows 11 at work, it sucks so much. Bugs everywhere, and the &lt;em&gt;feeling&lt;/em&gt; isn&#39;t right.&lt;/li&gt;&#xA;&lt;li&gt;Website rewrite in Golang is progressing slowly. A bit frustrated by the pace but I want to do it properly.&lt;/li&gt;&#xA;&lt;li&gt;I was super hyped by the game &lt;a href=&#34;https://store.steampowered.com/app/333640/Caves_of_Qud/&#34;&gt;Caves of Qud&lt;/a&gt; after listening to a podcast about it, but my English level wasn&#39;t high enough and I had to refund it. :(&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/2025-first-quarter" rel="self" type="text/html"></link>
    <summary type="html">Let&#39;s do a recap for the first quarter of the year.</summary>
  </entry>
  <entry>
    <title>La foire aux croutes 2025</title>
    <updated>2025-06-09T20:21:00Z</updated>
    <id>https://thomasorus.com/la-foire-aux-croutes-2025</id>
    <content type="html">&lt;h1 id=&#34;i-exhibited-my-art-at-la-foire-aux-cro-tes-2025&#34; &gt;I exhibited my art at La foire aux croûtes 2025&lt;a href=&#34;#i-exhibited-my-art-at-la-foire-aux-cro-tes-2025&#34; aria-label=&#34;I exhibited my art at La foire aux croûtes 2025 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The French word &lt;em&gt;croûte&lt;/em&gt; can be translated to English as &lt;em&gt;crust&lt;/em&gt; or &lt;em&gt;scab&lt;/em&gt;. Outside of its basic meaning, it can also designate worthless, banal, failed or damaged paintings. The term could originate from painters employing so much paint on the canvas to try to make &lt;a href=&#34;https://en.wikipedia.org/wiki/Impasto&#34;&gt;impasto&lt;/a&gt; that it creates a crust so thick it looks like one you would find on bread (yes, to French people everything can be compared to bread).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But from my experience, there&#39;s also a more judgemental, classicist subtext. The term can also be used to describe folk, amateur, provincial paintings. The ones you would find in small-town galleries that only local, &lt;em&gt;uncultured&lt;/em&gt; people would buy ; in opposition to the more professional &#34;Grand Art&#34; found in big cities and museums that the intellectual elite enjoys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, &lt;em&gt;La foire aux croûtes&lt;/em&gt; or &lt;em&gt;The Crust Fare&lt;/em&gt;, that took place from May 28 to May 30 in my city, is a celebration of small and often local artists, who will probably never be favored by museums, but who nonetheless love art and what they do, regardless of the result.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/foire-poster.png&#34; alt=&#34;The poster for the crust fare. figcaption&#34;&gt;&lt;figcaption&gt;The poster for this year&#39;s edition. | &lt;small&gt;&lt;a href=&#34;/uploaded/foire-poster.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;It&#39;s been ran by volunteers as a non-profit for more than 30 years, and it takes place in an historically anarchist place of the city. To say it makes art political would be an understatement!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To ensure everyone has a chance, artists are chosen by lottery, and each one can invite a friend to share its space. They can expose outside or inside big tents, and usually younger, experimental and printing artists are out ; while more older folks doing classical painting on canvas, or fragile pieces, are inside. Places are attributed randomly to avoid favoriting anyone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the weather is good, a TON of people come to visit. They buy prints or original works, are very open to chat about art in general, very curious, and with the random mix of styles and themes from the different artists, there&#39;s something for everyone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Small local bands perform on the big stage during the day, and more famous bands during the evenings. A lot of activities are organized for kids too. There&#39;s a bar, food stands, a lottery to win art pieces given by exhibitors, and even auctions for non-reclaimed pieces. I bought an over-painted piece of a lighthouse for 7 euros, an excellent investment if you ask me.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/croute-phare.jpg&#34; alt=&#34;A photo of me handling a small painting of a lighthouse getting smashed by a big wave. figcaption&#34;&gt;&lt;figcaption&gt;I spared no expense. | &lt;small&gt;&lt;a href=&#34;/uploaded/croute-phare.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;going-as-an-exhibitor&#34; &gt;Going as an exhibitor&lt;a href=&#34;#going-as-an-exhibitor&#34; aria-label=&#34;Going as an exhibitor permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;And so, I exhibited my art! It was one of the artistic goals I wasn&#39;t able to fulfill in 2024, and wanted to achieve in 2025. I won the lottery in February and invited my friend, &lt;a href=&#34;https://www.instagram.com/therealmoldypeach/&#34;&gt;A Moldy Peach&lt;/a&gt;, to join me. We spent the three days exhibiting and selling our art and everything went well!&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/croutes-stand.jpg&#34; alt=&#34;A photo of our stand, with a sunshade, a table, a lot of prints on it and on the wall behind. We are doing thumbs up pose. figcaption&#34;&gt;&lt;figcaption&gt;Look at those beautiful artists. | &lt;small&gt;&lt;a href=&#34;/uploaded/croutes-stand.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;When I decided to participate, it was a way for me to present my own little worlds to a crowd and see what they think about it. I prepared 13 drawings, a mix of Drawtober favorites, broken androids, and a series of naked people + cats + skeletons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My art is figurative, but not thematically very defined and thus easy to grasp. I don&#39;t see it as commonly attractive or seductive and being inspired by manga and surrealism, I don&#39;t think it clicks with most people.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, lots of people still see art as craftsmanship, they value unique pieces and don&#39;t like buying prints as they see it as a less valuable thing, like posters. The only exception is when the print feels like it was made by hand, like for lino-cut or cyanotype.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As proud as I am from my work, I can see it still feels amateurish in many aspects and that I have lot of progress to do. Still, I wanted to show it &#34;as is&#34; with all its flaws and successes. I printed 3 pieces I liked in A2 format, and the rest in A4 and A5.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/prints.jpg&#34; alt=&#34;Various prints on a sofa. figcaption&#34;&gt;&lt;figcaption&gt;The last time I printed my drawings was 15 years ago, at the time I was sick of art and thought I was done. I was feeling a bit emotional when I unpacked all this. | &lt;small&gt;&lt;a href=&#34;/uploaded/prints.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I could have done very small prices as my prints were not fine art but edition prints. But seeing that a lot of exhibitors were professional artists, I decided to not create unfair competition, and set A5 to 10 euros and A4 to 15 euros.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-result&#34; &gt;The result&lt;a href=&#34;#the-result&#34; aria-label=&#34;The result permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;After three days, I had sold more than half of my stock, which I consider a big success! I reimbursed my investment and made a little profit. Some pieces had a lot of unexpected success, and others I thought would sell did not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My most successful drawing was, without surprise, this broken android that I printed in A2 and hanged up on my wall:&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/robo_1.png&#34; alt=&#34;A drawing of a female android. She has a kind of pinup pose and look at the viewer. Her hair is cyan, she has nbig breast in the open with a leaking plus planted in it. We can see she has no waist, and that her mechanical spine is visible. Between her shoulder blades, a giant electronic connector is connected to a cable. Her face, even if pretty, looks worn out. figcaption&#34;&gt;&lt;figcaption&gt;Only one person, a true nerd, understand that the right cable was an IDE cable. | &lt;small&gt;&lt;a href=&#34;/uploaded/robo_1.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;A lot of people saw it from far away and came to see what it was. My first interaction on the first day was a lady around her sixties saying to me &#34;I don&#39;t get it! Explain to me what it means!&#34; in a very imperative tone, which caught me a bit off-guard. Another woman looked at it and winced, then told me it hurt her to look at the android in the picture, especially the tube in the breast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course once you show your art to the world, you can&#39;t know or control how people will react or what they see into it. Some asked for explanations, but after a day I went full David Lynch and decided to stop answering, out of fear it would ruin their interpretation and the fun that comes with it.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/mandala.jpg&#34; alt=&#34;A black and white drawing. A person is in the middle of the drawing, they seemed surprised: eyes wide open looking at your the viewer, mouth half open. Their hands, are positioned to protect something: two tiny skeletons, dancing into one of the palms. Around their face, 5 giant cat faces surround them. The one of the left has the mouth open and eyes closed, and is getting captured by a spiraling strand of hair. The one of the top left has strands falling to its head that gives him a neglected but funny look, and it looks with curiosity. The one at the top looks at you, the viewer, with round eyes. It has two big combed strands of hair giving it a more serious look. The one at the top left is looking down, and has very long straight hair strands. The last one, on the bottom left, is angrily biting a strand of hair that then falls on the shoulder of the person. The multiple hair strands are detailed, and the background is fully dark. It feels both funny and somehow alarming. figcaption&#34;&gt;&lt;figcaption&gt;This one was my second best seller. Cats are a safe bet! | &lt;small&gt;&lt;a href=&#34;/uploaded/mandala.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Most visitors seemed to like my art, or at least were intrigued by it, but the feedback I grabbed was that it was too dark, too strange (maybe too amateurish too?) to dare exhibit it at home. Which is fair!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I draw for myself to have fun, and I never planned my art to please an audience or sell prints. The goal with the fare was to motivate myself with a deadline, present myself un-apologetically to the world, propose something different than local marine/city landscapes, and see how it goes. Prints were just a way to reimburse the project.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/worm.png&#34; alt=&#34;On a gray background a woman floating in the hair with a massive hair mass holds what appears to be an orange line, which spins around and above her. figcaption&#34;&gt;&lt;figcaption&gt;One of the surprise success was this one. | &lt;small&gt;&lt;a href=&#34;/uploaded/worm.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I was going expecting limited success or appreciation and, compared to my friend Moldy Peach or even the other exhibitors around me, I clearly attracted less people. But the ones I attracted? They really vibed with my art. Hearing someone say &#34;this is beautiful&#34; while pointing at my little prints made me proud and humbled at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was mostly the younger visitors, from teenagers to mid forties people, who engaged and bought prints. Some totally recognized my references, and for those who were interested, I gave them manga/comics recommendations, which triggered nice conversations.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;what-s-next&#34; &gt;What&#39;s next?&lt;a href=&#34;#what-s-next&#34; aria-label=&#34;What&#39;s next? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;So here it is, I finally exhibited my art to the outside world. Goal achieved! I&#39;m left with nothing to do, no direction. Oh no!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will do a drawing for a local fanzine, but have no other plans after that. In the next few weeks I&#39;ll probably make a plan and list things I wish to work on. Better line work? Shading? Composition? Better &#34;world building&#34;? Other themes? Who knows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing I&#39;m sure about is that I don&#39;t want to participate next year if I haven&#39;t made any progress or don&#39;t have enough new pieces to show.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It took me around 2 years to do all the art I exhibited this year, so it&#39;s doable. But art is just an escapism hobby I do on the side that I don&#39;t want to pollute with a productivity mindset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We&#39;ll see how it goes, thanks for reading!&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/la-foire-aux-croutes-2025" rel="self" type="text/html"></link>
    <summary type="html">I exhibited my art for the first time!</summary>
  </entry>
  <entry>
    <title>2025 second quarter</title>
    <updated>2025-08-08T22:04:24+02:00</updated>
    <id>https://thomasorus.com/2025-second-quarter</id>
    <content type="html">&lt;h1 id=&#34;2025-second-quarter-1-month&#34; &gt;2025 second quarter (+ 1 month)&lt;a href=&#34;#2025-second-quarter-1-month&#34; aria-label=&#34;2025 second quarter (+ 1 month) permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The second quarter of this year was mostly dominated by my preparation for the art fare I joined in late May. I wrote extensively about it &lt;a href=&#34;la-foire-aux-croutes-2025.html&#34;&gt;here&lt;/a&gt; if you missed it. It was an amazing experience that I hope I&#39;ll do again next year!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;health&#34; &gt;Health&lt;a href=&#34;#health&#34; aria-label=&#34;Health permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Unfortunately this quarter was plagued by a few health issues. I was very active in April and had trouble getting used to my day job schedule. My sleep took a hit, leading to anxiety and a constant state of body alert.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had several tachycardia crisis, was unable to take a deep breath, and felt like I was suffocating, as if something was pressing my stomach. In early may after a big crisis I took an emergency blood test. It came clean: no stroke, no heart failure or high blood pressure, no pulmonary embolism risk. I&#39;ll see a specialist in September to confirm the results.&lt;/p&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;Did you know you it&#39;s possible to detect if you had a stroke just with a blood test? By detecting even small increases of the &lt;a href=&#34;https://en.wikipedia.org/wiki/Troponin&#34;&gt;troponin protein&lt;/a&gt; levels in your blood, you can be diagnosed in a few hours. Science is amazing.&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;With all those risks put aside, I shifted focus on the pain and pressure I felt around my stomach. I always thought I was a person who manifested stress in the stomach, and that was all there was to it. Turns out I may have an unidentified issue in my stomach, maybe an ulcer. I&#39;m on medication until we find out what&#39;s going on, and already feeling way better.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;work&#34; &gt;Work&lt;a href=&#34;#work&#34; aria-label=&#34;Work permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This quarter was a roller-coaster at my day job. Things I obviously can&#39;t detail happened that made me reconsider staying at the company, so I renewed my trial period until October.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Around June I&#39;ve finally got accustomed to the rhythm at work, but my importance as a designer/front of the frontend guy had already been put aside. Most clients don&#39;t care how their enterprise web apps looks like, so we assemble pages with already pre-made and pre-designed components, write a bit of logic in TypeScript with requests and types generated by the backend, and call it a day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s efficient, cost effective, but it sucks the joy out of me and makes me feel useless. It feels like there&#39;s no room for original design, HTML or CSS in today&#39;s job market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This situation probably explains why I volunteered two weeks ago to temporarily replace the manager on a project that went bad. I felt that I would be more useful this way. I&#39;ve done non-profit work for years and was already a tech lead before, but I always refused to be a project manager, due to my inability to leave work at work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But somehow, since my last burnout in December 2024, I&#39;ve finally learned to &lt;em&gt;not care&lt;/em&gt; about work anymore. I&#39;ve detached myself. Of course I will act professionally and to the best of my abilities. So far my colleagues are happy with how I shield them from clients and organize the work for them, so things seem good, even if I am exhausted by the takeover.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;joy-and-happiness&#34; &gt;Joy and happiness&lt;a href=&#34;#joy-and-happiness&#34; aria-label=&#34;Joy and happiness permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;While reading all the above one might think I had a terrible second quarter. Health issues, job issues and all. But it couldn&#39;t be so far from the truth. This quarter has been amazing on a personal level!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve had a rich social life, full of new encounters, activities, experiences. I shared dates with sweet and fulfilling persons. I visited new places I didn&#39;t know existed. I danced in a giant crowd during a music festival despite my anxiety around crowds. Drank too many coffees with a friend. Heard my 5 years old niece yell &#34;I LOVE YOU UNCLE!!&#34; while I was leaving to go back home.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I discovered new music that allowed me to nail down what I actually seek and like in music. I even got dumped, overthought everything, self-pitied myself, and went over it in a week. I ate amazing food, especially shiitake raviolis. I celebrated 19 years together with my partner. We played an amazing video game together. I made progress on my CMS. I bought new clothes and jewelry that made me feel pretty. I&#39;m evolving in ways I didn&#39;t expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All those things filled me with joy and this period has been one of the happiest of my life. I haven&#39;t felt this alive for years and I hope it will continue for a long time.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;other-things&#34; &gt;Other things&lt;a href=&#34;#other-things&#34; aria-label=&#34;Other things permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;I&#39;ve listen &lt;a href=&#34;https://www.youtube.com/watch?v=4v3li_jhVg8&#34;&gt;Fleuves&lt;/a&gt; way too much, as well as &lt;a href=&#34;https://www.youtube.com/watch?v=W1qovy7Spkk&#34;&gt;Gogo Penguin&lt;/a&gt; and &lt;a href=&#34;https://www.youtube.com/watch?v=Ms4Mmb9kY4E&#34;&gt;Clair Obscur Soundtrack&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;I bought a cheap &lt;a href=&#34;https://www.youtube.com/watch?v=Rzlo4jXaEvY&amp;t=212s&#34;&gt;Uni Kurutoga&lt;/a&gt; and it&#39;s a nice upgrade to every day&#39;s life, a bit like going from manual to electric windows in a car.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;A study found out AI &lt;a href=&#34;https://www.researchgate.net/publication/392560878_Your_Brain_on_ChatGPT_Accumulation_of_Cognitive_Debt_when_Using_an_AI_Assistant_for_Essay_Writing_Task&#34;&gt;makes us stupid&lt;/a&gt;.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;A study found out AI &lt;a href=&#34;https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/&#34;&gt;might makes us less productive&lt;/a&gt;.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;I HATE WINDOWS 11!!!!!&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/2025-second-quarter" rel="self" type="text/html"></link>
    <summary type="html">Let&#39;s do a recap for the second quarter of the year.</summary>
  </entry>
  <entry>
    <title>HTML tips</title>
    <updated>2022-11-01T12:06:57Z</updated>
    <id>https://thomasorus.com/html-tips</id>
    <content type="html">&lt;h1 id=&#34;html-simple-tips-and-tricks-for-your-website&#34; &gt;HTML simple tips and tricks for your website&lt;a href=&#34;#html-simple-tips-and-tricks-for-your-website&#34; aria-label=&#34;HTML simple tips and tricks for your website permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The goal of this page is to help you with easy tricks to make the HTML of your website accessible, readable by everyone and optimized for low bandwidth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This tips and tricks are from personal experience working as a front-end web developer specialized in UI and accessibility for the last 5 years. It might not be perfect or 100% accurate. If you find any problem, please &lt;a href=&#34;/now.html&#34; title=&#34;Go to my contact page&#34; aria-label=&#34;Go to my contact page&#34;&gt;contact me&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;i-need-to-go-fast&#34; &gt;I need to go fast&lt;a href=&#34;#i-need-to-go-fast&#34; aria-label=&#34;I need to go fast permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Then visit the &lt;a href=&#34;/make-my-website-accessible-and-look-ok.html&#34;&gt;TL;DR&lt;/a&gt; page, where a set of sensible defaults will be given to you for a basic website.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you&#39;re not in a hurry, continue below.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;about-accessibility&#34; &gt;About accessibility&lt;a href=&#34;#about-accessibility&#34; aria-label=&#34;About accessibility permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Accessibility is making your website inclusive for people with disabilities. If respecting accessibility can seem like a chore, it&#39;s actually a good way of learning good HTML practices and everything in these pages is therefore influenced by it.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;what-is-accessibility.html&#34;&gt;So, what is accessibility?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;accessibility-rules-and-tools.html&#34;&gt;Basic rules about accessibility and tools to enforce them&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;the-basics-of-html&#34; &gt;The basics of HTML&lt;a href=&#34;#the-basics-of-html&#34; aria-label=&#34;The basics of HTML permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This section will give your some basic knowledge and code to get started. It will also explain the basics of semantic HTML and why it&#39;s important. As everything in these pages, it&#39;s a toolbox of things I use, not a full specification rewriting, and it&#39;s heavily influenced by my own practices.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;the-basics-of-html.html&#34;&gt;The basics: the head, the div and the span&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;what-is-semantic-html.html&#34;&gt;What is semantic HTML and why should I care?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;layouts-in-html&#34; &gt;Layouts in HTML&lt;a href=&#34;#layouts-in-html&#34; aria-label=&#34;Layouts in HTML permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Once you have the basics sets it&#39;s probably time to do some layouts. There are parts that you can do just in HTML, and others that need CSS. Layouts are the ones who need CSS. &lt;strong&gt;You can save dozens of lines of HTML by using 3 lines of CSS when you are doing layout&lt;/strong&gt;. So don&#39;t try doing all your layout only in HTML. You&#39;ll just have a hard time doing what you want and your markup will be ugly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Layout examples will be given through these pages, try to inspect them with your browser, reuse and tweak them to your needs.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;never-use-tables-for-layout.html&#34;&gt;Don&#39;t you dare use tables for layout!&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;the-display-property.html&#34;&gt;The basics of layout with the display property&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;flexbox-the-goat.html&#34;&gt;Flexbox, the goat&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;css-grid-the-almighty.html&#34;&gt;CSS Grid the almighty&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;common-elements-inside-your-layouts&#34; &gt;Common elements inside your layouts&lt;a href=&#34;#common-elements-inside-your-layouts&#34; aria-label=&#34;Common elements inside your layouts permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;So we have our page layouts structured by semantic HTML elements. Now is the time to put some content. Text! Images! Videos! Titles! We want them all!&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;order-your-titles-correctly.html&#34;&gt;Order your titles correctly&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;organize-your-&#34;&gt;Organize your text content&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;all-about-images.html&#34;&gt;All about images&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;all-about-video-and-audio.html&#34;&gt;All about video and audio&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;doing-forms-correctly.html&#34;&gt;Doing forms correctly&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;tables-are-not-that-complicated.html&#34;&gt;Tables are not that complicated&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;the-inline-semantic-elements&#34; &gt;The inline semantic elements&lt;a href=&#34;#the-inline-semantic-elements&#34; aria-label=&#34;The inline semantic elements permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;What&#39;s the difference between the text semantic elements and the inline semantic elements? Well the first ones are still used to structure your content, but the second ones are used to indicate more precisely what the text inside is about.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;make-your-links-clear-and-accessible.html&#34;&gt;Make your links clear and accessible&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;when-to-use-a-button-and-a-link.html&#34;&gt;When to use a button and a link&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;strong-b-em-and-i.html&#34;&gt;The mess of strong b em and i&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;other-kinda-useful-semantic-elements.html&#34;&gt;Other kinda useful semantic elements&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;the-not-very-used-interactive-elements&#34; &gt;The not very used interactive elements&lt;a href=&#34;#the-not-very-used-interactive-elements&#34; aria-label=&#34;The not very used interactive elements permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Interactive elements are fully functional tools in HTML. Unfortunately they are difficult to style and most often not used that much for this reason. Still some of them are really cool.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;html-interactive-elements.html&#34;&gt;Some interactive elements that can be useful&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;page-updates&#34; &gt;Page updates&lt;a href=&#34;#page-updates&#34; aria-label=&#34;Page updates permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;03/11/2020&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Added a SVG subsection in the image page&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;24/08/2020&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Added a section about reader modes in the accessibility section.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;22/08/2020&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;In the interactive elements page I wrote that &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;details&gt;&lt;/code&gt; and &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;summary&gt;&lt;/code&gt; could not be animated. I was wrong.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/html-tips" rel="self" type="text/html"></link>
    <summary type="html">A collection of HTML and CSS tips to build simple yet optimized websites</summary>
  </entry>
  <entry>
    <title>Make my website accessible and look OK</title>
    <updated>2022-11-01T12:06:03Z</updated>
    <id>https://thomasorus.com/make-my-website-accessible-and-look-ok</id>
    <content type="html">&lt;h1 id=&#34;make-my-website-accessible-and-look-ok&#34; &gt;Make my website accessible and look OK&lt;a href=&#34;#make-my-website-accessible-and-look-ok&#34; aria-label=&#34;Make my website accessible and look OK permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Let&#39;s say you want to put a blog, a digital garden or a wiki page online. You ain&#39;t fancy, you just want a readable column of text, good markup, and throw content without it breaking.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-basics&#34; &gt;The basics&lt;a href=&#34;#the-basics&#34; aria-label=&#34;The basics permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Start with this and customize it to have dynamic information where needed:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;!DOCTYPE html&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;html lang=&#34;en&#34;&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;head&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;meta charset=&#34;UTF-8&#34;&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1&#34;&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;title&gt;Unique page title - My Site&lt;span&gt;&lt;&lt;/span&gt;/title&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;link rel=&#34;stylesheet&#34; href=&#34;/assets/css/styles.css&#34;&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;meta name=&#34;description&#34; content=&#34;Page description&#34;&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/head&gt;&#xA;&amp;nbsp;&#xA;&lt;span&gt;&lt;&lt;/span&gt;body&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;!-- Content --&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/body&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/html&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you want a more evolved version with link embeds for social media, favicons, a color theme, etc. see &lt;a href=&#34;https://www.matuzo.at/blog/html-boilerplate/&#34;&gt;Matuzo&#39;s&lt;/a&gt; boilerplate which details line by line what you can have in the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;head&gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your stylesheet, add a padding to the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;body&gt;&lt;/code&gt; and bump the font size a little bit while keeping it readable:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;body {&#xA;  padding: 1rem;&#xA;  font-size: 1.2rem;&#xA;  line-height: 1.4;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2 id=&#34;the-header-footer-menus&#34; &gt;The header, footer, menus&lt;a href=&#34;#the-header-footer-menus&#34; aria-label=&#34;The header, footer, menus permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you have a part of your website at the top that people can skip, name it &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;header&gt;&lt;/code&gt;. If you have a part of your website at the bottom that people can skip, name it &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;footer&gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a navigation menu to go to different parts of your website, put them inside &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;nav&gt;&lt;/code&gt;. You can nest &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;nav&gt;&lt;/code&gt; inside &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;header&gt;&lt;/code&gt; or &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;footer&gt;&lt;/code&gt; if you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the links inside your navigation menus, use a list.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;header&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;nav&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;ul&gt;&#xA;      &lt;span&gt;&lt;&lt;/span&gt;li&gt;&lt;span&gt;&lt;&lt;/span&gt;a href=&#34;#&#34;&gt;Link 1&lt;span&gt;&lt;&lt;/span&gt;/a&gt;&lt;span&gt;&lt;&lt;/span&gt;/li&gt;&#xA;      &lt;span&gt;&lt;&lt;/span&gt;li&gt;&lt;span&gt;&lt;&lt;/span&gt;a href=&#34;#&#34;&gt;Link 2&lt;span&gt;&lt;&lt;/span&gt;/a&gt;&lt;span&gt;&lt;&lt;/span&gt;/li&gt;&#xA;      &lt;span&gt;&lt;&lt;/span&gt;li&gt;&lt;span&gt;&lt;&lt;/span&gt;a href=&#34;#&#34;&gt;Link 3&lt;span&gt;&lt;&lt;/span&gt;/a&gt;&lt;span&gt;&lt;&lt;/span&gt;/li&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;/ul&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;/nav&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/header&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you have several &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;nav&gt;&lt;/code&gt; in your page, name them using &lt;code&gt;aria-label&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;header&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;nav aria-label=&#34;Main&#34;&gt;&#xA;   ...&#xA;  &lt;span&gt;&lt;&lt;/span&gt;/nav&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/header&gt;&#xA;&amp;nbsp;&#xA;...&#xA;&amp;nbsp;&#xA;&lt;span&gt;&lt;&lt;/span&gt;footer&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;nav aria-label=&#34;Secondary&#34;&gt;&#xA;   ...&#xA;  &lt;span&gt;&lt;&lt;/span&gt;/nav&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/footer&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you have a breadcrumb menu, name it with &lt;code&gt;aria-label=&#34;breadcrumbs&#34;&lt;/code&gt; and use the &lt;code&gt;aria-current=&#34;page&#34;&lt;/code&gt; on the link corresponding the current page.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;nav aria-label=&#34;Breadcrumb&#34;&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;ol role=&#34;list&#34;&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;li&gt;&lt;span&gt;&lt;&lt;/span&gt;a href=&#34;/&#34;&gt;Home&lt;span&gt;&lt;&lt;/span&gt;/a&gt;&lt;span&gt;&lt;&lt;/span&gt;/li&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;li&gt;&lt;span&gt;&lt;&lt;/span&gt;a href=&#34;/page2&#34;&gt;Second Page&lt;span&gt;&lt;&lt;/span&gt;/a&gt;&lt;span&gt;&lt;&lt;/span&gt;/li&gt;&#xA;     &lt;span&gt;&lt;&lt;/span&gt;li&gt;&lt;span&gt;&lt;&lt;/span&gt;a href=&#34;/page2/current-page&#34; aria-current=&#34;page&#34;&gt;Current page&lt;span&gt;&lt;&lt;/span&gt;/a&gt;&lt;span&gt;&lt;&lt;/span&gt;/li&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;/ol&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/nav&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And use this style to make it look like a breadcrumb:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[aria-label=&#34;Breadcrumb&#34;] ol {&#xA;  display: flex;&#xA;  padding:0;&#xA;}&#xA;&amp;nbsp;&#xA;[aria-label=&#34;Breadcrumb&#34;] ol * + *::before {&#xA;  content: &#34;&gt;&#34;;&#xA;  padding:0.5rem;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2 id=&#34;structure-the-page&#34; &gt;Structure the page&lt;a href=&#34;#structure-the-page&#34; aria-label=&#34;Structure the page permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Put the main content of the website inside &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;main&gt;&lt;/code&gt;. Then, if you have different sections, split them. The easiest way is to use one or several &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;article&gt;&lt;/code&gt; for the content, and &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;aside&gt;&lt;/code&gt; for the related but not main content.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;body&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;header&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;nav&gt;&lt;span&gt;&lt;&lt;/span&gt;/nav&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;/header&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;main&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;article&gt;&lt;span&gt;&lt;&lt;/span&gt;/article&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;aside&gt;&lt;span&gt;&lt;&lt;/span&gt;/aside&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;/main&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;footer&gt;&lt;span&gt;&lt;&lt;/span&gt;/footer&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/body&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Prefer using several &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;article&gt;&lt;/code&gt; tags instead of using &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;section&gt;&lt;/code&gt;. For example if you have a list of articles:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;main&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;article&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;h2&gt;Article title&lt;span&gt;&lt;&lt;/span&gt;/h2&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;p&gt;Excerpt&lt;span&gt;&lt;&lt;/span&gt;/p&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;a href=&#34;#&#34;&gt;Link&lt;span&gt;&lt;&lt;/span&gt;/a&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;/article&gt;&#xA;&amp;nbsp;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;article&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;h2&gt;Article title&lt;span&gt;&lt;&lt;/span&gt;/h2&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;p&gt;Excerpt&lt;span&gt;&lt;&lt;/span&gt;/p&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;a href=&#34;#&#34;&gt;Link&lt;span&gt;&lt;&lt;/span&gt;/a&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;/article&gt;&#xA;&amp;nbsp;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;article&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;h2&gt;Article title&lt;span&gt;&lt;&lt;/span&gt;/h2&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;p&gt;Excerpt&lt;span&gt;&lt;&lt;/span&gt;/p&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;a href=&#34;#&#34;&gt;Link&lt;span&gt;&lt;&lt;/span&gt;/a&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;/article&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/main&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2 id=&#34;the-page-content&#34; &gt;The page content&lt;a href=&#34;#the-page-content&#34; aria-label=&#34;The page content permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Add everything you want inside the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;article&gt;&lt;/code&gt; tag. Texts, images, videos, audios, embeds, everything will fit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since most of these elements are inline, you might have things being side by side, and be tempted to nest them inside a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;div&gt;&lt;/code&gt;. Don&#39;t do it for now, as we will fix this later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just don&#39;t forget to order your titles correctly! Only a single &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h1&gt;&lt;/code&gt;, subsequent &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h2&gt;&lt;/code&gt; and &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h3&gt;&lt;/code&gt;, and don&#39;t use them for styling. If you need a specific size for an element, style it.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;add-sensible-defaults&#34; &gt;Add sensible defaults&lt;a href=&#34;#add-sensible-defaults&#34; aria-label=&#34;Add sensible defaults permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Add &lt;a href=&#34;https://piccalil.li/blog/a-modern-css-reset/&#34;&gt;Andy Bell&lt;/a&gt;&#39;s CSS reset to your CSS file. It will reset some styles to avoid headaches later down the road.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then reduce the width of the text column and center it (work for anything else like the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;header&gt;&lt;/code&gt;, &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;nav&gt;&lt;/code&gt;, etc.):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;article,&#xA;header,&#xA;nav,&#xA;footer {&#xA;  max-width: 70ch;&#xA;  margin: auto;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You want a regular vertical flow between the elements inside your column of text. Avoid styling each element and instead use this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;article &gt; * + * {&#xA;  margin-top: 1rem;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It will add a similar margin at the top of elements if they have another element before them. This way, the first element of your text column won&#39;t have it, and no matter what you insert inside the text column, it will be have a margin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that you can use this technique &lt;em&gt;everywhere&lt;/em&gt;. In lists, on the body, it works perfectly. You can even create a set of &lt;code&gt;.flow&lt;/code&gt; classes with different margin size inside.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;that-s-it&#34; &gt;That&#39;s it!&lt;a href=&#34;#that-s-it&#34; aria-label=&#34;That&#39;s it! permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You now have a simple and barebones website, but made with sensible defaults and decently accessible. You can see the result of these bits of code &lt;a href=&#34;https://codepen.io/Thomasorus/pen/OJEMxby&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can now add your own styles like fonts, colors, anything that make it more personal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have fun!&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/make-my-website-accessible-and-look-ok" rel="self" type="text/html"></link>
    <summary type="html">You are in a hurry and want to make your pages</summary>
  </entry>
  <entry>
    <title>What is accessibility</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/what-is-accessibility</id>
    <content type="html">&lt;h1 id=&#34;what-is-accessibility&#34; &gt;What is accessibility ?&lt;a href=&#34;#what-is-accessibility&#34; aria-label=&#34;What is accessibility ? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I will often refer to &lt;em&gt;accessibility&lt;/em&gt; in these pages, which globally means having a website that people with disabilities can use. Disabilities come in a lot of ways. The most obvious one is blindness, who requires the use of a screen reader. But there&#39;s a lot of handicaps that can give your a hard time on the internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might be deaf, which means you need a transcribed version of an audio or video file. You might have dyslexia, which means you have a hard time reading text and need special fonts (and surprisingly &lt;em&gt;Comic Sans MS&lt;/em&gt; is one of them). You might have anxiety and panic disorders, which means you can&#39;t go to some websites who are too cluttered or trigger too many animations. You might have a cognitive impairment, which means you have a hard time understanding some websites. There are a lot of others handicaps that might make the web hard to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coding properly for accessibility (basically, respecting standards) doesn&#39;t mean your website is accessible by magic. It means other tools can take over by using the code you wrote. Screen readers are the obvious ones, but others like reader mode in your browser of choice is also one of them as it allows to change colors, fonts, etc...&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;is-accessibility-all-about-code&#34; &gt;Is accessibility all about code?&lt;a href=&#34;#is-accessibility-all-about-code&#34; aria-label=&#34;Is accessibility all about code? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;No, not at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All accessibility problems cannot be solved only by code. Some are only fixable by enforcing an inclusive interface and user experience design. You might have heard that enforcing accessibility leads to design constraints, which is true. But from experience it&#39;s entirely possible to have a nice design and user experience while being accessible. People saying it&#39;s not possible are lazy liars. Also you might have heard that enforcing accessibility is bad for SEO. It&#39;s also a lie as both can work together, you just have to want it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Respecting accessibility in UI and UX design often leads to better designs and user experiences for all users. So when I say that something &lt;em&gt;is good for accessibility&lt;/em&gt; it often means it&#39;s &lt;em&gt;good for all your users&lt;/em&gt;, and following these advises will result in a better website of everyone.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;accessibility-is-hard&#34; &gt;Accessibility is hard&lt;a href=&#34;#accessibility-is-hard&#34; aria-label=&#34;Accessibility is hard permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;To enforce accessibility you need to get yourself into the shoes of your disabled users. Is this usable by screen readers? Is it understandable by people with cognitive impairments? Questioning everything you do is a good way of doing it, but on the long run it leads to the realization that basically nothing is perfect despite your efforts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that&#39;s the hard pill to swallow: you probably can&#39;t make accessibility perfect by yourself (especially on big projects) without funding, manpower and a lot of testing. It&#39;s a huge task and you should aim for &lt;em&gt;usable&lt;/em&gt; instead of &lt;em&gt;perfection&lt;/em&gt; or you&#39;ll never see it end. Try to detect what is important for your user in each page or situation and make sure it works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ask yourself, what is the goal of the website you make? For a bank it&#39;s numbers, are the numbers accessible? For a journal it&#39;s text, are the texts accessible? For a government taxes website, it&#39;s being as clear as possible about legal stuff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the main think you can&#39;t mess around with? Make it your top accessibility priority, everywhere, and fix it. Once it&#39;s done, then you&#39;ll come back to fix those small problems, like typos or unimportant texts not being clear enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Choose the right battle and fight it until the end!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;accessibility-rules-and-tools.html&#34;&gt;Basic rules about accessibility and tools to enforce them&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/what-is-accessibility" rel="self" type="text/html"></link>
    <summary type="html">A primer on accessibility for the web</summary>
  </entry>
  <entry>
    <title>Accessibility rules and tools</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/accessibility-rules-and-tools</id>
    <content type="html">&lt;h1 id=&#34;accessibility-basic-rules-and-tools&#34; &gt;Accessibility basic rules and tools&lt;a href=&#34;#accessibility-basic-rules-and-tools&#34; aria-label=&#34;Accessibility basic rules and tools permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Accessibility is a vast, very hard to navigate maze that even people like me who worked on it almost two years can&#39;t properly handle correctly. So I don&#39;t expect myself to be able to explain everything, and I don&#39;t expect you to think about everything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this page I will simply list the essential rules I had to enforce myself and that will help you get started. Later, you can dig a bit more by yourself to fix your own specific problems.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;how-screen-readers-users-use-them&#34; &gt;How screen readers users use them?&lt;a href=&#34;#how-screen-readers-users-use-them&#34; aria-label=&#34;How screen readers users use them? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Most people don&#39;t know it, but &lt;strong&gt;screen readers users don&#39;t only use the tab key to navigate in pages&lt;/strong&gt;!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What does that means? That means don&#39;t panic when you start tabbing everywhere and see the focus not stopping where you want! When I first started I thought accessibility was all about adding the &lt;code&gt;tab-index=&#34;0&#34;&lt;/code&gt; HTML attribute to almost every element because otherwise, the tab key would not stop on it. But that&#39;s not how that works!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Screen readers users will use a combination of arrows to read phrases or letters, shortcuts to access titles and other parts of the website, as well as the tab key, but only to get out of input element in forms or access links and buttons! Like any other users with experience using a tool, they probably use it in a way that is totally foreign to you!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That&#39;s why it&#39;s important to have your website tested by actually disabled people. Don&#39;t assume how disabled people use the web, ask them to guide you if you can. You will probably be surprised at how fast screen readers users can navigate a page.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-basic-rules&#34; &gt;The basic rules&lt;a href=&#34;#the-basic-rules&#34; aria-label=&#34;The basic rules permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Here are some basic but essential rules to help you get started:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Don&#39;t block the ability to zoom in or zoom out on your website.&lt;/li&gt;&#xA;&lt;li&gt;Don&#39;t go below 13 pixels in font size. Yes users can zoom, but that would be way more comfortable if they didn&#39;t have to do it in the first place!&lt;/li&gt;&#xA;&lt;li&gt;The basic 16px font size that all browsers have is often a good thing to follow.&lt;/li&gt;&#xA;&lt;li&gt;Don&#39;t use super thin fonts. They are pretty but very hard to read!&lt;/li&gt;&#xA;&lt;li&gt;Don&#39;t overdo it with animations, flashes and stuff that can trigger stress.&lt;/li&gt;&#xA;&lt;li&gt;If your website is not compatible with reader mode, try providing an accessibility menu allowing the change of colors and fonts.&lt;/li&gt;&#xA;&lt;li&gt;Take care about color contrasts, you need a ratio of 4.5:1 to be sure most people can read your texts.&lt;/li&gt;&#xA;&lt;li&gt;Don&#39;t indicate states on your website or application by only using colors (like green and red) as colorblind people can&#39;t distinguish them (that&#39;s the reason traffic lights don&#39;t do it!)&lt;/li&gt;&#xA;&lt;li&gt;Try not using icons alone, especially when for ultra specific things that don&#39;t make sense on their own. Add text to indicate what it is.&lt;/li&gt;&#xA;&lt;li&gt;Don&#39;t put crucial information inside images, even if you add an &lt;code&gt;alt&lt;/code&gt; attribute!&lt;/li&gt;&#xA;&lt;li&gt;Ensure keyboard focus is visible and clear. Most of the time, it means not disabling the &lt;code&gt;focus&lt;/code&gt; styles in CSS.&lt;/li&gt;&#xA;&lt;li&gt;Provide a &lt;em&gt;Skip to Content&lt;/em&gt; link at the top of your website.&lt;/li&gt;&#xA;&lt;li&gt;If you have audio content, provide a transcript.&lt;/li&gt;&#xA;&lt;li&gt;If you have video content, provide subtitles.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;how-to-hide-text-destined-to-screen-readers-users&#34; &gt;How to hide text destined to screen readers users&lt;a href=&#34;#how-to-hide-text-destined-to-screen-readers-users&#34; aria-label=&#34;How to hide text destined to screen readers users permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You can use this CSS class:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.visually-hidden {&#xA;  clip: rect(0 0 0 0);&#xA;  clip-path: inset(50%);&#xA;  height: 1px;&#xA;  overflow: hidden;&#xA;  position: absolute;&#xA;  white-space: nowrap;&#xA;  width: 1px;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But don&#39;t overdo it, it must be the exception, not the rule. Some screen readers users can actually see but prefer a combination of voice and text. If you start hiding walls of text the user can&#39;t see, you&#39;re gonna create a very unpleasant experience.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;how-to-hide-things-from-screen-readers&#34; &gt;How to hide things from screen readers&lt;a href=&#34;#how-to-hide-things-from-screen-readers&#34; aria-label=&#34;How to hide things from screen readers permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Use the &lt;code&gt;aria-hidden=&#34;true&#34;&lt;/code&gt; attribute on the HTML element of your choice. Again, the exception, not the rule. Use it if something can&#39;t be vocalize, but provide a textual explanation of it right after.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;what-is-a-skip-content-link&#34; &gt;What is a skip content link?&lt;a href=&#34;#what-is-a-skip-content-link&#34; aria-label=&#34;What is a skip content link? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Screen readers users have shortcuts to access the different parts of your website, but that doesn&#39;t mean you can&#39;t give them your own shortcuts. Escape or skip links are an invisible menu of anchor links to different parts of your page, that you can add right after the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;body&gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s not technically complicated to implement and can save your screen readers users tons of time, especially if you have big and complex header or navigation before the main content.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;what-tools-can-i-use&#34; &gt;What tools can I use?&lt;a href=&#34;#what-tools-can-i-use&#34; aria-label=&#34;What tools can I use? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;One of the most used combinations of screen readers and browser are &lt;a href=&#34;https://www.nvaccess.org/download/&#34;&gt;NVDA&lt;/a&gt; and &lt;a href=&#34;https://firefox.com&#34;&gt;Firefox&lt;/a&gt;. But you can also use the &lt;a href=&#34;https://chrome.google.com/webstore/detail/chromevox-classic-extensi/kgejglhpjiefppelpmljglcjbhoiplfn&#34;&gt;Chromevox&lt;/a&gt; extension for Chrome to get an in-browser screen reader. Most operating systems also provide voice over and from what I heard, the one on iOS is particularly good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Firefox Dev Tools, the &#34;Accessibility&#34; tab will show you a textual representation of your website nodes that can help you detect what will be vocalized and won&#39;t. There is a lot of browser extensions for accessibility that will scan the current page and tell you what is violation the rules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve used the &lt;a href=&#34;https://www.deque.com/axe/&#34;&gt;Axe extension&lt;/a&gt; in the past and enjoyed it, but there&#39;s a lot more.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;how-does-the-reader-mode-works&#34; &gt;How does the reader mode works?&lt;a href=&#34;#how-does-the-reader-mode-works&#34; aria-label=&#34;How does the reader mode works? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;All modern browsers provide a reader mode that strips most of the design to keep only text and images. They also allow changing fonts, background colors, text to speech and other features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is... it&#39;s not clear how and why some pages allow the reader mode to exist and others don&#39;t. According to this &lt;a href=&#34;http://zumguy.com/enabling-reading-mode-on-your-website/&#34;&gt;article&lt;/a&gt; analyzing a &lt;a href=&#34;https://github.com/mozilla/readability/&#34;&gt;standalone version&lt;/a&gt; of Firefox reader mode, an algorithm analyzes the content inside &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;p&gt;&lt;/code&gt; elements, checks how &lt;em&gt;content-y&lt;/em&gt; they are and assigns them a score. Commas, length of phrases and other parameters are taken into account to score the page and decide if yes or no, it deserves reader mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It means that small pages are not going to offer reader mode, which is a shame. But you probably can&#39;t do anything about it outside reorganizing content.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;the-basics-of-html.html&#34;&gt;The basics: head, div and span&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/accessibility-rules-and-tools" rel="self" type="text/html"></link>
    <summary type="html">A collection of accessibility tips to build simple yet inclusive websites</summary>
  </entry>
  <entry>
    <title>The basics of HTML</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/the-basics-of-html</id>
    <content type="html">&lt;h1 id=&#34;the-basics-of-html&#34; &gt;The basics of HTML&lt;a href=&#34;#the-basics-of-html&#34; aria-label=&#34;The basics of HTML permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This section will give your some basic knowledge and tips about HTML, mostly what semantic tag to use in what situation.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;what-you-need-to-get-started&#34; &gt;What you need to get started&lt;a href=&#34;#what-you-need-to-get-started&#34; aria-label=&#34;What you need to get started permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You need this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;!DOCTYPE html&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;html lang=&#34;en&#34;&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;head&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;meta charset=&#34;UTF-8&#34;&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;title&gt;Document&lt;span&gt;&lt;&lt;/span&gt;/title&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/head&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;body&gt;&#xA;    // Code&#xA;&lt;span&gt;&lt;&lt;/span&gt;/body&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/html&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You need to indicate that the document is HTML, the language of the document and of course its encoding. You also need a title as it will be visible in the tab and spoken by screen readers when the page is loaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;meta name=&#34;viewport&gt;&#34;&lt;/code&gt; is especially important. It can be used to block the zoom or zoom out of the page. But don&#39;t do it, please &lt;strong&gt;never block the user from zooming in or zooming out on a website&lt;/strong&gt;. This is the basic accessibility thing, don&#39;t deactivate it!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course there&#39;s a lot more that can go into the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;head&gt;&lt;/code&gt; of a website. Styles, scripts, meta-descriptions, open graph tags... The head has its own life in itself that you can explore, but it&#39;s not the purpose of this guide to give you an extended lesson about it so we&#39;ll skip it and start adding things inside the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;body&gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;divs-and-spans&#34; &gt;Divs and spans&lt;a href=&#34;#divs-and-spans&#34; aria-label=&#34;Divs and spans permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;HTML is all about putting...things! Inside... other things? So your first reflex is probably to grab a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;div&gt;&lt;/code&gt; or a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;span&gt;&lt;/code&gt;, the good old ones! But what&#39;s the difference between them?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you put several &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;div&gt;&lt;/code&gt; one after the other, you&#39;ll see they stack one above the other. That&#39;s because a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;div&gt;&lt;/code&gt; has the &lt;code&gt;display:block;&lt;/code&gt; CSS property by default. &lt;code&gt;display:block&lt;/code&gt; makes the element start on a new line and take 100% of its container width.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do the same with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;span&gt;&lt;/code&gt;, they will stack one after the other. That&#39;s because a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;span&gt;&lt;/code&gt; has the &lt;code&gt;display:inline;&lt;/code&gt; CSS property by default, which tells the element to start on the same line as the previous element and that its width and heigh are decided by content.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So just by knowing that, you already know how to stack things vertically and horizontally. Great right?&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;wait-wait-wait-there-s-css-in-my-html&#34; &gt;Wait wait wait... There&#39;s CSS in my HTML?&lt;a href=&#34;#wait-wait-wait-there-s-css-in-my-html&#34; aria-label=&#34;Wait wait wait... There&#39;s CSS in my HTML? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Yes! And for a good reason! Imagine your CSS file disappears and your are left only with your HTML page. Without some pre-made styling, everything would have the same font size, would be inline... That would be unreadable!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That&#39;s the reason why browsers implement their own styling when encountering an HTML element. It&#39;s a great feature but unfortunately, some people really hate it. When you want to style the HTML elements with your own design, you sometimes have to undo some of the basic styling of the browser.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, some of them are verbose to undo, like buttons. That&#39;s the reason some people use what is called &#34;resets&#34; CSS files, to undo the default styling and ease the CSS work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But please be careful when resetting styles. When you undo the browser styling, you also undo accessibility styles. If you ever used the tab key to navigate inside a website, you saw that the focused element is distinguished from the rest with borders or outlines. Going too hard on un-style can break those things and left you with... nothing. You are lost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speaking of being lost, &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;div&gt;&lt;/code&gt; and &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;span&gt;&lt;/code&gt; can sometimes get your users in trouble, unlike the amazing &lt;em&gt;semantic HTML&lt;/em&gt; elements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;what-is-semantic-html.html&#34;&gt;What is semantic HTML?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/the-basics-of-html" rel="self" type="text/html"></link>
    <summary type="html">The basics of what is needed when starting a website in HTML</summary>
  </entry>
  <entry>
    <title>What is semantic HTML</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/what-is-semantic-html</id>
    <content type="html">&lt;h1 id=&#34;what-is-semantic-html&#34; &gt;What is semantic HTML?&lt;a href=&#34;#what-is-semantic-html&#34; aria-label=&#34;What is semantic HTML? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;When you use &lt;code&gt;int&lt;/code&gt; or &lt;code&gt;string&lt;/code&gt; in a programming language, you know exactly what each of them is doing and it helps in code readability right? Well HTML is the same, it has things with names that help knowing what they do. The problem  is, unlike a typed language, HTML is cool with you doing mistakes and won&#39;t throw an error if you don&#39;t use the right tool for the job. So in the end you can do mistakes and still have a visually working website who is awful under the hood.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But visually impaired users use a lot of shortcuts with their screen readers to simply jump to different parts of the page, and those shortcuts only work if HTML is semantically valid! So having good HTML and following a solid structure helps them, but also other users. For example, to use the reader mode in several browsers, your HTML has to be semantically valid, or the reader mode won&#39;t be available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a lot, &lt;em&gt;a LOT&lt;/em&gt; of semantic HTML elements and even I who loves HTML doesn&#39;t know them all, so I will only cover the most useful.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;content-sectioning&#34; &gt;Content sectioning&lt;a href=&#34;#content-sectioning&#34; aria-label=&#34;Content sectioning permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;These semantic elements have the same style properties as a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;div&gt;&lt;/code&gt; (they stack on top of each others) and won&#39;t change anything related to your design, so feel free to use them without stressing. You can even add them to an existing design without trouble!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You at least need those:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;header&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Put the content from the top portion of your website that your user will read the first time they visit but will skip afterwards, inside this.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;nav&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Put your navigation elements inside this. You can have several &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;nav&gt;&lt;/code&gt; but you then need to use the &lt;code&gt;aria-label&lt;/code&gt; attribute to name them for screen readers users.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;main&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Put the main parts of your website inside this one. Very useful as it indicates to screen readers users they reached the main part of the page.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;article&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Put the main content of your website inside this one. It must be content that is self-sustainable. Imagine if you had to remove everything but one thing, and put it inside this tag.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;aside&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;put the content indirectly related to the article content inside this one. It can be a sidebar or a side note for example.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;footer&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Put the content from the bottom portion of your website that your user will read the first time they visit but will skip afterwards, inside this.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;A basic page might look like this for example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;body&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;header&gt;&lt;span&gt;&lt;&lt;/span&gt;/header&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;nav&gt;&lt;span&gt;&lt;&lt;/span&gt;/nav&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;main&gt;&#xA;        &lt;span&gt;&lt;&lt;/span&gt;article&gt;&lt;span&gt;&lt;&lt;/span&gt;/article&gt;&#xA;        &lt;span&gt;&lt;&lt;/span&gt;aside&gt;&lt;span&gt;&lt;&lt;/span&gt;/aside&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;/main&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;footer&gt;&lt;span&gt;&lt;&lt;/span&gt;/footer&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/body&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I did not mention the &lt;code&gt;section&lt;/code&gt; element but it can be quite useful if you need to split your content in different sections that are directly related to your content and that are of equal importance. For example a blog post should have its main content and comments inside &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;article&gt;&lt;/code&gt;, but comments should be inside a &lt;code&gt;section&lt;/code&gt; to make it clearer for screen readers users that the blog post has ended.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;main&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;article&gt;&#xA;        Text&#xA;        &lt;span&gt;&lt;&lt;/span&gt;section aria-label=&#34;Comments&#34;&gt;&lt;span&gt;&lt;&lt;/span&gt;/section&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;/article&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/main&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can find the other content semantic element on this &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTML/Element&#34;&gt;page&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;stop-right-there-what-is-this-aria-thing-in-the-previous-example&#34; &gt;Stop right there, what is this &lt;code&gt;aria&lt;/code&gt; thing in the previous example?&lt;a href=&#34;#stop-right-there-what-is-this-aria-thing-in-the-previous-example&#34; aria-label=&#34;Stop right there, what is this &lt;code&gt;aria&lt;/code&gt; thing in the previous example? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You&#39;ll often see &lt;code&gt;aria&lt;/code&gt; attributes inside the HTML code presented in this page. As stated by the MDN docs on this &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA&#34;&gt;page&lt;/a&gt;, &lt;em&gt;Accessible Rich Internet Applications (ARIA) is a set of attributes that define ways to make web content and web applications (especially those developed with JavaScript) more accessible to people with disabilities.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aria is a massive spec to learn and apply so I will just give you some basic ones in this page. Try to follow them as much as you can to give a better readability to your website layouts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;never-use-tables-for-layout.html&#34;&gt;Don&#39;t use tables for layout&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/what-is-semantic-html" rel="self" type="text/html"></link>
    <summary type="html">An explanation of semantic HTML and why it&#39;s important</summary>
  </entry>
  <entry>
    <title>Never use tables for layout</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/never-use-tables-for-layout</id>
    <content type="html">&lt;h1 id=&#34;never-use-tables-for-layout&#34; &gt;Never use tables for layout&lt;a href=&#34;#never-use-tables-for-layout&#34; aria-label=&#34;Never use tables for layout permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I&#39;m gonna say it again. &lt;strong&gt;Never use tables for layout&lt;/strong&gt;. I&#39;m dead serious. Never do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you come from the pre-HTML 5 era, you probably used to organize the elements of your page with tables because it was the norm. But using tables for something else that presenting data is a catastrophic thing for accessibility. When a screen reader meets a table, the screen readers tells him he&#39;s entering a table, so the user thinks he&#39;s going to hear about data organized in row and columns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also using tables makes your HTML super verbose, hard to read and hard to debug. They are way simpler solutions to do what most people try to do with tables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;the-display-property.html&#34;&gt;The display property&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/never-use-tables-for-layout" rel="self" type="text/html"></link>
    <summary type="html">An explanation about why using tables for layout is a bad practice</summary>
  </entry>
  <entry>
    <title>The display property</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/the-display-property</id>
    <content type="html">&lt;h1 id=&#34;the-display-property&#34; &gt;The &lt;code&gt;display&lt;/code&gt; property&lt;a href=&#34;#the-display-property&#34; aria-label=&#34;The &lt;code&gt;display&lt;/code&gt; property permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Here&#39;s a primer to help you get started width &lt;code&gt;display: ???&lt;/code&gt;, the basic tool for doing layouts in HTML and CSS. As always there&#39;s a ton of values that can be used, but we&#39;ll just focus on the most common/useful ones.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-good-old-ones&#34; &gt;The good old ones&lt;a href=&#34;#the-good-old-ones&#34; aria-label=&#34;The good old ones permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;First the good old ones that you apply directly on each element.&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;inline&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Elements are stacked one after the other on the same line until there&#39;s no space so a new line is created.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;block&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Elements are stacks on top of each other.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;inline-block&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;The best of both worlds as it acts like an inline element but its height and width can be changed!&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Those values are still in use today but are way less common in modern layout than they used to. Before &lt;code&gt;flexbox&lt;/code&gt; and &lt;code&gt;grid&lt;/code&gt;, developers used a lot of &lt;code&gt;inline-block&lt;/code&gt; layouts to make responsive design work and content flow nicely. It was sometimes very complicated and the reason why things like grid frameworks were very popular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today there is absolutely no reason to not use &lt;code&gt;flexbox&lt;/code&gt; and &lt;code&gt;grid&lt;/code&gt;. They can even be used on Internet Explorer 11 if written correctly and compiled with a tool like &lt;a href=&#34;https://github.com/postcss/autoprefixer&#34; title=&#34;Go to Autoprefixer github page&#34; aria-label=&#34;Go to Autoprefixer github page&#34;&gt;Autoprefixer&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;flexbox-the-goat.html&#34;&gt;Flexbox, the goat&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/the-display-property" rel="self" type="text/html"></link>
    <summary type="html">What is the display property in CSS and how it affects HTML</summary>
  </entry>
  <entry>
    <title>Flexbox the goat</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/flexbox-the-goat</id>
    <content type="html">&lt;h1 id=&#34;flexbox-the-goat&#34; &gt;Flexbox, the GOAT&lt;a href=&#34;#flexbox-the-goat&#34; aria-label=&#34;Flexbox, the GOAT permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;A few years ago the massive adoption of flexbox was like a wet dream coming true. Imagine: you take the inline-block property where things stack right after each other, but you can decide the direction of this stacking both on the &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt; axis ; and also how the elements behave between themselves!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main difference comes from the declaration. Instead of declaring &lt;code&gt;display:flex;&lt;/code&gt; on each element, you only declare it on the parent and it acts on the children.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;div style=&#34;display:flex;&#34;&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;div&gt;1&lt;span&gt;&lt;&lt;/span&gt;/div&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;div&gt;2&lt;span&gt;&lt;&lt;/span&gt;/div&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/div&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So how does that work?&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;decide-the-direction&#34; &gt;Decide the direction&lt;a href=&#34;#decide-the-direction&#34; aria-label=&#34;Decide the direction permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;First, you decide if the flow goes horizontally or vertically, and in which direction. For this, you can use the great &lt;code&gt;flex-flow: ???;&lt;/code&gt; shortcut property. Its most common options are:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;row&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;the children will be displayed from left to right&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;row-reverse&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;the children will be displayed from right to left&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;column&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;the children will be displayed from top to bottom&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;column-reverse&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;the children will be displayed from bottom to top&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;You can also decide if the child elements should wrap aka create a new line when they lack to be on a single line, by adding &lt;code&gt;wrap&lt;/code&gt; or &lt;code&gt;nowrap&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Real code examples:&lt;/p&gt;&#xA;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hello screen reader users! Several code examples of layouts are demonstrated in this page. There is no real content inside these examples that would help you understand them. So instead, for each code example, I decided tell you the code example is hidden, but you can inspect it with developer tools if you are a one. Sorry for the lack of a better solution.&lt;/span&gt;&#xA;&#xA;&lt;code&gt;flex-flow: row wrap;&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:flex; flex-flow:row wrap;&#34;&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;code&gt;flex-flow: row-reverse wrap;&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:flex; flex-flow:row-reverse wrap;&#34;&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;code&gt;flex-flow: column wrap;&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:flex; flex-flow:column wrap;&#34;&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;code&gt;column-reverse wrap&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:flex; flex-flow:column-reverse wrap;&#34;&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Neat right?&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;align-your-children-on-the-x-axis&#34; &gt;Align your children on the X axis!&lt;a href=&#34;#align-your-children-on-the-x-axis&#34; aria-label=&#34;Align your children on the X axis! permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Alignment is cool but what if you could decided the distance between those aligned children or even better, let the browser handle it for you?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let&#39;s reuse this example of a row going from left to right:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;div style=&#34;display:flex; flex-flow:row wrap;&#34;&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;div&gt;1&lt;span&gt;&lt;&lt;/span&gt;/div&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;div&gt;2&lt;span&gt;&lt;&lt;/span&gt;/div&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/div&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;We&#39;re going to use &lt;code&gt;justify-content: ???;&lt;/code&gt; to fine tune the way child elements behave between each others on the horizontal axis:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;flex-start&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;The default value, stack everything at the start of te flow.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;flex-end&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Stack everything at the end of the flow.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;center&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Stack all elements at the center with equal white space on the left and right.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;space-between&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Space elements as far as possible from each others.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;space-around&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Automatically gives each child element the same left and right margins.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;space-evenly&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Creates equal white space between all elements.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Real code examples:&lt;/p&gt;&#xA;&#xA;&lt;code&gt;justify-content: flex-start;&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:flex; flex-flow:row wrap; justify-content: flex-start;&#34;&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;code&gt;justify-content: flex-end;&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:flex; flex-flow:row wrap; justify-content: flex-end;&#34;&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;code&gt;justify-content: center;&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:flex; flex-flow:row wrap; justify-content: center;&#34;&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;code&gt;justify-content: space-between;&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:flex; flex-flow:row wrap; justify-content: space-between;&#34;&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;code&gt;justify-content: space-around;&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:flex; flex-flow:row wrap; justify-content: space-around;&#34;&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;code&gt;justify-content: space-evenly;&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:flex; flex-flow:row wrap; justify-content: space-evenly;&#34;&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;align-your-children-on-the-y-axis&#34; &gt;Align your children on the Y axis!&lt;a href=&#34;#align-your-children-on-the-y-axis&#34; aria-label=&#34;Align your children on the Y axis! permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Now the cool thing is... The &lt;code&gt;align-items: ???;&lt;/code&gt; CSS property takes the same values as &lt;code&gt;justify-content&lt;/code&gt;, but for the vertical axis! Which means we have a way to align on the &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt; axis in two lines of code!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It allows us to create the holy grail of alignment: center both vertically and horizontally in two lines of CSS!&lt;/p&gt;&#xA;&#xA;&lt;code&gt;justify-content: center; align-items: center;&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:flex; flex-flow:row wrap; justify-content: center; align-items: center;&#34;&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Praise flexbox! &lt;span aria-label=&#34;Happy smiley praising with hands up!&#34;&gt;(/≧▽≦)/&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There&#39;s a lot more you can do with Flexbox. You can align items individually, reorder items, decide if they are allowed to shrink or grow in size. If you want to learn more about Flex, try the in-game browser &lt;a href=&#34;https://flexboxfroggy.com&#34;&gt;Flexbox Froggy&lt;/a&gt;. If you are not into games try this free course on &lt;a href=&#34;https://www.youtube.com/watch?v=Vj7NZ6FiQvo&amp;list=PLu8EoSxDXHP7xj_y6NIAhy0wuCd4uVdid&amp;index=1&#34;&gt;youtube&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might be thinking &lt;em&gt;Yeah this is cool, but not as cool as my good old tables&lt;/em&gt;. Well rejoice dear reader as I&#39;m going to make you happy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;css-grid-the-almighty.html&#34;&gt;CSS Grid the almighty&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/flexbox-the-goat" rel="self" type="text/html"></link>
    <summary type="html">A primer on flexbox and why it&#39;s awesome and simple for HTML layout</summary>
  </entry>
  <entry>
    <title>CSS Grid the almighty</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/css-grid-the-almighty</id>
    <content type="html">&lt;h1 id=&#34;css-grid-the-almighty&#34; &gt;CSS Grid the almighty&lt;a href=&#34;#css-grid-the-almighty&#34; aria-label=&#34;CSS Grid the almighty permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;CSS Grid is a relatively new spec that saw massive adoption from browser around the start of 2018 and is now used almost everywhere. So what it is about?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, it&#39;s about making virtual grids with columns and rows. You might have met 12 column grids in CSS frameworks like Bootstrap before? That&#39;s what Grid allows you to replicate in a few lines of code, except it&#39;s way more powerful and easy to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even more than Flexbox, it&#39;s a &lt;em&gt;massive&lt;/em&gt; spec with tons of use cases and syntax tricks. It&#39;s extremely powerful but it&#39;s also easy to get lost in it, so we&#39;ll just try a few layouts and use cases to get you started with columns and rows.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;so-you-like-columns&#34; &gt;So you like columns?&lt;a href=&#34;#so-you-like-columns&#34; aria-label=&#34;So you like columns? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;For this example we&#39;ll go with just 6 vertical columns. How would that work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First we have to use &lt;code&gt;display: grid;&lt;/code&gt; on the parent element, just like we did with flexbox. Then we can declare our grid with the &lt;code&gt;grid-template-columns: ???;&lt;/code&gt; property.&lt;/p&gt;&#xA;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hello screen reader users! Several code examples of layouts are demonstrated in this page. There is no real content inside these examples that would help you understand them. So instead, for each code example, I decided tell you the code example is hidden, but you can inspect it with developer tools if you are a one. Sorry for the lack of a better solution.&lt;/span&gt;&#xA;&#xA;&lt;code&gt;grid-template-columns: repeat(6, 1fr);&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:grid; grid-template-columns: repeat(6, 1fr)&#34;&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;3&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;4&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;5&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;6&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;So let&#39;s break it down, what&#39;s going on here? The &lt;code&gt;repeat()&lt;/code&gt; shortcut is a function we use to declare the number of columns we wanted instead of writing &lt;code&gt;1fr 1fr 1fr 1fr 1fr 1fr&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;fr&lt;/code&gt; is a CSS unit, like pixels or percentages, that means &lt;code&gt;fractional unit&lt;/code&gt;. In this example, &lt;code&gt;1fr&lt;/code&gt; repeated six times means &lt;em&gt;split the space in six and give each children the same space&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what happens if we decide that the first column should take 2 times the space of other columns? The grid readjust itself nicely:&lt;/p&gt;&#xA;&#xA;&lt;code&gt;grid-template-columns: 2fr repeat(5, 1fr);&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:grid; grid-template-columns: 2fr repeat(5, 1fr)&#34;&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;3&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;4&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;5&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;6&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;But wait, what happens if there is not enough children? The grid keeps it&#39;s 6 column layouts and populate the 5 elements inside the 5 first columns:&lt;/p&gt;&#xA;&#xA;&lt;code&gt;grid-template-columns: repeat(6, 1fr);&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:grid; grid-template-columns: repeat(6, 1fr)&#34;&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;3&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;4&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;5&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;If too many children, the grid will create a new row:&lt;/p&gt;&#xA;&#xA;&lt;code&gt;grid-template-columns: repeat(6, 1fr);&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:grid; grid-template-columns: repeat(6, 1fr)&#34;&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;3&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;4&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;5&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;6&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;7&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;In Grid tutorials you will often hear about the &#34;explicit&#34; and &#34;implicit&#34; columns and rows. The explicit is the one you declared with your code. The implicit is the one created by the browser when there&#39;s no written rules to handle specific use cases or bugs. You can declare rules for both implicit and explicit grids even if I won&#39;t go into details on this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course we could have a grid where columns have a fixed size in pixels. Doing so would ensure the columns keep a reasonable size even on mobile, but it would make the whole thing un-responsive!&lt;/p&gt;&#xA;&#xA;&lt;code&gt;grid-template-columns: repeat(6, 140px);&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;overflow:scroll-x;display:grid; grid-template-columns: repeat(6, 140px)&#34;&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;3&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;4&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;5&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;6&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;At this point, you&#39;re probably thinking that a media query is needed to make the grid go from &lt;code&gt;fr&lt;/code&gt; units to &lt;code&gt;px&lt;/code&gt; units when the viewport is smaller. What a chore right ?...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well dear reader I have something incredible for you...&lt;/p&gt;&#xA;&#xA;&lt;div style=&#34;display:flex; align-items:center; justify-content:space-evenly; margin:50px; text-align:center;&#34;&gt;&lt;span aria-label=&#34;Smiley throwing sparkles&#34; style=&#34;white-space:nowrap;&#34;&gt;(ﾉ◕ヮ◕)ﾉ*:･ﾟ✧&lt;/span&gt;&lt;strong&gt;THE INCREDIBLE &lt;br&gt; MEGA AWESOME &lt;br&gt; NO MEDIA QUERIES &lt;br&gt; RESPONSIVE GRID&lt;/strong&gt;&lt;span aria-label=&#34;Smiley being super chill&#34; style=&#34;white-space:nowrap;&#34;&gt;〜(￣▽￣〜)&lt;/span&gt;&lt;/div&gt;&#xA;&#xA;&lt;code&gt;grid-template-columns: repeat(auto-fit, minmax(70px, 1fr));&lt;/code&gt;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:grid; grid-template-columns:repeat(auto-fit, minmax(70px, 1fr)&#34;&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;3&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;4&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;5&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;6&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Try resizing it! Great right?! So what&#39;s happening here?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;First, we removed the fixed number of columns in the &lt;code&gt;repeat&lt;/code&gt; to let the child elements decide how much columns the grid should have. Frightening? Don&#39;t worry.&lt;/li&gt;&#xA;&lt;li&gt;Then, we added the &lt;code&gt;auto-fit&lt;/code&gt; property to let child elements grow in size (it can be replaced with &lt;code&gt;auto-fill&lt;/code&gt; if you don&#39;t want your columns to grow).&lt;/li&gt;&#xA;&lt;li&gt;Finally, we added the &lt;code&gt;minmax&lt;/code&gt; function that let us define what the minimum and maximum size the column should have. We set a pixel width at the minimum to forbid the columns to shrink too much, and a fractional unit as the maximum to allow them to take as much space as they want.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What it means is this: the grid will try to stack as many children as possible inside the available width until the minimum size is met. In this case, a new row will be created.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;ok-but-how-do-i-position-stuff&#34; &gt;Ok but how do I position stuff?&lt;a href=&#34;#ok-but-how-do-i-position-stuff&#34; aria-label=&#34;Ok but how do I position stuff? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In CSS frameworks like Bootstrap, you have utility classes to say &lt;em&gt;start here and span this much columns&lt;/em&gt; and you can do exactly the same with CSS Grid, using the &lt;code&gt;grid-column: ? / ?;&lt;/code&gt; shortcut property on the column of your choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There&#39;s actually two syntax you can use:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;? / ?&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Where the first &lt;code&gt;?&lt;/code&gt; is the starting column and the second &lt;code&gt;?&lt;/code&gt; is the ending column.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;? / span ?&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Where the first &lt;code&gt;?&lt;/code&gt; is the starting column and the &lt;code&gt;span ?&lt;/code&gt; is the width of the column in &lt;code&gt;fr&lt;/code&gt; unit.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Let&#39;s try different things with our grid:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;grid-column: 1 / 3;&#xA;grid-column: 5 / span 2;&#xA;grid-column: 2 / span 4;&#xA;grid-column: 2 / span 1;&#xA;grid-column: 5 / span 1;&#xA;grid-column: 1 / 7;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Results in:&lt;/p&gt;&#xA;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:grid; grid-template-columns:repeat(auto-fit, minmax(70px, 1fr)&#34;&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-column: 1 /3&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-column: 5 /span 2&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-column: 2 /span 4&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;3&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-column: 2 /span 1&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;4&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-column: 5 /span 1&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;5&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-column: 1 /7&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;6&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;ok-what-about-the-rows&#34; &gt;Ok, what about the rows?&lt;a href=&#34;#ok-what-about-the-rows&#34; aria-label=&#34;Ok, what about the rows? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It&#39;s basically the same as the columns, except it&#39;s for the rows. Use the &lt;code&gt;grid-template-rows&lt;/code&gt; to declare the number of rows you need. And of course, you can decide where to place each children using &lt;code&gt;grid-row&lt;/code&gt;, the equivalent for rows of &lt;code&gt;grid-columns&lt;/code&gt;. It&#39;s super useful for art directed pages as you can place everything where you want.&lt;/p&gt;&#xA;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example&#34; aria-hidden=&#34;true&#34; style=&#34;display:grid; grid-template-rows: repeat(4, 1fr); grid-template-columns: repeat(6, 1fr);&#34;&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-row: 2 / span 1;&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-row: 4 / span 1;&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-row: 3 / span 1; grid-column: 6 / span 1;&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;3&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-row: 2 / span 2; grid-column: 3 / span 2;&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;4&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-row: 1 / span 4; grid-column: 5 / span 1;&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;5&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-row: 1 / span 1; grid-column: 2 / span 1;&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;6&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;all-this-is-quite-complicated-is-there-a-simpler-way&#34; &gt;All this is quite complicated, is there a simpler way?&lt;a href=&#34;#all-this-is-quite-complicated-is-there-a-simpler-way&#34; aria-label=&#34;All this is quite complicated, is there a simpler way? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It can become messy to work this way, so one final tip for you: the best way to make complex layouts from row and grids is to use &lt;code&gt;grid-template-area: ??;&lt;/code&gt; and &lt;code&gt;grid-area: ??;&lt;/code&gt;, a very funky yet super useful combination of CSS grid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this syntax, you &lt;em&gt;draw&lt;/em&gt; your layout inside a string in CSS, declaring names for each of your child elements. Let&#39;s say we have 5 elements that we want to shape like a star. The result would look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;grid-template-areas:&#xA;&#34;lefttop . righttop&#34;&#xA;&#34;. center . &#34;&#xA;&#34;leftbottom . rightbottom&#34;;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;By doing this, we created a 3 by 3 grid. The &lt;code&gt;.&lt;/code&gt; character inside the declaration means an element exists but has no name and thus, should be given empty space. Now all we have to do is report those names to our children and &lt;em&gt; voila&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;Hidden code demo below.&lt;/span&gt;&#xA;&lt;div class=&#34;code-example code-example-grid-star&#34; aria-hidden=&#34;true&#34;&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-area: lefttop;&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;1&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-area: righttop;&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;2&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-area: center;&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;3&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-area: leftbottom;&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;4&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;code-example-children-grid pattern-dots&#34; style=&#34;grid-area: rightbottom;&#34;&gt;&#xA;&lt;div class=&#34;code-example-value&#34;&gt;5&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;This syntax is very useful for more visual minded people and can lead to great art directed pages. The Smashing Magazine website has a very nice article on the subject on this &lt;a href=&#34;https://www.smashingmagazine.com/2018/04/art-directing-web-css-grid/&#34;&gt;page&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;i-want-moar&#34; &gt;I want MOAR!&lt;a href=&#34;#i-want-moar&#34; aria-label=&#34;I want MOAR! permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you want to train your CSS grid skills, try playing the amazing Grid Garden game on this &lt;a href=&#34;http://cssgridgarden.com/&#34;&gt;page&lt;/a&gt;. If you want more examples but in a sort of short video format, visit this &lt;a href=&#34;https://www.youtube.com/watch?v=DCZdCKjnBCs&#34;&gt;page&lt;/a&gt;. For a complete free video course on CSS Grid, I recommend &lt;a href=&#34;https://www.youtube.com/playlist?list=PLu8EoSxDXHP5CIFvt9-ze3IngcdAc2xKG&#34;&gt;this one&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;strong&gt;And that&#39;s it for modern layout in HTML and CSS!&lt;/strong&gt;&#xA;&#xA;&lt;p&gt;Congratulations for reading thus far, that was a lot to take! Now let&#39;s talk about the content of your pages and about the elements you&#39;re going to use to format it!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;order-your-titles-correctly.html&#34;&gt;Order your titles correctly&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/css-grid-the-almighty" rel="self" type="text/html"></link>
    <summary type="html">a primer on grid and how it can replace CSS grid frameworks</summary>
  </entry>
  <entry>
    <title>Order your titles correctly</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/order-your-titles-correctly</id>
    <content type="html">&lt;h1 id=&#34;order-your-titles-correctly&#34; &gt;Order your titles correctly&lt;a href=&#34;#order-your-titles-correctly&#34; aria-label=&#34;Order your titles correctly permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This one is simple, use &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h1&gt;&lt;/code&gt;, &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h2&gt;&lt;/code&gt;, &lt;code&gt;h3&lt;/code&gt;, etc... Your page should at least have an &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h1&gt;&lt;/code&gt; and should not jump from &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h1&gt;&lt;/code&gt; to &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h3&gt;&lt;/code&gt; without an &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h2&gt;&lt;/code&gt;. If you want a smaller title, use CSS but don&#39;t ruin the semantic for styling purposes! The same applies when, for example, you have a smaller title before the main title. If this happens, change the smaller title to a simple text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason why it is important is because screen readers users have shortcuts that allows them to jump directly to your titles and count on you to organize them logically. In long pages it can rapidly become hard to link to certain parts of your page.  Adding an id and a hidden link to your titles can help your users share specific parts of your page. With this technique, the user can click the title to add the id to the url.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This website actually uses this system. You can find the JavaScript function for this &lt;a href=&#34;https://github.com/Thomasorus/Kaku/blob/master/src/module.js&#34;&gt;in the github repo of my parser&lt;/a&gt; &lt;a href=&#34;/kaku.html&#34; title=&#34;Go to Kaku page&#34; aria-label=&#34;Go to Kaku page&#34;&gt;Kaku&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;organize-your-&#34;&gt;Organize your text content&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/order-your-titles-correctly" rel="self" type="text/html"></link>
    <summary type="html">How to handle titles in HTML so they are logically ordered and accessible</summary>
  </entry>
  <entry>
    <title>Make your links clear and accessible</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/make-your-links-clear-and-accessible</id>
    <content type="html">&lt;h1 id=&#34;make-your-links-clear-and-accessible&#34; &gt;Make your links clear and accessible&lt;a href=&#34;#make-your-links-clear-and-accessible&#34; aria-label=&#34;Make your links clear and accessible permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Links are pretty straightforward, you put an &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;a&gt;&lt;/code&gt; with an &lt;code&gt;href&lt;/code&gt; attribute and you&#39;re good right? Yes, but often links lack readability due to poor phrasing. Try not using texts like &lt;em&gt;more&lt;/em&gt; or &lt;em&gt;click here&lt;/em&gt; outside of clear phrases, as they do not convey what&#39;s going to happen when you click. Try to have a different texts for each link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can&#39;t use a more contextualized text, then add the &lt;code&gt;title&lt;/code&gt; attribute in the link with more context inside, and it will provide a tool-tip when the user hover on the link. You will also have to add an &lt;code&gt;aria-label&lt;/code&gt; attribute with the same contextualized text for screen readers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Inside those attributes, don&#39;t use the work &#34;link&#34;. It&#39;s not explicit, it doesn&#39;t convey meaning. Also because screen readers already say &lt;em&gt;link&lt;/em&gt;, your screen readers visitors will hear &lt;em&gt;Link, Link&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but not least: if you use &lt;code&gt;target=&#34;blank&#34;&lt;/code&gt; to open to a new tab, you have to vocalize it using the same &lt;code&gt;aria-label&lt;/code&gt; attribute. Just add &lt;code&gt;(open in a new tab)&lt;/code&gt; at the end of your text so screen readers users know that the previous page is still open.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the end result might look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;a href=&#34;/home.html&#34; title=&#34;Go to the home page&#34; aria-label=&#34;Go to the home page (open in a new tab)&#34; target=&#34;blank&#34;&gt;here&lt;span&gt;&lt;&lt;/span&gt;/a&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Knowing all this, it&#39;s often less work and trouble to just rephrase the link!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;when-to-use-a-button-and-a-link.html&#34;&gt;When to use a button and a link&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/make-your-links-clear-and-accessible" rel="self" type="text/html"></link>
    <summary type="html">A collection of HTML basic tips to build simple yet modern websites</summary>
  </entry>
  <entry>
    <title>Organize your text content</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/organize-your-text-content</id>
    <content type="html">&lt;h1 id=&#34;organize-your-text-content&#34; &gt;Organize your text content&lt;a href=&#34;#organize-your-text-content&#34; aria-label=&#34;Organize your text content permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Remember when I talked about the box-content semantic elements, the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;nav&gt;&lt;/code&gt;, &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;main&gt;&lt;/code&gt; and others? Well there&#39;s a &lt;em&gt;lot&lt;/em&gt; more of them for the text. If you care enough, you can probably find a semantic HTML element for anything. Here&#39;s a few that you should use:&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;text-blocks-with-p&#34; &gt;Text blocks with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;p&gt;&lt;/code&gt;&lt;a href=&#34;#text-blocks-with-p&#34; aria-label=&#34;Text blocks with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;p&gt;&lt;/code&gt; permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you don&#39;t know what to use for your block of text, your probably need a paragraph. Paragraphs come with a natural margin that makes them readable even without adding style. Paragraphs are good, use them!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;quotes-with-blockhouse&#34; &gt;Quotes with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;blockhouse&gt;&lt;/code&gt;&lt;a href=&#34;#quotes-with-blockhouse&#34; aria-label=&#34;Quotes with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;blockhouse&gt;&lt;/code&gt; permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The good old quote we often see in articles! It can actually comes with the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;cite&gt;&lt;/code&gt; element and attribute to help you sources your quotes, as well as a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;footer&gt;&lt;/code&gt; to indicate the end of the quote and its author. Take a look at the specifications on &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote/&#34;&gt;this page&lt;/a&gt; to make better quotes.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;lists-with-ul-ol-dl&#34; &gt;Lists with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;ul&gt;&lt;/code&gt;, &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;ol&gt;&lt;/code&gt;, &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;dl&gt;&lt;/code&gt;&lt;a href=&#34;#lists-with-ul-ol-dl&#34; aria-label=&#34;Lists with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;ul&gt;&lt;/code&gt;, &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;ol&gt;&lt;/code&gt;, &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;dl&gt;&lt;/code&gt; permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you enumerate something (text, links, etc...) you probably should add them in a list. Lists are useful for screen readers users as they are announced as a list with the total number of elements inside. Then when reading each entry, the screen reader voices its position.&lt;/p&gt;&#xA;&#xA;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;ul&gt;&lt;/code&gt; with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;li&gt;&lt;/code&gt; inside creates an unordered list with bullets:&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Element A&lt;/li&gt;&#xA;&lt;li&gt;Element C&lt;/li&gt;&#xA;&lt;li&gt;Element Z&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;ol&gt;&lt;/code&gt; with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;li&gt;&lt;/code&gt; will create an ordered list with numbers for each element:&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Element 1&lt;/li&gt;&#xA;&lt;li&gt;Element 2&lt;/li&gt;&#xA;&lt;li&gt;Element 3&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;dl&gt;&lt;/code&gt; is not very popular but is super useful as it&#39;s a definition list. Most people still use two columns tables for definitions, but this is way better for screen readers users.&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Term 1&lt;/dt&gt;&lt;dd&gt;Definition 1&lt;/dd&gt;&lt;dt&gt;Term 2&lt;/dt&gt;&lt;dd&gt;Definition 2&lt;/dd&gt;&lt;dt&gt;Term 3&lt;/dt&gt;&lt;dd&gt;definition 3&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Of course all those lists come with their basic design, but please note that you can change them very easily. You can make your lists go in a single line, change their separation, or even use a custom image instead of dots! Just be careful to not put informative content as a decoration, as it will not be vocalized. Also when reading the source code of a page, HTML lists are very easy to understand.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;pre-formatted-text-with-pre&#34; &gt;Pre-formatted text with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;pre&gt;&lt;/code&gt;&lt;a href=&#34;#pre-formatted-text-with-pre&#34; aria-label=&#34;Pre-formatted text with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;pre&gt;&lt;/code&gt; permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you have to present some code, it&#39;s probably good to wrap it inside a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;pre&gt;&lt;/code&gt; tag to preserve its formatting. Please note that you should also use the inline semantic &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;code&gt;&lt;/code&gt; element (we&#39;ll talk about it later in these pages).&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;make-breaks-with-hr&#34; &gt;Make breaks with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;hr&gt;&lt;/code&gt;&lt;a href=&#34;#make-breaks-with-hr&#34; aria-label=&#34;Make breaks with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;hr&gt;&lt;/code&gt; permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;hr&gt;&lt;/code&gt; element is to indicate a break inside your content: a kind of pause, a change of subject. You could think that the old &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;hr&gt;&lt;/code&gt; element is useless when we can style these breaks with CSS, but they indicate to screen readers users that they can take a break too!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;all-about-images.html&#34;&gt;All about images&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/organize-your-text-content" rel="self" type="text/html"></link>
    <summary type="html">The useful HTML elements when dealing with text</summary>
  </entry>
  <entry>
    <title>All about images</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/all-about-images</id>
    <content type="html">&lt;h1 id=&#34;all-about-images&#34; &gt;All about images&lt;a href=&#34;#all-about-images&#34; aria-label=&#34;All about images permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Just as links, images can feel pretty straightforward. Put an &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;img&gt;&lt;/code&gt; tag, an &lt;code&gt;src&lt;/code&gt; and an &lt;code&gt;alt&lt;/code&gt; attributes and you&#39;re good right?!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well yeah but... what if we could do much more, like loading the right image size depending on viewport, let the browser decide between image formats or even only load images when they are in the viewport?&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;load-the-right-image-size-and-density&#34; &gt;Load the right image size and density&lt;a href=&#34;#load-the-right-image-size-and-density&#34; aria-label=&#34;Load the right image size and density permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;img&gt;&lt;/code&gt; element has an &lt;code&gt;srcset&lt;/code&gt; attribute that allows you to add several links to several versions of your image. You can do two things with &lt;code&gt;srcset&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Ask the browser to change the image depending of the width of the viewport.&lt;/li&gt;&#xA;&lt;li&gt;Ask the browser to change the image depending of the pixel density of the display.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In the example below, I have 4 versions of the same image that I want the browser to use when the viewport is less than 300, 600, 900 and 1200 pixels in width:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;img&#xA;    src=&#34;img-1200.jpg&#34;&#xA;    srcset=&#34;img-300.jpg 300w, img-600.jpg 600w, img-900.jpg 900w, img-1200.jpg 1200w&#34;&#xA;/&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And for pixel density for 1k, 2k or 4k screens:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;img&#xA;    src=&#34;img-1k.jpg&#34;&#xA;    srcset=&#34;img-1k.jpg 1x, img-2k.jpg 2x, img-4k.jpg x4&#34;&#xA;    alt=&#34;this is an image&#34;&#xA;/&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But you can also combine them, for example for a favicon:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;img&#xA;    src=&#34;icon32px.png&#34;&#xA;    &#34;icon32px.png 32w, icon64px.png 64w, icon-retina.png 2x icon-ultra.png 3x icon.svg&#34;&#xA;    alt=&#34;this is an image&#34;&#xA;/&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This way you are sure you only load the right size or density for your readers.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;load-the-right-image-format&#34; &gt;Load the right image format&lt;a href=&#34;#load-the-right-image-format&#34; aria-label=&#34;Load the right image format permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You maybe saw it before and wondered what was the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;picture&gt;&lt;/code&gt; element good for? Well it&#39;s quite simple, it&#39;s used to contain several &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;source&gt;&lt;/code&gt; elements and an &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;img&gt;&lt;/code&gt; element.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;source&gt;&lt;/code&gt; elements are used to give alternate versions of the same image. The most obvious use-case is to load several formats to allow to browser to pick the lighter if it supports it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let&#39;s take an example with a &lt;code&gt;jpg&lt;/code&gt; and a &lt;code&gt;webp&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;picture&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;source srcset=&#34;img1.webp&#34; type=&#34;image/webp&#34;&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;img src=&#34;img1.jpg&#34; alt=&#34;this is an image&#34; /&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/picture&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If the browser supports the webp format, it will automatically use the webp file instead of the jpg. Please note that if the browser does not support the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;picture&gt;&lt;/code&gt; element the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;img&gt;&lt;/code&gt; one will still work, so there is no good reason to not use them.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;lazy-loading-images&#34; &gt;Lazy loading images&lt;a href=&#34;#lazy-loading-images&#34; aria-label=&#34;Lazy loading images permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Lazy loading has become native in most browsers and is quite simple to use: &lt;code&gt;loading:&#34;lazy&#34;&lt;/code&gt; on your &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;img&gt;&lt;/code&gt; element and you are good to go. They are several ways of doing lazy loading for older browsers who don&#39;t support this feature. All of them require to use JavaScript. If you want to support old browsers, take a look at this &lt;a href=&#34;https://css-tricks.com/the-complete-guide-to-lazy-loading-images/&#34;&gt;article&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;combine-all-this-together&#34; &gt;Combine all this together!&lt;a href=&#34;#combine-all-this-together&#34; aria-label=&#34;Combine all this together! permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;But you don&#39;t have to choose between all these features, you can combine them to have images at the right size, of the best type, only loaded when in the viewport, and all this only in HTML.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;picture&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;source&#xA;    type=&#34;image/webp&#34;&#xA;    srcset=&#34;img-300.webp 300w, img-600.webp 600w, img-900.webp 900w, img-1200.webp 1200w&#34;&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;img&#xA;    loading=&#34;lazy&#34;&#xA;    src=&#34;img.jpg&#34;&#xA;    srcset=&#34;img-300.jpg 300w, img-600.jpg 600w, img-900.jpg 900w, img-1200.jpg 1200w&#34; alt=&#34;The happy hacking keyboard&#34;&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/picture&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Knowing that images are the most heavy thing loaded by websites, it&#39;s incredible that this syntax isn&#39;t more known and used!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;about-svg-files&#34; &gt;About svg files&lt;a href=&#34;#about-svg-files&#34; aria-label=&#34;About svg files permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The SVG format (for &lt;em&gt;Scalable Vector Graphics&lt;/em&gt;) is using vector graphics with an XML markup language. It can therefore used in a browser as inline code to display images, which is a good thing as it reduces the number of requests made by the browser.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here&#39;s a few tips:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;During export from programs like Illustrator, Affinity Designer or Inkscape, take care of not exporting an SVG with an image inside.&lt;/li&gt;&#xA;&lt;li&gt;SVG exports often come with a lot of useless information stored inside, which makes them verbose and heavy. Compress them by using an SVG compressor like &lt;a href=&#34;https://jakearchibald.github.io/svgomg/&#34;&gt;SVGO&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The width and height of the SVG doesn&#39;t matter much from a file weight perspective but their design can be ugly on unreadable if too small or too big.&lt;/li&gt;&#xA;&lt;li&gt;Most of the time you will put the inline SVG inside a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;div&gt;&lt;/code&gt; or a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;span&gt;&lt;/code&gt; that has a fixed width and height and the SVG file will overflow. To make it fit, use a simple CSS rule like &lt;code&gt;width:100%; height:100%;&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;SVG can be informative or decorative and its purpose can change the way you handle accessibility. If you are using an SVG for informative purposes (like a graph), you should add a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;title&gt;&lt;/code&gt; to add a tooltip and/pr an &lt;code&gt;aria-label&lt;/code&gt; attribute to just vocalize it.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;svg role=&#34;img&#34; aria-label=&#34;Accessible Name&#34;&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;title&gt;Accessible Name&lt;span&gt;&lt;&lt;/span&gt;/title&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;!-- child elements of the inline SVG --&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/svg&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If the SVG is used for decorative purposes (like an icon) you can simply hide it using &lt;code&gt;aria-hidden=&#34;true&#34;&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;svg role=&#34;img&#34; aria-hidden=&#34;true&#34;&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;!-- child elements of the inline SVG --&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/svg&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;all-about-video-and-audio.html&#34;&gt;All about video and audio&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/all-about-images" rel="self" type="text/html"></link>
    <summary type="html">How to make images optimized, responsive and easy on bandwidth</summary>
  </entry>
  <entry>
    <title>All about video and audio</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/all-about-video-and-audio</id>
    <content type="html">&lt;h1 id=&#34;all-about-video-and-audio&#34; &gt;All about video and audio&lt;a href=&#34;#all-about-video-and-audio&#34; aria-label=&#34;All about video and audio permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;video&gt;&lt;/code&gt; and &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;audio&gt;&lt;/code&gt; elements are super easy and convenient ways to embed multimedia content on the web without relying on a third party. But if the tags are very straightforward, the video and audio formats can be a headache.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have a lot of formats available but most of them are not supported on every browser. To make it quick you have containers and you have codecs. Containers are the format of the file, the &lt;code&gt;.mp4&lt;/code&gt; for example. Codecs are the compression algorithm used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So which video codec should you use?&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-video-codecs-and-containers-supported-on-the-web&#34; &gt;The video codecs and containers supported on the web&lt;a href=&#34;#the-video-codecs-and-containers-supported-on-the-web&#34; aria-label=&#34;The video codecs and containers supported on the web permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you are in a hurry and can only produce one export, go with the h264 video codec and MP3 audio codec in a &lt;code&gt;.mp4&lt;/code&gt; container. It will run everywhere. If you think your Firefox users have the AAC codec installed on their machine, you can replace the MP3 codec by AAC as it has better sound quality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want high quality and compression you will have to export your videos two times and do this combination:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Apple machines&lt;/dt&gt;&lt;dd&gt;A &lt;code&gt;.mp4&lt;/code&gt; container with h265 video encoding and AAC audio encoding.&lt;/dd&gt;&lt;dt&gt;Others&lt;/dt&gt;&lt;dd&gt;A &lt;code&gt;.webm&lt;/code&gt; container with AV1 video codec and probably Opus for audio encoding.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;If you only want open source and cover a maximum of machines, the best combination is probably a &lt;code&gt;.webm&lt;/code&gt; container with a vp8 for video encoding and mp3 for the audio (mp3 is open source since 2017). Be careful as this won&#39;t work in Safari until Safari 14.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-audio-codecs-and-containers-supported-on-the-web&#34; &gt;The audio codecs and containers supported on the web&lt;a href=&#34;#the-audio-codecs-and-containers-supported-on-the-web&#34; aria-label=&#34;The audio codecs and containers supported on the web permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Basically if you want to archive some audio or put in on the web so people can remix it, you&#39;d better use a lossless audio codec and in this case, FLAC is the king, being compatible with almost everything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are putting audio for streaming and want a good quality, the AAC codec in a &lt;code&gt;.mp4&lt;/code&gt; container is probably a good pick, but be careful of Firefox users without the codec on their systems. For them you can use the Vorbis codec with a &lt;code&gt;.ogg&lt;/code&gt; container.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don&#39;t care about quality and just want everything to work, go with &lt;code&gt;.mp3&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;wait-i-can-pick-two&#34; &gt;Wait, I can pick two?&lt;a href=&#34;#wait-i-can-pick-two&#34; aria-label=&#34;Wait, I can pick two? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;That&#39;s the beauty of it, just like with the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;picture&gt;&lt;/code&gt; element, you can add multiple sources to your &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;video&gt;&lt;/code&gt; and &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;audio&gt;&lt;/code&gt; elements and let the browser choose.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;audio controls&gt;&#xA; &lt;span&gt;&lt;&lt;/span&gt;source src=&#34;foo.opus&#34; type=&#34;audio/ogg; codecs=opus&#34;/&gt;&#xA; &lt;span&gt;&lt;&lt;/span&gt;source src=&#34;foo.ogg&#34; type=&#34;audio/ogg; codecs=vorbis&#34;/&gt;&#xA; &lt;span&gt;&lt;&lt;/span&gt;source src=&#34;foo.mp3&#34; type=&#34;audio/mpeg&#34;/&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/audio&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2 id=&#34;save-bandwidth-with-these-simple-tricks&#34; &gt;Save bandwidth with these simple tricks!&lt;a href=&#34;#save-bandwidth-with-these-simple-tricks&#34; aria-label=&#34;Save bandwidth with these simple tricks! permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;preload=&#34;metadata&#34;&lt;/code&gt; attribute only loads the metadata of your files like the first frame or its length until the user plays the file. And if you want to save even more data, use &lt;code&gt;preload=&#34;none&#34;&lt;/code&gt;. In the case of a video, the preview will be totally dark but that can be mitigated by using the &lt;code&gt;poster&lt;/code&gt; attribute with a link to an image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you should know that converting animated gif to videos often result in radically smaller files, and you can trick the user in believing a gif is being played!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-multiple-configurations-of-the-video-player&#34; &gt;The multiple configurations of the video player&lt;a href=&#34;#the-multiple-configurations-of-the-video-player&#34; aria-label=&#34;The multiple configurations of the video player permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;video&gt;&lt;/code&gt; and &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;audio&gt;&lt;/code&gt; elements comes with a set of attributes that allows you to tweak how they act. The &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;audio&gt;&lt;/code&gt; element is often left untouched but the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;video&gt;&lt;/code&gt; one has several attributes that allows it to act as a video player or as a fake gif!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make a traditional video with the &lt;code&gt;control&lt;/code&gt; attribute:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;video controls&#34; src=&#34;path to video&#34; type=&#34;video/mp4&#34;&gt;&lt;span&gt;&lt;&lt;/span&gt;/video&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Make a fake gif from a video using those attributes. &lt;code&gt;loop&lt;/code&gt; will restart the video, &lt;code&gt;mute&lt;/code&gt; will remove sound and &lt;code&gt;autoplay&lt;/code&gt; will start it automatically. Be careful as &lt;code&gt;autoplay&lt;/code&gt; will not respect the &lt;code&gt;preload&lt;/code&gt; attribute, making the video downloaded instantly.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;video autoplay loop mute src=&#34;link to fake gif video&#34; type=&#34;video/mp4&#34;&gt;&lt;span&gt;&lt;&lt;/span&gt;/video&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Finally, please note that the &lt;code&gt;playsinline&lt;/code&gt; attribute prevents videos from playing full screen on mobile when launched. If that&#39;s not the behavior your want, don&#39;t forget to add it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;doing-forms-correctly.html&#34;&gt;Doing forms correctly&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/all-about-video-and-audio" rel="self" type="text/html"></link>
    <summary type="html">Tips and tricks about video and audio codecs for the web and how to use the audio and video elements</summary>
  </entry>
  <entry>
    <title>Doing forms correctly</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/doing-forms-correctly</id>
    <content type="html">&lt;h1 id=&#34;doing-forms-correctly&#34; &gt;Doing forms correctly&lt;a href=&#34;#doing-forms-correctly&#34; aria-label=&#34;Doing forms correctly permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Forms are incredibly complicated to get right from an accessibility standpoint. I don&#39;t know all the good practices but I&#39;ve seen some bad ones that I can warn you about. Please contact me if you find a mistake in this section as I really am not 100% sure about everything.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;forms-require-strict-html&#34; &gt;Forms require strict HTML&lt;a href=&#34;#forms-require-strict-html&#34; aria-label=&#34;Forms require strict HTML permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;With more people validating forms with JavaScript, we&#39;ve seen a drop in code quality of forms. But the reality is quite simple: if you forget about some parts of the form, screen readers users will not know they are in a form to begin with!&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;A form starts and ends with the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;form&gt;&lt;/code&gt; element even if you validate it with JavaScript. Also add an &lt;code&gt;id&lt;/code&gt; to it.&lt;/li&gt;&#xA;&lt;li&gt;Each &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;input&gt;&lt;/code&gt;, no matter its type, needs and &lt;code&gt;id&lt;/code&gt; and a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;label&gt;&lt;/code&gt; with the &lt;code&gt;for&lt;/code&gt; attribute pointing to it.&lt;/li&gt;&#xA;&lt;li&gt;If you have a multi-section form, regroup them with the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;fieldset&gt;&lt;/code&gt; element and add the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;legend&gt;&lt;/code&gt; element as the &#34;title&#34; of this fieldset.&lt;/li&gt;&#xA;&lt;li&gt;End your form with a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;button&gt;&lt;/code&gt; when you can, use the &lt;code&gt;for&lt;/code&gt; attribute to point on the form&#39;s id, and use an &lt;code&gt;aria-label&lt;/code&gt; to give more context.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For accessibility reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Use contextualized text for your labels, be precise about what each input is about! If you can&#39;t have a clear label, same as links: add a &lt;code&gt;title&lt;/code&gt; attribute to the input as well as a &lt;code&gt;aria-label&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Don&#39;t rely on the &lt;code&gt;placeholder&lt;/code&gt; attribute for examples of what is expected! The placeholder text is often hard to read and disappears once the input becomes active, making it difficult for users with cognitive impairment.&lt;/li&gt;&#xA;&lt;li&gt;If you want to add an example of what is expected from the user, you can either add it directly in the label (often not very accepted by designers) or add it below the input and then refer to it with the &lt;code&gt;aria-describedby&lt;/code&gt; attribute (see example below). Using this, screen readers will first read the label, then the &lt;code&gt;aria-describedby&lt;/code&gt; text in one go.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Wrapping it up, here&#39;s an example that you can inspect with your browser&#39;s developer tools:&lt;/p&gt;&#xA;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;This is a form demo below, not a real one, don&#39;t activate it!&lt;/span&gt;&#xA;&lt;form id=&#34;monsters&#34;&gt;&#xA;&lt;fieldset&gt;&#xA;&lt;legend&gt;Choose your favorite monster&lt;/legend&gt;&#xA;&lt;small id=&#34;error&#34; style=&#34;color:red; display:none;&#34;&gt;Error: you need to choose a monster.&lt;/small&gt;&lt;br/&gt;&#xA;&lt;input type=&#34;radio&#34; id=&#34;kraken&#34; name=&#34;monster&#34; aria-describedby=&#34;kraken-desc&#34;&gt;&#xA;&lt;label for=&#34;kraken&#34;&gt;Kraken&lt;/label&gt;&lt;br/&gt;&#xA;&lt;small id=&#34;kraken-desc&#34;&gt;The kraken is a kind of giant squid.&lt;/small&gt;&lt;br/&gt;&#xA;&lt;input type=&#34;radio&#34; id=&#34;sasquatch&#34; name=&#34;monster&#34; aria-describedby=&#34;sasquatch-desc&#34;&gt;&#xA;&lt;label for=&#34;sasquatch&#34;&gt;Sasquatch&lt;/label&gt;&lt;br/&gt;&#xA;&lt;small id=&#34;sasquatch-desc&#34;&gt;The Sasquatch is a kind of giant ape.&lt;/small&gt;&lt;br/&gt;&#xA;&lt;input type=&#34;radio&#34; id=&#34;mothman&#34; name=&#34;monster&#34; aria-describedby=&#34;mothman-desc&#34;&gt;&#xA;&lt;label for=&#34;mothman&#34;&gt;Mothman&lt;/label&gt;&lt;br/&gt;&#xA;&lt;small id=&#34;mothman-desc&#34;&gt;The Mothman is a kind of giant moth.&lt;/small&gt;&lt;br/&gt;&#xA;&lt;/fieldset&gt;&#xA;&lt;/form&gt;&#xA;&lt;button type=&#34;submit&#34; form=&#34;monsters&#34; value=&#34;Submit&#34; aria-label=&#34;Validate the monsters form&#34;&gt;Validate&lt;/button&gt;&#xA;&#xA;&lt;p&gt;That&#39;s it for the code, but more often than you think, bad forms are the result of non inclusive design practices, some of which we will see below.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;information-below-forms&#34; &gt;Information below forms&lt;a href=&#34;#information-below-forms&#34; aria-label=&#34;Information below forms permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Ever filled a form and right under the validate button, seen a wall of text written in 10 pixels size that is actually the terms and conditions? Well that can be a problem!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most forms end with words like &lt;em&gt;Continue&lt;/em&gt; or &lt;em&gt;Validate&lt;/em&gt; and by doing so, suggest that the page is finished. A screen reader user can&#39;t know there&#39;s something else below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This problem can be super tedious to explain to designers as most of them don&#39;t want a wall of text before the form, and don&#39;t ever suggest this to a marketing team! So an accessible solution is to simply use an invisible anchor link pointing to the wall of text right before the form starts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Screen readers users are humans too, they dislike walls of text about legal stuff like anyone else! This solution allows them to either read it or even better, skip it, like we all do &lt;em&gt;right?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;don-t-put-text-sections-inside-a-form&#34; &gt;Don&#39;t put text sections inside a form!&lt;a href=&#34;#don-t-put-text-sections-inside-a-form&#34; aria-label=&#34;Don&#39;t put text sections inside a form! permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You probably already tried to tab between inputs in a form. That&#39;s because inputs are capturing elements that &lt;strong&gt;you can only escape by using the tab key&lt;/strong&gt;. And when you do, &lt;strong&gt;the tab key will lead you to the next native focus-able element&lt;/strong&gt; like another input, a button or a link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s important because too many designers put big explanation texts about the form between inputs. Since screen readers users can only use the tab key to get out of an input and will land on the next focus-able element, they will not have the explanation texts vocalized and have no way of access them. We saw that &lt;code&gt;aria-describedby&lt;/code&gt; can be used to link to a descriptive text, but that&#39;s applying a bandage on a broken leg.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Removing texts sections inside forms might seem like a chore and, when talking about it with designers, they will probably tell you it&#39;s a going to make the whole experience bland or suffocating in the case of massive forms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the reality is that &lt;strong&gt;a form that needs explanation texts between inputs is a bad design right from the start&lt;/strong&gt;. You should give all necessary information before filling the form, otherwise users might start filling it and realize in the middle they didn&#39;t have to, or are not concerned about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your labels with the descriptions attached should be enough to make it a pleasant and understandable experience. Yes forms are not fun but we can&#39;t sacrifice usability to some &lt;em&gt;funnel&lt;/em&gt; concept marketers enjoy to create.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;handling-errors-in-forms-is-a-pain&#34; &gt;Handling errors in forms is a pain&lt;a href=&#34;#handling-errors-in-forms-is-a-pain&#34; aria-label=&#34;Handling errors in forms is a pain permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Handling errors in forms is super complicated and nobody seems to agree about how to do it correctly. It&#39;s especially hard with accessibility in mind, and not only because of screen readers. So take my advises with a grain of salt as I may be wrong on some cases and am still learning about this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first rule to respect is that triggering error messages should only happen either when the user tabs out of the input or when the user validates the form. Don&#39;t trigger error messages while the user is typing. Wait for him to go out of the input or it will be a vocalized nightmare or a panic inducing behavior. You might think that&#39;s counter-intuitive as screen readers users may not know that they wrote it wrong but that&#39;s actually OK if you do the following right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the user validates the form using the button, if an input is required and not filled or wrongly filled, move the user focus to this problematic input using the &lt;code&gt;.focus()&lt;/code&gt; function in JavaScript. This way the user can promptly fill or fix it, then go back below super fast to validate the form again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The error message should be added the same way as the instructions, with an &lt;code&gt;aria-describedby&lt;/code&gt;. You can actually have two &lt;code&gt;id&lt;/code&gt; as a value for &lt;code&gt;aria-describedby&lt;/code&gt;, so screen readers will read the label, then the description, then the error message. Finally, a &lt;code&gt;aria-invalid=&#34;true&#34;&lt;/code&gt; needs to be added to each invalid input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the sake of the example, imagine we did not choose a monster below and tried validating the form. In JavaScript, we should add the &lt;code&gt;error&lt;/code&gt; id to each input&#39;s &lt;code&gt;aria-describedby&lt;/code&gt; so screen readers can vocalize the error message, and remove the &lt;code&gt;display:none&lt;/code&gt; from the error message itself so non-screen readers users can see it too.&lt;/p&gt;&#xA;&#xA;&lt;span class=&#34;visually-hidden&#34;&gt;There is a form demo below, you can inspect it using the development tools.&lt;/span&gt;&#xA;&lt;form id=&#34;monsters&#34;&gt;&#xA;&lt;fieldset&gt;&#xA;&lt;legend&gt;Choose your favorite monster&lt;/legend&gt;&#xA;&lt;small id=&#34;error&#34; style=&#34;color:red;&#34;&gt;Error: you need to choose a monster.&lt;/small&gt;&lt;br/&gt;&#xA;&lt;input type=&#34;radio&#34; id=&#34;kraken&#34; name=&#34;monster&#34; aria-describedby=&#34;kraken-desc error&#34; aria-invalid=&#34;true&#34;&gt;&#xA;&lt;label for=&#34;kraken&#34;&gt;Kraken&lt;/label&gt;&lt;br/&gt;&#xA;&lt;small id=&#34;kraken-desc&#34;&gt;The kraken is a kind of giant squid.&lt;/small&gt;&lt;br/&gt;&#xA;&lt;input type=&#34;radio&#34; id=&#34;sasquatch&#34; name=&#34;monster&#34; aria-describedby=&#34;sasquatch-desc error&#34; aria-invalid=&#34;true&#34;&gt;&#xA;&lt;label for=&#34;sasquatch&#34;&gt;Sasquatch&lt;/label&gt;&lt;br/&gt;&#xA;&lt;small id=&#34;sasquatch-desc&#34;&gt;The Sasquatch is a kind of giant ape.&lt;/small&gt;&lt;br/&gt;&#xA;&lt;input type=&#34;radio&#34; id=&#34;mothman&#34; name=&#34;monster&#34; aria-describedby=&#34;mothman-desc error&#34; aria-invalid=&#34;true&#34;&gt;&#xA;&lt;label for=&#34;mothman&#34;&gt;Mothman&lt;/label&gt;&lt;br/&gt;&#xA;&lt;small id=&#34;mothman-desc&#34;&gt;The Mothman is a kind of giant moth.&lt;/small&gt;&lt;br/&gt;&#xA;&lt;/fieldset&gt;&#xA;&lt;/form&gt;&#xA;&lt;button type=&#34;submit&#34; form=&#34;monsters&#34; value=&#34;Submit&#34; aria-label=&#34;Validate the monsters form&#34;&gt;Validate&lt;/button&gt;&#xA;&#xA;&lt;p&gt;Because of all this and contrary to popular practices, &lt;strong&gt;it&#39;s forbidden to disable a form button&lt;/strong&gt;, even if the user made errors or did not finish filling the form. If the validation button is disabled it disappears from vocalization and the user has to travel through the whole form to find which input is not good. This is less practical than sending him directly to the input when the button is clicked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Applying this can be tricky on legacy applications that handle errors in a monolithic way. Even if you do front-end surface level error checking, the user might make a typo that can only be identified when the form is sent and the back-end discovers it by using information stored in a database. If this happens, the error handling in the back-end needs to be written in a way that returns which information is wrong, to allow the front-end to &lt;code&gt;.focus()&lt;/code&gt; on the wrong input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the back-end returns a vague message then the front-end can&#39;t do anything outside using &lt;code&gt;.focus()&lt;/code&gt; to move the user to a standard error message, and the user has to redo the entire form and find by himself what he did wrongly. This is a super bad user experience even for non-disabled users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best solution is of course to do error checking on the back-end on each input with an ajax call right after the user exits it. But for various reasons going from time to cost of requests, it&#39;s not always possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck with your forms and more than anything, &lt;strong&gt;test your forms with real users, disabled or not, to find out if everything is ok&lt;/strong&gt;. On this particular subject, you can&#39;t trust yourself, your client, product owner, designer or common tester. You need real, fresh experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;tables-are-not-that-complicated.html&#34;&gt;Tables are not that complicated&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/doing-forms-correctly" rel="self" type="text/html"></link>
    <summary type="html">A deep explanation about accessible forms and error handling in HTML</summary>
  </entry>
  <entry>
    <title>Strong b em and i</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/strong-b-em-and-i</id>
    <content type="html">&lt;h1 id=&#34;strong-versus-b-versus-em-versus-i&#34; &gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;strong&gt;&lt;/code&gt; versus &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;b&gt;&lt;/code&gt; versus &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;em&gt;&lt;/code&gt; versus &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;i&gt;&lt;/code&gt;&lt;a href=&#34;#strong-versus-b-versus-em-versus-i&#34; aria-label=&#34;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;strong&gt;&lt;/code&gt; versus &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;b&gt;&lt;/code&gt; versus &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;em&gt;&lt;/code&gt; versus &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;i&gt;&lt;/code&gt; permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Here we are, at the doors of the great war of semantic inline elements. So who&#39;s right between &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;strong&gt;&lt;/code&gt; and &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;b&gt;&lt;/code&gt;? Who wins between &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;em&gt;&lt;/code&gt; and &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;i&gt;&lt;/code&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, they all win.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everyone is a winner excepts us the developers who have to implement this. Let&#39;s try to explain this strange situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine a website for a touristic area with a cliff:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;The &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;b&gt;&lt;/code&gt; tag is used to draw the reader&#39;s attention. So it should draw attention to the cliff: &#34;This wonderful area has a forest but also a &lt;b&gt;wonderful cliff&lt;/b&gt;&#34;.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;strong&gt;&lt;/code&gt; tag is to indicate the importance and seriousness of something. So it should warn people about the cliff: &#34;Please be careful near the cliff as &lt;strong&gt;there are no ramps to prevent you from falling and the winds are strong&lt;/strong&gt;&#34;.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;i&gt;&lt;/code&gt; tag is used to indicate that something is set off from the normal prose. For example it should be used for the foreign name of the cliff: &#34;This cliff name is &lt;i&gt;mh&#39;irr&#39;la&lt;/i&gt;&#34; or the thoughts of someone thinking about the cliff: &#34;&lt;i&gt;Is the cliff really in love with me or is it just a farce?&lt;/i&gt; thought Jonathan&#34;.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;em&gt;&lt;/code&gt; tag is used to stress something on the subject, almost as if you speak it aloud. So it should help denote something about the cliff: &#34;Ah yes, the &lt;em&gt;cliff&lt;/em&gt;, the one that is actually 2 meters tall&#34;.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I hope it makes sense. The sad reality is that no one writes prose in HTML, so you&#39;ll probably be stuck with whatever the &lt;abbr title=&#34;What you see is what you get&#34;&gt;wysiwyg&lt;/abbr&gt; editor or markup language parser of your choice decided to use. For example this page is written using &lt;a href=&#34;/kaku.html&#34; title=&#34;Go to Kaku page&#34; aria-label=&#34;Go to Kaku page&#34;&gt;Kaku&lt;/a&gt; who compiles to &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;strong&gt;&lt;/code&gt; and &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;em&gt;&lt;/code&gt; by default.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;other-kinda-useful-semantic-elements.html&#34;&gt;Other kinda useful semantic elements&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/strong-b-em-and-i" rel="self" type="text/html"></link>
    <summary type="html">What&#39;s the deal with strong, b, em and i in html? Which one I pick?</summary>
  </entry>
  <entry>
    <title>When to use a button and a link</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/when-to-use-a-button-and-a-link</id>
    <content type="html">&lt;h1 id=&#34;when-to-use-a-button-and-a-link&#34; &gt;When to use a button and a link&lt;a href=&#34;#when-to-use-a-button-and-a-link&#34; aria-label=&#34;When to use a button and a link permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;For most document type websites the question between links and buttons doesn&#39;t really exist. But in application type websites, it&#39;s often that developers don&#39;t pick the right one or that designers make links look like buttons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to make it clear:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;An &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;a&gt;&lt;/code&gt; is for a page change or a new tab. When changing page, a screen reader user will be automatically moved to the top of the page and will start reading it from there.&lt;/li&gt;&#xA;&lt;li&gt;A &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;button&gt;&lt;/code&gt; is for activating something like a modal or a form. Once pressed, even if things change in the page, it doesn&#39;t move a screen reader user somewhere else and it doesn&#39;t vocalize anything.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This difference of behavior is super important, especially in single page JavaScript web applications where urls are changed dynamically, but no page change is triggered in the browser! When such a thing happens, the developer has to manually move the focus of the screen reader user to the next point of interest inside the app and vocalize what happened and where the user is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do this, the developer has to use the &lt;code&gt;.focus()&lt;/code&gt; function in JavaScript. I&#39;m not 100% sure about how to vocalize the page change so I&#39;m not gonna give any advice on this. If you know good practices please &lt;a href=&#34;about.html&#34;&gt;contact me&lt;/a&gt; so I can update this part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One last thing: I don&#39;t care about your reasons, don&#39;t replace a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;button&gt;&lt;/code&gt; by a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;div&gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;strong-b-em-and-i.html&#34;&gt;The mess of strong b em and i&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/when-to-use-a-button-and-a-link" rel="self" type="text/html"></link>
    <summary type="html">Buttons and links are used for different things, here&#39;s an explanation</summary>
  </entry>
  <entry>
    <title>HTML interactive elements</title>
    <updated>2023-03-03T16:22:26Z</updated>
    <id>https://thomasorus.com/html-interactive-elements</id>
    <content type="html">&lt;h1 id=&#34;some-cool-html-interactive-elements&#34; &gt;Some cool HTML interactive elements&lt;a href=&#34;#some-cool-html-interactive-elements&#34; aria-label=&#34;Some cool HTML interactive elements permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;You might not know these but they can be super useful. Their main default is that they are sometimes hard to style properly.&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;details&gt;&lt;/code&gt; and &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;summary&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Allows you to make a kind of accordion box in pure HTML. By default closed but the &lt;code&gt;open&lt;/code&gt; attribute on &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;details&gt;&lt;/code&gt; can make it open.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;datalist&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Can be used as an input with a list of options auto-suggested by what the user is typing.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;progress&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;A progress with several attributes for showing progress. It&#39;s very hard to style correctly but you can have the same accessibility by using the &lt;code&gt;role=&#34;progressbar&lt;/code&gt; on a div.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Click me for a code demo&lt;/summary&gt;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/dio.jpg&#34; alt=&#34;You though it was code but it was me Dio! figcaption&#34;&gt;&lt;figcaption&gt;SURPRISE | &lt;small&gt;&lt;a href=&#34;/uploaded/dio.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;/details&gt;&#xA;&#xA;&lt;p&gt;A datalist can be useful but requires a full form, which is quite a lot of code:&lt;/p&gt;&#xA;&#xA;&lt;label for=&#34;jojolist&#34;&gt;Choose a Jojo character from this list:&lt;/label&gt;&lt;br&gt;&#xA;&lt;input list=&#34;jojo&#34; id=&#34;jojolist&#34; name=&#34;muchJojo&#34; /&gt;&#xA;&lt;datalist id=&#34;jojo&#34;&gt;&#xA;&lt;option value=&#34;Jonathan&#34;&gt;&#xA;&lt;option value=&#34;Joseph&#34;&gt;&#xA;&lt;option value=&#34;Jotaro&#34;&gt;&#xA;&lt;option value=&#34;Josuke&#34;&gt;&#xA;&lt;option value=&#34;DIO&#34;&gt;&#xA;&lt;/datalist&gt;&#xA;&#xA;&lt;p&gt;A progress bar using &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;progress&gt;&lt;/code&gt; has this look:&lt;/p&gt;&#xA;&#xA;&lt;progress aria-valuenow=&#34;20&#34; aria-valuemin=&#34;0&#34; aria-valuetext=&#34;Step 2: Copying files... &#34; aria-valuemax=&#34;100&#34; style=&#34;display:block; width:100%;&#34;&gt;20 %&lt;/progress&gt;&#xA;&#xA;&lt;p&gt;Use the `role=&#34;progressbar&#34; to style it more easily:&lt;/p&gt;&#xA;&#xA;&lt;div style=&#34;border:1px solid black&#34;&gt;&#xA;&lt;div role=&#34;progressbar&#34; aria-valuenow=&#34;20&#34; aria-valuemin=&#34;0&#34; aria-valuemax=&#34;100&#34; class=&#34;pattern-dots&#34; style=&#34;width:20%; text-align:center;&#34;&gt;20 %&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/html-interactive-elements" rel="self" type="text/html"></link>
    <summary type="html">Interactive HTML elements are like small native components that can help in some situations</summary>
  </entry>
  <entry>
    <title>Other kinda useful semantic elements</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/other-kinda-useful-semantic-elements</id>
    <content type="html">&lt;h1 id=&#34;other-kinda-useful-semantic-elements&#34; &gt;Other kinda useful semantic elements&lt;a href=&#34;#other-kinda-useful-semantic-elements&#34; aria-label=&#34;Other kinda useful semantic elements permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Below are elements often complicated to add if you use a CMS or a markup language like Markdown as they don&#39;t give syntactic shortcuts for most of them, so you have to write them by hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Favor these semantic elements when working for very specific projects where text cannot always convey all the meaning by itself. If you have a design system, incorporating them to specific components could probably increase their usage.&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;abbr&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Stands for abbreviation. Can be used for currencies for example.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;code&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;For code, obviously, often best used with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;pre&gt;&lt;/code&gt;.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;time&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;For time values of course.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;mark&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;To highlight some parts of your text.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;s&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Strikes the text to indicate it&#39;s no longer relevant. Don&#39;t confuse it with &lt;code&gt;strike&lt;/code&gt; who just strikes the text for... design?&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;del&gt;&lt;/code&gt; &amp; &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;ins&gt;&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;If you have an edit to make to a text and want to keep trace of the change &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;del&gt;&lt;/code&gt; and &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;ins&gt;&lt;/code&gt; are a good pick!&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;html-interactive-elements.html&#34;&gt;Some interactive elements that can be useful&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/other-kinda-useful-semantic-elements" rel="self" type="text/html"></link>
    <summary type="html">The HTML elements you probably don&#39;t know but that could be useful in some situations</summary>
  </entry>
  <entry>
    <title>Tables are not that complicated</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/tables-are-not-that-complicated</id>
    <content type="html">&lt;h1 id=&#34;tables-are-not-that-complicated&#34; &gt;Tables are not that complicated&lt;a href=&#34;#tables-are-not-that-complicated&#34; aria-label=&#34;Tables are not that complicated permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;There isn&#39;t a lot about tables that is not already well known. For accessibility you might want to be careful of a few things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;caption&gt;&lt;/code&gt; element should be added to all your tables as sort of title for this table. It will inform all users what the table is about: &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;caption&gt;I&#39;m a table title!&lt;span&gt;&lt;&lt;/span&gt;/caption&gt;&lt;/code&gt;. Use the &lt;code&gt;scope=&#34;col&#34;&lt;/code&gt; on your &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;th&gt;&lt;/code&gt; columns to explain to screen readers that the element is a the start of the column and &lt;code&gt;scope=&#34;row&#34;&lt;/code&gt; for the same &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;th&gt;&lt;/code&gt; elements that start rows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need to make more complicated tables accessible, try take examples in the MDN documentation on this &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Learn/HTML/Tables/Advanced&#34;&gt;page&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next: &lt;a href=&#34;make-your-links-clear-and-accessible.html&#34;&gt;Make your links clear and accessible&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/tables-are-not-that-complicated" rel="self" type="text/html"></link>
    <summary type="html">How to do accessible tables (it&#39;s not that complicated)</summary>
  </entry>
  <entry>
    <title>CSS tips</title>
    <updated>2022-01-01T23:39:42Z</updated>
    <id>https://thomasorus.com/css-tips</id>
    <content type="html">&lt;h1 id=&#34;css-tips&#34; &gt;CSS tips&lt;a href=&#34;#css-tips&#34; aria-label=&#34;CSS tips permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Performance is a hot topic as the website obesity crisis keeps going. In these pages I already explained a few things to improve performance, especially in the video and image pages. Still there are a few broader topics related to performance that we should talk about.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/css-tips" rel="self" type="text/html"></link>
    <summary type="html">A collection of CSS tips to build simple yet optimized websites</summary>
  </entry>
  <entry>
    <title>CSS good practices</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/css-good-practices</id>
    <content type="html">&lt;h1 id=&#34;css-good-practices&#34; &gt;CSS Good practices&lt;a href=&#34;#css-good-practices&#34; aria-label=&#34;CSS Good practices permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;In the past CSS had such limitations and was so badly understood by most developers that using frameworks or libraries was seen as the only way to get things working. &lt;a href=&#34;https://getbootstrap.com/&#34;&gt;Bootstrap&lt;/a&gt; was the king of CSS frameworks and with it came a ton of code that was most often not used at all. The only usable alternative was probably &lt;a href=&#34;https://get.foundation/&#34;&gt;Foundation&lt;/a&gt; or SASS libraries like &lt;a href=&#34;https://www.oddbird.net/susy/&#34;&gt;Susy&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fortunately today we have a lot of choice! We still have Bootstrap, but also lighter alternatives like &lt;a href=&#34;https://bulma.io/&#34;&gt;Bulma&lt;/a&gt; or totally different propositions like the utility first &lt;a href=&#34;https://tailwindcss.com/&#34;&gt;Tailwind&lt;/a&gt;. Also tools like &lt;a href=&#34;https://purgecss.com/&#34;&gt;Purge CSS&lt;/a&gt; can help reduce the size of CSS bundles by removing the unused parts of CSS frameworks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In reaction to fully equipped frameworks we&#39;ve also seen class-less CSS frameworks rising in popularity for a few years and they come with the promise of a small file size that correctly styles a website with only the HTML elements. That indeed sounds like a smart idea as it forces the developer to use &lt;a href=&#34;what-is-semantic-html.html&#34;&gt;semantic HTML&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you have to extend this kind of framework with your own design and don&#39;t want to use classes, you&#39;re going to create more troublesome code that you think.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;enters-specificity&#34; &gt;Enters specificity&lt;a href=&#34;#enters-specificity&#34; aria-label=&#34;Enters specificity permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity&#34;&gt;Specificity is the means by which browsers decide which CSS property values are the most relevant to an element and, therefore, will be applied. Specificity is based on the matching rules which are composed of different sorts of CSS selectors.&lt;/blockquote&gt;&lt;figcaption&gt;— MDN, &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity&#34;&gt;About specificity&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;So what are the more specific and less specific things you can meet in CSS? Here&#39;s a list from more to less specific:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;IDs&lt;/li&gt;&#xA;&lt;li&gt;Classes, attributes and pseudo classes&lt;/li&gt;&#xA;&lt;li&gt;Elements and pseudo elements&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Knowing this, some practices can create a lot more specificity than others. Among them, these are the worst:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Using IDs as they are single use.&lt;/li&gt;&#xA;&lt;li&gt;Nesting selectors, for example &lt;code&gt;.navigation .navigation-list&lt;/code&gt; doubles the specificity of the later and prevents it from working outside the former.&lt;/li&gt;&#xA;&lt;li&gt;Qualifying selectors, the action of sticking a class to a specific HTML element like &lt;code&gt;ul.navigation&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Specificity is why a lot of people hate CSS:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;It makes it hard to extend an existing code base if everything is super specific&lt;/li&gt;&#xA;&lt;li&gt;It can trigger repaints of existing elements, thus creating flashes when loading the website&lt;/li&gt;&#xA;&lt;li&gt;It makes the code super verbose and hard to maintain&lt;/li&gt;&#xA;&lt;li&gt;It creates code segments that can&#39;t be reused in another situation&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So as you can see, it&#39;s not just a technical thing but a good practice methodology to take specificity seriously.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;chain-elements-or-use-a-class&#34; &gt;Chain elements or use a class?&lt;a href=&#34;#chain-elements-or-use-a-class&#34; aria-label=&#34;Chain elements or use a class? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;To come back to our no-class CSS topic, we find ourselves in front of a dilemma.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let&#39;s say you want to add red to your links located in a list in the navigation of your website, using only HTML elements and no classes. It would look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;nav ul li a {&#xA;    color:red;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Since browsers read CSS from right to left, each time they meet a new element in this declaration, they have to re-compute the design. This is how the browser interprets this chain:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;&lt;em&gt;I style links to red&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Wait it&#39;s only links in lists that need red&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Crap, it was only links in lists in the navigation that need red&lt;/em&gt;&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Unless you have a terribly big CSS file that takes a lot of time to be parsed and triggers a lot of refresh, of course you will not see this happening. But this is still happening under the hood.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let&#39;s compare this to a simple utility class:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.redcolor {&#xA;    color:red;&#xA;}By default text is black and background is white&#xA;&lt;span&gt;&lt;&lt;/span&gt;a class=&#34;redcolor&#34;&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With this code, the browser only thinks &lt;em&gt;if I see a redcolor class, I add red&lt;/em&gt;. And that&#39;s it, no repaint, no problem. But here&#39;s the thing: &lt;strong&gt;chaining HTML elements is calculated as less specific than using a class&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So who is right and who is wrong? The browser is right, but ultimately, the no-class CSS is worse:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;It&#39;s more verbose&lt;/li&gt;&#xA;&lt;li&gt;It&#39;s harder to extend the existing code and will get even more verbose when doing so&lt;/li&gt;&#xA;&lt;li&gt;It can&#39;t be reused in another context since it&#39;s tied to specific parents&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So in the end, using class is a better idea. The no-class CSS methodology is good, but only works as a starter point for global elements.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;tips-and-tricks-for-your-css&#34; &gt;Tips and tricks for your CSS&lt;a href=&#34;#tips-and-tricks-for-your-css&#34; aria-label=&#34;Tips and tricks for your CSS permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;So in the end what should you do if you want to maintain small CSS file size and low specificity? Here are some rules that you can apply to almost every project:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Style HTML elements for broader usage. The moment you start chaining them means you need a class&lt;/li&gt;&#xA;&lt;li&gt;Never nest or qualify classes and instead, use a simple yet effective naming methodology like &lt;a href=&#34;http://getbem.com/introduction/&#34;&gt;BEM, Block Element Modifier&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Try to organize your CSS file with less specific elements at the top and ery specific elements at the bottom, which is often referred to the &lt;a href=&#34;https://www.xfive.co/blog/itcss-scalable-maintainable-css-architecture/&#34;&gt;Inverted Triangle&lt;/a&gt; methodology&lt;/li&gt;&#xA;&lt;li&gt;Using a methodology like BEM might help you think about your CSS classes as objects than can be reused and extended, a good practice called &lt;a href=&#34;https://www.smashingmagazine.com/2011/12/an-introduction-to-object-oriented-css-oocss/&#34;&gt;Object Oriented CSS&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You can check your specificity using this &lt;a href=&#34;https://specificity.keegan.st/&#34;&gt;specificity calculator&lt;/a&gt; and check if your file has his specific code in order (from less to more) using this specificity &lt;a href=&#34;https://jonassebastianohlsson.com/specificity-graph/&#34;&gt;graph generator&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By doing this your code will be lighter, easier to maintain, reusable and extendable like objects, and won&#39;t trigger repaints.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/css-good-practices" rel="self" type="text/html"></link>
    <summary type="html">CSS Good practices to optimize file size and specificity and not hate CSS</summary>
  </entry>
  <entry>
    <title>CSS methodologies</title>
    <updated>2022-03-13T19:07:40Z</updated>
    <id>https://thomasorus.com/css-methodologies</id>
    <content type="html">&lt;h1 id=&#34;a-short-history-of-css-methodologies&#34; &gt;A short history of CSS methodologies&lt;a href=&#34;#a-short-history-of-css-methodologies&#34; aria-label=&#34;A short history of CSS methodologies permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;What&#39;s interesting about CSS is how much people tend to love it or despise it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most often than not, it has to do with the cascade and the way to either use it or not use it. As a CSS file is read from top to bottom, the actual placement of the code inside the file is important. But the most terrible thing for &lt;em&gt;classic&lt;/em&gt; developers is that CSS is global and declarations are not variables and won&#39;t trigger an error if you reuse them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This simple thing has been the source of discussion about how to better write CSS. In this article, we&#39;ll see how various people took different approaches to organize their code bases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But first, let&#39;s explain quickly what is the cascade.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-cascade&#34; &gt;The cascade&lt;a href=&#34;#the-cascade&#34; aria-label=&#34;The cascade permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote &gt;The cascade is an algorithm that defines how to combine property values originating from different&lt;/blockquote&gt;&lt;figcaption&gt;MDN Docs&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;What happens if we declare the same thing two times, but with different properties?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here&#39;s a button:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.button {&#xA; border:1px solid red;&#xA;}&#xA;/.../&#xA;.button {&#xA; border:1px solid blue;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this example, the border&#39;s button will be blue, as the latest declaration overwrites the previous one. But it&#39;s not the name of the declaration that&#39;s getting overwritten, it&#39;s the properties located inside.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, more precisely, if the cascade finds declarations with the same name, it will regroup its the properties together. And if two properties are the same, then the last one wins.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.button {&#xA; width: 30px;&#xA; border:1px solid red;&#xA;}&#xA;/.../&#xA;.button {&#xA; border:1px solid blue;&#xA; color:red;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this case, the &lt;code&gt;border&lt;/code&gt;, &lt;code&gt;width&lt;/code&gt; and &lt;code&gt;color&lt;/code&gt; properties will be grouped together in a single &lt;code&gt;.button&lt;/code&gt; class. It will have a blue border.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;separation-of-concerns-and-semantics&#34; &gt;Separation of concerns and semantics&lt;a href=&#34;#separation-of-concerns-and-semantics&#34; aria-label=&#34;Separation of concerns and semantics permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Of course CSS is nothing without HTML.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For years the rule about organizing them was to respect the &lt;em&gt;separation of concern&lt;/em&gt;. HTML is for structure and CSS is for styles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example using an &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h3&gt;&lt;/code&gt; tag instead of an &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h1&gt;&lt;/code&gt; just because the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h3&gt;&lt;/code&gt; is smaller is bad practice. Using CSS to style the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h1&gt;&lt;/code&gt; to the size needed is good practice. This way, even if the &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h3&gt;&lt;/code&gt; is replaced with a proper &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;h1&gt;&lt;/code&gt;, the style won&#39;t change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If an existing website needs a redesign without touching the HTML, it&#39;s also possible. That&#39;s what the famous &lt;a href=&#34;https://www.csszengarden.com/&#34;&gt;CSS Zen Garden&lt;/a&gt; website, which has several designs with the same HTML, popularized in 2003.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It makes sense, but how do you &lt;em&gt;name&lt;/em&gt; these styles?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That&#39;s where the &lt;em&gt;semantic&lt;/em&gt; part comes in. Classes should name based on their purpose and not on their properties. In the previous example, naming the title &lt;code&gt;.main-title&lt;/code&gt; could work, but naming it &lt;code&gt;.title1&lt;/code&gt; or &lt;code&gt;.size-30&lt;/code&gt; won&#39;t. The first one implies that this title is the first one in the page. The second one does not tell us where this class is supposed to be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today the separation of concern and the semantic naming are often challenged. Some projects moved to JavaScript components where each one contains both its scoped HTML and CSS in the same file. The cascade is not a problem anymore and the global styles either. But this component approach is still less used than classic templates, and has its own issues that we will discuss later.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;semantic-and-structure&#34; &gt;Semantic and structure&lt;a href=&#34;#semantic-and-structure&#34; aria-label=&#34;Semantic and structure permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Now let&#39;s say you start a menu and name it &lt;code&gt;.menu&lt;/code&gt;. It has no indication of style or structure, it just says what it is: a menu. It can be used at the top, the bottom, on the side... It&#39;s reusable! Or is it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, it depends.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let&#39;s say our menu contains a sub menu with a button inside. Our CSS might look like that:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.menu {&#xA; color: black;&#xA;}&#xA;.menu .submenu {&#xA; border:1px solid blue;&#xA;}&#xA;.menu .submenu button {&#xA; color:red;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This code has two major problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, even with a semantic name on the parent component, the inner elements are not semantic. Worse, they are &lt;em&gt;nested&lt;/em&gt;. Which means that if we move the &lt;code&gt;button&lt;/code&gt; outside of the &lt;code&gt;.submenu&lt;/code&gt;, the &lt;code&gt;button&lt;/code&gt; will lose its red color. &lt;strong&gt;If the HTML moves, the CSS breaks&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other problem is related to the first one. If you need a &lt;code&gt;button&lt;/code&gt; with the same style outside of this context, you are out of luck and need to create another context. And if you don&#39;t have another context, then you need to create an entirely new button.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suddenly it&#39;s a mess, and that&#39;s just for a button.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;object-oriented-css&#34; &gt;Object Oriented CSS&lt;a href=&#34;#object-oriented-css&#34; aria-label=&#34;Object Oriented CSS permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;So of course, nature found a way. Well, Nicole Sullivan found a way. In 2009 she presented the &lt;a href=&#34;https://web.archive.org/web/20090729112249/https://oocss.org/&#34;&gt;Object Oriented CSS&lt;/a&gt; methodology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Object Oriented CSS or &lt;em&gt;OOCSS&lt;/em&gt; ditches the contextual approach of doing CSS (as showed in the previous example) by considering that the way HTML is structured will change and should not have any influence on the style.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To keep our menu example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.menu {&#xA; color: black;&#xA;}&#xA;.submenu {&#xA; border:1px solid blue;&#xA;}&#xA;.red-button {&#xA; color:red;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Each HTML element that needs style should have its own class. This way, no matter the context, they will always have the same style.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there&#39;s still a problem: all this code lacks organization. If you happen to work on an aging website, it could happen that the CSS file grow a lot and that everything new is written at the end of it.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;smacss&#34; &gt;SMACSS&lt;a href=&#34;#smacss&#34; aria-label=&#34;SMACSS permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;So in 2011 Jonathan Snook released the book &lt;a href=&#34;https://web.archive.org/web/20201031072427/https://smacss.com/&#34;&gt;Scalable and Modular Architecture for CSS&lt;/a&gt;. It works by organizing the different CSS declarations by logical use in 5 categories, thus fixing the problem with the OOCSS approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The categories are:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Base&lt;/dt&gt;&lt;dd&gt;The rules that sets the default CSS properties of HTML elements like &lt;code&gt;a&lt;/code&gt; or &lt;code&gt;button&lt;/code&gt;.&lt;/dd&gt;&lt;dt&gt;Layout&lt;/dt&gt;&lt;dd&gt;The classes that define the layouts of pages. The containers, the grids, all those things that organize others elements. Prefixed with &lt;code&gt;l-&lt;/code&gt; or &lt;code&gt;layout-&lt;/code&gt;.&lt;/dd&gt;&lt;dt&gt;Modules&lt;/dt&gt;&lt;dd&gt;The reusable objects of OOCSS.&lt;/dd&gt;&lt;dt&gt;State&lt;/dt&gt;&lt;dd&gt;Utility classes dedicated to Modules, used to modify the design of an object if its state changes.&lt;/dd&gt;&lt;dt&gt;Themes&lt;/dt&gt;&lt;dd&gt;Utility classes that change the design of Layout and Modules based on the choice of the user or the context, for example dark mode.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;SMACSS does not seem to be used that much today, but its influence is still there. It was a precursor that paved the way to other methodologies that improved its initial proposal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But from there another problem emerged.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;naming-conventions&#34; &gt;Naming conventions&lt;a href=&#34;#naming-conventions&#34; aria-label=&#34;Naming conventions permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;SMACSS gave guidelines from a &lt;em&gt;macro&lt;/em&gt; level perspective, but kept using HTML selectors inside it&#39;s modules. Which means that if something was moved or changed inside of them, the HTML kept breaking the CSS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution? More classes for the children of modules of course. But how to name them? Naming in programming is always a problem as it&#39;s too often very opinionated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So naming conventions were created to ease the readability and discovery of code. There were various naming conventions coming out around 2013. Among them &lt;a href=&#34;https://suitcss.github.io/&#34;&gt;SUITCSS&lt;/a&gt; was one of the most popular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the one that really saw mass adoption was &lt;a href=&#34;https://getbem.com/&#34;&gt;BEM&lt;/a&gt;. It was created around 2015 by Vsevolod Strukchinsky and Vladimir Starkov. In it&#39;s basic form it works this way:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;strong&gt;B&lt;/strong&gt;locks&lt;/dt&gt;&lt;dd&gt;the base of the &lt;em&gt;object&lt;/em&gt; we are working on. More often than not, the &lt;em&gt;context provider&lt;/em&gt;.&lt;/dd&gt;&lt;dt&gt;&lt;strong&gt;E&lt;/strong&gt;lements&lt;/dt&gt;&lt;dd&gt;the elements &lt;em&gt;inside&lt;/em&gt; the block. They are designated using the double underscore &lt;code&gt;__&lt;/code&gt;.&lt;/dd&gt;&lt;dt&gt;&lt;strong&gt;M&lt;/strong&gt;odifiers&lt;/dt&gt;&lt;dd&gt;the modified versions of an existing &lt;em&gt;object&lt;/em&gt;. They are designated using the double dash &lt;code&gt;--&lt;/code&gt;.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.menu {&#xA; color:black;&#xA;}&#xA;.menu__item {&#xA; height:10px;&#xA;}&#xA;.menu--open {&#xA; color:blue;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;From a naming perspective the benefits are obvious. You can name several inner elements the same, they will still be understood as different and won&#39;t bother each other, for example &lt;code&gt;.menu__item&lt;/code&gt; and &lt;code&gt;.footer__item&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if the HTML is moved around the class will still work. The cascade and the context are almost irrelevant here. A developer joining a project can also quickly understand the codebase and add its own modifications without touching the existing rules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, BEM detractors often use the example of too much nesting to say BEM does not work. For example, if we had something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;div class=&#34;container&#34;&gt;&#xA; &lt;span&gt;&lt;&lt;/span&gt;span class=&#34;container__subtext&#34;&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;button class=&#34;container__subtext__button container__subtext__button--blue&#34;&gt;Nested button&lt;span&gt;&lt;&lt;/span&gt;/button&gt;&#xA; &lt;span&gt;&lt;&lt;/span&gt;/span&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/div&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When something like this happens, it means the whole object is too big and should be restructured. Instead of multiplying the &lt;em&gt;elements&lt;/em&gt;, multiply the &lt;em&gt;blocks&lt;/em&gt; by dividing them. &lt;strong&gt;You should never have more than one &lt;code&gt;__&lt;/code&gt; or &lt;code&gt;--&lt;/code&gt; inside your class names.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it looks like everything is good! The macro level is handled by methodologies like SMACSS and the micro level by naming methodologies like BEM. There shouldn&#39;t be any more problems right? &lt;em&gt;Right?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;itcss-and-the-specificity-war&#34; &gt;ITCSS and the specificity war&lt;a href=&#34;#itcss-and-the-specificity-war&#34; aria-label=&#34;ITCSS and the specificity war permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Well yes, there were more problems, mostly performance problems. The beginning of the 2010 saw the arrival of responsive design, HTML5 and CSS3! And most often than not, the directives were to add the new responsive CSS at the end of existing files instead of redoing everything from scratch. So more code bloat! Bigger files! And also tons of ugly repaints of the dom as soon as the browser parsed the CSS!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To deal with this, Harry Roberts came up with &lt;a href=&#34;https://www.youtube.com/watch?v=1OKZOV-iLj4&#34;&gt;ITCSS&lt;/a&gt; around 2014. It means &lt;em&gt;Inverted Triangle CSS&lt;/em&gt;. It is, as SMACSS, a methodology based on organizing code in different categories. But where SMACSS does it purely from a logical point of view, ITCSS is focusing on reducing &lt;a href=&#34;css-good-practices.html&#34; title=&#34;Read about specificity in CSS&#34; aria-label=&#34;Read about specificity in CSS&#34;&gt;specificity&lt;/a&gt; in order to limit repaints and ease the rendering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The three elementary rules are :&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Go from global to localized (&lt;code&gt;*&lt;/code&gt; should be before &lt;code&gt;.button&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Go from general use the explicit use (style resets should be before classes)&lt;/li&gt;&#xA;&lt;li&gt;Go from less specific to more specific (lighter specific selectors like &lt;code&gt;h1&lt;/code&gt; before heavy selectors like &lt;code&gt;!important&lt;/code&gt;)&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Which means the placement of CSS inside the file matters! Here&#39;s ITCSS code organization, from top to bottom of the file:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Settings&lt;/dt&gt;&lt;dd&gt;Should contain all the variables and global configurations of the project as it will affect everything.&lt;/dd&gt;&lt;dt&gt;Tools&lt;/dt&gt;&lt;dd&gt;Mixins, helpers and functions go there and can use the settings.&lt;/dd&gt;&lt;dt&gt;Generic&lt;/dt&gt;&lt;dd&gt;Low level style rules like resets or box-sizing should go there as they are the primer coat of CSS.&lt;/dd&gt;&lt;dt&gt;Base&lt;/dt&gt;&lt;dd&gt;Styles without classes for HTML elements like &lt;code&gt;h1&lt;/code&gt;, &lt;code&gt;a&lt;/code&gt;. The default style.&lt;/dd&gt;&lt;dt&gt;Objects&lt;/dt&gt;&lt;dd&gt;Structural non-themed elements that wrap components. Things like grids, containers, list positions.&lt;/dd&gt;&lt;dt&gt;Components&lt;/dt&gt;&lt;dd&gt;Your classic classes like &lt;code&gt;.button-red&lt;/code&gt;. It&#39;s of course possible to use BEM to organize their inner code.&lt;/dd&gt;&lt;dt&gt;Trumps&lt;/dt&gt;&lt;dd&gt;Helpers as utility classes for surcharges and exceptions.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Most of the time these categories are in their own files that are then imported in this specific order using SASS. This way when the browser reads the compiled file, he treats the rules from the less specific to the more specific.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ITCSS had a huge influence on CSS makers as it&#39;s easy to adapt to each project&#39;s needs, it works for projects of all sizes and scales particularly well. The drawback is probably the requirements to understand how everything is organized and why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So are we finally good? Is it finally over and CSS is ok? You bet it&#39;s not.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-rise-of-css-in-javascript&#34; &gt;The rise of CSS in JavaScript&lt;a href=&#34;#the-rise-of-css-in-javascript&#34; aria-label=&#34;The rise of CSS in JavaScript permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Around 2010 Google released &lt;a href=&#34;https://angularjs.org/&#34;&gt;AngularJS&lt;/a&gt;, opening the door to the rise of JavaScript components frameworks. It was followed by Angular2, React, Vue and many others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many JavaScript developers who probably never understood stylesheets saw this as the opportunity to &lt;em&gt;fix it&lt;/em&gt; by adding scoped HTML and CSS inside their components, thus disabling the cascade, the need for semantic naming and the global nature of CSS. Suddenly the separation of concerns was no more. The semantics were gone. You would not ship any CSS files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This evolution was sudden and &lt;em&gt;brutal&lt;/em&gt;. The benefits were real, but it&#39;s important to note that some ideas about how to write CSS inside JavaScript were absolutely &lt;em&gt;bollocks&lt;/em&gt;. For example React inline styles still use a JavaScript object that does not accept &lt;code&gt;-&lt;/code&gt;, forcing developers to write CSS in Camel Case (&lt;em&gt;what the hell?!&lt;/em&gt;) and declare values as strings.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;var divStyle = {&#xA; color: &#39;white&#39;,&#xA; backgroundImage: &#39;url(&#39; + imgUrl + &#39;)&#39;,&#xA; WebkitTransition: &#39;all&#39;,&#xA; msTransition: &#39;all&#39;&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Fortunately, the field evolved very fast, allowing to import CSS files, write normal CSS inside components, choose if the style is scoped or not, and many little things that made it quite useful. But one problem started to appear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those Javascript frameworks are used in the browser and render in real time what is needed. By adding the style inside the components, the browser is forced, using JavaScript, to re-render the same things a lot of time, resulting in longer loading times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s not a problem when used in a true application. Something used in an office with good computers and unlimited battery for example. But when the JavaScript takes too much time to render its components, public websites see their SEO deteriorate. Also, how do you treat global styles?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the idea of compiling the CSS in its own file came back again. It allows the browser to cache it provides better performance. But how do you keep the non-semantic, cascade free, scoped aspect of CSS in JavaScript if you write CSS into another file?&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;utility-first-css&#34; &gt;Utility First CSS&lt;a href=&#34;#utility-first-css&#34; aria-label=&#34;Utility First CSS permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You might see the OOCSS methodology and the CSS in JavaScript component approach and ask yourself this question: why not create classes who&#39;s only purpose is to set as single property? For example the color of the button? Or the color of the border ?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.red {&#xA;    color:red;&#xA;}&#xA;.border-blue {&#xA;    border-color:blue;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The first problem of a full utility class approach is the bloat in the html. If you need 6 properties to achieve your design, you need 6 classes inside your HTML:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;button class=&#34;red border-blue another-class another-one another-one-again omg-its-not-ending&#34;&gt;A lot of classes&lt;span&gt;&lt;&lt;/span&gt;/button&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The second problem is the incredible number of classes that would be needed to make it work in a truly agnostic way!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s one class per property multiplied by the number of design tokens (colors, sizes, etc). It simply can&#39;t be done by hand. This is why utility classes are often used for recurring and simple manipulations to avoid using an element in BEM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That&#39;s the reason why utility first approaches can&#39;t be done with just a CSS file and need JavaScript in order to create classes programmatically. Knowing this, it&#39;s not surprising that most utility first CSS frameworks gained popularity when compiling tools like Grunt, Gulp, Webpack or Parcel got more popular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But even if you can programmatically create your classes, the problem persists: how do you deal with the bloat?&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;tailwind-css&#34; &gt;Tailwind CSS&lt;a href=&#34;#tailwind-css&#34; aria-label=&#34;Tailwind CSS permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&#34;https://tailwindcss.com&#34;&gt;Tailwind CSS&lt;/a&gt; framework was created around 2017 by Adam Wathan. He decided to pursuit a utility first journey after realizing that he was using more and more utility classes instead of declaring inner elements using the BEM methodology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He also felt that the semantic part was giving developers too much freedom and took too much time to refactor. He famously said that &lt;em&gt;“Best practices” don’t actually work&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tailwind&#39;s solution is to flip the BEM + Utility First formula. Write using utility classes first, then use a semantic approach when needed. It&#39;s only if the utility first declarations tend to be repeated to often, or if the HTML is bloated with classes, that an abstraction should be created.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wathan gives the example of a navigation bar, an element that is only used once, rarely modified, that might not deserve its own semantic class. On the opposite side, a button often comes in several sizes and styles and would work well with a &lt;code&gt;.button&lt;/code&gt; class with a neutral design and a few utility first calsses to add theming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since utility first classes are pre-generated and immutable by nature, a developer without access to the CSS file can still produce styled pages or components. but can&#39;t add CSS bloat to the project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Classes are determined programmatically inside a JavaScript config file and created when compiled. Templates and components are scanned and unused classes are removed from the final CSS file, therefor shipping a smaller file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This approach can actually work with both traditional template files or component based projects, which explains why Tailwind has been getting more popular this past years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And &lt;em&gt;of course&lt;/em&gt; it&#39;s a controversial approach. Not everyone that already knows CSS is ready to learn a CSS API to get a design done. Doing Tailwind when design tokens like colors, fonts or sizes are well defined is easy, but going with the flow means either using the default config file (nice for prototyping) or going back and forth between the HTML and the config file to add design tokens. As Tailwind uses NPM and several other tools such as PostCSS and PurgeCSS, it also means more configuration, more maintenance and a brittle configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to &lt;em&gt;fix&lt;/em&gt; the naming, cascade and global &lt;em&gt;problems&lt;/em&gt; of CSS, Tailwind choose to displace the organizational complexity of CSS inside configuration files and APIs. It&#39;s a way of thinking that is very different from traditionnal CSS development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what if trying to &lt;em&gt;fix&lt;/em&gt; the cascade with more classes, more utilities was actually a dead end?&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;cube-css&#34; &gt;Cube CSS&lt;a href=&#34;#cube-css&#34; aria-label=&#34;Cube CSS permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;Composition, Utility, Block, Exception&lt;/em&gt; or &lt;a href=&#34;https://cube.fyi/&#34;&gt;CUBE CSS&lt;/a&gt; methodology was created in 2019 by Andy Bell. It&#39;s a different approach than the previous methodologies as it&#39;s trying to see CSS more on a macro level than a micro level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most importantly, it tries to reunite with the cascade instead of trying to make it disappear. Overall the goal is to write CSS that makes the right choices by itself instead of micro-coding every aspect of it. This is called &lt;a href=&#34;https://www.zeldman.com/2018/05/02/transcript-intrinsic-web-design-with-jen-simmons-the-big-web-show/&#34;&gt;intrisic webdesign&lt;/a&gt;, a term invented by Jen Simmons in 2018.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you remember correctly at the start of the article we talked about how OOCSS tried to part ways with the parent class and its HTML child elements, as moving them could break CSS. More classes were added in a top to bottom approach to organize the code and make CSS detached from HTML. But an approach like BEM makes you think about objects in &lt;em&gt;isolation&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The multiplication of viewports and contexts in which CSS has to work leave developers with two choices: either going more deep inside the objects to micro-manage things like responsive design, or take a step back to try to establish a set of rules and trust the browser into making the right choice. The latest actually already exist: with things like &lt;code&gt;flexbox&lt;/code&gt;, the developer establishes a set of behaviors and let the browser decide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CUBE CSS tries to take this approach to a new level by making traditionnal OOCSS or BEM the last step in the development of an interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the steps and details about them:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Composition&lt;/dt&gt;&lt;dd&gt;Composition classes are used to create layouts, flow and consistent rhythm to any parent of elements. They set behavior rules only and are design agnostic.&lt;/dd&gt;&lt;dt&gt;Utility&lt;/dt&gt;&lt;dd&gt;A set of utility classes that do a single thing well. They are used to apply single or near single properties. They are also used to declare design tokens like colors or sizes. Their goal is the same as the utility classes used with BEM to avoid creating elements, but they come first.&lt;/dd&gt;&lt;dt&gt;Blocks&lt;/dt&gt;&lt;dd&gt;The classic block approach inherited from OOCSS and BEM. Those classes should only add the missing CSS rules that Composition and Utility classes did not applied. It can be done with BEM, with single classes or even using HTML selectors.&lt;/dd&gt;&lt;dt&gt;Exception&lt;/dt&gt;&lt;dd&gt;A modification of existing classes to change the rules set inside Blocks. CUBE CSS uses data attributes for its exceptions. Since exceptions are events often triggered by JavaScript, it&#39;s simplier to change the data-attribute and having the CSS react immediately than inserting a class. Also it avoids creating a specific class for the exception.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Let&#39;s look at an example of a composition class:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.flow &gt; * + * {&#xA; margin-top: 10px;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This &lt;code&gt;.flow&lt;/code&gt; class has a single purpose. It detects &lt;em&gt;any&lt;/em&gt; child element right under the parent and add a top margin of 10px only between two elements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more traditionnal OOCSS with BEM approach would be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.flow {&#xA; \...\&#xA;}&#xA;.flow__item {&#xA; margin-top:10px;&#xA;}&#xA;.flow__item:first-child() {&#xA; margin-top:0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But those two approaches are not exclusive, &lt;strong&gt;because of the cascade&lt;/strong&gt;. It&#39;s perfectly possible to manage the flow outside of the blocks or components while adding customization to them, thus the &lt;em&gt;Block&lt;/em&gt; of CUBE CSS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to how organize the code, Andy Bell suggest this order:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Config files&lt;/li&gt;&#xA;&lt;li&gt;Design tokens classes&lt;/li&gt;&#xA;&lt;li&gt;Resets&lt;/li&gt;&#xA;&lt;li&gt;Global styles for HTML elements&lt;/li&gt;&#xA;&lt;li&gt;Utility classes for Composition and Utility&lt;/li&gt;&#xA;&lt;li&gt;Block classes&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This organization is also good for specificity. The more specific and nested code is located inside the Block classes, that are served at the end of the file. It will avoid creating repaints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Andy Bell also suggests &lt;a href=&#34;https://cube.fyi/grouping/&#34;&gt;regrouping classes in HTML&lt;/a&gt; using separators that the browser ignores like &lt;code&gt;[&lt;/code&gt; or &lt;code&gt;|&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Using [ ]&#xA;&lt;span&gt;&lt;&lt;/span&gt;div&#xA; class=&#34;[ card ] [ section box ] [ bg-base color-primary ]&#34;&#xA; data-state=&#34;reversed&#34;&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/div&gt;&#xA;// Using |&#xA;&lt;span&gt;&lt;&lt;/span&gt;div&#xA; class=&#34;card | section box | bg-base color-primary&#34;&#xA; data-state=&#34;reversed&#34;&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/div&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The order he designed follows this pattern:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;The elements’s primary block class (here it&#39;s &lt;code&gt;card&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Any subsequent block classes (&lt;code&gt;section&lt;/code&gt; and &lt;code&gt;box&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Standard utility classes (&lt;code&gt;bg-base&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Design token utility classes (&lt;code&gt;color-primary&lt;/code&gt;)&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This way it&#39;s easier to know how the code is organized.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;conclusion&#34; &gt;Conclusion&lt;a href=&#34;#conclusion&#34; aria-label=&#34;Conclusion permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;That&#39;s all!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This short history wasn&#39;t short in the end. I hope you found it useful. Feel free to contact me if you find any error or mistake or simply want to discuss this topic.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/css-methodologies" rel="self" type="text/html"></link>
    <summary type="html">CSS methodologies</summary>
  </entry>
  <entry>
    <title>Basic forms styling</title>
    <updated>2022-04-16T22:23:30Z</updated>
    <id>https://thomasorus.com/basic-forms-styling</id>
    <content type="html">&lt;h1 id=&#34;basic-forms-styling-in-50-lines-of-css&#34; &gt;Basic forms styling in 50 lines of CSS&lt;a href=&#34;#basic-forms-styling-in-50-lines-of-css&#34; aria-label=&#34;Basic forms styling in 50 lines of CSS permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Styling forms can be cumbersome and can take a lot of time. Of course each person will have its preferences about how it should look and how it should behave. But what if we could have a common base in a few lines of code? One that would allow use to make forms usable even without design? This is what this page is about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note: the code excerpts and visual demos in this page may have different code than what is written.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;basics-of-forms&#34; &gt;Basics of forms&lt;a href=&#34;#basics-of-forms&#34; aria-label=&#34;Basics of forms permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve detailed in my &lt;a href=&#34;doing-forms-correctly.html&#34;&gt;doing forms&lt;/a&gt; HTML page what elements are required when doing forms. If you haven&#39;t I suggest you read it before pursuing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put it quickly:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Everything must be inside a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;form&gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;You can group your inputs in &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;fieldset&gt;&lt;/code&gt; and name those groups with &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;legend&gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Each input must have a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;label&gt;&lt;/code&gt; referencing its &lt;code&gt;input&lt;/code&gt; with an &lt;code&gt;id&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Error or information texts for each input can be placed where you want, but must have an ID and be referenced with the &lt;code&gt;aria-describedby&lt;/code&gt; attribute.&lt;/li&gt;&#xA;&lt;li&gt;If an input is invalid, the input must have an &lt;code&gt;aria-invalid&lt;/code&gt; attribute.&lt;/li&gt;&#xA;&lt;li&gt;Validate forms by using a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;button&gt;&lt;/code&gt;, even if you use JavaScript validation.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So a correct form code should look like this. I position the information text below the label, and the error message below the input as it provides a good user experience for most people.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;form&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;fieldset&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;legend&gt;My group&lt;span&gt;&lt;&lt;/span&gt;/legend&gt;&#xA;    &amp;nbsp;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;label for=&#34;input1&#34;&gt;Text label&lt;span&gt;&lt;&lt;/span&gt;/label&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;span id=&#34;input1desc&#34;&gt;Description text&lt;span&gt;&lt;&lt;/span&gt;/span&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;input id=&#34;input1&#34; type=&#34;text&#34; aria-describedby=&#34;input1desc input1err&#34; aria-invalid&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;span id=&#34;input1err&#34;&gt;Error text&lt;span&gt;&lt;&lt;/span&gt;/span&gt;&#xA;    &amp;nbsp;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;label for=&#34;input2&#34;&gt;Text label&lt;span&gt;&lt;&lt;/span&gt;/label&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;span id=&#34;input2desc&#34;&gt;Description text&lt;span&gt;&lt;&lt;/span&gt;/span&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;input id=&#34;input2&#34; type=&#34;text&#34; aria-describedby=&#34;input2desc input2err&#34; aria-invalid&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;span id=&#34;input2err&#34;&gt;Error text&lt;span&gt;&lt;&lt;/span&gt;/span&gt;&#xA;    &amp;nbsp;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;/fieldset&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;button&gt;Validate form&lt;span&gt;&lt;&lt;/span&gt;/button&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/form&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And it should visually look like this without any styling:&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;form-demo&#34; aria-label=&#34;This is a demo only for visual purposes. The other ones in this page are hidden.&#34;&gt;&#xA;&lt;form&gt;&#xA;&lt;fieldset&gt;&#xA;&lt;legend&gt;My group&lt;/legend&gt;&#xA;&lt;label for=&#34;input1&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input1desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input id=&#34;input1&#34; type=&#34;text&#34; aria-describedby=&#34;input1desc input1err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input1err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;label for=&#34;input2&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input2desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input id=&#34;input2&#34; type=&#34;text&#34; aria-describedby=&#34;input2desc input2err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input2err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;/fieldset&gt;&#xA;&lt;button&gt;Validate form&lt;/button&gt;&#xA;&lt;/form&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;And the result will be:&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;form-demo form-demo-block form-demo-spacing form-demo-reduced form-demo-text form-demo-err form-demo-err-block&#34; aria-hidden=&#34;true&#34;&gt;&#xA;&lt;form&gt;&#xA;&lt;fieldset&gt;&#xA;&lt;legend&gt;My group&lt;/legend&gt;&#xA;&lt;label for=&#34;input1&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input1desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input data-size=&#34;30&#34; id=&#34;input1&#34; type=&#34;text&#34; aria-describedby=&#34;input1desc input1err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input1err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;label for=&#34;input2&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input2desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input data-size=&#34;10&#34; id=&#34;input2&#34; type=&#34;text&#34; aria-describedby=&#34;input2desc input2err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input2err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;/fieldset&gt;&#xA;&lt;button&gt;Validate form&lt;/button&gt;&#xA;&lt;/form&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;the-code&#34; &gt;The code&lt;a href=&#34;#the-code&#34; aria-label=&#34;The code permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Below is the full code for styling forms the lazy way while respecting the markup specified above. See below for a full explanation of what does what.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;form * {&#xA;  display: block;&#xA;}&#xA;&amp;nbsp;&#xA;form &gt; * + *,&#xA;fieldset &gt; * + * {&#xA;  margin-top: 1em;&#xA;}&#xA;&amp;nbsp;&#xA;label ~ span,&#xA;label ~ input,&#xA;label ~ select {&#xA;  margin-top: 0.25em;&#xA;}&#xA;&amp;nbsp;&#xA;label ~ span {&#xA;  color: #555;&#xA;  font-style: italic;&#xA;}&#xA;&amp;nbsp;&#xA;input + span,&#xA;select + span {&#xA;  color: red;&#xA;  display: none;&#xA;}&#xA;&amp;nbsp;&#xA;[aria-invalid] + span {&#xA;  display: block;&#xA;}&#xA;&amp;nbsp;&#xA;[data-size] {&#xA;  width: 100%;&#xA;}&#xA;&amp;nbsp;&#xA;[data-size=&#34;30&#34;] {&#xA;  max-width: 30ch;&#xA;}&#xA;&amp;nbsp;&#xA;[data-size=&#34;10&#34;] {&#xA;  max-width: 10ch;&#xA;}&#xA;&amp;nbsp;&#xA;[type=&#34;checkbox&#34;],&#xA;[type=&#34;radio&#34;],&#xA;[type=&#34;checkbox&#34;] ~ label,&#xA;[type=&#34;radio&#34;] ~ label {&#xA;  display: inline;&#xA;}&#xA;&amp;nbsp;&#xA;button,&#xA;[type=&#34;button&#34;],&#xA;[type=&#34;submit&#34;],&#xA;[type=&#34;reset&#34;] {&#xA;  all: unset;&#xA;  font-size: 1em;&#xA;  border: 1px solid currentColor;&#xA;  padding: 10px;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3 id=&#34;code-explanation&#34; &gt;Code explanation&lt;a href=&#34;#code-explanation&#34; aria-label=&#34;Code explanation permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The first problem to fix is the vertical flow. You want each combination of label, input, information text and error message to be visually distinct from each others. To do this most people group everything into a &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;div&gt;&lt;/code&gt; but you can actually do it in a leaner way by using styling from the parent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First we transform all children elements of the form into block elements so they stack upon each other. It has been studied that stacking form elements provides a better user experience. It also makes less work for us.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;form * {&#xA;  display: block;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;div class=&#34;form-demo form-demo-block&#34; aria-hidden=&#34;true&#34;&gt;&#xA;&lt;form&gt;&#xA;&lt;fieldset&gt;&#xA;&lt;legend&gt;My group&lt;/legend&gt;&#xA;&lt;label for=&#34;input1&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input1desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input id=&#34;input1&#34; type=&#34;text&#34; aria-describedby=&#34;input1desc input1err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input1err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;label for=&#34;input2&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input2desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input id=&#34;input2&#34; type=&#34;text&#34; aria-describedby=&#34;input2desc input2err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input2err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;/fieldset&gt;&#xA;&lt;button&gt;Validate form&lt;/button&gt;&#xA;&lt;/form&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Next we need to give spacings to our form elements and more importantly, we want to give them the same spacing independently of what they are or how they are organized. To do this, we use the &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/Adjacent_sibling_combinator&#34;&gt;adjacent sibling combinator&lt;/a&gt; to detect if any element (&lt;code&gt;*&lt;/code&gt;) as any adjacent sibling an if it has one, we add a margin top (you may have heard about this as the &lt;a href=&#34;https://alistapart.com/article/axiomatic-css-and-lobotomized-owls/&#34;&gt;lobotomized owl&lt;/a&gt; technique).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;form &gt; * + *,&#xA;fieldset &gt; * + * {&#xA;  margin-top: 1em;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;div class=&#34;form-demo form-demo-block form-demo-spacing&#34; aria-hidden=&#34;true&#34;&gt;&#xA;&lt;form&gt;&#xA;&lt;fieldset&gt;&#xA;&lt;legend&gt;My group&lt;/legend&gt;&#xA;&lt;label for=&#34;input1&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input1desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input id=&#34;input1&#34; type=&#34;text&#34; aria-describedby=&#34;input1desc input1err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input1err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;label for=&#34;input2&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input2desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input id=&#34;input2&#34; type=&#34;text&#34; aria-describedby=&#34;input2desc input2err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input2err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;/fieldset&gt;&#xA;&lt;button&gt;Validate form&lt;/button&gt;&#xA;&lt;/form&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Now we want to group some elements together by reducing the margins of some of our elements appearing after the &lt;code&gt;label&lt;/code&gt;. But there&#39;s a catch: since we can have several combinations of elements (label then input, label then text then input, etc...) and we don&#39;t want to write specific combinations, we need a new combinator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this time we use the &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/General_sibling_combinator&#34;&gt;general sibling combinator&lt;/a&gt; to detect any &lt;code&gt;span, &lt;/code&gt;input&lt;code&gt; or &lt;/code&gt;select&lt;code&gt; than comes after a &lt;/code&gt;label` inside the current parent. In the code below, if there&#39;s a succession of those two elements, then the second one has a reduced margin top.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;label ~ span,&#xA;label ~ input,&#xA;label ~ select {&#xA;  margin-top: 0.25em;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;div class=&#34;form-demo form-demo-block form-demo-spacing form-demo-reduced&#34; aria-hidden=&#34;true&#34;&gt;&#xA;&lt;form&gt;&#xA;&lt;fieldset&gt;&#xA;&lt;legend&gt;My group&lt;/legend&gt;&#xA;&lt;label for=&#34;input1&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input1desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input id=&#34;input1&#34; type=&#34;text&#34; aria-describedby=&#34;input1desc input1err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input1err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;label for=&#34;input2&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input2desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input id=&#34;input2&#34; type=&#34;text&#34; aria-describedby=&#34;input2desc input2err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input2err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;/fieldset&gt;&#xA;&lt;button&gt;Validate form&lt;/button&gt;&#xA;&lt;/form&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;We don&#39;t want users to struggle identifying which text is the label and which text is informative as they currently have the same style and color. So we stylize the &lt;code&gt;span&lt;/code&gt; element adjacent to the &lt;code&gt;label&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;label ~ span {&#xA;  color: #555;&#xA;  font-style: italic;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;div class=&#34;form-demo form-demo-block form-demo-spacing form-demo-reduced form-demo-text&#34; aria-hidden=&#34;true&#34;&gt;&#xA;&lt;form&gt;&#xA;&lt;fieldset&gt;&#xA;&lt;legend&gt;My group&lt;/legend&gt;&#xA;&lt;label for=&#34;input1&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input1desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input id=&#34;input1&#34; type=&#34;text&#34; aria-describedby=&#34;input1desc input1err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input1err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;label for=&#34;input2&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input2desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input id=&#34;input2&#34; type=&#34;text&#34; aria-describedby=&#34;input2desc input2err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input2err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;/fieldset&gt;&#xA;&lt;button&gt;Validate form&lt;/button&gt;&#xA;&lt;/form&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;We want to do the same for the error message. But we also want to hide it by default and only make it appear when there&#39;s an error. So for now, it&#39;s gone.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;input + span,&#xA;select + span {&#xA;  color: red;&#xA;  display: none;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;div class=&#34;form-demo form-demo-block form-demo-spacing form-demo-reduced form-demo-text form-demo-err&#34; aria-hidden=&#34;true&#34;&gt;&#xA;&lt;form&gt;&#xA;&lt;fieldset&gt;&#xA;&lt;legend&gt;My group&lt;/legend&gt;&#xA;&lt;label for=&#34;input1&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input1desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input id=&#34;input1&#34; type=&#34;text&#34; aria-describedby=&#34;input1desc input1err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input1err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;label for=&#34;input2&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input2desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input id=&#34;input2&#34; type=&#34;text&#34; aria-describedby=&#34;input2desc input2err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input2err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;/fieldset&gt;&#xA;&lt;button&gt;Validate form&lt;/button&gt;&#xA;&lt;/form&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;When a form has an incorrect value, it&#39;s standard practice to add the &lt;code&gt;aria-invalid&lt;/code&gt; attribute to the &lt;code&gt;input&lt;/code&gt; or &lt;code&gt;select&lt;/code&gt; that triggered it. Since we know this attribute is going to appear, we can then trigger the display of the error message using the adjacent sibling selector again.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[aria-invalid] + span {&#xA;  display: block;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;div class=&#34;form-demo form-demo-block form-demo-spacing form-demo-reduced form-demo-text form-demo-err form-demo-err-block&#34; aria-hidden=&#34;true&#34;&gt;&#xA;&lt;form&gt;&#xA;&lt;fieldset&gt;&#xA;&lt;legend&gt;My group&lt;/legend&gt;&#xA;&lt;label for=&#34;input1&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input1desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input id=&#34;input1&#34; type=&#34;text&#34; aria-describedby=&#34;input1desc input1err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input1err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;label for=&#34;input2&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input2desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input id=&#34;input2&#34; type=&#34;text&#34; aria-describedby=&#34;input2desc input2err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input2err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;/fieldset&gt;&#xA;&lt;button&gt;Validate form&lt;/button&gt;&#xA;&lt;/form&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Right now all inputs have the same default size. We want to be able to change it according to our needs. Instead of using pixels, we can use the &lt;code&gt;ch&lt;/code&gt; unit, that stands for character. &lt;code&gt;1ch&lt;/code&gt; means one time the larger of &lt;code&gt;0&lt;/code&gt; in the current font.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can use data attributes to create alternate versions.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[data-size] {&#xA;  width: 100%;&#xA;}&#xA;&amp;nbsp;&#xA;[data-size=&#34;30&#34;] {&#xA;  max-width: 30ch;&#xA;}&#xA;&amp;nbsp;&#xA;[data-size=&#34;10&#34;] {&#xA;  max-width: 10ch;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;div class=&#34;form-demo form-demo-block form-demo-spacing form-demo-reduced form-demo-text form-demo-err form-demo-err-block&#34; aria-hidden=&#34;true&#34;&gt;&#xA;&lt;form&gt;&#xA;&lt;fieldset&gt;&#xA;&lt;legend&gt;My group&lt;/legend&gt;&#xA;&lt;label for=&#34;input1&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input1desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input data-size=&#34;30&#34; id=&#34;input1&#34; type=&#34;text&#34; aria-describedby=&#34;input1desc input1err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input1err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;label for=&#34;input2&#34;&gt;Text label&lt;/label&gt;&#xA;&lt;span id=&#34;input2desc&#34;&gt;Description text&lt;/span&gt;&#xA;&lt;input data-size=&#34;10&#34; id=&#34;input2&#34; type=&#34;text&#34; aria-describedby=&#34;input2desc input2err&#34; aria-invalid&gt;&#xA;&lt;span id=&#34;input2err&#34;&gt;Error text&lt;/span&gt;&#xA;&lt;/fieldset&gt;&#xA;&lt;button&gt;Validate form&lt;/button&gt;&#xA;&lt;/form&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Now comes the problem of checkbox and radio inputs. They usually come first with their label following. So we need to &lt;em&gt;de-stack&lt;/em&gt; them by turning them into inline elements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We could have used the &lt;code&gt;:not()&lt;/code&gt; pseudo-class in our first code block above to exclude the checkbox and radio inputs from the &lt;code&gt;display:block;&lt;/code&gt; rule. But doing so increases specificity and makes the code less readable, so it&#39;s better to let the cascade do its own thing.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;form&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;fieldset&gt;&#xA;      &lt;span&gt;&lt;&lt;/span&gt;legend&gt;My checkbox group&lt;span&gt;&lt;&lt;/span&gt;/legend&gt;&#xA;      &lt;span&gt;&lt;&lt;/span&gt;input id=&#34;checkbox1&#34; type=&#34;checkbox&#34;&gt;&#xA;      &lt;span&gt;&lt;&lt;/span&gt;label for=&#34;checkbox1&#34;&gt;My input&lt;span&gt;&lt;&lt;/span&gt;/label&gt;&#xA;      &lt;span&gt;&lt;&lt;/span&gt;input id=&#34;checkbox2&#34; type=&#34;checkbox&#34;&gt;&#xA;      &lt;span&gt;&lt;&lt;/span&gt;label for=&#34;checkbox2&#34;&gt;My input&lt;span&gt;&lt;&lt;/span&gt;/label&gt;&#xA;    &lt;span&gt;&lt;&lt;/span&gt;/fieldset&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;button&gt;Validate form&lt;span&gt;&lt;&lt;/span&gt;/button&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/form&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[type=&#34;checkbox&#34;],&#xA;[type=&#34;radio&#34;],&#xA;[type=&#34;checkbox&#34;] ~ label,&#xA;[type=&#34;radio&#34;] ~ label {&#xA;  display: inline;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;div class=&#34;form-demo form-demo-block form-demo-spacing form-demo-reduced form-demo-text form-demo-err form-demo-err-block form-demo-checkbox&#34; aria-hidden=&#34;true&#34;&gt;&#xA;&lt;form&gt;&#xA;&lt;fieldset&gt;&#xA;&lt;legend&gt;My checkbox group&lt;/legend&gt;&#xA;&lt;input id=&#34;checkbox1&#34; type=&#34;checkbox&#34;&gt;&#xA;&lt;label for=&#34;checkbox1&#34;&gt;My input&lt;/label&gt;&#xA;&lt;input id=&#34;checkbox2&#34; type=&#34;checkbox&#34;&gt;&#xA;&lt;label for=&#34;checkbox2&#34;&gt;My input&lt;/label&gt;&#xA;&lt;/fieldset&gt;&#xA;&lt;button&gt;Validate form&lt;/button&gt;&#xA;&lt;/form&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Finally, when you are styling your buttons, don&#39;t forget to also style the special input types that can be used as buttons.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;input type=&#34;button&#34; value=&#34;Input Button&#34;&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;input type=&#34;submit&#34; value=&#34;Input Submit&#34;&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;button type=&#34;submit&#34; &gt;Submit&lt;span&gt;&lt;&lt;/span&gt;/button&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;input type=&#34;reset&#34; value=&#34;Input Reset&#34;&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;button type=&#34;reset&#34;&gt;Reset&lt;span&gt;&lt;&lt;/span&gt;/button&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;button disabled=&#34;&#34;&gt;Cancel&lt;span&gt;&lt;&lt;/span&gt;/button&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;button,&#xA;[type=&#34;button&#34;],&#xA;[type=&#34;submit&#34;],&#xA;[type=&#34;reset&#34;] {&#xA;  all: unset;&#xA;  font-size: 1em;&#xA;  border: 1px solid currentColor;&#xA;  padding: 10px;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;div class=&#34;form demo form-demo-block form-demo-button&#34; aria-hidden=&#34;true&#34;&gt;&#xA;&lt;button type=&#34;button&#34; &gt;Button&lt;/button&gt;&#xA;&lt;input type=&#34;button&#34; value=&#34;Input Button&#34;&gt;&#xA;&lt;input type=&#34;submit&#34; value=&#34;Input Submit&#34;&gt;&#xA;&lt;button type=&#34;submit&#34; &gt;Submit&lt;/button&gt;&#xA;&lt;input type=&#34;reset&#34; value=&#34;Input Reset&#34;&gt;&#xA;&lt;button type=&#34;reset&#34;&gt;Reset&lt;/button&gt;&#xA;&lt;button disabled=&#34;&#34;&gt;Cancel&lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/basic-forms-styling" rel="self" type="text/html"></link>
    <summary type="html">How to get forms usable in less than 50 lines of CSS</summary>
  </entry>
  <entry>
    <title>New CSS that can actually be used in 2024</title>
    <updated>2024-04-29T14:50:11Z</updated>
    <id>https://thomasorus.com/new-css-that-can-actually-be-used-in-2024</id>
    <content type="html">&lt;h1 id=&#34;new-css-that-can-actually-be-used-in-2024&#34; &gt;New CSS that can actually be used in 2024&lt;a href=&#34;#new-css-that-can-actually-be-used-in-2024&#34; aria-label=&#34;New CSS that can actually be used in 2024 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The amount of CSS novelty in the last two to four years has been staggering. Multiple innovations have been released and are now supported in all modern browsers, and some of them fundamentally change how to make websites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This page is a cheat sheet for new CSS things I want to start using in 2024. Note that, to support older browsers, it&#39;s sometimes a necessity to use polyfills.&lt;/p&gt;&#xA;&#xA;&lt;details&gt;&lt;summary&gt;If you allow me a little rant&lt;/summary&gt; The amount of stuff our &lt;em&gt;influencers&lt;/em&gt; hype on their websites and newsletters needs to slow down. I know they sincerely like CSS, that their professional life depends on staying up to date and looking relevant in CSS, but damn. When I want to update myself, I have to spend hours checking on &lt;a href=&#34;https://caniuse.com&#34;&gt;Can I Use&lt;/a&gt; if the things they talked about in a blog post in 2021 actually exist in my browser ; only to find half of it stuck in technical preview purgatory. It makes me resentful towards people and I don&#39;t like that. See also: &lt;a href=&#34;https://paulrobertlloyd.com/2023/162/a1/css_day/&#34;&gt;The continuing tragedy of CSS&lt;/a&gt;. &lt;/details&gt;&#xA;&#xA;&lt;h2 id=&#34;logical-properties&#34; &gt;Logical properties&lt;a href=&#34;#logical-properties&#34; aria-label=&#34;Logical properties permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;For the longest time many css properties used physical directions to set values. For example : &lt;code&gt;margin-top&lt;/code&gt;, &lt;code&gt;padding-right&lt;/code&gt;, &lt;code&gt;bottom&lt;/code&gt;, &lt;code&gt;border-left&lt;/code&gt;. But those properties don&#39;t take into account switching to another reading direction, that can be set using &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/direction&#34;&gt;direction&lt;/a&gt;, &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/&#34;&gt;text orientation&lt;/a&gt;, and &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/writing-mode&#34;&gt;writing mode&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, a border placed on the left of a text would stay on the left if the text reading direction was reverted, instead of moving to the right to have a similar user experience. Logical properties avoid this issue by allowing setting properties on the X (called &lt;em&gt;inline&lt;/em&gt;) and Y (called _block) axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I won&#39;t go into the whole spec (see &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_logical_properties_and_values&#34;&gt;MDN&lt;/a&gt;) but here are the most common use cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For &lt;code&gt;height&lt;/code&gt; and &lt;code&gt;width&lt;/code&gt; and their variants like &lt;code&gt;max-width&lt;/code&gt; and &lt;code&gt;min-width&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;code&gt;height&lt;/code&gt;: &lt;code&gt;block-size&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;width&lt;/code&gt;: &lt;code&gt;inline-size&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;max-width&lt;/code&gt;: &lt;code&gt;max-inline-size&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;min-height&lt;/code&gt;: &lt;code&gt;min-block-size&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For &lt;code&gt;margin&lt;/code&gt;, &lt;code&gt;padding&lt;/code&gt;, &lt;code&gt;border&lt;/code&gt;, and variants:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;code&gt;left&lt;/code&gt; and &lt;code&gt;right&lt;/code&gt; : &lt;code&gt;inline&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;left&lt;/code&gt; : &lt;code&gt;inline-start&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;right&lt;/code&gt; : &lt;code&gt;inline-end&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;top&lt;/code&gt; and &lt;code&gt;bottom&lt;/code&gt;: &lt;code&gt;block&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;top&lt;/code&gt; : &lt;code&gt;block-start&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;bottom&lt;/code&gt;: &lt;code&gt;block-end&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For inset properties like &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;bottom&lt;/code&gt;, &lt;code&gt;left&lt;/code&gt;, &lt;code&gt;right&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;code&gt;left&lt;/code&gt; and &lt;code&gt;right&lt;/code&gt; : &lt;code&gt;inset-inline&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;left&lt;/code&gt;: &lt;code&gt;inset-inline-start&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;right&lt;/code&gt;: &lt;code&gt;inset-inline-end&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;top&lt;/code&gt; and &lt;code&gt;bottom&lt;/code&gt;: &lt;code&gt;inset-block&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;top&lt;/code&gt;: &lt;code&gt;inset-block-start&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;bottom&lt;/code&gt;: &lt;code&gt;inset-block-end&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Detail of browsers versions supporting this feature: &lt;a href=&#34;https://caniuse.com/css-logical-props&#34;&gt;Can I Use&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;There is no &lt;code&gt;margin&lt;/code&gt; or &lt;code&gt;padding&lt;/code&gt; logical property to set 4 values, you need to use the &lt;code&gt;inline&lt;/code&gt; and &lt;code&gt;block&lt;/code&gt; ones. BUT a new &lt;code&gt;inset&lt;/code&gt; property exists as a shorthand for &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;right&lt;/code&gt;, &lt;code&gt;down&lt;/code&gt;, &lt;code&gt;left&lt;/code&gt;. &lt;/aside&gt;&#xA;&#xA;&lt;h2 id=&#34;container-queries&#34; &gt;Container queries&lt;a href=&#34;#container-queries&#34; aria-label=&#34;Container queries permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt; Container queries have two distinct features: &lt;em&gt;size queries&lt;/em&gt; and &lt;em&gt;style queries&lt;/em&gt;. In this section I am only referring to &lt;em&gt;size queries&lt;/em&gt; who are widely supported, while style queries &lt;a href=&#34;https://caniuse.com/css-container-queries-style&#34;&gt;are not&lt;/a&gt;.&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;Media queries allowed to do an &lt;code&gt;if/else&lt;/code&gt; using the &lt;strong&gt;browser&lt;/strong&gt; width or height as a condition. Container size queries allow the same &lt;code&gt;if/else&lt;/code&gt; logic, but for any container, not just the browser. You declare a piece of the dom as the container:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.card {&#xA; container-type: size|inline-size|normal;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are three values possible:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;size&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Allows to use the &lt;em&gt;inline&lt;/em&gt; and &lt;em&gt;block&lt;/em&gt; dimensions, as well as style queries.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;inline-size&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Same as above but only for &lt;code&gt;inline&lt;/code&gt; dimension (this is the most useful for responsive design).&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;normal&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Deactivate size queries, only let style queries.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;And then use it as a media query:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@container (min-width: 700px) {&#xA;  .card h2 {&#xA;    font-size: 2em;&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It&#39;s also possible to name containers, using the &lt;code&gt;container-name&lt;/code&gt; property, or a shortcut width &lt;code&gt;container&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.card {&#xA;  container: sidebar / inline-size;&#xA;}&#xA;@container sidebar (min-width: 700px) {&#xA;  .card {&#xA;    font-size: 2em;&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Container size queries also have their own units:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;cqw&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;1% of a query container&#39;s width&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;cqh&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;1% of a query container&#39;s height&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;cqi&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;1% of a query container&#39;s inline size&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;cqb&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;1% of a query container&#39;s block size&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;cqmin&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;The smaller value of either cqi or cqb&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;cqmax&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;The larger value of either cqi or cqb&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Detail of browsers versions supporting this feature: &lt;a href=&#34;https://caniuse.com/css-container-queries&#34;&gt;Can I Use&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;has&#34; &gt;&lt;code&gt;:has&lt;/code&gt;&lt;a href=&#34;#has&#34; aria-label=&#34;&lt;code&gt;:has&lt;/code&gt; permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;To understand &lt;code&gt;:has&lt;/code&gt; it&#39;s important to remember that CSS styling works has a &lt;em&gt;cascade&lt;/em&gt; that goes from left to right (even if the browser reads it right to left but that&#39;s another topic). The last element on a declaration is the one being styled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, take this HTML where inside &lt;code&gt;main&lt;/code&gt;, we select all the &lt;code&gt;article&lt;/code&gt; elements, then the &lt;code&gt;strong&lt;/code&gt; elements.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;main&gt;&#xA; &lt;span&gt;&lt;&lt;/span&gt;article&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;p&gt;Some text&lt;span&gt;&lt;&lt;/span&gt;/p&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;strong&gt;My strong text&lt;span&gt;&lt;&lt;/span&gt;/strong&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;p&gt;Some text&lt;span&gt;&lt;&lt;/span&gt;/p&gt;&#xA; &lt;span&gt;&lt;&lt;/span&gt;/article&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/main&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;main article strong {&#xA; font-weight: 600;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But what happens when we want to style &lt;code&gt;main&lt;/code&gt; at the condition that &lt;code&gt;strong&lt;/code&gt; exists in the HTML? That&#39;s the purpose of &lt;code&gt;:has&lt;/code&gt;, which will check for us.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;main:has(strong) {&#xA; //change main style&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It&#39;s also possible to simulate logical operators likes &lt;code&gt;&amp;&amp;&lt;/code&gt; and &lt;code&gt;||&lt;/code&gt;. to check multiple conditions, like if &lt;code&gt;main&lt;/code&gt; has &lt;code&gt;p&lt;/code&gt; &lt;strong&gt;and&lt;/strong&gt; has &lt;code&gt;strong&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;main:has(p):has(strong) {&#xA; color:red;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If &lt;code&gt;main&lt;/code&gt; has &lt;code&gt;p&lt;/code&gt; &lt;strong&gt;or&lt;/strong&gt; has &lt;code&gt;strong&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;main:has(p, strong) {&#xA; color:red;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But that&#39;s not all. &lt;code&gt;:has&lt;/code&gt; can be combined with CSS selectors like &lt;code&gt;+&lt;/code&gt;, &lt;code&gt;~&lt;/code&gt;, &lt;code&gt;&gt;&lt;/code&gt; or other pseudo-selectors like &lt;code&gt;nth-child&lt;/code&gt; or &lt;code&gt;:not&lt;/code&gt; to open new possibilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do a negative check:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;main:not(:has(strong)) {&#xA; //change main style&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Check if &lt;code&gt;strong&lt;/code&gt; is after &lt;code&gt;p&lt;/code&gt;, if yes change previous &lt;code&gt;p&lt;/code&gt; color to red.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;p:has(+strong) {&#xA;  color:red;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Check if &lt;code&gt;strong&lt;/code&gt; is after &lt;code&gt;p&lt;/code&gt;, if yes change all the previous &lt;code&gt;p&lt;/code&gt; color to red.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;p:has(~ figure) {&#xA; color:red;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For more interactive examples and concrete use cases, see Ahmad Shadeed&#39;s &lt;a href=&#34;https://ishadeed.com/article/css-has-guide&#34;&gt;article&lt;/a&gt; on the topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Detail of browsers versions supporting this feature: &lt;a href=&#34;https://caniuse.com/css-has&#34;&gt;Can I Use&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;is-and-where&#34; &gt;&lt;code&gt;:is&lt;/code&gt; and &lt;code&gt;:where&lt;/code&gt;&lt;a href=&#34;#is-and-where&#34; aria-label=&#34;&lt;code&gt;:is&lt;/code&gt; and &lt;code&gt;:where&lt;/code&gt; permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;They have the same use: select multiple things in a more concise syntax. For example, chaining of selectors or classes in menus made of lists are a classic issue of specific styling that creates a lof of specificity:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ol ol ul,&#xA;ol ul ul,&#xA;ul ol ul,&#xA;ol, ol, ol,&#xA;ul ul ul,{&#xA;  list-style-type: square;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Can be replaced by :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;:is(ol, ul) :is(ol, ul) ul {&#xA;   // My style&#xA;}&#xA;// or&#xA;:where(ol, ul) :where(ol, ul) :where(ol, ul) {&#xA;  // My style&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are more good examples on the &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/:is&#34;&gt;MDN&lt;/a&gt; page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference between &lt;code&gt;:is&lt;/code&gt; and &lt;code&gt;:where&lt;/code&gt; is a &lt;em&gt;CSS nerd&lt;/em&gt; thing who might, in the long run, make non-CSS specialist throw their keyboard in frustration: &lt;code&gt;is:&lt;/code&gt; takes the specificity of the most specific thing it contains, while &lt;code&gt;:where&lt;/code&gt; does not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a more concrete way, it means something styled inside an &lt;code&gt;:is&lt;/code&gt;, if it has a bigger specificity like being a class, an id, or using &lt;code&gt;!important&lt;/code&gt;, cannot be changed by a lower specificity rule &lt;strong&gt;even if this rule comes down after in the cascade&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example this HTML:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;main&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;p class=&#34;isClass&#34;&gt;Text 1&lt;span&gt;&lt;&lt;/span&gt;/p&gt;&#xA;  &lt;span&gt;&lt;&lt;/span&gt;p class=&#34;whereClass&#34;&gt;Text 2&lt;span&gt;&lt;&lt;/span&gt;/p&gt;&#xA;&lt;span&gt;&lt;&lt;/span&gt;/main&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With this CSS:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;:is(.isClass) {&#xA;&#x9;color:red;&#xA;}&#xA;:where(.whereClass) {&#xA;&#x9;color:blue;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Looks the same. But what happens if we add this CSS?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;main p {&#xA;&#x9;color: orange;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Since &lt;code&gt;main p&lt;/code&gt; has a lower specificity than &lt;code&gt;.isClass&lt;/code&gt;, it cannot restyle it. Meanwhile, &lt;code&gt;.whereClass&lt;/code&gt; has a specificity of &lt;code&gt;0&lt;/code&gt;, and will become orange due to the incoming rule in the cascade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Detail of browsers versions supporting &lt;code&gt;:is&lt;/code&gt;: &lt;a href=&#34;https://caniuse.com/css-matches-pseudo&#34;&gt;Can I Use&lt;/a&gt;. &lt;br&gt;&lt;/p&gt;&#xA;&lt;p&gt;Detail of browsers versions supporting &lt;code&gt;:where&lt;/code&gt;: &lt;a href=&#34;https://caniuse.com/mdn-css_selectors_where&#34;&gt;Can I Use&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;nesting&#34; &gt;Nesting&lt;a href=&#34;#nesting&#34; aria-label=&#34;Nesting permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It&#39;s quite obvious, it&#39;s the nesting from SASS, but without string concatenation (no gluing &lt;code&gt;.myclass&lt;/code&gt; with a &lt;code&gt;__children&lt;/code&gt; like we do in BEM). Nesting can be used with the nesting selector &lt;code&gt;&amp;&lt;/code&gt; or without it for simple use cases.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;main {&#xA;&#x9;article {&#xA;&#x9;&#x9;color:red;&#xA;&#x9;}&#xA;}&#xA;// Same as :&#xA;main {&#xA;&#x9;&amp; article {&#xA;&#x9;&#x9;color:red;&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The nesting selector is necessary for compound selectors (a combination of element + class like &lt;code&gt;p.myClass&lt;/code&gt;) and pseudo classes (&lt;code&gt;:hover, &lt;/code&gt;:focus`, etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;```&lt;/p&gt;&#xA;&lt;p&gt;main {&lt;/p&gt;&#xA;&lt;p&gt;&amp;.myClass {&lt;/p&gt;&#xA;&lt;p&gt;//...&lt;/p&gt;&#xA;&#xA;&#xA;&lt;p&gt;&amp;:hover {&lt;/p&gt;&#xA;&lt;p&gt;//...&lt;/p&gt;&#xA;&#xA;&#xA;&lt;p&gt;```&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Detail of browsers versions supporting this feature: &lt;a href=&#34;https://caniuse.com/css-nesting&#34;&gt;Can I Use&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;css-comparison-functions&#34; &gt;CSS Comparison Functions&lt;a href=&#34;#css-comparison-functions&#34; aria-label=&#34;CSS Comparison Functions permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;CSS Comparison Functions allow to compare values to the viewport (or the container if using container queries) and let the browser pick the most appropriate one. Basically a &lt;code&gt;if/else&lt;/code&gt; that comes in three ways:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;min(a, b)&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Takes the smallest value between &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt;&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;max(a, b)&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Takes the biggest value between &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt;&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;clamp(a, b, c)&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Takes the most appropriate value between smallest &lt;code&gt;a&lt;/code&gt;, desired &lt;code&gt;b&lt;/code&gt;, and biggest &lt;code&gt;c&lt;/code&gt;.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;But comparisons can be done with different values than pixels. &lt;code&gt;%&lt;/code&gt;, &lt;code&gt;em&lt;/code&gt;, &lt;code&gt;rem&lt;/code&gt;, &lt;code&gt;vw&lt;/code&gt; &lt;code&gt;vh&lt;/code&gt;, among others are available. And since math expressions are baked in, it&#39;s possible to compare fixed values to live computed values based on the viewport.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, for a fluid font who&#39;s size will vary when between 16px and 32px, it can be done by summing the viewport width and the relative font size:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;font-size: clamp(16px, 1vw + 1rem, 32px);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you ever struggled adjusting things in media queries with a designer behind you, you understood immediately how revolutionary this is. In a world where designers only produce the mobile and desktop versions of their designs (and sometimes the tablet one), it allows to proportionally automate all the in-between for things like font sizes, margins, spacings, grid and flex gaps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the feeling that this technique hasn&#39;t yet got out of the CSS specialist crowd despite being several years old. It may be due to its complexity, the use of frameworks and lack of knowledge in CSS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are interested, visit &lt;a href=&#34;https://utopia.fyi/&#34;&gt;utopia&lt;/a&gt;, which contains easy to use tools to generate the comparison functions for you. You can directly enter the values given by a designer and get the &lt;code&gt;clamp()&lt;/code&gt; code as custom properties (aka CSS variables) to maintain your website cohesive.&lt;/p&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;On the topic of mediaquery-less development, &lt;a href=&#34;https://every-layout.dev/&#34;&gt;Every Layout&lt;/a&gt; is probably the best combination you can learn with utopia.&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;Detail of browsers versions supporting this feature: &lt;a href=&#34;https://caniuse.com/css-math-functions&#34;&gt;Can I Use&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;cascade-layers&#34; &gt;Cascade layers&lt;a href=&#34;#cascade-layers&#34; aria-label=&#34;Cascade layers permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Cascade layers allow the creation of multiple CSS cascades and their ordering. The &lt;a href=&#34;css-methodologies.html#the-cascade&#34;&gt;cascade&lt;/a&gt; is often the most dreaded aspect of CSS and has led to the creation of multiple methodologies to keep code ordered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cascade layers, like the name implies, offers to create separated cascades you can access anywhere in the files, and to layer them in the order we want.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@layer reset base; // Define the order of layers&#xA;&amp;nbsp;&#xA;// Put some code inside the reset layer&#xA;@layer reset {&#xA; a {&#xA;  color: black;&#xA; }&#xA;}&#xA;&amp;nbsp;&#xA;// Put some code inside the base layer&#xA;@layer base {&#xA; a {&#xA;  color: grey;&#xA; }&#xA;}&#xA;&amp;nbsp;&#xA;// Put more code inside the reset layer&#xA;@layer reset {&#xA; p {&#xA;  color: red;&#xA; }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But &lt;strong&gt;it doesn&#39;t mean that each layer is scoped&lt;/strong&gt; (&lt;a href=&#34;https://caniuse.com/css-cascade-scope&#34;&gt;@scope exists but is not widely supported yet&lt;/a&gt;. In the example above, the color of &lt;code&gt;a&lt;/code&gt; will be grey, as the &lt;code&gt;base&lt;/code&gt; layer is after the &lt;code&gt;reset&lt;/code&gt; layer. This is an organization tool, not a scoping mechanism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is especially useful in large code bases. It allows to force the code into a specific order, reduces the stress of looking where to add new code, and if it will affect the rest of the code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, let&#39;s say we want to import a third party CSS stylesheet, add it to a layer, and build our own styles on top of it.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// import framework.css and define as framework layer&#xA;@import &#34;framework.css&#34; layer(framework);&#xA;&amp;nbsp;&#xA;// Order framework before personal&#xA;@layer framework personal;&#xA;&amp;nbsp;&#xA;@layer personal {&#xA; // My own styles&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But later in the project, we notice the framework has a buggy style. We can fix it in the &lt;code&gt;framework&lt;/code&gt; layer without touching the &lt;code&gt;personal&lt;/code&gt; layer. And even better, we don&#39;t have to go back at the start of the file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@import &#34;framework.css&#34; layer(framework);&#xA;&amp;nbsp;&#xA;@layer framework personal;&#xA;&amp;nbsp;&#xA;@layer personal {&#xA; // My own styles&#xA;}&#xA;&amp;nbsp;&#xA;&amp;nbsp;&#xA;@layer framework {&#xA; // Small bug fix&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Last thing: un-layered style always has the priority on layered styles. In the examples above, a style written outside a layer would have erased the previously defined ones. See this &lt;a href=&#34;https://css-tricks.com/css-cascade-layers/&#34;&gt;very extensive guide&lt;/a&gt; to better understand the layering of styles in browsers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Detail of browsers versions supporting this feature: &lt;a href=&#34;https://caniuse.com/css-cascade-layers&#34;&gt;Can I Use&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;subgrid&#34; &gt;Subgrid&lt;a href=&#34;#subgrid&#34; aria-label=&#34;Subgrid permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;subgrid&lt;/code&gt; property has been long in the waiting and is finally here, and mostly used to fix one very annoying issue. Imagine several columns of the same height, and each of them has the same number of children, but those children don&#39;t have the same height.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When looking at the whole, the children are not vertically aligned:&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/subgrid1.png&#34; alt=&#34;Demonstration of subgrid. Images are not vertically aligned. figcaption&#34;&gt;&lt;figcaption&gt;When only two children, this issue was fixables by declaring a &lt;code&gt;flex&lt;/code&gt; column container and using &lt;code&gt;space-between&lt;/code&gt;, but it wasn&#39;t ideal. | &lt;small&gt;&lt;a href=&#34;/uploaded/subgrid1.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Declaring the children as a grid element and &lt;code&gt;subgrid&lt;/code&gt; as the value of &lt;code&gt;grid-template-rows&lt;/code&gt; allows to align the children:&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/subgrid2.png&#34; alt=&#34;Demonstration of subgrid. Images are now vertically aligned. figcaption&#34;&gt;&lt;figcaption&gt;This is a more solid way of doing it, as it allows for more elements having different heights. | &lt;small&gt;&lt;a href=&#34;/uploaded/subgrid2.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.parent {&#xA; display: grid;&#xA; gap: 1rem;&#xA; grid-template-columns: 1fr 1fr;&#xA;}&#xA;.children {&#xA; grid-row: span 2;&#xA; display: grid;&#xA; grid-template-rows: subgrid;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There is of course more to &lt;code&gt;subgrid&lt;/code&gt; than this. Ahmad Shadeed wrote an &lt;a href=&#34;https://ishadeed.com/article/learn-css-subgrid/&#34;&gt;extensive article&lt;/a&gt; on the topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Detail of browsers versions supporting this feature: &lt;a href=&#34;https://caniuse.com/css-subgrid&#34;&gt;Can I Use&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;small-but-noticeable&#34; &gt;Small but noticeable&lt;a href=&#34;#small-but-noticeable&#34; aria-label=&#34;Small but noticeable permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;text-wrap:balance&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Allows multiple lines of text to have their lines broken in such a way that each line is roughly the same width. &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/&#34;&gt;MDN&lt;/a&gt; - &lt;a href=&#34;https://caniuse.com/css-&#34;&gt;Can I Use Page&lt;/a&gt;&lt;/dd&gt;&lt;dt&gt;Dynamic viewport height or &lt;code&gt;dvh&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Takes into account the url bar and UI of browser, unlike &lt;code&gt;vh&lt;/code&gt; which did not. &lt;a href=&#34;ttps://web.dev/blog/viewport-units&#34;&gt;Web.dev&lt;/a&gt; - &lt;a href=&#34;https://caniuse.com/viewport-unit-variants&#34;&gt;Can I Use Page&lt;/a&gt;&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;accent-color&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Helps coloring HTML controls that are traditionally cumbersome, like checkboxes, ranges, etc. &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/accent-color&#34;&gt;MDN&lt;/a&gt; - &lt;a href=&#34;https://caniuse.com/mdn-css_properties_accent-color&#34;&gt;Can I Use Page&lt;/a&gt;&lt;/dd&gt;&lt;dt&gt;Media Queries Range Syntax&lt;/dt&gt;&lt;dd&gt;Allows the use of mathematical comparison operators: &lt;code&gt;&gt;&lt;/code&gt;, &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;&lt;/code&gt;, &lt;code&gt;&gt;=&lt;/code&gt;, or &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;=&lt;/code&gt; in media queries. Ex: &lt;code&gt;@media (width &lt;span&gt;&lt;&lt;/span&gt;= 1140px)&lt;/code&gt;. &lt;a href=&#34;https://web.dev/articles/media-query-range-syntax&#34;&gt;Web.dev&lt;/a&gt; - &lt;a href=&#34;https://caniuse.com/css-media-range-syntax&#34;&gt;Can I Use Page&lt;/a&gt;&lt;/dd&gt;&lt;dt&gt;flexbox &lt;code&gt;gap&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Same as grid, but now supported in flex. &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/gap&#34;&gt;MDN&lt;/a&gt; - &lt;a href=&#34;https://caniuse.com/flexbox-gap&#34;&gt;Can I Use Page&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/new-css-that-can-actually-be-used-in-2024" rel="self" type="text/html"></link>
    <summary type="html">Multiple innovations have been released and are now supported in all modern browsers, and some of them fundamentally change how to make websites.</summary>
  </entry>
  <entry>
    <title>List of JavaScript frameworks</title>
    <updated>2025-10-20T14:10:23+02:00</updated>
    <id>https://thomasorus.com/list-of-javascript-frameworks</id>
    <content type="html">&lt;h1 id=&#34;a-list-of-javascript-frameworks&#34; &gt;A list of JavaScript frameworks&lt;a href=&#34;#a-list-of-javascript-frameworks&#34; aria-label=&#34;A list of JavaScript frameworks permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The way the web was initially envisioned was through separation of concerns: HTML is for structure, CSS for styles and JavaScript for interactivity. For a long time the server was sending HTML to the browser/client through templates populated with data from the server. Then the page downloaded CSS and JavaScript. Those two then &#34;attached&#34; themselves to the structure and acted on it through HTML attributes, and could then change its looks, call for more data, create interactivity. Each time a visitor clicked a link, this whole process would start again, downloading the new page and its dependencies and rendering it in the browser.&lt;/p&gt;&#xA;&#xA;&lt;details&gt;&lt;summary&gt;Last updates and information about this list&lt;/summary&gt; This list was created by &lt;a href=&#34;https://twitter.com/bastianallgeier&#34; aria-label=&#34;Link to Bastian twitter account&#34;&gt;Bastian&lt;/a&gt; from the Kirby Team on the Kirby &lt;a href=&#34;https://discord.gg/r5AjvspYmY&#34;&gt;Discord&lt;/a&gt;. For conservation purposes, I reproduced it here. It was then consolidated using Tom Mac Wright article about &lt;a href=&#34;https://macwright.com/2020/10/28/if-not-spas.html&#34;&gt;Single Page Apps&lt;/a&gt; replacements. Last updated September 25 2022. &lt;/details&gt;&#xA;&#xA;&lt;h2 id=&#34;js-based-page-transitions&#34; &gt;JS-based page transitions&lt;a href=&#34;#js-based-page-transitions&#34; aria-label=&#34;JS-based page transitions permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Using the history API and Ajax requests to fetch HTML of the next page and replace the current body with it. Basically emulating the look and feel of single page applications in multi-pages applications.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://github.com/MoOx/pjax&#34;&gt;PJAX&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://barba.js.org/&#34;&gt;Barba&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://swup.js.org/&#34;&gt;Swup&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://highway.js.org/&#34;&gt;Highway&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;javascript-enhanced-html&#34; &gt;JavaScript enhanced HTML&lt;a href=&#34;#javascript-enhanced-html&#34; aria-label=&#34;JavaScript enhanced HTML permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Event handling/reactivity/dom manipulation via HTML attributes. Development happens client side, without writing JavaScript.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://github.com/alpinejs/alpine/&#34;&gt;Alpine&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://stimulusjs.org/&#34;&gt;Stimulus JS&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://htmx.org/&#34;&gt;HTMX&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/vuejs/petite-vue&#34;&gt;Petite vue&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;inline-replacement-of-components&#34; &gt;Inline replacement of components&lt;a href=&#34;#inline-replacement-of-components&#34; aria-label=&#34;Inline replacement of components permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Static HTML gets updated via web sockets or Ajax calls on the fly with small snippets rendered on the server. Development happens server side, without writing JavaScript. Most of the time a plugin or feature of an existing server side framework.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://laravel-livewire.com/&#34;&gt;Livewire&lt;/a&gt; (PHP)&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.stimulusreflex.com/&#34;&gt;Stimulus Reflex&lt;/a&gt; (Ruby)&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.phoenixframework.org/blog/build-a-real-time-twitter-clone-in-15-minutes-with-live-view-and-phoenix-1-5&#34;&gt;Phoenix Liveview&lt;/a&gt; (Elixir)&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor&#34;&gt;Blazor&lt;/a&gt; (C#)&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.django-unicorn.com/&#34;&gt;Unicorn&lt;/a&gt; (Python)&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;single-page-application-spa&#34; &gt;Single Page Application (SPA)&lt;a href=&#34;#single-page-application-spa&#34; aria-label=&#34;Single Page Application (SPA) permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A client-side, JavaScript component-based (mixing HTML, CSS and JavaScript in a single file) framework or library gets data through API calls (REST or GraphQL) and generates HTML blocks on the fly directly in the browser. Long initial load time, then fast page transitions, but a lot of features normally managed by the browser or the server needs to be re-implemented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The framework or library is loaded alongside the SPA code:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://vuejs.org/&#34;&gt;Vue&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://fr.reactjs.org/&#34;&gt;React&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://preactjs.com/&#34;&gt;Preact&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://angularjs.org/&#34;&gt;Angular&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The framework or library compiles to the SPA and disappears:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;ttps://svelte.dev/&#34;&gt;Svelte&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;ttps://www.solidjs.com/&#34;&gt;Solid&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://angularjs.org/&#34;&gt;Angular&lt;/a&gt; with &lt;a href=&#34;ttps://angular.io/guide/aot-compiler&#34;&gt;AOT&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;meta-frontend-frameworks&#34; &gt;&#34;Meta&#34; frontend frameworks&lt;a href=&#34;#meta-frontend-frameworks&#34; aria-label=&#34;&#34;Meta&#34; frontend frameworks permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A single page application library gets extended to render or generate static &#34;dry&#34; pages as HTML on the server to avoid the initial long loading time, detrimental to SEO. Often comes with opinionated choices like routing, file structure, compilation improvements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After the initial page load, the single page application code is loaded and attaches itself to the whole page to make it interactive, effectively downloading and rendering the website twice (&#34;hydration&#34;):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://nextjs.org/&#34;&gt;Next&lt;/a&gt; (React)&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://nuxtjs.org/fr/&#34;&gt;Nuxt&lt;/a&gt; (Vue)&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kit.svelte.dev/&#34;&gt;Sveltekit&lt;/a&gt; (Svelte)&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;After the initial page load, the single page application code is loaded and attaches itself only on certain elements that needs interactivity, partially avoiding the double download and rendering (&#34;partial hydration&#34;, &#34;islands architecture&#34;):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://astro.build/&#34;&gt;Astro&lt;/a&gt; (React, Vue, Svelte, Solid, etc.)&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/solidjs/solid-start&#34;&gt;Solid Start&lt;/a&gt; (Solid)&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;non-hydration-frontend-frameworks&#34; &gt;Non-hydration frontend frameworks&lt;a href=&#34;#non-hydration-frontend-frameworks&#34; aria-label=&#34;Non-hydration frontend frameworks permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A server-side component-based framework or library gets data through API calls (REST or GraphQL) and serves HTML that gets its interactivity without hydration, for example by loading the interactive code needed as an interaction happens.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://markojs.com/&#34;&gt;Marko&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://qwik.builder.io/&#34;&gt;Qwik&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;opinionated-full-stack-javascript-frameworks&#34; &gt;Opinionated full-stack JavaScript frameworks&lt;a href=&#34;#opinionated-full-stack-javascript-frameworks&#34; aria-label=&#34;Opinionated full-stack JavaScript frameworks permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Using existing frontend and backend stacks in an opinionated way to offer a fullstack solution in full JavaScript&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://redwoodjs.com/&#34;&gt;Redwood JS&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blitzjs.com/&#34;&gt;Blitz JS&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://remix.run/&#34;&gt;Remix&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;server-injected-spa&#34; &gt;Server-injected SPA&lt;a href=&#34;#server-injected-spa&#34; aria-label=&#34;Server-injected SPA permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A client-side, component based application (Vue, React, etc) gets its state from pre-rendered JSON&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://inertiajs.com/&#34;&gt;Inertia&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/list-of-javascript-frameworks" rel="self" type="text/html"></link>
    <summary type="html">A list of JavaScript frameworks that can be used in different situations</summary>
  </entry>
  <entry>
    <title>Questioning the JS frontend paradigm</title>
    <updated>2025-11-04T18:02:02+01:00</updated>
    <id>https://thomasorus.com/questioning-the-js-frontend-paradigm</id>
    <content type="html">&lt;h1 id=&#34;questioning-the-js-frontend-paradigm&#34; &gt;Questioning the JS frontend paradigm&lt;a href=&#34;#questioning-the-js-frontend-paradigm&#34; aria-label=&#34;Questioning the JS frontend paradigm permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Links with the &amp;#9888 sign are, in my opinion, the most important ones. If you lack time, focus on those.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;2018&#34; &gt;2018&lt;a href=&#34;#2018&#34; aria-label=&#34;2018 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;The Thirty Million Line Problem&lt;/dt&gt;&lt;dd&gt;Casey Muratori explains why software has become unmaintanable due to the amount of code present in most projects. &lt;a href=&#34;https://www.youtube.com/watch?v=kZRE7HIO3vk&#34;&gt;link&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h2 id=&#34;2020&#34; &gt;2020&lt;a href=&#34;#2020&#34; aria-label=&#34;2020 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&amp;#9888 Second-guessing the modern web&lt;/dt&gt;&lt;dd&gt;A very influential and discussed essay by Tom MacWright where he questions the (then) emerging norm of building a React SPA with server rendering. &lt;a href=&#34;https://macwright.com/2020/05/10/spa-fatigue.html&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;The Cost of Javascript Frameworks&lt;/dt&gt;&lt;dd&gt;Tim Kadlec explores, in a data driven approach, the cost of using JavaScript frameworks. &lt;a href=&#34;https://timkadlec.com/remembers/2020-04-21-the-cost-of-javascript-frameworks/&#34;&gt;link&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h2 id=&#34;2021&#34; &gt;2021&lt;a href=&#34;#2021&#34; aria-label=&#34;2021 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&amp;#9888  Hypermedia as the Engine of Application State (HATEOAS)&lt;/dt&gt;&lt;dd&gt;Carson Gross, creator of IntercoolerJS and HTMX, started a series of essays and among them one focusing on the concept of Hypermedia. It questions the well founded use of JSON as a format for transferring data in web applications. &lt;a href=&#34;https://htmx.org/essays/hateoas/&#34;&gt;link&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h2 id=&#34;2022&#34; &gt;2022&lt;a href=&#34;#2022&#34; aria-label=&#34;2022 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&amp;#9888 Making the world’s fastest website, and other mistakes &lt;/dt&gt;&lt;dd&gt;Taylor Hunt narrates, in this incredible 5 parts article, how he tried to make a Fortune 20 website work on 60$ phones and terrible bandwidth, how he was successful, and why it was and will never be used. Probably the most influentiel article on this page. &lt;a href=&#34;https://dev.to/tigt/making-the-worlds-fastest-website-and-other-mistakes-56na&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;The balance has shifted away from SPAs&lt;/dt&gt;&lt;dd&gt;Nolan Lawson explains how browsers have implemented several techniques like paint holding, back-forward caching, service workers, etc. that reduces the necessity of using single page applications. &lt;a href=&#34;https://nolanlawson.com/2022/05/21/the-balance-has-shifted-away-from-spas/&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;Website Fidelity&lt;/dt&gt;&lt;dd&gt;Jim Nielsen details and adopts the idea of building websites in layers of fidelity instead of layers of technology. &lt;a href=&#34;https://blog.jim-nielsen.com/2022/website-fidelity/&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;The self-fulfilling prophecy of React&lt;/dt&gt;&lt;dd&gt;Josh Collinsworth discussed how React is falling behind, and how it isn’t great at anything except being popular. &lt;a href=&#34;https://joshcollinsworth.com/blog/self-fulfilling-prophecy-of-react&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;The Demise of the Mildly Dynamic Website&lt;/dt&gt;&lt;dd&gt;Hugo Landau discusses what he calls the &#34;dynamicity gap&#34;, basically how there&#39;s little room for mildly dynamic functionality in the modern ecosystem of static site generators and web frameworks. &lt;a href=&#34;https://www.devever.net/~hl/mildlydynamic&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;Is the madness ever going to end?&lt;/dt&gt;&lt;dd&gt; Unix Digest rants about the increasingly complex stacks used for websites and apps and how it degrades the experience of using them too. &lt;a href=&#34;https://unixdigest.com/articles/is-the-madness-ever-going-to-end.html&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;Weathering Software Winter&lt;/dt&gt;&lt;dd&gt;Devine from 100 Rabbits explains by example how modern digital hardware and software breaks once it gets out its very specific context, mostly the western world. &lt;a href=&#34;https://www.youtube.com/watch?v=9TJuOwy4aGA&#34;&gt;video version&lt;/a&gt; &lt;a href=&#34;https://100r.co/site/weathering_software_winter.html&#34;&gt;text version&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h2 id=&#34;2023&#34; &gt;2023&lt;a href=&#34;#2023&#34; aria-label=&#34;2023 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&amp;#9888 The Market for Lemons&lt;/dt&gt;&lt;dd&gt;Alex Russell explains how the JS stack merchants (especially the React team) knew about the complexity, cost and lack of performance of their tools, and how they chose to say nothing, obfuscate evidences and debates about it, by using boosterism, misdirections and toxic positivity. &lt;a href=&#34;https://infrequently.org/2023/02/the-market-for-lemons/&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;&amp;#9888 A Historical Reference of React Criticism&lt;/dt&gt;&lt;dd&gt;Following Alex Russell&#39;s article, Zach Leatherman lists all the fact-driven critics he could find about React, going as far as december 2014, showing that many issues that plague it today were already there right at the start. &lt;a href=&#34;https://www.zachleat.com/web/react-criticism/&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;React is the New IBM&lt;/dt&gt;&lt;dd&gt;Charles Chen not only goes back to the well known React issues, but interrogates the whole philosophy of its inventors, mainly how they solve problems by escalating complexity. &lt;a href=&#34;https://medium.com/@chrlschn/react-is-the-new-ibm-6af2f4b04e5e&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;Why not React?&lt;/dt&gt;&lt;dd&gt;In this followup article of its 5 parts series, Taylor Hunt explores why using React for server side rendering can&#39;t achieve the speed of other technologies. &lt;a href=&#34;https://dev.to/tigt/why-not-react-2f8l&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;Hypermedia Systems&lt;/dt&gt;&lt;dd&gt; Carson Gross (creator of HTMX), Adam Stepinski and Deniz Akşimşek published a free book about hypermedia. A more condensed and structured version of the essays mentionned above, with a more historical and practical approach. &lt;a href=&#34;https://hypermedia.systems/&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;What&#39;s the most significant change in our industry over the last 10 years?&lt;/dt&gt;&lt;dd&gt;Steve Purcell answers in a single phrase. &lt;a href=&#34;https://twitter.com/sanityinc/status/1723427858876440614&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;Bilithification&lt;/dt&gt;&lt;dd&gt;Glyph Lefkowitz questions the use of micro-services as the default for backends, arguing monoliths are better suited for most projects, and explains how to split them once they become too hard to maintain. &lt;a href=&#34;https://blog.glyph.im/2023/07/bilithification.html&#34;&gt;link&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h2 id=&#34;2024&#34; &gt;2024&lt;a href=&#34;#2024&#34; aria-label=&#34;2024 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&amp;#9888 The Website vs. Web App Dichotomy Doesn&#39;t Exist&lt;/dt&gt;&lt;dd&gt;Jake Lazaroff questions the overused paradigm that web projects are either websites or web apps, and how it influences technical choices in the wrong way. &lt;a href=&#34;https://jakelazaroff.com/words/the-website-vs-web-app-dichotomy-doesnt-exist/&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;&amp;#9888 The Performance Inequality Gap, 2024&lt;/dt&gt;&lt;dd&gt;Alex Russell updates his yearly analysis on the performance of hardware and networks and how it&#39;s still a bottleneck when websites use a JavaScript based stack. &lt;a href=&#34;https://infrequently.org/2024/01/performance-inequality-gap-2024/&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;JavaScript Bloat in 2024&lt;/dt&gt;&lt;dd&gt;Nikita Prokopov aka Tonsky lists popular websites and details their bloat. Staggering numbers. &lt;a href=&#34;https://tonsky.me/blog/js-bloat/&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;&amp;#9888 React, Electron, and LLMs have a common purpose: the labour arbitrage theory of dev tool popularity&lt;/dt&gt;&lt;dd&gt;Baldur Bjarnason details how frameworks like react and their model standardses the software developer, allowing companies to replace their expensive platform specialists with more commodified generalists. &lt;a href=&#34;https://www.baldurbjarnason.com/2024/react-electron-llms-labour-arbitrage/&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;The quiet, pervasive devaluation of frontend&lt;/dt&gt;&lt;dd&gt;Josh Collinsworth deconstructs, in a very sensible way, the discourses and expectations put onto frontend development and how it leads to its develuation. &lt;a href=&#34;https://joshcollinsworth.com/blog/devaluing-frontend&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;The Decision to Leave Tech&lt;/dt&gt;&lt;dd&gt;Todd Libby details the reason that led him leave the tech world after years spent trying to increase awareness about web accessibility, just to burn out in the end. &lt;a href=&#34;https://toddl.dev/posts/the-decision-to-leave-tech/&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;A Rant about Front-end Development&lt;/dt&gt;&lt;dd&gt;Frank M Taylor explains everything he thinks went wrong with modern Front-end development. &lt;a href=&#34;https://blog.frankmtaylor.com/2024/06/20/a-rant-about-front-end-development/&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;Engineering for Slow Internet&lt;/dt&gt;&lt;dd&gt;brr (nickname) explains the pain of using modern software with very limited bandwidth. &lt;a href=&#34;https://brr.fyi/posts/engineering-for-slow-internet&#34;&gt;link&lt;/a&gt;&#xD;&lt;/dd&gt;&lt;dt&gt;I don&#39;t have time to learn React&lt;/dt&gt;&lt;dd&gt;Keith Cirkel criticizes the time consuming aspect of learning frontend frameworks. &lt;a href=&#34;https://www.keithcirkel.co.uk/i-dont-have-time-to-learn-react/&#34;&gt;link&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h2 id=&#34;adjacent-topics&#34; &gt;Adjacent topics&lt;a href=&#34;#adjacent-topics&#34; aria-label=&#34;Adjacent topics permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://www.theguardian.com/technology/2023/jul/25/joseph-weizenbaum-inventor-eliza-chatbot-turned-against-artificial-intelligence-ai&#34;&gt;Weizenbaum’s nightmares: how the inventor of the first chatbot turned against AI&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://visualstudiomagazine.com/articles/2024/01/25/copilot-research.aspx&#34;&gt;New GitHub Copilot Research Finds &#39;Downward Pressure on Code Quality&#39;&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.businessinsider.com/seo-heist-ai-generative-artificial-intelligence-google-2023-12&#34;&gt;Audacious new schemes known as &#39;SEO heists&#39; are posing thorny questions for Google&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gizmodo.com/chatgpt-ai-water-185000-gallons-training-nuclear-1850324249&#34;&gt;&#39;Thirsty&#39; AI: Training ChatGPT Required Enough Water to Fill a Nuclear Reactor&#39;s Cooling Tower, Study Finds&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ghuntley.com/fracture/&#34;&gt;Visual Studio Code is designed to fracture&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://viznut.fi/&#34;&gt;Inverted computer culture&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://samkriss.substack.com/p/the-internet-is-already-over&#34;&gt;The internet is already over&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.theverge.com/c/23998379/google-search-seo-algorithm-webpage-optimization&#34;&gt;The Perfect Webpage - How the internet reshaped itself around Google’s search algorithms — and into a world where websites look the same&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://philipwalton.com/articles/the-state-of-es5-on-the-web/&#34;&gt;The State of ES5 on the Web&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.baldurbjarnason.com/2024/liskovs-gun/&#34;&gt;Liskov&#39;s Gun: The parallel evolution of React and Web Components&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/questioning-the-js-frontend-paradigm" rel="self" type="text/html"></link>
    <summary type="html">An ever growing list of links questioning the JavaScript paradigm</summary>
  </entry>
  <entry>
    <title>Cross platform web app solutions</title>
    <updated>2025-10-20T14:08:56+02:00</updated>
    <id>https://thomasorus.com/cross-platform-web-app-solutions</id>
    <content type="html">&lt;h1 id=&#34;cross-platform-web-app-solutions&#34; &gt;Cross platform web app solutions&lt;a href=&#34;#cross-platform-web-app-solutions&#34; aria-label=&#34;Cross platform web app solutions permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;A discovery list of technical solutions to produce a desktop and/or mobile app using web technologies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently (all this is quite new to me) most solutions embed NodeJS inside them, making executing JavaScript the easiest part of the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Real trouble comes when talking about the UI, since each OS has different ways of rendering UI. Several solutions exist to make the programs multiplateform.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;node-and-webkit-solutions&#34; &gt;Node and Webkit solutions&lt;a href=&#34;#node-and-webkit-solutions&#34; aria-label=&#34;Node and Webkit solutions permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Those solutions package webkot (chromium) and nodejs inside the app and make it work as a fake app on the desktop. Works well but comes with a lot of bloat and heavy ram consumption.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://www.electronjs.org&#34;&gt;Electron&lt;/a&gt; is made by Github&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://nwjs.io/&#34;&gt;NW.js&lt;/a&gt; is made by Intel&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Overall both are in the same family but they are &lt;a href=&#34;https://www.electronjs.org/docs/development/electron-vs-nwjs&#34;&gt;differences between NW.js and Electron&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;node-and-existing-ui-frameworks&#34; &gt;Node and existing UI frameworks&lt;a href=&#34;#node-and-existing-ui-frameworks&#34; aria-label=&#34;Node and existing UI frameworks permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Since bringing chromium makes the program very big, there are solutions to bridge between web apps and existing, lighter UI frameworks. Most of the time then, the framework is used to create a bridge between HTML/CSS and the existing frameworks components, modules or UI API.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://docs.nodegui.org/&#34;&gt;NodeGui&lt;/a&gt; provides a bridge between HTML/CSS and QT.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;node-and-webviews&#34; &gt;Node and webviews&lt;a href=&#34;#node-and-webviews&#34; aria-label=&#34;Node and webviews permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Since all OSes can render webview, it&#39;s possible to ask for one at the OS level by providing a bridge. The problem with this solution might be that if the OS has an outdated webview engine, all modern HTML/CSS/JS solutions might not work?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://tauri.studio/&#34;&gt;Tauri&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://neutralino.js.org/&#34;&gt;Neutralino&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/webview/webview_deno&#34;&gt;Deno webview&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Except for neutralino, most projects of this type tends to use &lt;a href=&#34;https://github.com/webview/webview&#34;&gt;webview&lt;/a&gt;, a C/C++/Go library. Several bindings library for other languages already exist.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;others&#34; &gt;Others&lt;a href=&#34;#others&#34; aria-label=&#34;Others permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://sciter.com/&#34;&gt;Sciter&lt;/a&gt; is a binary that can be used to create web apps. But under the hood it&#39;s using a superset of JavaScript called &lt;a href=&#34;https://www.codeproject.com/articles/33662/tiscript-language-a-gentle-extension-of-javascript&#34;&gt;TIScript&lt;/a&gt;&#xD;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/c-smile/sciter-js-sdk&#34;&gt;Sciter JS&lt;/a&gt; seems to be Sciter but with common JavaScript, using the &lt;a href=&#34;https://bellard.org/quickjs/&#34;&gt;quick JS&lt;/a&gt; engine.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/cross-platform-web-app-solutions" rel="self" type="text/html"></link>
    <summary type="html">A list of cross platform web app solutions</summary>
  </entry>
  <entry>
    <title>Freelancing notes</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/freelancing-notes</id>
    <content type="html">&lt;h1 id=&#34;freelancing-notes&#34; &gt;Freelancing notes&lt;a href=&#34;#freelancing-notes&#34; aria-label=&#34;Freelancing notes permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This page is about freelance work related to web projects (design, user experience, development, counseling).&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-types-of-freelancers&#34; &gt;The types of freelancers&lt;a href=&#34;#the-types-of-freelancers&#34; aria-label=&#34;The types of freelancers permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;There are two types of freelancers that I know about in this field:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Mercenaries&lt;/dt&gt;&lt;dd&gt;They execute the work, do it fast and for various clients. Since they are just implementing and not leading the project, their rates is lower than experts.&lt;/dd&gt;&lt;dt&gt;Experts&lt;/dt&gt;&lt;dd&gt;They lead a project and sometimes implement it at the same time. They have less clients, for a longer period and a higher rate.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Both types are legitimate and needed in the field. Both have pros and cons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Mercenaries can&#39;t catch a break and need to operate on a tight schedule, but their rate, diversified skills and type of work make it more unlikely for them to be out of missions.&lt;/li&gt;&#xA;&lt;li&gt;Experts are less pressured into finding work all the time, but their expertise might not be needed all the time. They have a higher rate to compensate when they don&#39;t have any client.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What is sure is that both types need to build a network of clients.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;build-a-network&#34; &gt;Build a network&lt;a href=&#34;#build-a-network&#34; aria-label=&#34;Build a network permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It&#39;s always better to search for clients when you are not in need right away. One of the best ways of doing it is sending spontaneous applications to agencies you would want to work with. If they refuse your candidacy or don&#39;t answer it&#39;s not a problem, they may remember you when they have a specific need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Freelancing platforms can also be a good way of finding clients but there is a lot of competition that may pull rates down. Sometimes it may be better to have no deal than a bad one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s important to have a commercial relationships with clients. Sending emails to contacts to let them know you are available and trigger word of mouth is key. Making people remember you by sending them some news (for example a happy new year card) or thanking them when they refer you to another person is probably a good idea.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;cash-management&#34; &gt;Cash management&lt;a href=&#34;#cash-management&#34; aria-label=&#34;Cash management permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It&#39;s extremely important to have six months to one year of cash flow. And to build it, it&#39;s important to get paid in time and at a correct price. Most clients pay in the following sixty days after receiving the bill. But some can take months (agencies) to years (government or public missions) before paying. There are even cases where companies don&#39;t pay in the hope that the freelancer go bankrupt so the debt is cancelled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the country, clients may want to negotiate the price (it&#39;s always the case in France where I live, way less common in the United States for example). It can be hard to maintain you value and increase it afterward so try to not lower your prices to get a deal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When deciding of your daily rate, it&#39;s important to take these arguments into consideration:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;If you take 5 weeks of vacation each year it&#39;s 17 days of non-payed work.&lt;/li&gt;&#xA;&lt;li&gt;If you have an accident and can&#39;t work for a long time, you need an insurance for both medical fees and a substitue wage.&lt;/li&gt;&#xA;&lt;li&gt;A part of the rate needs to go to the cash flow that will help you live when there are no clients (6 months to 1 year of cash flow is necessary).&lt;/li&gt;&#xA;&lt;li&gt;As a freelancer you probably don&#39;t contribute to public retirement, so you need to finance it yourself through complementary systems (life insurance, real estate)&lt;/li&gt;&#xA;&lt;li&gt;Depending on the country where you are located, taxes can take a substantial amount of your rate.&lt;/li&gt;&#xA;&lt;li&gt;Depending of the type of company you have, you may need to pay an accountant each year.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Taking all these factors into consideration substantially lowers the money you earn as a freelancer. &lt;strong&gt;Overall, only around 50% of the price payed by the client is the real salary&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a freelancer you can only count on yourself and thus you need to create your own insurances. They are some period in the year (like summer, Christmas) where freelancers are not needed and even if it frees time to find new clients, it means you have to pay your bills with your cash flow.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;pricing&#34; &gt;Pricing&lt;a href=&#34;#pricing&#34; aria-label=&#34;Pricing permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;About pricing:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Hour rate pricing is rare.&lt;/li&gt;&#xA;&lt;li&gt;Daily rates are more common.&lt;/li&gt;&#xA;&lt;li&gt;Package pricing is common in the web.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you are a developer &lt;strong&gt;never do a package pricing&lt;/strong&gt; and favor daily or monthly rates, except if you are super sure about the scope of the project and protected by the quote. In other type of works (design, user experience) package pricing is often the norm and requires to be very careful when writing quotes.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;quotes&#34; &gt;Quotes&lt;a href=&#34;#quotes&#34; aria-label=&#34;Quotes permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Good quotes are the ultimate protection for freelancers and can help building a more professional relationship with the client. Quotes should always list what is in the scope of the project and what is not in. This way you can refuse a sudden change or propose a new quote for a project change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here&#39;s a list of basic things to think about when making a quote.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;design&#34; &gt;Design&lt;a href=&#34;#design&#34; aria-label=&#34;Design permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Indicate a fixed number of initial design concepts that will be given to the client to help him decide the direction of the design.&lt;/li&gt;&#xA;&lt;li&gt;List the number of pages, templates, or components that will be created once the direction is chosen.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;text&#34; &gt;Text&lt;a href=&#34;#text&#34; aria-label=&#34;Text permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Be clear that you are not creating the text content for the client, nor inputting text or creating his pages into his content management system.&lt;/li&gt;&#xA;&lt;li&gt;If the client wants you to do all this, add into the quote a maximum length and price for each text, the time required to input the text, and the list of pages required, and get payed.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;graphics-and-photographs&#34; &gt;Graphics and photographs&lt;a href=&#34;#graphics-and-photographs&#34; aria-label=&#34;Graphics and photographs permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Be clear that the client has to provide graphic files (logos, icons for example) and the file format you are expecting. If the client doesn&#39;t want to do it by himself, list what is needed and add it to the quote as extra work.&lt;/li&gt;&#xA;&lt;li&gt;Be clear that the client has to provide the photographs for the website. Propose a list of stock photograph websites where he can choose what he wants. If the client doesn&#39;t want to do it itself, prepare a separate bill with the images you will buy for the project.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;development&#34; &gt;Development:&lt;a href=&#34;#development&#34; aria-label=&#34;Development: permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&lt;li&gt;Detail the goal of the project and the specific parts you are working on and what is required by the client for you to do your work.&lt;/li&gt;&#xA;&lt;li&gt;If the project has an intricate codebase or list of features, detail what you will work on and what you will not work on.&lt;/li&gt;&#xA;&lt;li&gt;List the languages, technologies, libraries, frameworks required.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;browser-testing&#34; &gt;Browser testing&lt;a href=&#34;#browser-testing&#34; aria-label=&#34;Browser testing permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Be clear that browser testing is about allowing a similar experience on all browsers, not a pixel perfect render as it&#39;s impossible.&lt;/li&gt;&#xA;&lt;li&gt;List the browsers used for the tests, and which one won&#39;t be tested.&lt;/li&gt;&#xA;&lt;li&gt;If the client needs to support an old browser (ex: IE11) then the development rate should be higher and it should be clear on the quote (some clients abandon this idea once they see it&#39;s more expensive).&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;tech-support&#34; &gt;Tech support&lt;a href=&#34;#tech-support&#34; aria-label=&#34;Tech support permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;If you don&#39;t provide website hosting be clear about it. If the client want you to open an account for hosting their project and put it online, add it to the quote. Be clear that outside installing the website, you are not the tech support for upcoming updates or problems.&lt;/li&gt;&#xA;&lt;li&gt;If you do provide hosting, list what is required by the client (domain name, type of hosting, mails) and what is not.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;seo&#34; &gt;SEO&lt;a href=&#34;#seo&#34; aria-label=&#34;SEO permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Be clear that even you can&#39;t guarantee increases in search engine rankings, even if you work in the SEO business.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;contract&#34; &gt;Contract&lt;a href=&#34;#contract&#34; aria-label=&#34;Contract permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;When the quote is accepted, provide a contract to the client. It&#39;s the last moment you can set rules with him about how things are going to work out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be sure the client knows that:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;The project can only progress if he is involved and that any lack of feedback required for the continuation of the project may halt it.&lt;/li&gt;&#xA;&lt;li&gt;The freelancer can&#39;t be responsible for any delay due to the lack of feedback from the client.&lt;/li&gt;&#xA;&lt;li&gt;He can change its mind but that an additional quote will be made.&lt;/li&gt;&#xA;&lt;li&gt;If he is not satisfied he can terminate the contract but will have to pay the time already spent working on the project.&lt;/li&gt;&#xA;&lt;li&gt;Any legal stuff that you think is important (liability, payment schedule, intellectual property rights, work display)&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;working-with-clients&#34; &gt;Working with clients&lt;a href=&#34;#working-with-clients&#34; aria-label=&#34;Working with clients permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;When clients hire a freelancer they basically want a facilitator, so everything should be done to keep the client reassured.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To avoid problems and facilitate the work:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Get as much scope as you can.&lt;/li&gt;&#xA;&lt;li&gt;Communicate to get all the steps of the projects.&lt;/li&gt;&#xA;&lt;li&gt;Find at which step of the project you have to intervene.&lt;/li&gt;&#xA;&lt;li&gt;Provide a ready-made benefit.&lt;/li&gt;&#xA;&lt;li&gt;If you have to work with a team, choose the people you want to work with.&lt;/li&gt;&#xA;&lt;li&gt;Never put yourself in a position where you can be faulted.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Transparency and communication are keys to a good working relationship.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Give daily feedback and/or deliveries.&lt;/li&gt;&#xA;&lt;li&gt;No need to write a novel each day, just a short notice is enough.&lt;/li&gt;&#xA;&lt;li&gt;Ask the client if everything is OK on his side.&lt;/li&gt;&#xA;&lt;li&gt;If you need feedback and mails are not working, make a voice call.&lt;/li&gt;&#xA;&lt;li&gt;Never apologize of being communicative.&lt;/li&gt;&#xA;&lt;li&gt;If you are working remotely, never apologize for working remotely.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When something is going bad, for example budget is exploding or demands are increasing, impose your way of working by saying &lt;em&gt;no&lt;/em&gt; but provide &lt;em&gt;options&lt;/em&gt;. Never come with empty hands as the goal is to simplify the process and save time.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;type-of-company&#34; &gt;Type of company&lt;a href=&#34;#type-of-company&#34; aria-label=&#34;Type of company permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Each country has its own rules about freelancing. However european freelancers can have a company in Estonia with an e-residency certificate. It costs around 100 euros a month and provides services for everything like invoices and payment. You may still have to pay your residency country charges.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/freelancing-notes" rel="self" type="text/html"></link>
    <summary type="html">Personal notes on freelancing</summary>
  </entry>
  <entry>
    <title>Raspberry Pi Distros</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/raspberry-pi-distros</id>
    <content type="html">&lt;h1 id=&#34;raspberry-pi-distributions&#34; &gt;Raspberry Pi distributions&lt;a href=&#34;#raspberry-pi-distributions&#34; aria-label=&#34;Raspberry Pi distributions permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Despite the hype around the fourth version of the Pi, most desktop distributions run very slowly on it and provide poor user experience. I&#39;ve tried all the distros listed below and gave them ratings on these topics:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;User Experience&lt;/li&gt;&#xA;&lt;li&gt;Responsiveness&lt;/li&gt;&#xA;&lt;li&gt;Software support&lt;/li&gt;&#xA;&lt;li&gt;Easy to install&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The ratings are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Perfect&lt;/li&gt;&#xA;&lt;li&gt;Average&lt;/li&gt;&#xA;&lt;li&gt;Poor&lt;/li&gt;&#xA;&lt;li&gt;Terrible&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;raspbian-raspberry-pi-os&#34; &gt;Raspbian (Raspberry Pi OS)&lt;a href=&#34;#raspbian-raspberry-pi-os&#34; aria-label=&#34;Raspbian (Raspberry Pi OS) permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;User Experience&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Average&lt;/strong&gt; It&#39;s ugly but coherent and easy to use&lt;/dd&gt;&lt;dt&gt;Responsiveness&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Average&lt;/strong&gt; Most things are fast but some programs (mostly Electron apps) struggle&lt;/dd&gt;&lt;dt&gt;Software support&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Perfect&lt;/strong&gt; It&#39;s an Ubuntu base and the official OS&lt;/dd&gt;&lt;dt&gt;Easy to install&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Perfect&lt;/strong&gt; Plug and play and follow the guide&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Raspbian excels in nothing but is not terrible in anything. It&#39;s too bad it struggles with Electron apps. Supports hardware acceleration.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;dietpi&#34; &gt;Dietpi&lt;a href=&#34;#dietpi&#34; aria-label=&#34;Dietpi permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;User Experience&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Poor&lt;/strong&gt; Dietpi proposes ready-made basic desktops (Mate, XFCE, LXQTm, LXDE) that are ugly and sometimes does not work (sound cursor in XFCE).&lt;/dd&gt;&lt;dt&gt;Responsiveness&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Perfect&lt;/strong&gt; Everything is fast or fast enough, even Electron Apps are usable&lt;/dd&gt;&lt;dt&gt;Software support&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Perfect&lt;/strong&gt; It&#39;s based on Raspbian and comes with it&#39;s own list of ready-made software&lt;/dd&gt;&lt;dt&gt;Easy to install&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Poor&lt;/strong&gt; Small iso but very long install with terminal based menus, takes a lot of time and not everything is clear&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Dietpi is probably the best in performance, but only for people with some skills at setting up their own environnement. Supports hardware acceleration.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;manjaro&#34; &gt;Manjaro&lt;a href=&#34;#manjaro&#34; aria-label=&#34;Manjaro permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;User Experience&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Perfect&lt;/strong&gt; It&#39;s beautiful, coherent and easy to use&lt;/dd&gt;&lt;dt&gt;Responsiveness&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Poor&lt;/strong&gt; It&#39;s still usable but worse than Raspbian, no hardware acceleration support for video&lt;/dd&gt;&lt;dt&gt;Software support&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Average&lt;/strong&gt; Based on Arch Linux, most things are available but most configuration tweaks are for Raspbian/Ubuntu&lt;/dd&gt;&lt;dt&gt;Easy to install&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Average&lt;/strong&gt; There&#39;s a few terminal screens but it&#39;s quick and works fine&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;If Manjaro was a bit snappier and did not lack some performance tweaks available to Ubuntu based distros (like hardware acceleration) it would be my default distribution.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;ubuntu&#34; &gt;Ubuntu&lt;a href=&#34;#ubuntu&#34; aria-label=&#34;Ubuntu permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;User Experience&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Average&lt;/strong&gt; The classic gnome Ubuntu&lt;/dd&gt;&lt;dt&gt;Responsiveness&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Terrible&lt;/strong&gt; It&#39;s so slow for everything it&#39;s almost unusable&lt;/dd&gt;&lt;dt&gt;Software support&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Perfect&lt;/strong&gt; It&#39;s Ubuntu so everything is there&lt;/dd&gt;&lt;dt&gt;Easy to install&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;Perfect&lt;/strong&gt; The classic Ubuntu install experience, everything is clear&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Ubuntu is so slow I could not be bothered to use it for anything. Also it&#39;s strange because hardware acceleration is supported but I could not make it work inside chrome for video decoding.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/raspberry-pi-distros" rel="self" type="text/html"></link>
    <summary type="html">Distros I tested with for a Raspberry Pi</summary>
  </entry>
  <entry>
    <title>ffmpeg commands</title>
    <updated>2021-11-12T15:47:36Z</updated>
    <id>https://thomasorus.com/ffmpeg-commands</id>
    <content type="html">&lt;h1 id=&#34;ffmpeg-commands&#34; &gt;ffmpeg commands&lt;a href=&#34;#ffmpeg-commands&#34; aria-label=&#34;ffmpeg commands permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This page contains ffmpeg commands that I find useful. ffmpeg is super powerful and can sometimes be enough for quick media manipulations. For more commands check the &lt;a href=&#34;https://ffmpeg.org/ffmpeg.html&#34;&gt;ffmpeg documentation page&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;cut-a-part-of-a-video&#34; &gt;Cut a part of a video :&lt;a href=&#34;#cut-a-part-of-a-video&#34; aria-label=&#34;Cut a part of a video : permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;code&gt;ffmpeg -i input.mp4 -ss 00:00 -to 00:10 -c:v libx264 -crf 30 output.mp4&lt;/code&gt;&#xA;&lt;ul&gt;&lt;li&gt;use &lt;code&gt;ss&lt;/code&gt; to select the starting and ending time&lt;/li&gt;&#xA;&lt;li&gt;to avoid re-enconding the video, use stream copy via &lt;code&gt;-c&lt;/code&gt;, define the video with &lt;code&gt;v&lt;/code&gt; and the codec (&lt;code&gt;libx264&lt;/code&gt; in the example)&lt;/li&gt;&#xA;&lt;li&gt;use &lt;code&gt;-crf&lt;/code&gt; to define quality (lesser is better)&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;concatenate-videos&#34; &gt;Concatenate videos&lt;a href=&#34;#concatenate-videos&#34; aria-label=&#34;Concatenate videos permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;code&gt;ffmpeg -f concat -i input.txt -c copy output.mp4&lt;/code&gt;&#xA;&#xA;&lt;p&gt;Create a text file with the files you want to concatenate into a single video or audio file.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;file &#39;video1.mp4&#39;&#xA;file &#39;video2.mp4&#39;&#xA;file &#39;video4.mp4&#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Use &lt;code&gt;-c copy&lt;/code&gt; to avoid re-enconding the videos (they need to have the same base codec)&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;add-audio-to-video&#34; &gt;Add audio to video&lt;a href=&#34;#add-audio-to-video&#34; aria-label=&#34;Add audio to video permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;code&gt;ffmpeg -i input.mp4 -i input.mp3 -c copy -map 0:v:0 -map 1:a:0 output.mp4&lt;/code&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;the &lt;code&gt;-c copy&lt;/code&gt; avoid re-encoding the streams&lt;/li&gt;&#xA;&lt;li&gt;the first &lt;code&gt;-map&lt;/code&gt; defines where to start the audio in the video file&lt;/li&gt;&#xA;&lt;li&gt;the second &lt;code&gt;-map&lt;/code&gt; defines where to start the audio in the audio file&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;encode-audio-file-to-mp3&#34; &gt;Encode audio file to mp3&lt;a href=&#34;#encode-audio-file-to-mp3&#34; aria-label=&#34;Encode audio file to mp3 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;code&gt;ffmpeg -i input.opus -ar 44100 -ac 2 -b:a 128k output.mp3&lt;/code&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;code&gt;-ar&lt;/code&gt; defines the frequency (here it&#39;s &lt;code&gt;44100&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;-ac&lt;/code&gt; sets the number of audio channels (here &lt;code&gt;2&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;-b:a&lt;/code&gt; defines the bitrate of the file (here &lt;code&gt;128k&lt;/code&gt;)&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;add-metatags-to-audio-file&#34; &gt;Add metatags to audio file&lt;a href=&#34;#add-metatags-to-audio-file&#34; aria-label=&#34;Add metatags to audio file permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;code&gt;ffmpeg -i input.mp3 -i img.jpg -c copy -map 0 -map 1 -metadata title=&#34;title&#34; output.mp3&lt;/code&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;code&gt;-i img.jpg&lt;/code&gt; adds an image to the audio file&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;-c copy&lt;/code&gt; to avoid re-encoding the image file&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;-map 0 -map 1&lt;/code&gt; position the image&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;-metadata title=&#34;title&#34;&lt;/code&gt; defines the title of the file in the metadatas&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/ffmpeg-commands" rel="self" type="text/html"></link>
    <summary type="html">A list of ffmpeg commands for basic media modification</summary>
  </entry>
  <entry>
    <title>Understanding memory bits bytes addresses and hexadecimal</title>
    <updated>2023-03-03T16:22:26Z</updated>
    <id>https://thomasorus.com/understanding-memory-bits-bytes-addresses-and-hexadecimal</id>
    <content type="html">&lt;h1 id=&#34;understanding-memory-bits-bytes-addresses-and-hexadecimal&#34; &gt;Understanding memory, bits, bytes, addresses and hexadecimal&lt;a href=&#34;#understanding-memory-bits-bytes-addresses-and-hexadecimal&#34; aria-label=&#34;Understanding memory, bits, bytes, addresses and hexadecimal permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Memory can be understood as a space that is composed of &lt;strong&gt;bits&lt;/strong&gt;. Each time something happens in a program you write or get something out of memory by manipulating bits.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/memory01.jpg&#34; alt=&#34;A visualization of the bits that compose the memory of the fake game console Pico8. figcaption&#34;&gt;&lt;figcaption&gt;A visualization of the bits that compose the memory of the fake game console Pico8. | &lt;small&gt;&lt;a href=&#34;/uploaded/memory01.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;The hardware then takes what is in memory and communicates with the machine. In most hardwares, the memory is split between different things like drawing pixels, playing sounds, changing the state of the application.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/memory02.jpg&#34; alt=&#34;In different colors the different parts of the memory of Pico8 associated with different tasks like screen and sound. figcaption&#34;&gt;&lt;figcaption&gt;In different colors the different parts of the memory of Pico8 associated with different tasks like screen and sound. | &lt;small&gt;&lt;a href=&#34;/uploaded/memory02.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Since manipulating &lt;strong&gt;bits&lt;/strong&gt; is complicated, bits are combined together into &lt;strong&gt;bytes&lt;/strong&gt;. And to ease their manipulation, bytes are identified by a number called an &lt;strong&gt;address&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/memory03.jpg&#34; alt=&#34;A byte made of 8 bits in orange in Pico8 as well as its address at the bottom left of the image. figcaption&#34;&gt;&lt;figcaption&gt;A byte made of 8 bits in orange in Pico8 as well as its address at the bottom left of the image. | &lt;small&gt;&lt;a href=&#34;/uploaded/memory03.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;what-is-binary&#34; &gt;What is binary&lt;a href=&#34;#what-is-binary&#34; aria-label=&#34;What is binary permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;When you write numbers, you use the decimal system which is made from 10 numerals:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0&#xA;1&#xA;2&#xA;3&#xA;4&#xA;5&#xA;6&#xA;7&#xA;8&#xA;9&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But what happens when we don&#39;t have a numeral for the next number? We move the first digit and the first digit takes a new meaning.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 0&#xA; 1&#xA; 2&#xA; 3&#xA; .&#xA; 8&#xA; 9&#xA;10&#xA;11&#xA;12&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But computers only understand &lt;code&gt;0&lt;/code&gt; and &lt;code&gt;1&lt;/code&gt;, so how do you &lt;em&gt;translate&lt;/em&gt; binary into numbers?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To write other numerals from &lt;code&gt;2&lt;/code&gt; to &lt;code&gt;9&lt;/code&gt;, you have to compose those numerals with a set of &lt;code&gt;0&lt;/code&gt; and &lt;code&gt;1&lt;/code&gt;. For example, in binary, to write &lt;code&gt;2&lt;/code&gt;, you write &lt;code&gt;10&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Numeral - Binary&#xA;0       -  0&#xA;1       -  1&#xA;2       - 10&#xA;3       - 11&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But we are now out of digits to create &lt;code&gt;3&lt;/code&gt;. So just like with numerals, we add a new digit:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Numeral - Binary&#xA;0       -   0&#xA;1       -   1&#xA;2       -  10&#xA;3       -  11&#xA;4       - 100&#xA;5       - 101&#xA;6       - 110&#xA;7       - 111&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And it continues for &lt;code&gt;8&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Numeral - Binary&#xA;0       -    0&#xA;1       -    1&#xA;2       -   10&#xA;3       -   11&#xA;4       -  100&#xA;5       -  101&#xA;6       -  110&#xA;7       -  111&#xA;8       - 1000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The next set of numerals will be at &lt;code&gt;16&lt;/code&gt; (&lt;code&gt;8 + 8&lt;/code&gt;) and then at 32 (&lt;code&gt;16 + 16&lt;/code&gt;) and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means that in a &lt;strong&gt;byte&lt;/strong&gt;, which is made of &lt;strong&gt;8 bits&lt;/strong&gt; who are themselves &lt;strong&gt;binaries&lt;/strong&gt; (0 and 1), the maximum number you can write is &lt;code&gt;255&lt;/code&gt;, composed by writing &lt;code&gt;11111111&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, a byte contains only 256 numerals.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/memory05.jpg&#34; alt=&#34;A visualization of the bytes of Pico8 with the second column showing the calculated number generated by the bits of the last column. figcaption&#34;&gt;&lt;figcaption&gt;A visualization of the bytes of Pico8 with the second column showing the calculated number generated by the bits of the last column. | &lt;small&gt;&lt;a href=&#34;/uploaded/memory05.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;hexadecimal&#34; &gt;Hexadecimal&lt;a href=&#34;#hexadecimal&#34; aria-label=&#34;Hexadecimal permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Hexadecimal is another type of numerals used in programming. Instead of going from &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;9&lt;/code&gt;, hexadecimal goes from &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;15&lt;/code&gt; without adding a &lt;code&gt;1&lt;/code&gt; numeral to count over &lt;code&gt;9&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, hexadecimal uses letters, from &lt;code&gt;A&lt;/code&gt; to &lt;code&gt;F&lt;/code&gt; as new digits.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Numeral - Binary - Hexadecimal&#xA; 0      -    0   -  1&#xA; 1      -    1   -  2&#xA; 2      -   10   -  3&#xA; 3      -   11   -  3&#xA; 4      -  100   -  4&#xA; 5      -  101   -  5&#xA; 6      -  110   -  6&#xA; 7      -  111   -  7&#xA; 8      - 1000   -  8&#xA; 9      -        -  9&#xA;10      -        -  A&#xA;11      -        -  B&#xA;12      -        -  C&#xA;13      -        -  D&#xA;14      -        -  E&#xA;15      -        -  F&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When hexadecimal goes beyond 15, it uses binaries again.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Numeral - Binary - Hexadecimal&#xA; 0      -    0   -  1&#xA; 1      -    1   -  2&#xA; 2      -   10   -  3&#xA; 3      -   11   -  3&#xA; 4      -  100   -  4&#xA; 5      -  101   -  5&#xA; 6      -  110   -  6&#xA; 7      -  111   -  7&#xA; 8      - 1000   -  8&#xA; 9      -        -  9&#xA;10      -        -  A&#xA;11      -        -  B&#xA;12      -        -  C&#xA;13      -        -  D&#xA;14      -        -  E&#xA;15      -        -  F&#xA;16      -        - 10&#xA;17      -        - 11&#xA;18      -        - 12&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The idea between hexadecimal is to be able to translate big numbers using only two digits. For example, &lt;code&gt;FF&lt;/code&gt; in hexadecimal means &lt;code&gt;255&lt;/code&gt; digits.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/memory07.jpg&#34; alt=&#34;On the third column the FF hexadecimal can be seen. figcaption&#34;&gt;&lt;figcaption&gt;On the third column the FF hexadecimal can be seen. | &lt;small&gt;&lt;a href=&#34;/uploaded/memory07.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Addresses can also be written in hexadecimal.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;credits&#34; &gt;Credits&lt;a href=&#34;#credits&#34; aria-label=&#34;Credits permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This page is a partial transcript of this &lt;a href=&#34;https://www.youtube.com/watch?v=e3nUPbK3Jrw&#34;&gt;video&lt;/a&gt; by Lazy Devs Academy. The captures are also made from the video.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/understanding-memory-bits-bytes-addresses-and-hexadecimal" rel="self" type="text/html"></link>
    <summary type="html">A memo about how memory works in programming and how to access it</summary>
  </entry>
  <entry>
    <title>Sublime Text Configuration</title>
    <updated>2021-11-20T22:07:58Z</updated>
    <id>https://thomasorus.com/sublime-text-configuration</id>
    <content type="html">&lt;h1 id=&#34;sublime-text-configuration&#34; &gt;Sublime Text Configuration&lt;a href=&#34;#sublime-text-configuration&#34; aria-label=&#34;Sublime Text Configuration permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Sublime Text is a &lt;a href=&#34;https://www.sublime&#34;&gt;commercial source code editor&lt;/a&gt;. It natively supports many programming languages and markup languages. Users can expand its functionality with plugins, typically community-built and maintained under free-software licenses. To facilitate plugins, Sublime Text features a Python API.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sublime Text had a lot of success with web developpers from around 2010 to 2016-2017. In 2015 Microsoft released Visual Studio Code, which quickly replaced Sublime Text as the editor of choice for the web developer crowd (including myself) due to its mix of text editor and IDE features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still after years of Visual Studio Code I recently came back to Sublime Text with the release of the fourth version in 2021. The main reasons are speed, quality of text rendering, aesthetics and workflow.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;my-preferences&#34; &gt;My preferences&lt;a href=&#34;#my-preferences&#34; aria-label=&#34;My preferences permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;{&#xA;    &#34;find_selected_text&#34;: true,&#xA;    &#34;highlight_line&#34;: true,&#xA;    &#34;hot_exit&#34;: false,&#xA;    &#34;mini_diff&#34;: true,&#xA;    &#34;show_git_status&#34;: true,&#xA;    &#34;show_definitions&#34;: false,&#xA;    &#34;trim_trailing_white_space_on_save&#34;: &#34;all&#34;,&#xA;    &#34;trim_only_modified_white_space&#34;: false,&#xA;    &#34;word_wrap&#34;: true,&#xA;    &#34;theme&#34;: &#34;Adaptive.sublime-theme&#34;,&#xA;    &#34;ignored_packages&#34;: [&#xA;        &#34;Markdown&#34;,&#xA;        &#34;Vintage&#34;,&#xA;    ],&#xA;    &#34;color_scheme&#34;: &#34;Mariana.sublime-color-scheme&#34;,&#xA;    &#34;font_face&#34;: &#34;Ibm Plex Mono&#34;,&#xA;    &#34;font_size&#34;: 10.0,&#xA;    &#34;line_padding_bottom&#34;: 1,&#xA;    &#34;line_padding_top&#34;: 1,&#xA;    &#34;auto_hide_menu&#34;: true,&#xA;    &#34;dark_color_scheme&#34;: &#34;Mariana.sublime-color-scheme&#34;,&#xA;    &#34;light_color_scheme&#34;: &#34;Celeste.sublime-color-scheme&#34;,&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2 id=&#34;my-plugins&#34; &gt;My plugins&lt;a href=&#34;#my-plugins&#34; aria-label=&#34;My plugins permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Sublime Text uses a plugin named &lt;em&gt;Package Control&lt;/em&gt; to install other plugins.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Open the Tools menu&lt;/li&gt;&#xA;&lt;li&gt;Select Install Package Control…&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Once it&#39;s install, use &lt;code&gt;ctrl + shift + p&lt;/code&gt; and search for &lt;code&gt;Package Control: Install Package&lt;/code&gt;. The packages I use:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;a href=&#34;https://github.com/sh4nks/sublime-&#34;&gt;Auto Close HTML Tags&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Closes HTML tags after a &lt;code&gt;&gt;&lt;/code&gt;.&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://github.com/liamcain/AutoFileName&#34;&gt;AutoFileName&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Autocompletes filenames.&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://facelessuser.github.io/BracketHighlighter/&#34;&gt;BracketHilighter&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Hilights the corresponding brackets both in text and in the vertical line numbers column.&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://github.com/leonid-shevtsov/ClickableUrls_SublimeText&#34;&gt;Clickable URL&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Makes URLs in files clickable.&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://packagecontrol.io/packages/Color%20Highlighter&#34;&gt;Color Highlighter&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Shows colors inside the editor.&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://bitbucket.org/dougty/sublime-compare-side-by-side/src/master/&#34;&gt;Compare Side by Side&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Allows to compare two files and automatically find the differences&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://github.com/spadgos/sublime-jsdocs&#34;&gt;DocBlockr&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Helps with writing documentation and code comments&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://emmet.io/&#34;&gt;Emmet&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Helps creating snippets of HTML&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://github.com/jisaacks/GitGutter&#34;&gt;GitGutter&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Show information about the current Git Repository and last modifications&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://github.com/victorporof/Sublime-HTMLPrettify&#34;&gt;HTML/CSS/JS Prettify&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Code formater for HTML, CSS, JS and a few JS frameworks&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://sublime&#34;&gt;Markdown Editing&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Syntax for markdown&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://github.com/tssajo/Minify&#34;&gt;Minify&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Minifies CSS, HTML, JavaScript, JSON or SVG files&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://packagecontrol.io/packages/Sass&#34;&gt;Sass&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Sass and SCSS support&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://github.com/benweier/Schemr&#34;&gt;Schemr&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Changes color and themes quickly&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://github.com/titoBouzout/SideBarEnhancements&#34;&gt;SideBarEnhancements&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Adds a lot of features to the sidebar when right clicking&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://sublimegit.readthedocs.io/en/latest/&#34;&gt;SublimeGit&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Adds support for most Git actions&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;http://www.sublimelinter.com/en/stable/&#34;&gt;SublimeLinter&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Adds linting to Sublime Text. Can then be combined with specific language linters like &lt;a href=&#34;https://github.com/SublimeLinter/SublimeLinter-csslint&#34;&gt;csslint&lt;/a&gt; or &lt;a href=&#34;https://github.com/SublimeLinter/SublimeLinter-jshint&#34;&gt;jshint&lt;/a&gt;&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://www.mfuentesg.dev/SyncSettings/&#34;&gt;SyncSettings&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Allows to save Sublime Text settings and plugin list inside a Github Gist&lt;/dd&gt;&lt;dt&gt;&lt;a href=&#34;https://packagecontrol.io/packages/Terminal&#34;&gt;Terminal&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Opens a terminal inside the current folder&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/sublime-text-configuration" rel="self" type="text/html"></link>
    <summary type="html">My Sublime Text configuration</summary>
  </entry>
  <entry>
    <title>Algorithms and data structures</title>
    <updated>2022-10-13T10:58:02Z</updated>
    <id>https://thomasorus.com/algorithms-and-data-structures</id>
    <content type="html">&lt;h1 id=&#34;algorithms-and-data-structures&#34; &gt;Algorithms and data structures&lt;a href=&#34;#algorithms-and-data-structures&#34; aria-label=&#34;Algorithms and data structures permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;These are my notes for the &lt;a href=&#34;https://frontendmasters.com/courses/algorithms/&#34;&gt;algorithm course of frontend masters&lt;/a&gt;. This first page contains the introduction for the course, and the subsequent sections are listed below.&lt;/p&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;All examples in these pages are in TypeScript.&lt;/aside&gt;&#xA;&#xA;&lt;h2 id=&#34;big-o&#34; &gt;Big O&lt;a href=&#34;#big-o&#34; aria-label=&#34;Big O permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Big O is a generalized way to be able to understand how an algorithm will react as the input grows. It helps take decisions on which data structures and algorithms to use and how the programs will perform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically: as your input grows, how fast does computation or memory grows?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Important concepts:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Growth is with respect to the input&lt;/li&gt;&#xA;&lt;li&gt;Constants are dropped&lt;/li&gt;&#xA;&lt;li&gt;Worst case is usually the way we measure&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;h3 id=&#34;growth-is-with-respect-to-the-input&#34; &gt;Growth is with respect to the input&lt;a href=&#34;#growth-is-with-respect-to-the-input&#34; aria-label=&#34;Growth is with respect to the input permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function sum_char_codes(n: string): number {&#xA;    let sum = 0;&#xA;    for (let i = 0; i &lt;span&gt;&lt;&lt;/span&gt; n.length; ++i) {&#xA;        sum += n.charCodeAt(i);&#xA;    }&#xA;    return sum;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To tell how the program grows, the easiest way is to look for loops. This code counts the sum of characters in a string. For each new character added, a new loop has to be done. It means that it grows linearly. If there&#39;s 50% more characters, it will take 50% more time. It&#39;s called &lt;code&gt;O(N)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;constants-are-dropped&#34; &gt;Constants are dropped&lt;a href=&#34;#constants-are-dropped&#34; aria-label=&#34;Constants are dropped permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;So what happens when we add a new loop?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function sum_char_codes(n: string): number {&#xA;    let sum = 0;&#xA;    for (let i = 0; i &lt;span&gt;&lt;&lt;/span&gt; n.length; ++i) {&#xA;        sum += n.charCodeAt(i);&#xA;    }&#xA;    for (let i = 0; i &lt;span&gt;&lt;&lt;/span&gt; n.length; ++i) {&#xA;        sum += n.charCodeAt(i);&#xA;    }&#xA;    return sum;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this example the loop happens twice, so the reflex would be to think it takes twice the time or &lt;code&gt;O(2N)&lt;/code&gt;. But it&#39;s not correct: the goal is to describe &lt;strong&gt;the growth&lt;/strong&gt; of the algorithm, not how much time exactly it takes or how much CPU it will use. The number of times it is executed does not change it&#39;s growth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in this case, the correct notation would be &lt;code&gt;O(2^N)&lt;/code&gt;. This is why &lt;strong&gt;constants are dropped&lt;/strong&gt; in Big O notation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example of why constants are not a good indicator, with N as the input:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;N = 1, O(10N) = 10, O(N^2) = 1&#xA;N = 5, O(10N) = 50, O(N^2) = 25&#xA;N = 100, O(10N) = 1,000, O(N^2) = 10,000 // 10x bigger&#xA;N = 1000, O(10N) = 10,000, O(N^2) = 1,000,000 // 100x bigger&#xA;N = 10000, O(10N) = 100,000, O(N^2) = 100,000,000 // 1000x bigger&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3 id=&#34;consider-the-worst-case&#34; &gt;Consider the worst case&lt;a href=&#34;#consider-the-worst-case&#34; aria-label=&#34;Consider the worst case permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function sum_char_codes(n: string): number {&#xA;    let sum = 0;&#xA;    for (let i = 0; i &lt;span&gt;&lt;&lt;/span&gt; n.length; ++i) {&#xA;        const charCode = n.charCodeAt(i);&#xA;        // Capital E&#xA;        if (charCode === 69) {&#xA;            return sum;&#xA;        }&#xA;        sum += charCode;&#xA;    }&#xA;    return sum;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this example, the &lt;code&gt;sum&lt;/code&gt; is returned when &lt;code&gt;E&lt;/code&gt; is encountered, so logically the growth could be &lt;code&gt;O(n - x)&lt;/code&gt; where x is the number of characters skipped after &lt;code&gt;E&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But since we don&#39;t know where &lt;code&gt;E&lt;/code&gt; is located (it could be at the end, the start, the middle), we consider the worst case scenario, and it means that this growth is &lt;code&gt;O(n)&lt;/code&gt;, as if &lt;code&gt;E&lt;/code&gt; was the last character of the string.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;complexity&#34; &gt;Complexity&lt;a href=&#34;#complexity&#34; aria-label=&#34;Complexity permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Some algorithms are notoriously heavy in operations and are therefore not recommended, and their Big O notation helps to identify them, as per the graph below (&lt;a href=&#34;https://www.bigocheatsheet.com/&#34;&gt;source&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;svg width=&#34;800&#34; height=&#34;400&#34; viewBox=&#34;0 0 800 500&#34; style=&#34;max-width:60ch; width:100%; font-size:1rem;&#34;&gt;&#xA;&lt;path d=&#34;M50 0 L 50 450 L 800 450&#34; fill=&#34;transparent&#34; stroke=&#34;black&#34; stroke-width=&#34;2&#34;&gt;&lt;/path&gt;&#xA;&lt;path d=&#34;M50 448 L 800 448&#34; fill=&#34;transparent&#34; stroke=&#34;black&#34; stroke-width=&#34;2&#34;&gt;&lt;/path&gt;&#xA;&lt;text x=&#34;700&#34; y=&#34;438&#34; fill=&#34;black&#34;&gt;O(log n), O(1)&lt;/text&gt;&#xA;&lt;path d=&#34;M50 450 L 800 400&#34; fill=&#34;transparent&#34; stroke=&#34;black&#34; stroke-width=&#34;2&#34;&gt;&lt;/path&gt;&#xA;&lt;text x=&#34;760&#34; y=&#34;390&#34; fill=&#34;black&#34;&gt;O(n)&lt;/text&gt;&#xA;&lt;path d=&#34;M50 450 Q 400 350, 800 150&#34; fill=&#34;transparent&#34; stroke=&#34;black&#34; stroke-width=&#34;2&#34;&gt;&lt;/path&gt;&#xA;&lt;text x=&#34;630&#34; y=&#34;190&#34; fill=&#34;black&#34;&gt;O(n log n)&lt;/text&gt;&#xA;&lt;path d=&#34;M50 450 Q 180 380, 250 0&#34; fill=&#34;transparent&#34; stroke=&#34;black&#34; stroke-width=&#34;2&#34;&gt;&lt;/path&gt;&#xA;&lt;text x=&#34;260&#34; y=&#34;30&#34; fill=&#34;black&#34;&gt;O(n^2)&lt;/text&gt;&#xA;&lt;path d=&#34;M50 450 C 100 430, 120 350, 120 0&#34; fill=&#34;transparent&#34; stroke=&#34;black&#34; stroke-width=&#34;2&#34;&gt;&lt;/path&gt;&#xA;&lt;text x=&#34;125&#34; y=&#34;20&#34; fill=&#34;black&#34;&gt;O(2^n)&lt;/text&gt;&#xA;&lt;path d=&#34;M50 450 C 80 450, 80 350, 80 0&#34; fill=&#34;transparent&#34; stroke=&#34;black&#34; stroke-width=&#34;2&#34;&gt;&lt;/path&gt;&#xA;&lt;text x=&#34;80&#34; y=&#34;20&#34; fill=&#34;black&#34;&gt;O(n!)&lt;/text&gt;&#xA;&lt;text x=&#34;0&#34; y=&#34;0&#34; transform=&#34;translate(30 230) rotate(-90)&#34; style=&#34;dominant-baseline: middle; text-anchor: middle; font-size:20px; color: #555; font-size:20px; color: #555; font-style: italic;&#34; fill=&#34;black&#34;&gt;Operations&lt;/text&gt;&#xA;&lt;text x=&#34;0&#34; y=&#34;0&#34; transform=&#34;translate(420 470)&#34; style=&#34;dominant-baseline: middle; text-anchor: middle; font-size:20px; color: #555; font-style: italic;&#34; fill=&#34;black&#34;&gt;Elements&lt;/text&gt;&#xA;&lt;/svg&gt;&#xA;&#xA;&lt;p&gt;We already saw the &lt;code&gt;O(2^N)&lt;/code&gt; before, here&#39;s the &lt;code&gt;O(N^2)&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function sum_char_codes(n: string): number {&#xA;    let sum = 0;&#xA;    for (let i = 0; i &lt;span&gt;&lt;&lt;/span&gt; n.length; ++i) {&#xA;        for (let j = 0; j &lt;span&gt;&lt;&lt;/span&gt; n.length; ++j) {&#xA;            sum += charCode;&#xA;        }&#xA;    }&#xA;    return sum;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Same with &lt;code&gt;O(N^3)&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function sum_char_codes(n: string): number {&#xA;    let sum = 0;&#xA;    for (let i = 0; i &lt;span&gt;&lt;&lt;/span&gt; n.length; ++i) {&#xA;        for (let j = 0; j &lt;span&gt;&lt;&lt;/span&gt; n.length; ++j) {&#xA;            for (let k = 0; k &lt;span&gt;&lt;&lt;/span&gt; n.length; ++k) {&#xA;                sum += charCode;&#xA;            }&#xA;        }&#xA;    }&#xA;    return sum;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/algorithms-and-data-structures" rel="self" type="text/html"></link>
    <summary type="html">Notes about Algorithms and data structures</summary>
  </entry>
  <entry>
    <title>Data structures</title>
    <updated>2022-10-17T16:06:44Z</updated>
    <id>https://thomasorus.com/data-structures</id>
    <content type="html">&lt;h1 id=&#34;data-structures&#34; &gt;Data structures&lt;a href=&#34;#data-structures&#34; aria-label=&#34;Data structures permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;All code examples are in Typescript&lt;/aside&gt;&#xA;&#xA;&lt;h2 id=&#34;array&#34; &gt;Array&lt;a href=&#34;#array&#34; aria-label=&#34;Array permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;An array is a contiguous (non-breaking) memory space which contains a certain amount of &lt;strong&gt;bytes&lt;/strong&gt;. How the memory is interpreted depends on how the compiler is configured.&lt;/p&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;A &lt;strong&gt;byte&lt;/strong&gt; is a combination of &lt;strong&gt;two characters&lt;/strong&gt; to represent &lt;strong&gt;8 bits&lt;/strong&gt;, which are themselves made of &lt;strong&gt;0&lt;/strong&gt; and &lt;strong&gt;1&lt;/strong&gt;. For a refresh on how memory works see &lt;a href=&#34;understanding-memory-bits-bytes-addresses-and-hexadecimal.html&#34;&gt;Understanding memory, bits, bytes, addresses and hexadecimal&lt;/a&gt;&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;Example: an array with 3 entries interpreted differently.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Schematic view of a 8 bits / 1 byte array.&#xA;[00, 00, 00]&#xA; --  --  --&#xA; 0   1   2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Schematic view of a 16 bits / 2 bytes array.&#xA;[00 00, 00 00, 00 00]&#xA; -----  -----  -----&#xA;   0      1      2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Schematic view of a 32 bits / 4 bytes array.&#xA;[00 00 00 00, 00 00 00 00, 00 00 00 00]&#xA; -----------  -----------  -----------&#xA;      0            1            2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Taking all this into account, it means an array has absolutely no functions like &lt;code&gt;push&lt;/code&gt; or &lt;code&gt;pop&lt;/code&gt; or &lt;code&gt;shift&lt;/code&gt; available in modern languages, where arrays are therefore, &lt;em&gt;more than arrays&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Knowing this, how do you manipulate data?&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Get&lt;/dt&gt;&lt;dd&gt;To access a value, you need to move along the contiguous data. Add the offset multiplied by how big the type is. Ex: Moving to the third entry in a 8 bits array: &lt;code&gt;2×8 = 16&lt;/code&gt;. Skip 16 bits / 2 bytes.&lt;/dd&gt;&lt;dt&gt;Insert&lt;/dt&gt;&lt;dd&gt;You cannot grow an array size, which means an insertion will overwrite the existing data.&lt;/dd&gt;&lt;dt&gt;Delete&lt;/dt&gt;&lt;dd&gt;You cannot reduce an array size, which means a deletion will replace the existing data with something interpreted as nothing. In some way, a deletion is an insertion.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h2 id=&#34;linked-list&#34; &gt;Linked list&lt;a href=&#34;#linked-list&#34; aria-label=&#34;Linked list permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A linked list can be seen as a series of nodes where each node contains a value and points to another node.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two versions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;A &lt;strong&gt;singly&lt;/strong&gt; linked list can only go forward. The nodes don&#39;t have a reference of what came before them.&lt;/li&gt;&#xA;&lt;li&gt;A &lt;strong&gt;doubly&lt;/strong&gt; linked list can go forward or backward. The nodes have a reference to what came before them.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A singly linked list&#xA;-------------&#xA;A → B → C → D&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A doubly linked list&#xA;-------------&#xA;A ↔ B ↔ C ↔ D&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Inserting, reordering or deleting data means changing the references of the different nodes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Insert F between &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A → F&#xA;F → B&#xA;F ← B&#xA;A ← F&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Logically, linked lists are not contiguous, don&#39;t have an index, and can be stored anywhere (which is sometimes referred as &lt;em&gt;heap allocation&lt;/em&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This type of structure has strengths and weaknesses:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Operations performed at the head or tail of the list are extremely fast (get, insert, delete, etc.)&lt;/li&gt;&#xA;&lt;li&gt;Operations performed in the middle of the list require traversing it using a loop since there is no index. It can be slow if the list is big.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Since none of the size of the input or the existing size of the list matters, linked lists have a notation of O(1).&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/data-structures" rel="self" type="text/html"></link>
    <summary type="html">Examples of data structures</summary>
  </entry>
  <entry>
    <title>Search algorithms</title>
    <updated>2022-10-13T16:43:56Z</updated>
    <id>https://thomasorus.com/search-algorithms</id>
    <content type="html">&lt;h1 id=&#34;search-algorithms&#34; &gt;Search algorithms&lt;a href=&#34;#search-algorithms&#34; aria-label=&#34;Search algorithms permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;All code examples are in Typescript&lt;/aside&gt;&#xA;&#xA;&lt;h2 id=&#34;linear-search&#34; &gt;Linear Search&lt;a href=&#34;#linear-search&#34; aria-label=&#34;Linear Search permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In an non-ordered array, we go from start to finish and ask at each index position if the value we want is present.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export default function linear_search(haystack: number[], needle: number): boolean {&#xA;    for (let i = 0; i &lt;span&gt;&lt;&lt;/span&gt; haystack.length; i++) {&#xA;        if(haystack[i] === needle) {&#xA;            return true&#xA;        }&#xA;    }&#xA;    return false&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The Big O of linear search is &lt;code&gt;O(N)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;binary-search&#34; &gt;Binary Search&lt;a href=&#34;#binary-search&#34; aria-label=&#34;Binary Search permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;binary&lt;/em&gt; in binary search refers to the &lt;code&gt;0&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt; aspect of binary, and does not mean working with actual binary values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In an ordered array, we go to its middle, check if the value is equal to the one we are looking for. If it&#39;s not, we check if it&#39;s greater/smaller than the value we are looking for, exclude the half part that does not contain it, and repeat this process on the half we kept, until there is only one value left: either the one we are looking for, or another one, which means our value is not inside the array.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export default function bs_list(haystack: number[], needle: number): boolean {&#xA;    let lo = 0&#xA;    let hi = haystack.length&#xA;&amp;nbsp;&#xA;    do {&#xA;        let m = Math.floor(lo - (hi - lo) / 2)&#xA;        let v = haystack[m]&#xA;&amp;nbsp;&#xA;        if(v === needle) {&#xA;            return true&#xA;        } else if (v &gt; needle) {&#xA;            hi = m // Exclude the right part of the array&#xA;        } else {&#xA;            lo = m + 1 // Exclude the left side of the array + the m value&#xA;        }&#xA;    } while (lo &lt;span&gt;&lt;&lt;/span&gt; hi)&#xA;&amp;nbsp;&#xA;    return false&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The Big O of Binary Search is &lt;code&gt;O(log n)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt; In this Big O notation, &lt;code&gt;log&lt;/code&gt; refers to &lt;em&gt;logarithm&lt;/em&gt;. A logarithm is a math formula to find how many times a base number needs to be multiplied by itself to make another number. Since a binary has only tw possibles values, our base is &lt;code&gt;2&lt;/code&gt;.&lt;/aside&gt;&#xA;&#xA;&lt;h2 id=&#34;exercise-the-two-crystal-balls&#34; &gt;Exercise: The two crystal balls&lt;a href=&#34;#exercise-the-two-crystal-balls&#34; aria-label=&#34;Exercise: The two crystal balls permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote &gt;Given only two crystal balls dropped one after the other from a building floor, determine at which high they will break, in the most optimized way.&lt;/blockquote&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;In this exercise, the building is an array, and the value of breaks is either &lt;code&gt;false&lt;/code&gt; (did not break) or &lt;code&gt;true&lt;/code&gt; (did break).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, both the Linear Search and the Binary Search can work but won&#39;t be optimal:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;The Linear Search will only use one crystal ball and will be very slow, testing every floor one after the other.&lt;/li&gt;&#xA;&lt;li&gt;The Binary Search, with its base number of 2, would only be able to approximate the height, as it only get two tries.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A better solution would be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Jump every &lt;code&gt;x&lt;/code&gt; in the array and check if the first ball breaks&lt;/li&gt;&#xA;&lt;li&gt;When the ball breaks, walk backwards to the amount of &lt;code&gt;x&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Walk forward linearly until the second ball breaks&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Since we don&#39;t want to use a constant to determine &lt;code&gt;x&lt;/code&gt; as it would not be proportional to the array size, we change its unit type, and use the square root of the array.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export default function two_crystal_balls(breaks: boolean[]): number {&#xA;&amp;nbsp;&#xA;    const jmpAmount = Math.floor(Math.sqrt(breaks.length))&#xA;    let i = jmpAmount&#xA;&amp;nbsp;&#xA;    for (; i &lt;span&gt;&lt;&lt;/span&gt; breaks.length; i += jmpAmount) {&#xA;        if(breaks[i]) {&#xA;            break // Stop jumping if first ball breaks&#xA;        }&#xA;    }&#xA;&amp;nbsp;&#xA;    i -= jmpAmount // Walk back the distance of the jump&#xA;&amp;nbsp;&#xA;    for (let j = 0; j &lt;span&gt;&lt;&lt;/span&gt; jmpAmount &amp;&amp; i &lt;span&gt;&lt;&lt;/span&gt; breaks.length; ++j, ++i) {&#xA;    if(breaks[i]) {&#xA;            return i // Return when second ball breaks&#xA;        }&#xA;    }&#xA;&amp;nbsp;&#xA;    return -1&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The Big O for this algorithm is &lt;code&gt;O(√n)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/search-algorithms" rel="self" type="text/html"></link>
    <summary type="html">Examples of search algorithms</summary>
  </entry>
  <entry>
    <title>Sorting algorithms</title>
    <updated>2022-11-10T15:43:48Z</updated>
    <id>https://thomasorus.com/sorting-algorithms</id>
    <content type="html">&lt;h1 id=&#34;sorting-algorithms&#34; &gt;Sorting algorithms&lt;a href=&#34;#sorting-algorithms&#34; aria-label=&#34;Sorting algorithms permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;All code examples are in Typescript&lt;/aside&gt;&#xA;&#xA;&lt;h2 id=&#34;bubble-sort&#34; &gt;Bubble sort&lt;a href=&#34;#bubble-sort&#34; aria-label=&#34;Bubble sort permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In an unordered array, starting from the beginning, if the current value is greater than the next value, we swap them, and then move to the next value and repeat the process. After each iteration, the biggest value is always at the end, and we can start over without including the last &lt;code&gt;n&lt;/code&gt; values.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export default function bubble_sort(arr: number[]): void {&#xA;    for (let i = 0; i &lt;span&gt;&lt;&lt;/span&gt; arr.length ; i++) {&#xA;        for (let j = 0; j &lt;span&gt;&lt;&lt;/span&gt; arr.length - 1 - i; j++) {&#xA;            if(arr[j] &gt; arr[j + 1]) {&#xA;                const tmp = arr[j]&#xA;                arr[j] = arr[j + 1]&#xA;                arr[j + 1] = tmp&#xA;            }&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;code&gt;-1&lt;/code&gt; is used to avoid comparing the last value of the array with nothing (out of bounds error).&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;- i&lt;/code&gt; is used to avoid comparing values already compared, as the last value of each pass is the biggest.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This Big O for this algorithm is O(n²).&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;queue&#34; &gt;Queue&lt;a href=&#34;#queue&#34; aria-label=&#34;Queue permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A queue is a specific implementation of a &lt;a href=&#34;data-structures.html#linked-list&#34;&gt;linked list&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A queue is &lt;em&gt;FIFO&lt;/em&gt; structure, for &lt;em&gt;First I, First Out&lt;/em&gt;. It&#39;s like a real life queue or line, where a new entrant gets in the queue through its end. And if we want to remove an entry, we remove the first in the queue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are usually three operations associated with a queue:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Enqueue&lt;/dt&gt;&lt;dd&gt;Adding to the queue through its tail&lt;/dd&gt;&lt;dt&gt;Deque&lt;/dt&gt;&lt;dd&gt;Removing from the queue through its head&lt;/dd&gt;&lt;dt&gt;Peek&lt;/dt&gt;&lt;dd&gt;Seeing what is the first element of the queue&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;type Node&lt;span&gt;&lt;&lt;/span&gt;T&gt; = {&#xA;    value: T,&#xA;    next?: Node&lt;span&gt;&lt;&lt;/span&gt;T&gt;,&#xA;}&#xA;&amp;nbsp;&#xA;export default class Queue&lt;span&gt;&lt;&lt;/span&gt;T&gt; {&#xA;    public length: number;&#xA;    private head?: Node&lt;span&gt;&lt;&lt;/span&gt;T&gt;&#xA;    private tail?: Node&lt;span&gt;&lt;&lt;/span&gt;T&gt;&#xA;&amp;nbsp;&#xA;    constructor() {&#xA;        this.head = this.tail = undefined&#xA;        this.length = 0&#xA;    }&#xA;&amp;nbsp;&#xA;    enqueue(item: T): void {&#xA;        const node = {value:item} as Node&lt;span&gt;&lt;&lt;/span&gt;T&gt;&#xA;        this.length++&#xA;        if(!this.tail) {&#xA;            this.tail = this.head = node&#xA;            return&#xA;        }&#xA;&amp;nbsp;&#xA;        this.tail.next = node&#xA;        this.tail = node&#xA;    }&#xA;&amp;nbsp;&#xA;    deque(): T | undefined {&#xA;        if(!this.head) {&#xA;            return undefined&#xA;        }&#xA;&amp;nbsp;&#xA;        this.length--&#xA;&amp;nbsp;&#xA;        const head = this.head&#xA;        this.head = this.head.next&#xA;        return head.value&#xA;    }&#xA;&amp;nbsp;&#xA;    peek(): T | undefined {&#xA;        return this.head?.value&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2 id=&#34;stack&#34; &gt;Stack&lt;a href=&#34;#stack&#34; aria-label=&#34;Stack permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A stack is a specific implementation of a &lt;a href=&#34;data-structures.html#linked-list&#34;&gt;linked list&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A queue is &lt;em&gt;LIFO&lt;/em&gt; structure, for &lt;em&gt;Last I, First Out&lt;/em&gt;. It&#39;s like a real life stack of plates, where a new entrant gets in the stack through its head. And if we want to remove an entry, we remove the last in the queue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are usually three operations associated with a queue:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Push&lt;/dt&gt;&lt;dd&gt;Adding to the stack through its head&lt;/dd&gt;&lt;dt&gt;Pop&lt;/dt&gt;&lt;dd&gt;Removing from the stack through its tail&lt;/dd&gt;&lt;dt&gt;Peek&lt;/dt&gt;&lt;dd&gt;Seeing what is the first element of the stack&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;type Node&lt;span&gt;&lt;&lt;/span&gt;T&gt; = {&#xA;    value: T,&#xA;    prev?: Node&lt;span&gt;&lt;&lt;/span&gt;T&gt;&#xA;}&#xA;&amp;nbsp;&#xA;export default class Stack&lt;span&gt;&lt;&lt;/span&gt;T&gt; {&#xA;    public length: number;&#xA;    private head?: Node&lt;span&gt;&lt;&lt;/span&gt;T&gt;&#xA;&amp;nbsp;&#xA;    constructor() {&#xA;        this.head = undefined&#xA;        this.length = 0&#xA;    }&#xA;&amp;nbsp;&#xA;    push(item: T): void {&#xA;        const node = { value: item } as Node&lt;span&gt;&lt;&lt;/span&gt;T&gt;&#xA;&amp;nbsp;&#xA;        this.length++&#xA;        if (!this.head) {&#xA;            this.head = node&#xA;            return&#xA;        }&#xA;        node.prev = this.head&#xA;        this.head = node&#xA;    }&#xA;&amp;nbsp;&#xA;    pop(): T | undefined {&#xA;        this.length = Math.max(0, this.length - 1)&#xA;        if (this.length === 0) {&#xA;            const head = this.head&#xA;            this.head = undefined&#xA;            return head?.value&#xA;        }&#xA;        const head = this.head as Node&lt;span&gt;&lt;&lt;/span&gt;T&gt;&#xA;        this.head = head.prev&#xA;        return head.value&#xA;    }&#xA;&amp;nbsp;&#xA;    peek(): T | undefined {&#xA;        return this.head?.value&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/sorting-algorithms" rel="self" type="text/html"></link>
    <summary type="html">Examples of sorting algorithms</summary>
  </entry>
  <entry>
    <title>Arrays algorithms</title>
    <updated>2023-03-22T17:27:28Z</updated>
    <id>https://thomasorus.com/arrays-algorithms</id>
    <content type="html">&lt;h1 id=&#34;arrays-algorithms&#34; &gt;Arrays algorithms&lt;a href=&#34;#arrays-algorithms&#34; aria-label=&#34;Arrays algorithms permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;All code examples are in Typescript&lt;/aside&gt;&#xA;&#xA;&lt;h2 id=&#34;arraylist&#34; &gt;ArrayList&lt;a href=&#34;#arraylist&#34; aria-label=&#34;ArrayList permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;An ArrayList uses an array as a fundamental data type instead, and then practice linked lists operations. Its purpose is to be as traversible as an array, with the ability to grow like a Linked List.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this we need two datas:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Length&lt;/dt&gt;&lt;dd&gt;The length is the amount of entries inside the array.&lt;/dd&gt;&lt;dt&gt;Capacity&lt;/dt&gt;&lt;dd&gt;The capacity is the number of possible entries of the array.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;For example, an array with a capacity of 6 and a length of 3:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[1, 2, 3, , , ]&#xA;       |      |&#xA;    Length    |&#xA;              |&#xA;           Capacity&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;ArrayLists are very good with &lt;a href=&#34;orting-algorithms.html#stack&#34;&gt;Stack like operations&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Push&lt;/dt&gt;&lt;dd&gt;Go to the lenght, add the new value at lenght &lt;code&gt;+1&lt;/code&gt;.&lt;/dd&gt;&lt;dt&gt;Pop&lt;/dt&gt;&lt;dd&gt;Goto the length, remove the value and decrement the length.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;If the length is the same as the capacity, and a Push happens, then a new array with a larger capacity is created, and the data from the initial array is copied inside the new one. The goal with ArrayList is to balance between using the last amount of memory, and do the least amount of growing operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is why ArrayLists aren&#39;t as good with &lt;a href=&#34;orting-algorithms.html#queue&#34;&gt;Queue like operations&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Enqueue&lt;/dt&gt;&lt;dd&gt;If the array has the capacity, all entries starting from the last one need to be moved by &lt;code&gt;+1&lt;/code&gt;, one by one, to make space for the new entry at the head of the array.&lt;/dd&gt;&lt;dt&gt;Deque&lt;/dt&gt;&lt;dd&gt;All entries starting from this first one need to be moved by &lt;code&gt;-1&lt;/code&gt;, one by one, to free make space at the end of the end of the array.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;The same issues happen when inserting in the middle of the ArrayList.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;arraybuffer-ring-buffer&#34; &gt;ArrayBuffer - Ring Buffer&lt;a href=&#34;#arraybuffer-ring-buffer&#34; aria-label=&#34;ArrayBuffer - Ring Buffer permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;An ArrayBuffer is an over-capacity array that does not use &lt;code&gt;0&lt;/code&gt; as the head and length as the tail. Instead, the head and the tail have an index, with free space before the head and after the head.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[....[-----------&gt;]......]&#xA;0    |            |      n&#xA;    Head        Tail&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The ArrayBuffer eases some operations:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Deque&lt;/dt&gt;&lt;dd&gt;Clean the entry then add &lt;code&gt;1&lt;/code&gt; to the head, without the need to move the remaining entries by &lt;code&gt;-1&lt;/code&gt;.&lt;/dd&gt;&lt;dt&gt;Push&lt;/dt&gt;&lt;dd&gt;Add the new entry at length, then add &lt;code&gt;1&lt;/code&gt; to the tail.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;If the push reaches the maximum capacity of the array, it can &lt;em&gt;circle back&lt;/em&gt; to the start of they array plus the modulo of the length, and set its tail there (hence the name &lt;em&gt;Ring&lt;/em&gt; Buffers).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[-&gt;]....[---------------]&#xA;0  |    |               n&#xA; Tail Head&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The moment the is as the same position than the head, and a push happens, the array needs to be resized. To maintain order, the copy needs to start at the head, go to the length, and write into a larger ArrayBuffer.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/arrays-algorithms" rel="self" type="text/html"></link>
    <summary type="html">Examples of Arrays related algorithms</summary>
  </entry>
  <entry>
    <title>Recursion</title>
    <updated>2022-11-14T17:37:16Z</updated>
    <id>https://thomasorus.com/recursion</id>
    <content type="html">&lt;h1 id=&#34;recursion&#34; &gt;Recursion&lt;a href=&#34;#recursion&#34; aria-label=&#34;Recursion permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;All code examples are in Typescript&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;The simplest way of thinking about recursion is a function that calls itself until the problem is solved. This usually involves what is refereed as a &lt;em&gt;base case&lt;/em&gt;. The &lt;em&gt;base cave&lt;/em&gt; is the point at which the problem is solved and recursion stops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, this function &lt;code&gt;foo()&lt;/code&gt; takes a &lt;code&gt;n&lt;/code&gt; argument, and each time it calls itself, it add &lt;code&gt;n-1&lt;/code&gt;, until &lt;code&gt;n&lt;/code&gt; is &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function foo(n: number): number {&#xA;    // Base case&#xA;    if (n === 1) {&#xA;        return 1&#xA;    }&#xA;    // Recursion happens&#xA;    return n + foo(n - 1)&#xA;}&#xA;const total = foo(5) // Result is 15&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are three values that can help visualize this a little more easily:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;rA&lt;/dt&gt;&lt;dd&gt;return Address. When a function finishes its work, it needs to go back to the place where it was called, and return a value.&lt;/dd&gt;&lt;dt&gt;rV&lt;/dt&gt;&lt;dd&gt;return Value. The value that is actually returned when the function is over needs a space in memory.&lt;/dd&gt;&lt;dt&gt;A&lt;/dt&gt;&lt;dd&gt;Arguments. To pass values inside the function, some memory is allocated.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Now what happens when the previous function &lt;code&gt;foo&lt;/code&gt; is called with &lt;code&gt;5&lt;/code&gt; as an argument is called:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;The return address is whatever called &lt;code&gt;foo(5)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The return value is unknown, but it can be assumed it is at least &lt;code&gt;5&lt;/code&gt; or more.&lt;/li&gt;&#xA;&lt;li&gt;The argument is &lt;code&gt;5&lt;/code&gt;.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;whatever called foo(5)&#xA;       \&#xA;        \  rA |  rV | A |&#xA;|-------|\----|-----|---|&#xA;|foo(5) |     | 5+  | 5 |&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As the argument is not equal to &lt;code&gt;1&lt;/code&gt;, the function will call itself again after decreasing the value of the argument by &lt;code&gt;1&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;The return address is now &lt;code&gt;foo(5)&lt;/code&gt;, since it called &lt;code&gt;foo(4)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The return value is unknown, but it can be assumed it is at least &lt;code&gt;4&lt;/code&gt; or more.&lt;/li&gt;&#xA;&lt;li&gt;The argument is &lt;code&gt;4&lt;/code&gt;.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The cycle continues to repeat itself until the argument is 1:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;whatever called foo(5)&#xA;       \&#xA;        \    rA  |  rV  | A |&#xA;|-------|\-------|------|---|&#xA;|foo(5) |        | 5+   | 5 |&#xA;|foo(4) | foo(5) | 4+   | 4 |&#xA;|foo(3) | foo(4) | 3+   | 3 |&#xA;|foo(2) | foo(3) | 2+   | 2 |&#xA;|foo(1) | foo(2) | 1    | 1 |&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now that the argument is equal to 1 and returns 1, the addition of &lt;code&gt;return n + foo(n - 1)&lt;/code&gt; can actually happen, from the bottom to the top of the stack of &lt;code&gt;foo()&lt;/code&gt; executions:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;whatever called foo(5)&#xA;       \&#xA;        \    rA  |   rV | A |&#xA;|-------|\-------|------|---|&#xA;|foo(5) |        | 5+10 | 5 |&#xA;|foo(4) | foo(5) | 4+6  | 4 |&#xA;|foo(3) | foo(4) | 3+3  | 3 |&#xA;|foo(2) | foo(3) | 2+1  | 2 |&#xA;|foo(1) | foo(2) | 1    | 1 |&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Knowing all this, a recursive function can be broken into 3 steps:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;1. &lt;code&gt;pre&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;doing something &lt;strong&gt;before&lt;/strong&gt; the recursion. In the example before: &lt;code&gt;n +&lt;/code&gt;.&lt;/dd&gt;&lt;dt&gt;2. &lt;code&gt;recurse&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;calling the function. In the example before: &lt;code&gt;foo(n - 1)&lt;/code&gt;&lt;/dd&gt;&lt;dt&gt;3. &lt;code&gt;post&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;doing something &lt;strong&gt;after&lt;/strong&gt; the recursion. Not in the example.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Example: doing something before returning the value of the recursion.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function foo(n: number): number {&#xA;    if (n === 1) {&#xA;        return 1&#xA;    }&#xA;    const out = n + foo(n - 1) // pre + recursion&#xA;    console.log(n) // post&#xA;    return out&#xA;}&#xA;const total = foo(5) // Result is 15&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2 id=&#34;exercise-maze-solver&#34; &gt;Exercise: Maze Solver&lt;a href=&#34;#exercise-maze-solver&#34; aria-label=&#34;Exercise: Maze Solver permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote &gt;Using recursion, find the exit in a maze made with a two-dimensional array and return the path used.&lt;/blockquote&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h3 id=&#34;theoretical-approach&#34; &gt;Theoretical approach&lt;a href=&#34;#theoretical-approach&#34; aria-label=&#34;Theoretical approach permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The maze is a square, with an entry and an exit:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;          ↑&#xA;xxxxxxxxxx x&#xA;x        x x&#xA;x        x x&#xA;x xxxxxxxx x&#xA;x          x&#xA;x xxxxxxxxxx&#xA; ↑&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;We can move in four directions: up, right, down, left.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  ↑&#xA;← ♜ →&#xA;  ↓&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But these movement options can create issues:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Going off the map&lt;/li&gt;&#xA;&lt;li&gt;Hitting a wall&lt;/li&gt;&#xA;&lt;li&gt;Finding the exit&lt;/li&gt;&#xA;&lt;li&gt;Retracing one&#39;s steps&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Those issues need to be used as the &lt;strong&gt;base cases&lt;/strong&gt;. If the program detects them, it should not try to move in the incoming direction, and try another direction.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;code-implementation&#34; &gt;Code implementation&lt;a href=&#34;#code-implementation&#34; aria-label=&#34;Code implementation permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The main function takes four arguments that serve to describe our maze and its working conditions:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;maze&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;the actual two-dimensional array representing the maze&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;wall&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;the character that designates a wall (ex: &lt;code&gt;*&lt;/code&gt;)&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;start&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;the starting position as &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt; coordinates&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;end&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;the exit as &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt; coordinates&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;And looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export default function solve(&#xA;  maze: string[],&#xA;  wall: string,&#xA;  start: Point,&#xA;  end: Point): Point[] {}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3 id=&#34;avoid-errors-for-base-cases&#34; &gt;Avoid errors for base cases&lt;a href=&#34;#avoid-errors-for-base-cases&#34; aria-label=&#34;Avoid errors for base cases permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;A &lt;code&gt;walk()&lt;/code&gt; function is created, which returns a boolean and uses those arguments:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;maze&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;the same two-dimensional array representing the maze&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;wall&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;the same character that designates a wall (ex: &lt;code&gt;*&lt;/code&gt;)&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;curr&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;the current moving position of the function as &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt; coordinates&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;end&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;the exit as &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt; coordinates&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;seen&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;a two-dimensional array of booleans informing if the position was already visited&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;The base cases are added before handling recursion:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function walk(maze: string[], wall: string, curr: Point, end: Point, seen: boolean[][]): boolean {&#xA;&amp;nbsp;&#xA;    // Off the map&#xA;    if (curr.x &lt;span&gt;&lt;&lt;/span&gt; 0 || curr.x &gt;= maze[0].length || curr.y &lt;span&gt;&lt;&lt;/span&gt; 0 || curr.y &gt;= maze.length) {&#xA;        return false&#xA;    }&#xA;&amp;nbsp;&#xA;    // Hit a wall&#xA;    if (maze[curr.y][curr.x] === wall) {&#xA;        return false&#xA;    }&#xA;&amp;nbsp;&#xA;    // Found the exit&#xA;    if (curr.x === end.x &amp;&amp; curr.y === end.y) {&#xA;        return true&#xA;    }&#xA;&amp;nbsp;&#xA;    // Avoid retracing one&#39;s steps&#xA;    if (seen[curr.y][curr.x]) {&#xA;    &#x9;return false&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3 id=&#34;build-the-path-with-recursion&#34; &gt;Build the path with recursion&lt;a href=&#34;#build-the-path-with-recursion&#34; aria-label=&#34;Build the path with recursion permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;A new argument is added:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;path&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;an array of  &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt; coordinates that retraces all successful movements and allows to retracce the path&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;First, add the current position inside the path before recursion, and remove the last item of the path if the recursion finishes, as it means the path employed was not the right one.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function walk(maze: string[], wall: string, curr: Point, end: Point, seen: boolean[][], path: Point[]): boolean {&#xA;    // ... previous base cases&#xA;&amp;nbsp;&#xA;    // Pre&#xA;    seen[curr.y][curr.x] = true&#xA;    path.push(curr)&#xA;&amp;nbsp;&#xA;    // Recurse&#xA;&amp;nbsp;&#xA;    // Post&#xA;    path.pop()&#xA;&amp;nbsp;&#xA;    return false&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, create an array of directions (left, right, down, up) that will be used to move inside the maze:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;const dir = [&#xA;    [-1, 0],&#xA;    [1, 0],&#xA;    [0, -1]&#xA;    [0, 1]&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, loop over each direction to test if it&#39;s allowed to move, and if &lt;code&gt;walk()&lt;/code&gt; returns true, it means the exit has been found:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Recurse&#xA;for (let i = 0; i &lt;span&gt;&lt;&lt;/span&gt; dir.length; i++) {&#xA;    const [x, y] = dir[i]&#xA;    if (walk(maze, wall, { x: curr.x + x, y: curr.y + y }, end, seen, path)) {&#xA;        return true&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The base case for finding the exit returns true, which means the recursion with the last position is not registered inside the path. To add it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Finding the exit&#xA;if (curr.x === end.x &amp;&amp; curr.y === end.y) {&#xA;    .push(end)&#xA;    return true&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Finally, create the seen as the maze with values of &lt;code&gt;false&lt;/code&gt;, then use the &lt;code&gt;walk()&lt;/code&gt; function, in the main function:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export default function solve(maze: string[], wall: string, start: Point, end: Point): Point[] {&#xA;    const seen: boolean[][] = []&#xA;    const path: Point[] = []&#xA;&amp;nbsp;&#xA;    for (let i = 0; i &lt;span&gt;&lt;&lt;/span&gt; maze.length; i++) {&#xA;    &#x9;seen.push(new Array(maze[0].length).fill(false))&#xA;    }&#xA;&amp;nbsp;&#xA;    walk(maze, wall, start, end, seen, path)&#xA;&amp;nbsp;&#xA;    return path&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The completed exercise:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;const dir = [&#xA;    [-1, 0],&#xA;    [1, 0],&#xA;    [0, -1],&#xA;    [0, 1]&#xA;]&#xA;&amp;nbsp;&#xA;function walk(maze: string[], wall: string, curr: Point, end: Point, seen: boolean[][], path: Point[]): boolean {&#xA;    // 1. Base cases&#xA;    // Off the map&#xA;    if (curr.x &lt;span&gt;&lt;&lt;/span&gt; 0 || curr.x &gt;= maze[0].length || curr.y &lt;span&gt;&lt;&lt;/span&gt; 0 || curr.y &gt;= maze.length) {&#xA;        return false&#xA;    }&#xA;&amp;nbsp;&#xA;    // Hit a wall&#xA;    if (maze[curr.y][curr.x] === wall) {&#xA;        return false&#xA;    }&#xA;&amp;nbsp;&#xA;    // Finding the exit&#xA;    if (curr.x === end.x &amp;&amp; curr.y === end.y) {&#xA;        path.push(end)&#xA;        return true&#xA;    }&#xA;&amp;nbsp;&#xA;    // Avoid retracing one&#39;s steps&#xA;    if (seen[curr.y][curr.x]) {&#xA;        return false&#xA;    }&#xA;&amp;nbsp;&#xA;    // 2. Recursion&#xA;    // Pre&#xA;    seen[curr.y][curr.x] = true&#xA;    path.push(curr)&#xA;&amp;nbsp;&#xA;    // Recurse&#xA;    for (let i = 0; i &lt;span&gt;&lt;&lt;/span&gt; dir.length; i++) {&#xA;        const [x, y] = dir[i]&#xA;        if (walk(maze, wall, { x: curr.x + x, y: curr.y + y }, end, seen, path)) {&#xA;            return true&#xA;        }&#xA;    }&#xA;&amp;nbsp;&#xA;    // Post&#xA;    path.pop()&#xA;&amp;nbsp;&#xA;    return false&#xA;}&#xA;&amp;nbsp;&#xA;export default function solve(maze: string[], wall: string, start: Point, end: Point): Point[] {&#xA;    const seen: boolean[][] = []&#xA;    const path: Point[] = []&#xA;&amp;nbsp;&#xA;    for (let i = 0; i &lt;span&gt;&lt;&lt;/span&gt; maze.length; i++) {&#xA;        seen.push(new Array(maze[0].length).fill(false))&#xA;    }&#xA;&amp;nbsp;&#xA;    walk(maze, wall, start, end, seen, path)&#xA;&amp;nbsp;&#xA;    return path&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/recursion" rel="self" type="text/html"></link>
    <summary type="html">What is recursion? What is recursion? What is recursion? What...</summary>
  </entry>
  <entry>
    <title>Quicksort</title>
    <updated>2023-03-22T17:27:28Z</updated>
    <id>https://thomasorus.com/quicksort</id>
    <content type="html">&lt;h1 id=&#34;quicksort&#34; &gt;Quicksort&lt;a href=&#34;#quicksort&#34; aria-label=&#34;Quicksort permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Quicksort is a sorting algorithm using recursion. It works by selecting a value in the array (in the following examples it&#39;s the last one) and using it as a pivot, against which all others values are sorted compared and then moved to its left or right depending if they are smaller or bigger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once this &lt;em&gt;weak sort&lt;/em&gt; has been executed, the two parts before and after the pivot are copied to new arrays, and the process of selecting a pivot, comparing and copying starts again, until eventually each array has only one value, which means it is sorted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, all values are retrieved, and the array is completely sorted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example with an array of 16 values:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                        [0-15]&#xA;            --------------8--------------&#xA;            |                           |&#xA;          [1-7]                       [9-15]&#xA;     -------4-------             -------12--------&#xA;     |             |             |               |&#xA;   [1-3]         [5-7]         [9-11]         [13-15]&#xA;  ---2---       ---6---       ---2----       ----14---&#xA;  |     |       |     |       |      |       |       |&#xA;[1-1] [3-3]   [5-5] [7-7]   [9-9] [11-11] [13-13] [15-15]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The big O of Quicksort is &lt;code&gt;O(log n)&lt;/code&gt;, where &lt;code&gt;log&lt;/code&gt; is the number of times a new split is made using the pivot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there&#39;s a catch: Quicksort doesn&#39;t always sort quickly. There are some specific cases that can make the algorithm have terrible for performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Among them, it can happen in a reversed sorted array, as it means the last item is the smallest, and that all reversed values will be placed at its right, resulting in a new array for all the remaining values at each iteration.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[6,5,4,3,2,1]&#xA;      1---------&#xA;               |&#xA;          [2,6,5,4,3]&#xA;               2-------&#xA;                      |&#xA;                 [3,6,5,4,3]&#xA;                      3-----&#xA;                           |&#xA;                         // etc...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The solution to avoid this is to always pick the middle element of the array as the pivot.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;If it&#39;s sorted, zero swaps will happen.&lt;/li&gt;&#xA;&lt;li&gt;If it&#39;s reverse sorted, the array will be perfectly split in the middle.&lt;/li&gt;&#xA;&lt;li&gt;If it&#39;s randomly sorted, then the algorithm has a random chance of being near the middle value.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Knowing this, Quicksort big O is then somewhere between &lt;code&gt;O(log n)&lt;/code&gt; best case and &lt;code&gt;O(n²)&lt;/code&gt; worst case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Does the weak sort and returns the pivot&#xA;function partition(arr: number[], lo: number, hi:number): number {&#xA;&amp;nbsp;&#xA;    const pivot = arr[hi]; // Taking the last item as the pivot&#xA;    let idx = lo - 1; // Setting the index outside the array&#xA;&amp;nbsp;&#xA;    for(let i = lo; i &lt;span&gt;&lt;&lt;/span&gt; hi; ++i) {&#xA;        if (arr[hi] &lt;span&gt;&lt;&lt;/span&gt;= pivot) {&#xA;            // Set index position, then swap the values&#xA;            idx++;&#xA;            const tmp = arr[i];&#xA;            arr[i] = arr[idx];&#xA;            arr[idx] = tmp;&#xA;        }&#xA;    }&#xA;&amp;nbsp;&#xA;    idx++; // Increment the index&#xA;&amp;nbsp;&#xA;    // Move the pivot to the index&#xA;    arr[hi] = arr[idx];&#xA;    arr[idx] = pivot;&#xA;&amp;nbsp;&#xA;    return idx;&#xA;}&#xA;&amp;nbsp;&#xA;function qs(arr: number[], lo: number, hi:number): void {&#xA;    if (lo &gt;= hi) {&#xA;        return;&#xA;    }&#xA;&amp;nbsp;&#xA;    const pivotIdx = partition(arr, lo, hi);&#xA;    qs(arr, lo, pivotIdx -1);&#xA;    as(arr, pivotIdx + 1, hi);&#xA;}&#xA;&amp;nbsp;&#xA;export default function quick_sort(arr: number[]): void {&#xA;    qs(arr, 0, arr.length -1);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/quicksort" rel="self" type="text/html"></link>
    <summary type="html">An example of recursion sorting algorithm</summary>
  </entry>
  <entry>
    <title>Trees</title>
    <updated>2023-03-22T17:27:28Z</updated>
    <id>https://thomasorus.com/trees</id>
    <content type="html">&lt;h1 id=&#34;trees&#34; &gt;Trees&lt;a href=&#34;#trees&#34; aria-label=&#34;Trees permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;A tree is a linked list of nodes with a single, root parent. Trees data structures are everywhere in software. The operating systems use them for files. Browsers use them for the HTML Dom.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;              root&#xA;                |&#xA;         -------------&#xA;         |           |&#xA;       child       child&#xA;         |&#xA;    -----------&#xA;    |    |    |&#xA; child child child&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There&#39;s a common terminology around trees to help defined the different parts:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Root&lt;/dt&gt;&lt;dd&gt;The most parent node.&lt;/dd&gt;&lt;dt&gt;Height&lt;/dt&gt;&lt;dd&gt;The longest path from the root to the most child node.&lt;/dd&gt;&lt;dt&gt;Binary tree&lt;/dt&gt;&lt;dd&gt;A tree in which has at most 2 children, at least 0 children.&lt;/dd&gt;&lt;dt&gt;General tree&lt;/dt&gt;&lt;dd&gt;A tree with 0 or more children.&lt;/dd&gt;&lt;dt&gt;Binary search tree&lt;/dt&gt;&lt;dd&gt;A tree in which has a specific ordering to the nodes and at most 2 children.&lt;/dd&gt;&lt;dt&gt;Leaves&lt;/dt&gt;&lt;dd&gt;A node without children.&lt;/dd&gt;&lt;dt&gt;Balanced&lt;/dt&gt;&lt;dd&gt;A tree is perfectly balanced when any node&#39;s left and right children have the same height.&lt;/dd&gt;&lt;dt&gt;Branching factor&lt;/dt&gt;&lt;dd&gt;The amount of children a tree has.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/trees" rel="self" type="text/html"></link>
    <summary type="html">Explanation of the tree data structure</summary>
  </entry>
  <entry>
    <title>Tree Search Algorithms</title>
    <updated>2023-03-22T17:27:28Z</updated>
    <id>https://thomasorus.com/tree-search-algorithms</id>
    <content type="html">&lt;h1 id=&#34;tree-search-algorithms&#34; &gt;Tree Search Algorithms&lt;a href=&#34;#tree-search-algorithms&#34; aria-label=&#34;Tree Search Algorithms permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;When working in trees, moving inside the structure is often called &lt;em&gt;traversal&lt;/em&gt;. The algorithms described below could there be considered traversal algorithms.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;depth-first-search&#34; &gt;Depth First Search&lt;a href=&#34;#depth-first-search&#34; aria-label=&#34;Depth First Search permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Below are examples of traversals of what is called Depth First Search (DFS), because the traversal happens vertically or &lt;em&gt;depth first&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;pre-order-traversal&#34; &gt;Pre-order traversal&lt;a href=&#34;#pre-order-traversal&#34; aria-label=&#34;Pre-order traversal permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;A pre-order traversal in a binary tree consists of:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;A visit to the node&lt;/li&gt;&#xA;&lt;li&gt;Getting the value&lt;/li&gt;&#xA;&lt;li&gt;A recursion to the left children, if it exists&lt;/li&gt;&#xA;&lt;li&gt;A recursion to the right children, if it exists&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;       7&#xA;       |&#xA;  ------------&#xA;  23         3&#xA;  |          |&#xA;------    ------&#xA;|    |    |    |&#xA;5    4    18   21&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The order of recursion will be 7, 23, 5, 4, 3, 18, 21. In a pre-order transversal, the root is at the beginning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export default function pre_order_search(head: BinaryNode&lt;span&gt;&lt;&lt;/span&gt;number&gt;): number[] {&#xA;    return walk(head, path);&#xA;}&#xA;&amp;nbsp;&#xA;function walk(curr: BinaryNode&lt;span&gt;&lt;&lt;/span&gt;number&gt; | null, path:number[]): void {&#xA;    if (!curr) {&#xA;        return path;&#xA;    }&#xA;    path.push(curr.value);&#xA;    walk(curr.left, path);&#xA;    walk(curr.right, path);&#xA;    return path;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3 id=&#34;in-order-traversal&#34; &gt;In-order traversal&lt;a href=&#34;#in-order-traversal&#34; aria-label=&#34;In-order traversal permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;An in-order traversal in a binary tree consists of:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;A visit to the node&lt;/li&gt;&#xA;&lt;li&gt;A recursion to the left children, if it exists&lt;/li&gt;&#xA;&lt;li&gt;Getting the value&lt;/li&gt;&#xA;&lt;li&gt;A recursion to the right children, if it exists&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;       7&#xA;       |&#xA;  ------------&#xA;  23         3&#xA;  |          |&#xA;------    ------&#xA;|    |    |    |&#xA;5    4    18   21&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The order of recursion will be 5, 23, 4, 7, 18, 3, 21. In a in-order transversal, the root is in the middle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export default function in_order_search(head: BinaryNode&lt;span&gt;&lt;&lt;/span&gt;number&gt;): number[] {&#xA;    return walk(head, path);&#xA;}&#xA;&amp;nbsp;&#xA;function walk(curr: BinaryNode&lt;span&gt;&lt;&lt;/span&gt;number&gt; | null, path:number[]): void {&#xA;    if (!curr) {&#xA;        return path;&#xA;    }&#xA;    walk(curr.left, path);&#xA;    path.push(curr.value);&#xA;    walk(curr.right, path);&#xA;    return path;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3 id=&#34;post-order-traversal&#34; &gt;Post-order traversal&lt;a href=&#34;#post-order-traversal&#34; aria-label=&#34;Post-order traversal permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;A post-order traversal in a binary tree consists of:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;A visit to the node&lt;/li&gt;&#xA;&lt;li&gt;A recursion to the left children, if it exists&lt;/li&gt;&#xA;&lt;li&gt;A recursion to the right children, if it exists&lt;/li&gt;&#xA;&lt;li&gt;Getting the value&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;       7&#xA;       |&#xA;  ------------&#xA;  23         3&#xA;  |          |&#xA;------    ------&#xA;|    |    |    |&#xA;5    4    18   21&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The order of recursion will be 5, 4, 23, 18, 21, 3, 7. In an post-order transversal, the root is at the end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export default function post_order_search(head: BinaryNode&lt;span&gt;&lt;&lt;/span&gt;number&gt;): number[] {&#xA;    return walk(head, path);&#xA;}&#xA;&amp;nbsp;&#xA;function walk(curr: BinaryNode&lt;span&gt;&lt;&lt;/span&gt;number&gt; | null, path:number[]): void {&#xA;    if (!curr) {&#xA;        return path;&#xA;    }&#xA;    walk(curr.left, path);&#xA;    walk(curr.right, path);&#xA;    path.push(curr.value);&#xA;    return path;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/tree-search-algorithms" rel="self" type="text/html"></link>
    <summary type="html">Examples of trees related algorithms</summary>
  </entry>
  <entry>
    <title>Writing tips</title>
    <updated>2022-03-13T19:03:30Z</updated>
    <id>https://thomasorus.com/writing-tips</id>
    <content type="html">&lt;h1 id=&#34;writing-tips&#34; &gt;Writing tips&lt;a href=&#34;#writing-tips&#34; aria-label=&#34;Writing tips permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;These writing tips are based on personal experience and might not work for you, so be careful when trying to use them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that &lt;strong&gt;I&#39;m talking about writing for others&lt;/strong&gt;. As a professional writer I need the reader to keep reading. In the case of a long article, keeping the reader focused is often complicated, and that&#39;s the reason why I use these tips an tricks. A lot of them were taught to me by Thomas Cusseau, the former chief editor of &lt;a href=&#34;https://gamekult.com&#34;&gt;Gamekult&lt;/a&gt; and by my old friend &lt;a href=&#34;https://foxmonsieur.com/&#34;&gt;Franck Extanasié&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also don&#39;t forget that as with everything, the more you write, the better you write.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;is-the-subject-worth-it&#34; &gt;Is the subject worth it?&lt;a href=&#34;#is-the-subject-worth-it&#34; aria-label=&#34;Is the subject worth it? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;First of all, anyone can write about any subject and potentially, any subject can be interesting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But that doesn&#39;t mean &lt;em&gt;every&lt;/em&gt; subject is interesting. Some of them don&#39;t deserve your time and. If they are still written they can be informative, but are they really interesting to read? Was that time well spent?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The quality of the subject (and thus the pleasure you as a reader will get from reading it) is determined by the &lt;em&gt;context&lt;/em&gt; surrounding it. The subject is just the trigger, the context is the story and that&#39;s the main thing we want to retrieve as a writer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here&#39;s the most easy way I determine if a subject is interesting: if, after getting a hint about a it, I find myself asking questions about it and I need more context to get answers, then it might be worth writing about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This very page follows the same process. I was hinted that my process of writing and its result are interesting to others. So I ask myself &lt;em&gt;questions&lt;/em&gt; about my own practices, I stepped back to get &lt;em&gt;context&lt;/em&gt; and tried to find &lt;em&gt;answers&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this combined helps me build what Thomas Cusseau called &lt;em&gt;the angle&lt;/em&gt; of the article.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-angle&#34; &gt;The angle&lt;a href=&#34;#the-angle&#34; aria-label=&#34;The angle permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Just like in the cinematographic sense with camera angles, the way you &lt;em&gt;position&lt;/em&gt; yourself as the writer to emphasize the context around the subject will change the perception and feelings of the reader. It will also tell him a story, even if there&#39;s no dialog. It means that even if the subject, context and answers are interesting, you now have to determine how to write about them to create feelings. Joy, excitement, curiosity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now this is where my methods can differ from other&#39;s. Each cinematographer as its own ways of filming and that&#39;s the same for writers. Of course the subject and the target audience will influence how the writing will be done. If I&#39;m writing a fiction centered around a single character and it&#39;s emotions, I might go with a first person point of view and not care about being totally understandable. If I&#39;m writing a more informative article for a larger audience, I will probably try to make it as accessible as possible ; disappear and let the context that I organize in a logical way do all the work. It&#39;s all about the writer and the desired outcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With experience, writing habits tend to emerge and will make the process of assembling the angle (subject, context, answers, form) more easy. Still, it&#39;s often good to re-evaluate our habits to avoid being to complacent.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;my-process&#34; &gt;My process&lt;a href=&#34;#my-process&#34; aria-label=&#34;My process permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;My most used process, that I apply mostly in non-fiction writings, work as follow.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;I openly ask a question about the subject.&lt;/li&gt;&#xA;&lt;li&gt;I invite the reader to look at the subject from a new perspective that I provide.&lt;/li&gt;&#xA;&lt;li&gt;I raise the reader&#39;s understanding of the subject by delivering context in a logical chain of ideas.&lt;/li&gt;&#xA;&lt;li&gt;I deliver a conclusion that answers the question.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;h3 id=&#34;the-question&#34; &gt;The question&lt;a href=&#34;#the-question&#34; aria-label=&#34;The question permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The question is not actually a question!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s more of a problematic that you want to answer and openly share with your reader. It has to strike a nice balance to make the reader curious without being overly dramatic or click-bait. It has to be super short (around 150 characters), be the first text after the title, directed at the target audience, provide the initial context we are in and why we are questioning this context.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hint for my &lt;a href=&#34;2020.html&#34;&gt;2020 review&lt;/a&gt; was:&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote &gt;2020 was one of the best years I experienced in recent memory.&lt;/blockquote&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Let&#39;s analyze this for a bit:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;em&gt;2020&lt;/em&gt; is the main context. Everyone knows 2020 was as bad year. You might think &lt;em&gt;Ugh, here we go with 2020 again, so depressing&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Best years in recent memory&lt;/em&gt; when combined with &lt;em&gt;2020&lt;/em&gt; creates the problematic. I want to create a &lt;em&gt;Whaaaaaaaaaat&lt;/em&gt; moment!&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;I experienced&lt;/em&gt; is a hint that I am the perspective. This page is a personal journal that will guide you through my journey.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This phrase will be my main guideline while I am writing the rest of the text. You can think of the question as a pitch. Or as the phrase you wrote at the beginning of your philosophy dissertation in high school! The click-bait titles you see everywhere on the internet are just this, but with rock-bottom effort in subtlety, because of a lack of time and context.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But &lt;strong&gt;please respect yourself&lt;/strong&gt;. Never use a question mark inside a title or your problematic. They are obnoxious, too easy and often drives the reader away.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;the-perspective&#34; &gt;The perspective&lt;a href=&#34;#the-perspective&#34; aria-label=&#34;The perspective permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Right after the question, I try to give hints about &lt;em&gt;why&lt;/em&gt; I wrote it. This is often the introduction part of the article, where I state facts that help the reader understand why this text was written in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The goal is to embark him into my own journey, making him revive my cycle of &lt;em&gt;question, context, answer&lt;/em&gt; by shifting his perspective with mine. The only difference between us are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;I already know the &lt;em&gt;answer&lt;/em&gt;, he does not.&lt;/li&gt;&#xA;&lt;li&gt;I have the full &lt;em&gt;context&lt;/em&gt;, he does not.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So my goal now is to deliver him the full context so he can understand my conclusion.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;the-context-delivery&#34; &gt;The context delivery&lt;a href=&#34;#the-context-delivery&#34; aria-label=&#34;The context delivery permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;From this moment I am in the core of the article. This is often the most difficult part to write.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal is to split the context that makes the subject interesting into smaller parts, in order to deliver them in a logical way. You can think about it as a bullet list where each element leads to the next. Each one needs to have its own inner-subject, context explanation, logical conclusion, and transition to the next part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is especially hard to write while making it interesting and not being excessively verbose. Summarizing things is hard. Going to the core of an information is harder. It&#39;s where there is a good chance that the article goes into a tangent. Since I am giving context and that one things calls for the another, it&#39;s super easy to derivate into &lt;em&gt;the context of the context&lt;/em&gt;, thus leading to something that is &lt;em&gt;related but not related&lt;/em&gt; to the subject of the article.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using metaphors when dealing with technical aspects can be useful but if they are not quick, clear and obvious, they can lose the reader. Images and quotes are useful to create breaks. It allows you to make a logical connection from one context to the other in the same part. It also allows the reader to breathe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even more difficult are the transitions. Each parts needs to end with a hint about what the next one will be about.&lt;/p&gt;&#xA;&#xA;&lt;h4 id=&#34;plan-or-go-with-the-flow&#34; &gt;Plan or go with the flow?&lt;a href=&#34;#plan-or-go-with-the-flow&#34; aria-label=&#34;Plan or go with the flow? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h4&gt;&#xA;&#xA;&lt;p&gt;There are two schools about writing this context delivery part. One advises to plan everything before writing the different parts. This way you know where to start and where to end each one. The other method is to simply go with the flow and detect when to stop and transition to another part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course both methods have positives and negatives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Planning everything is good but sometimes, one part can be too long and needs to be cut in smaller ones, breaking the plan. Sometimes when writing, the realization that the plan is not good happens. Or the question changes or get refined, thus breaking the plan. But plans are useful when dealing with very intricate articles. I personally use them more for technical writings. When I am not 100% sure about my understanding of the context, having a plan is also a good way to stay focused.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going with the flow obviously makes it easy to change the question and flow of the article, at the risk of going into tangents and irregular sized parts. Going with the flow often leads to more deletes of entire paragraphs. I even had cases where I deleted everything and started fresh, as the existing text was not good and trying to format it to another plan was a nightmare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My advice would be: the more you know your subject, the more you can go with the flow. The less certain you are, the more you should plan. To create a plan more easily, write all you context elements on small pieces of paper and regroup them by inner-subject.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;the-conclusion&#34; &gt;The conclusion&lt;a href=&#34;#the-conclusion&#34; aria-label=&#34;The conclusion permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The conclusion is also part of the context delivery phase, but it doesn&#39;t conclude it&#39;s own part, it concludes the whole article. If I wrote well enough, the reader has all the contextual keys to understand why I brought the subject in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the article is long, it might be a good idea to rewrite the question. With the context the reader gathered, he should be able to get to the conclusion by itself at this moment. Still, write the answer to the question or the problematic. More often than not, it&#39;s good to finish with a catchphrase that either closes the topic once and for all, or opens it so the reader can continue to think about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It always feel good to have a &lt;em&gt;AH, I GET IT&lt;/em&gt; moment, and that&#39;s what I aim for my conclusions.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;various-tips-and-tricks&#34; &gt;Various tips and tricks&lt;a href=&#34;#various-tips-and-tricks&#34; aria-label=&#34;Various tips and tricks permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;The main rule all writers know is that after finishing an article, you remove 50% of it. Because you wrote too much. You went into tangents. You overdid it. Don&#39;t hesitate. Delete. Rephrase.&lt;/li&gt;&#xA;&lt;li&gt;After long periods of writing, everything seems to be blurry and hard to read. That because you almost memorized your text and you aren&#39;t actually reading it anymore, you are thinking about the purpose of each phrase. That&#39;s how you miss typos, long phrases that could be shortened, etc...&lt;/li&gt;&#xA;&lt;li&gt;When it&#39;s too hard, let it rest for a few days before continuing. The blur will disappear and you&#39;ll be fresh.&lt;/li&gt;&#xA;&lt;li&gt;When it&#39;s done, let it rest for a few days before publishing. The blur will disappear and you&#39;ll be able to see the monstrosities you wrote.&lt;/li&gt;&#xA;&lt;li&gt;When doing interviews, the most interesting things are often the tangents. They provide off-script context that would normally not be part of the subject. Write hints or subjects mentioned and go back to them later. When doing interviews with people in a marketing campaign, always ask a generic question first so they can do their own job and spit their marketing bullshit, then do your thing.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/writing-tips" rel="self" type="text/html"></link>
    <summary type="html">Writing tips from a self-taught writer</summary>
  </entry>
  <entry>
    <title>Everything you need to know to choose an office chair</title>
    <updated>2023-03-03T16:22:26Z</updated>
    <id>https://thomasorus.com/everything-you-need-to-know-to-choose-an-office-chair</id>
    <content type="html">&lt;h1 id=&#34;everything-you-need-to-know-to-choose-an-office-chair&#34; &gt;Everything you need to know to choose an office chair&lt;a href=&#34;#everything-you-need-to-know-to-choose-an-office-chair&#34; aria-label=&#34;Everything you need to know to choose an office chair permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;It&#39;s 2021 and we&#39;re still destroying our backs and vertebras with &lt;em&gt;gameeerz&lt;/em&gt; chairs. I talked with an expert to learn how to chose an office chair that respects our bodies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My partner has two herniated discs and when her company decided that office work would not be mandatory, even after the pandemic, we went to a profesionnal office chair seller in our local town. We had a very great experience with Catherine and Yvan Couloigner, the owners of &lt;a href=&#34;https://www.laboutiquedudos.com/content/12-la-boutique-du-dos-brest-29200&#34;&gt;La boutique du dos à Brest&lt;/a&gt;, to the point where I went back to see them to write an article about chairs, that was initially published in French on &lt;a href=&#34;https://www.geekzone.fr/2021/04/13/fauteuil-de-bureau-ce-quil-faut-savoir-avant-dacheter/&#34;&gt;Geekzone.fr&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This page is a condensed version of the article. All prices are indicated in Euros. No brand sponsored the initial article or this version.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;why-office-chairs-hurt-you&#34; &gt;Why office chairs hurt you&lt;a href=&#34;#why-office-chairs-hurt-you&#34; aria-label=&#34;Why office chairs hurt you permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you already spent 50 to 300 euros for a chair and it hurts, it&#39;s probably because you bought it inside a generalist furniture store like IKEA. Those stores don&#39;t want to have expensive prices and will logically only sell you basic models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you consider an office chair for what it is, an accessory attached to your health (just like a mattres), buying cheap is hurting yourself. The Markus from IKEA is the primer example: if you have the right morphology and your desk has the right height, you&#39;re a lucky person and will feel good for just under 200 euros. If not, you&#39;ll suffer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The truth is, the lowest price for an entry-level office chair with a range of adjustment that fits most people and can be used for a full day&#39;s work is around 450 to 600 euros. If you spend more than 5 hours at your desk, you need adjustable depth, adjustable armrests and adjustable backrest height.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fixed armrests impede movement and do not allow getting close to the desk. They force people to work on the front of their chair, or push the keyboard away and use the front of the desk as the armrests. Doing this will make you curl up at the chest level and will cause muscular constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, the chair has to adapt to the body, not the opposite.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-sitting-position&#34; &gt;The sitting position&lt;a href=&#34;#the-sitting-position&#34; aria-label=&#34;The sitting position permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;But &lt;em&gt;how should you actually sit?&lt;/em&gt; What&#39;s the good position between being stuck inside your chair or sitting at the tip? Unfortunately, there&#39;s no made up answers: the right position is the one you can keep for hours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a purely theorical standpoint, the &lt;em&gt;good office chair position&lt;/em&gt; that you see in schematics is good. The back is well supported, the knees are very slightly below the hips, with an opening of about 92 to 95 degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But staying this way for hours will hurt too. Sitting on a giant inflated ball, that are often seen as replacement of office chairs as they are cheaper and recommended by physical therapists, will also hurt in the long run as they are not ergonomic and provide literally zero adjustement options.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;how-to-feel-comfortable&#34; &gt;How to feel comfortable&lt;a href=&#34;#how-to-feel-comfortable&#34; aria-label=&#34;How to feel comfortable permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It&#39;s a bit contradictory but &lt;strong&gt;movement is key&lt;/strong&gt;. When you are sitting still, your venous flow does not happen naturally. When you walk, you give an impulse for the blood to go back to the heart, which does not happen when you are static. So you have to alternate different positions inside your chair to provide better blood circulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that doesn&#39;t feel logical (after all, chairs are rigid things), it&#39;s probably because your chair doesn&#39;t allow it. There isn&#39;t a lot of ways to sit on a kitchen chair until fatigue prevails and you take a painful position (laptops don&#39;t help, we&#39;ll talk about them later).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ergonomic chairs on the other hand, are designed to alternate positions. The tilted backrest, for example, allows you to stretch your body lengthwise, and also offers a second, more relaxed working position than the upright one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be enjoyable, the rocker resistance must be adjustable, as people with different weights will have different rocking points. Effort must be minimal in order to be able to tip from one position to the other. Sitting at the tip of your chair for is also good, as long as it doesn&#39;t last too long. Once again, a chair that allows to change position without forcing is key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the foam and cushions, it all depends on personal preferences. People with pain around the coccyx or sacrum will need more foam (or a hole in the sit cushion_, while others won&#39;t. A cocooning effect can also be important to feel relaxed for more anxious people.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;ask-yourself-the-right-questions&#34; &gt;Ask yourself the right questions&lt;a href=&#34;#ask-yourself-the-right-questions&#34; aria-label=&#34;Ask yourself the right questions permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A lot of people project on others their own experience with their chair. But what counts is &lt;strong&gt;YOU&lt;/strong&gt;. Ask yourself those questions: is the chair adapted to my height, my weight, my morphology? Do I have long legs? Short  torso? Long neck? All those parameters matter as well as your working conditions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on them, the chair model will differ. If you are a cashier, you&#39;ll move your arms and twist your back a lot, which means you need freedom of movement and a strong lumbar support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do a lot of videoconferences on a laptop, you&#39;ll need to raise your computer with a support and use a chair that support the upper body to avoid neck pain and musculoskeletal disorders. You&#39;ll need to alternate positions to avoid getting stiff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some people only spend one hour and half at their desk. If that&#39;s the case, a kneeling seat can also work as it&#39;s cheaper and takes less space.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;standing-desks-a-good-or-bad-idea&#34; &gt;Standing desks, a good or bad idea?&lt;a href=&#34;#standing-desks-a-good-or-bad-idea&#34; aria-label=&#34;Standing desks, a good or bad idea? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Standing desks are more and more criticized, often for good reasons. As we already said, moving is important, but too many people understood it as standing. But you won&#39;t be able to move and walk as your desk can&#39;t come with you. So what&#39;s the point of having one?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The goal isn&#39;t burning calories or making baby steps, but prevent potentiel issues by alterning positions. Working in a standing position relieves pressure on the back and reduces circulatory problems in the legs. Sitting down amplifies these issues, especially for women who are more prone to venous flow problems. It can also prevents digestive problems, as standing even for a short period of time relieves pressure on the intestines and stomach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to achieve this, what you need isn&#39;t a standing desk. It&#39;s a sit-and-standing desk. A desk that allows to go from one position to the other. Once again, movement and choice are keys. You won&#39;t stand up for a whole day anyway, as you discs will be under pressure and your lumbar vertebae will take the hits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you take a sit-and-standing desk, be coherent and take an electrical model with a memory of your positions. Cheaper models with cranks exist, but from experience, Yvan told me most people adjust them for the sitting position and never touch them again. If changin position is seen as a chore, nobody will do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, &lt;em&gt;of course&lt;/em&gt;, it&#39;s useless to have a sit-and-standing desk if you have a crappy chair.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;ask-for-advice-from-profesionnals&#34; &gt;Ask for advice from profesionnals&lt;a href=&#34;#ask-for-advice-from-profesionnals&#34; aria-label=&#34;Ask for advice from profesionnals permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If all this sounds complicated, thats&#39;s because it is. If you are unsure about what to buy and what is better for your, look for stores specialized in office furniture for disabled people. Employees working in these stores are not medical staff, but they have met thousands of people with broken backs and necks. They&#39;ve seen all type of morphologies going from the 2 meter, 120 kilograms guy to the 1 meter and half 40 kilograms lady.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They also know how to adjust chairs to your body while you try them, and it makes a big difference when someone else is tweaking the chair while you seat instead going back and forth to the cranks in order to adjust them. It&#39;s the polar opposite of the 20 seconds try of a mattress.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course some sellers can be bad. If you are in a very business oriented part of a city, shops might want to sell you very expensive &#34;president like&#34; chairs that look super good (ex: an Aeron Miller), while omitting that for half the price, you can have the same comfort minus the style.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do your research and take care of yourself!&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;more-important-informations&#34; &gt;More important informations&lt;a href=&#34;#more-important-informations&#34; aria-label=&#34;More important informations permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Here&#39;s a bunch of important informations about chair adjusting, special types of chairs and prices.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;how-to-adjust-your-chair&#34; &gt;How to adjust your chair?&lt;a href=&#34;#how-to-adjust-your-chair&#34; aria-label=&#34;How to adjust your chair? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;You need to go from the top to the bottom, not the opposite!&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Start by adjusting the height of the armrests so that they are just below your elbows. The armrests should not be too high or too low. Your shoulders should not sag, but they should not rise either.&lt;/li&gt;&#xA;&lt;li&gt;Adjust the height of your chair so that the armrests are in line with your desk, even if your feet are no longer flat on the floor.&lt;/li&gt;&#xA;&lt;li&gt;Remember to adjust the height of the backrest so that the lumbar support is in the right place, as well as the headrest to support your neck.&lt;/li&gt;&#xA;&lt;li&gt;Adjust the depth of the seat so that there is enough space between the back of your knees and the beginning of the seat.&lt;/li&gt;&#xA;&lt;li&gt;If after all these adjustments, your feet are not flat on the ground, get a footrest! Conversely, if your knees are too high, it means that your desk is probably too low for you.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;h3 id=&#34;the-off-center-rocking-mechanism&#34; &gt;The off-center rocking mechanism&lt;a href=&#34;#the-off-center-rocking-mechanism&#34; aria-label=&#34;The off-center rocking mechanism permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;On most chairs, the back presses on the backrest to trigger the tilt. But if you have lumbar problems, using your back could cause you pain. In this case, look into off-center rocking mechanics, where the impetus will come from your legs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The seat tilts as if you were in a shell, in one piece. It is much more natural and respects the human anatomy. But of course these mechanisms are more expensive.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;standing-chairs&#34; &gt;Standing chairs&lt;a href=&#34;#standing-chairs&#34; aria-label=&#34;Standing chairs permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Standing chairs are a strange compromise that allows a relatively comfortable seat while remaining at a higher height than a normal chair. Some companies adopt them in meeting rooms under the pretext of &lt;em&gt;energizing&lt;/em&gt; the people who use them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But standing chairs should only be used by people who can&#39;t stand or sit for long periods of time. Those people have to work in different positions throughout the day (sitting or standing), and the standing chair gives them a third option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Standing chairs can also be found in medical fields, like in dentists or physiotherapists cabinets, who want to work sitting, but need to get some height. So unless you have a specific need, avoid them.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;prices&#34; &gt;Prices&lt;a href=&#34;#prices&#34; aria-label=&#34;Prices permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;It&#39;s hard to find your way through the jungle of chair models and prices. Here are different price ranges to make your life easier. Note that they correspond to a purchase from a French retailer and include VAT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The lowest price for an entry-level office chair with a range of adjustments that can be adapted to most people, and that can be used for a full day of work is between 450 and 600 euros.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about the often recommended Aeron Miller? They can be found around 1600 euros in their latest version, and often cheaper second hand (between 300 and 600 euros, depending on the condition, the model and the options). Be careful, they exist in three sizes, but we often find only the B, the &#34;standard&#34; size. They are a bit of a luxury item with a &#34;mesh&#34; fabric that has no equivalent on the market. Unfortunately, the lack of a headrest (and the poor quality of the add-ons made by other brands) make them unadapted to people with neck injuries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of a kneeling chair, it will be between 150 and 300 euros depending on the model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the more common armchairs like the Markus from IKEA, they cost around 250 euros. As alrady mentionned this is a very reasonable price, but it&#39;s not recommended as they do not offer any adjustment, especially for the armrests.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for giant inflated balloons, you can find them from 30 to 180 euros (for a more stylish model), but most people should avoid them as they are not ergonomic. Note that it&#39;s possible to add an air cushion on any chair to obtain the same effect as a balloon, for a much smaller space. Count around 30 euros for a brand like Sissel Pro SITFIT or DISC&#39;O&#39;SIT.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;keyboards-mouses-monitors-and-laptops&#34; &gt;Keyboards, mouses, monitors and laptops&lt;a href=&#34;#keyboards-mouses-monitors-and-laptops&#34; aria-label=&#34;Keyboards, mouses, monitors and laptops permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;More and more ergonomists are recommending the use of narrower keyboards than the traditional model with numeric keypad, as it creates less travel and twisting when switching from keyboard to mouse, and the arm that uses the mouse stays in line more easily. And yes, the TKL (without numeric keypad) or 60% models are also more ergonomic than full sized ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, your screen should not be too high or too low. If the stand doesn&#39;t allow you to go high enough, invest in an articulated arm or an adjustable stand. Or stick a book underneath! When you&#39;re comfortable, your eyes should look straight to the center of the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That also means not working on a laptop sitting on the desk. A stand for the machine and an extra keyboard and mouse are the minimum you should demand from your employer if you spend hours on it.&lt;/p&gt;&#xA;&#xA;&lt;em&gt;A huge thank you to Catherine and Yvan Couloigner from &lt;a href=&#34;https://www.laboutiquedudos.com/content/12-la-boutique-du-dos-brest-29200&#34;&gt;La boutique du dos à Brest&lt;/a&gt; for their welcome and their explanations! Catherine and Yvan have been selling chairs adapted to all types of people and pathologies for 14 years and have a great expertise in their field. If you are in Brittany, don&#39;t hesitate to contact them and come to the store, located at 16 rue de la Villeneuve, to benefit from their expertise.&lt;/em&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/everything-you-need-to-know-to-choose-an-office-chair" rel="self" type="text/html"></link>
    <summary type="html">It&#39;s 2021 and we&#39;re still destroying our backs and vertebras with gameeerz chairs. I talked with an expert to learn how to chose an office chair that respects our bodies.</summary>
  </entry>
  <entry>
    <title>Spinal Disc Herniation</title>
    <updated>2023-03-03T16:22:26Z</updated>
    <id>https://thomasorus.com/spinal-disc-herniation</id>
    <content type="html">&lt;h1 id=&#34;spinal-disc-herniation&#34; &gt;Spinal disc herniation&lt;a href=&#34;#spinal-disc-herniation&#34; aria-label=&#34;Spinal disc herniation permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This page contains practical tips and observation from carrying for my partner, who suffered from spinal disc herniation in 2013 (ironically, my father also had spinal disc herniation). This is not medical advice, go see your doctor if you have backpain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what is spinal disc herniation?&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;https://en.wikipedia.org/wiki/Spinal_disc_herniation&#34;&gt;Spinal disc herniation is an injury to the cushioning and connective tissue between vertebrae, usually caused by excessive strain or trauma to the spine. It may result in back pain, pain or sensation in different parts of the body, and physical disability.&lt;/blockquote&gt;&lt;figcaption&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Spinal_disc_herniation&#34;&gt;Wikipedia&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;To make it even more clear: your spine is like an extremely tidy sandwich. Each vertebrae is a slice of bread, and in-between them, there&#39;s a soft thick slice of cheese that has the perfect size and allows the slices of bread to move when you bite, and it&#39;s so well done that the cheese never falls of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Except for the day where you bend down one too many times, and the slice of cheese comes out, and now the bread pinches it. You cannot put the cheese back into place. Oh and the cheese is actually connected to your nerves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Welcome to hell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You suffer an unimaginable pain. Each movement sends high voltage bolts in your whole body. You can&#39;t sleep, you can&#39;t barely do anything anymore, and with that comes several after effects like losing your autonomy, social circle, etc.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/herniated-disc.png&#34; alt=&#34;A radiography showing an herniated disc figcaption&#34;&gt;&lt;figcaption&gt;That bloody cheese leaking out of the sandwich. | &lt;small&gt;&lt;a href=&#34;/uploaded/herniated-disc.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;There are several ways of curing spinal disc herniation. My father got an operation to remove the herniated disc. He spend a few months without moving, laying on a bed after that. With time, his two vertebrates, now touching each other, kind of fused, which means he&#39;s not suffering anymore but has lost flexibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what if you can&#39;t get an operation?&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;dealing-with-pain&#34; &gt;Dealing with pain&lt;a href=&#34;#dealing-with-pain&#34; aria-label=&#34;Dealing with pain permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You have to learn how to live with pain, and find ways of reducing it.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;painkillers&#34; &gt;Painkillers&lt;a href=&#34;#painkillers&#34; aria-label=&#34;Painkillers permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;For a time it&#39;s done with medicine. Painkillers that could calm a horse are administrated, and if they work for most people, they have several drawbacks.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;They often have life annoying side effects, like making you sleepy or dizzy&lt;/li&gt;&#xA;&lt;li&gt;They create stomach burns and nausea&lt;/li&gt;&#xA;&lt;li&gt;In some instances, you can create allergic reactions like dermatitis&lt;/li&gt;&#xA;&lt;li&gt;They can create addiction&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And if that&#39;s not enough, they can mess with your brain. By administrating painkillers regularly for a long period of time (because spinal disc herniation will last years), the brain may loose it&#39;s capability to understand when there&#39;s pain, which can result in &lt;a href=&#34;ttps://en.wikipedia.org/wiki/Fibromyalgia&#34;&gt;Fibromyalgia&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So painkillers work and are necessary at the beginning, but should be avoided when it&#39;s possible.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;kinesiotherapy&#34; &gt;Kinesiotherapy&lt;a href=&#34;#kinesiotherapy&#34; aria-label=&#34;Kinesiotherapy permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Better get used to it, kinesiotherapy is going to be a staple of life after spinal disc herniation. My partner goes every week to have massages to relieve pain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More than a year after her spinal disc herniation, I learned about the &lt;a href=&#34;https://en.wikipedia.org/wiki/McKenzie_method&#34;&gt;McKenzie method&lt;/a&gt;, which is a bit controversial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My partner tried it out, as classic kinesiotherapy was not working, and surprisingly, the benefits where very real. She regained mobility and it helped her, reducing the pain she felt while moving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, it might not be a silver bullet, but you have a testimony that it works, at least for her. Maybe try it and see if it fits your needs?&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;neurostimulation&#34; &gt;Neurostimulation&lt;a href=&#34;#neurostimulation&#34; aria-label=&#34;Neurostimulation permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;In France (where I live), rheumatologists are not knowledgeable about pain and their answer is always painkillers. The terrible thing about spinal disc herniation pain is how it self-sustains itself. You are in pain, so your whole body tenses up, resulting in more pain like &lt;a href=&#34;ttps://en.wikipedia.org/wiki/Sciatica&#34;&gt;Sciatica&lt;/a&gt; crisis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It took years for my partner to learn that, yes, pain specialists exist and that, at least in France, each major city has a center that is specialized in pain. However, it is very long to have an appointment (3 to 6 months) and your doctor needs to send a demand of registration to the center first.If you have a pain department or center near to your location, get to your doctor as soon as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the major discoveries we made was the existence of neurostimulation as a way to reduce pain. It&#39;s an extremely simple system: a neurostimulator sends short electric bursts that alters the perception of pain by blurring it. It can be done with an operation, but can also be trans-cutaneous, by using electrodes. You often see this in hospitals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the good news is: they exist in very small form factor.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/tens.jpg&#34; alt=&#34;A picture showing a neurostimulator with electrodes figcaption&#34;&gt;&lt;figcaption&gt;An example of using a portable neurostimulator to reduce pain. | &lt;small&gt;&lt;a href=&#34;/uploaded/tens.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;My partner borrowed the same model as the one in the picture above, and the results were extremely positive. Suddenly she could take long walks again, relax before going to sleep, even do chores that were impossible to her before (like using a vacuum cleaner). After a few weeks, she had a prescription and bought one herself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;She&#39;s been using it for years now, and it allowed her to live a mostly normal life again. She sometimes use it one hour a day, sometimes several hours. When traveling by car, plane or train, she keeps it for the whole duration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now this tool is great, but it has flaws:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Of course you have the cables. You get used to it, but they are sometimes cumbersome.&lt;/li&gt;&#xA;&lt;li&gt;The battery lasts, but not a full day. Try to favor models without useless crap like touch screens.&lt;/li&gt;&#xA;&lt;li&gt;The charging cable is not standard like USB-C, the connecting cables have a proprietary socket and they break/stop to work way too often and are expensive.&lt;/li&gt;&#xA;&lt;li&gt;The electrodes can be used for a few weeks, but needs to be changed when the gel that glues them to the skin doesn&#39;t work anymore, resulting in more cost and waste.&lt;/li&gt;&#xA;&lt;li&gt;The gel and type of wires that are used can trigger irritations or small burns when used for long period of time. They are different types you can try. My partner uses a model with silver wires.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It looks like a lot of trouble, but it&#39;s actually nothing compared to the benefit of being able to live a normal life again.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;furniture-for-everyday-life&#34; &gt;Furniture for everyday life&lt;a href=&#34;#furniture-for-everyday-life&#34; aria-label=&#34;Furniture for everyday life permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;If you work at a desk all day, you need a dedicated chair. I already &lt;a href=&#34;everything-you-need-to-know-to-choose-an-office-chair.html&#34;&gt;wrote about this&lt;/a&gt; so I won&#39;t redo it here. Go see a specialist, not a classic office furniture shop. And prepare some money, it&#39;s expensive. Consider it like a mattress you will keep 15 years and pay the price if you can afford it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About mattresses, you will probably have to change yours. You need something that is firm enough to have your spinal chord in the right position, but soft enough that it won&#39;t compress your muscles. Finding this balance is extremely complicated and took us years. The way we achieved this is by taking a memory foam firm mattress and its bed frame, and adding a two centimeters memory foam mattress topper to gain more smoothness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Buy all this online and profit of the free 30 to 60 night tryout return policy. We tried several time to buy in shops, but the feeling you have when trying it on site versus actually sleeping in it is totally different. Also don&#39;t hesitate to mix the brands of mattresses and mattresses toppers. Finally, if you travel by car, bring your mattress topper with you. When you don&#39;t know the quality of beds you are going to sleep in, it&#39;s good to an insurance policy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you drive, there are several things that can relieve the pain. First, prefer high habitat cars, like family breaks, and avoid low cars. You want to go up in the car, not to go down when entering. The straighter you sit the better, and the best way to do it is by adding memory foam cushion to avoid a narrow angle between your back and your legs. You can find models that have a hole where the sacrum is located, to reduce spinal cord compression. Favor them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The clutch pedal in manual car is probably the main problem. Since it requires strength to be pressed and hold, as well as having a leg in suspension, my partner was not able to drive again. Unfortunately, changing cars for an automatic is not possible for everyone (including us), but if you were in the process of changing cars, think about it. Electric cars are particularly good, as they don&#39;t produce as much vibrations that are transmitted to your back (that can be reduced with a foam backrest).&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;disability-recognition&#34; &gt;Disability recognition&lt;a href=&#34;#disability-recognition&#34; aria-label=&#34;Disability recognition permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;If your country has a disability recognition system, apply for it. You probably won&#39;t get money from it as spinal disc herniation is not considered grave enough, but you can probably get a disability card that can ease several parts of your life.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Among them:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Not waiting in lines. This is super important, as it standing still can quickly create a lot of pain. Ruining the rest of your day because you wanted to buy stamps at the post office is not worth it.&lt;/li&gt;&#xA;&lt;li&gt;Job opportunities. At least in France, employers are required by law to employ a percent of disabled people after they reach a certain size. They also get tax cuts by hiring disabled people, which always help when trying to convince you can work as well as others, and cost less.&lt;/li&gt;&#xA;&lt;li&gt;Working time arrangements. You may not be able to work full time anymore due to the exhaustion your injury creates. When you are recognized as disabled, discussions around this topic are way easier, even if it depends on the country and its worker protection laws.&lt;/li&gt;&#xA;&lt;li&gt;Getting recognition from society. Too many people diminish disabilities and say disabled persons just have to power through it. It&#39;s exhausting to hear, and being recognized helps to alleviate these situations.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;your-injury-is-now-your-job&#34; &gt;Your injury is now your job&lt;a href=&#34;#your-injury-is-now-your-job&#34; aria-label=&#34;Your injury is now your job permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If all this sounds like a lot of work, it&#39;s because it is. The hardest part of this kind of injury (and disabilities in general) is to understand there&#39;s no going back to how things were before. You will have to input this handicap in every aspect of your life for at least the next five years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to take your injury as your second job. And just like at your existing job, you will do what is required to make this thing work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mental charge is real and added to your existing ones like house keeping, work, kids. Furniture and tools require lots of money, which means only the richest people will have a faster recovery. If you have a partner, a lot of things will change and will need to be re-balanced. You might not be able to work for a while and financial dependency from your partner might happen, which always complicates things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There&#39;s a new normal that needs to be acknowledged. One where there&#39;s always a cushion in the car ; where sleeping at the hotel or an host&#39;s room requires inquiry about the bed quality ; where you re-distribute chores in the house depending if it hurts or not to do them ; where you cannot help during renovation ; where you cannot lift your kid in your arms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s depressing, it&#39;s always going go be there, and it&#39;s nobody&#39;s fault. There&#39;s no one to blame, no one to be angry at, no one to shout at. Seeing a therapist is probably a good idea to get in terms with the situation. If you have a partner, they should probably see a therapist, as they will also feel this injustice, and cannot direct it at you. Once again, it&#39;s nobody&#39;s fault.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take care and feel free to ask me question if you have any by using the links below.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/spinal-disc-herniation" rel="self" type="text/html"></link>
    <summary type="html">A testimony about how to deal with spinal disc herniation.</summary>
  </entry>
  <entry>
    <title>Drawing notes</title>
    <updated>2024-09-11T22:17:12Z</updated>
    <id>https://thomasorus.com/drawing-notes</id>
    <content type="html">&lt;h1 id=&#34;drawing-notes&#34; &gt;Drawing notes&lt;a href=&#34;#drawing-notes&#34; aria-label=&#34;Drawing notes permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This page aims to collect notes from various ressources I encountered while re-learning to draw.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;/drawing.html&#34;&gt;Drawing, like most craftsmanship, is about figuring out a process you find interesting and feel like doing thousands of times without getting bored.&lt;/blockquote&gt;&lt;figcaption&gt;— Me, &lt;a href=&#34;/drawing.html&#34;&gt;About drawing&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;As all craftsmanships, drawing is a complex mix of theorical and practical things to learn, remember and apply. Those pages aim to help me doing just that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those notes are public but heavily opinionated and are not to be taken as face value. Think about them as cards you pick when you have to remember a specific thing.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;shapes&#34; &gt;Shapes&lt;a href=&#34;#shapes&#34; aria-label=&#34;Shapes permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Shapes are areas created by lines, colors, and textures. They are what composes an image and allow the artist to direct the eye of the viewer, convey mood, render feelings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In nature, shapes can come in great variety, which makes their reproduction not only difficult, but sometimes undesirable. If they are too numerous and don&#39;t serve the meaning meaning the artist needs, then it&#39;s required to merge or transform them.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;merging-shapes&#34; &gt;Merging shapes&lt;a href=&#34;#merging-shapes&#34; aria-label=&#34;Merging shapes permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Merging shapes is one of the many ways of &lt;em&gt;simplifying&lt;/em&gt; what we see by reducing the amount of information we draw. Simplifying requires the artist to be less literal about what they see and reduce it to an essential design to convey meaning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By merging shapes, the artist can direct the eye of the viewer to another part of the piece, convey specific moods, and make the piece more easy to grasp.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;making-good-shapes&#34; &gt;Making good shapes&lt;a href=&#34;#making-good-shapes&#34; aria-label=&#34;Making good shapes permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;But while reducing information is good, it has to be done qualitatively. Designing a &lt;em&gt;good shape&lt;/em&gt; requires work. Good shapes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Are abstract&lt;/li&gt;&#xA;&lt;li&gt;Are simple and easy to draw&lt;/li&gt;&#xA;&lt;li&gt;Have a good design all by themselves&lt;/li&gt;&#xA;&lt;li&gt;Are readable even from a distance&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In order to create those shapes, it&#39;s good to mix different type of lines: S curves, C curves and straight lines allow the drawing of any shape. Looking at an existing shape and asking if a complex set of lines can be merged into a single one to reinforce a shape is important.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;visual-language&#34; &gt;Visual language&lt;a href=&#34;#visual-language&#34; aria-label=&#34;Visual language permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Visual language is a subset of theorical tools a visual artist can use to convey meaning, akin to words for a writer.&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Message&lt;/dt&gt;&lt;dd&gt;Thinking about the intention of the piece before starting it.&lt;/dd&gt;&lt;dt&gt;Composition&lt;/dt&gt;&lt;dd&gt;Directing the viewer eyes to a focal point or into a specific direction to express the message (&lt;a href=&#34;composition.html&#34;&gt;Full page on composition&lt;/a&gt;)&lt;/dd&gt;&lt;dt&gt;Contrast&lt;/dt&gt;&lt;dd&gt;Creating relationships (not just light versus dark) between elements to reinforce the composition (&lt;a href=&#34;contrasts-in-drawing.html&#34;&gt;Full page on contrast&lt;/a&gt;)&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h2 id=&#34;values&#34; &gt;Values&lt;a href=&#34;#values&#34; aria-label=&#34;Values permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Value refers to the gray scale between white and black and is used to express how light interacts with the elements represented in a piece. The values are added on the existing shapes by trying to now think of those as &lt;em&gt;planes&lt;/em&gt;, a.k.a surfaces that have an orientation on the Z axis and convey a 3 dimensional form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is important because light comes in a straight line and will bounce on the planes, creating shadows. Shadows come into two types: &lt;em&gt;cast shadows&lt;/em&gt; adopt the shape of what is blocking the light ; but &lt;em&gt;form/flat shadows&lt;/em&gt; occurs when planes turn away from the light, and the only way to know by how much is by identifying the direction of the plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can be difficult to add values, because there can be so many of them on the scale. But to convey realistic light, a few rules can be followed:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Start with 3 values : the specular light, the midtones, the shadows.&lt;/li&gt;&#xA;&lt;li&gt;Like a photographer, choose if you want to expose for the light (2 values for light, 1 for shadows) or expose for the shadows (1 value for light, 2 for shadows). Don &#39;t do both or it will look like a photo made by an HDR camera.&lt;/li&gt;&#xA;&lt;li&gt;Consider the midtones as the whole area hit by light excluding the specular and the shadows.&lt;/li&gt;&#xA;&lt;li&gt;There more room for information in the midtones hit by light than in the shadows.&lt;/li&gt;&#xA;&lt;li&gt;The range of midtones should not be too large from each others on the scale, as keeping them close helps reading them as planes.&lt;/li&gt;&#xA;&lt;li&gt;Outside of cast shadows, specular light and shadows should be kept away from each others as they create harder edges.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Lighter&#xA;|&#xA;| &lt;span&gt;&lt;&lt;/span&gt;- The Specular&#xA;|&#xA;| &lt;span&gt;&lt;&lt;/span&gt;-&#xA;| &lt;span&gt;&lt;&lt;/span&gt;- The midtones&#xA;| &lt;span&gt;&lt;&lt;/span&gt;-&#xA;|&#xA;|&#xA;|&#xA;|&#xA;| &lt;span&gt;&lt;&lt;/span&gt;- The shadows&#xA;|&#xA;Darker&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2 id=&#34;sources&#34; &gt;Sources&lt;a href=&#34;#sources&#34; aria-label=&#34;Sources permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=Nap7dwHjD9Y&amp;list=PLLmXZMqb_9sbNLM83NrM005vRQHw1yTKn&#34;&gt;10 Minutes To Better Painting&lt;/a&gt;_ by Marco Bucci.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://devinkorwin.gumroad.com/l/YPtf&#34;&gt;Creative Fundamentals&lt;/a&gt; by Devin Korwin.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/drawing-notes" rel="self" type="text/html"></link>
    <summary type="html">Notes about several drawing lessons I took and read about</summary>
  </entry>
  <entry>
    <title>Composition</title>
    <updated>2024-09-11T22:17:12Z</updated>
    <id>https://thomasorus.com/composition</id>
    <content type="html">&lt;h1 id=&#34;composition&#34; &gt;Composition&lt;a href=&#34;#composition&#34; aria-label=&#34;Composition permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Composition is an abstract language that can be manipulated to achieve artistic goals. Put in more plain language, it&#39;s the act of thinking from above in abstract shapes that will, even before anything is drawn, express the idea the artist is trying to communicate by pointing to directions or giving a focal point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Triangles are a very good abstract shape to work with, as the brain focus more on the angles as focal points than the center of its shape like when using a square. It makes the eyes move into the frame and can convery different feelings.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/composition-stable.jpg&#34; alt=&#34;A painting by Dean Cornwell. Three explorers stand in front of a globe as if they were ready to sail around it. figcaption&#34;&gt;&lt;figcaption&gt;An upright stable triangle gives a feeling of power and stability. Painting by Dean Cornwell. &lt;a href=&#34;https://twitter.com/devinkorwin/status/1378389617259450378&#34;&gt;Source&lt;/a&gt; | &lt;small&gt;&lt;a href=&#34;/uploaded/composition-stable.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/composition-unstable.jpg&#34; alt=&#34;A painting by Dean Cornwell showing a woman being interrogated by what seems to be two officers. figcaption&#34;&gt;&lt;figcaption&gt;An inverted triangle creates an uneasy feeling that can help translate a tense situation. Painting by Dean Cornwell. &lt;a href=&#34;https://twitter.com/devinkorwin/status/1378389607579066372&#34;&gt;Source&lt;/a&gt; | &lt;small&gt;&lt;a href=&#34;/uploaded/composition-unstable.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/composition-dynamic.jpg&#34; alt=&#34;A painting by Dean Cornwell showing a woman with a knife defending herself against a man. figcaption&#34;&gt;&lt;figcaption&gt;An asymmetrical triangle creates more dynamism, which is good for chaotic situations. Painting by Dean Cornwell. &lt;a href=&#34;https://twitter.com/devinkorwin/status/1378389629485867009&#34;&gt;Source&lt;/a&gt; | &lt;small&gt;&lt;a href=&#34;/uploaded/composition-dynamic.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Outside of triangles, composition can use squares, rectangles and parallelepiped. Depending on their regularity and placement they can express opposite feelings.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/composition-scaffolding.jpg&#34; alt=&#34;A painting by Dean Cornwell showing kids on a balcony. figcaption&#34;&gt;&lt;figcaption&gt;Repeated angles creates a stable scaffolding that directs the eyes and help understand the situation. Painting by Dean Cornwell. &lt;a href=&#34;https://twitter.com/devinkorwin/status/1378389652638461952&#34;&gt;Source&lt;/a&gt; | &lt;small&gt;&lt;a href=&#34;/uploaded/composition-scaffolding.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/composition-unconsistent.jpg&#34; alt=&#34;A painting by Dean Cornwell showing two people in an uncertain situation on the sea. figcaption&#34;&gt;&lt;figcaption&gt;Unstable angles in this scaffolding composition creates more uncertainty. Painting by Dean Cornwell. &lt;a href=&#34;https://twitter.com/devinkorwin/status/1378389652638461952&#34;&gt;Source&lt;/a&gt; | &lt;small&gt;&lt;a href=&#34;/uploaded/composition-unconsistent.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Composition can be used in a macro-sense to give a broader intention, but also in a micro-sense, like in architecture or for shapes of an object. But the point is not to put golden ratios everywhere or calculate things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Points to remember:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Don&#39;t start drawing or painting right away&lt;/li&gt;&#xA;&lt;li&gt;Think about the intention of the drawing/painting&lt;/li&gt;&#xA;&lt;li&gt;Use abstract shapes to support the intention&lt;/li&gt;&#xA;&lt;li&gt;Don&#39;t overdo it&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/composition" rel="self" type="text/html"></link>
    <summary type="html">Composition is an abstract language that can be manipulated to achieve artistic goals</summary>
  </entry>
  <entry>
    <title>Contrasts in drawing</title>
    <updated>2024-09-11T22:17:12Z</updated>
    <id>https://thomasorus.com/contrasts-in-drawing</id>
    <content type="html">&lt;h1 id=&#34;contrasts-in-drawing&#34; &gt;Contrasts in drawing&lt;a href=&#34;#contrasts-in-drawing&#34; aria-label=&#34;Contrasts in drawing permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Contrast is instinctively understood as the balance between dark and light values. But while drawing it can take several other forms, that will help maximizing the effect of the &lt;a href=&#34;composition.html&#34;&gt;composition&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;https://www.ageofempires.com/news/interview-with-craig-mullins-an-age-of-empires-illustrator/&#34;&gt;I would define drawing [...], really as organization and expression of relationships.&lt;/blockquote&gt;&lt;figcaption&gt;— Craig Mullins, &lt;a href=&#34;https://www.ageofempires.com/news/interview-with-craig-mullins-an-age-of-empires-illustrator/&#34;&gt;Interview&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;There are many ways of creating contrasts, among them:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Curves are opposed to straight lines&lt;/li&gt;&#xA;&lt;li&gt;Larger strokes are opposed to thin strokes&lt;/li&gt;&#xA;&lt;li&gt;Hard edges are opposed to soft edges or even lost edges&lt;/li&gt;&#xA;&lt;li&gt;Light values are opposed to dark values&lt;/li&gt;&#xA;&lt;li&gt;High activity/full areas are opposed to low activity/empty empty&lt;/li&gt;&#xA;&lt;li&gt;Textured elements are opposed to non-textured elements&lt;/li&gt;&#xA;&lt;li&gt;Etc. (directions, finished rendering vs sketchy rendering)&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/contrast.jpg&#34; alt=&#34;Valentin Serov - Portrait of Princess Olga Orlova, sketch and final painting. figcaption&#34;&gt;&lt;figcaption&gt;Valentin Serov - Portrait of Princess Olga Orlova. On the left side, several contrasts help identify how the painting will turn out. The hat is darker than the fur, which is darker than the dress. The Princess is mostly curvy lines, while the background is made of straight lines. Clothing creates hard edges, while the face has soft edges. | &lt;small&gt;&lt;a href=&#34;/uploaded/contrast.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Painters use drawing sketches as roadmaps, where relationships inform both the artistic intention, but also the practical way of achieving this intention, in the final painting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Points to remember:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Contrasts exist to reinforce the composition by creating relationships between elements.&lt;/li&gt;&#xA;&lt;li&gt;Contrasts is not just the difference between dark and light values, but several other things that depend on the medium used to draw or paint.&lt;/li&gt;&#xA;&lt;li&gt;Thinking in relationships is good to translate artistic intention, but also has practical benefits, like indirectly creating a roadmap for a more fleshed out piece done later.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/contrasts-in-drawing" rel="self" type="text/html"></link>
    <summary type="html">Using contrast in drawing helps maximizing the effect of the composition</summary>
  </entry>
  <entry>
    <title>Notes on BDSM</title>
    <updated>2025-10-14T15:41:08+02:00</updated>
    <id>https://thomasorus.com/notes-on-bdsm</id>
    <content type="html">&lt;h1 id=&#34;notes-on-bdsm&#34; &gt;Notes on BDSM&lt;a href=&#34;#notes-on-bdsm&#34; aria-label=&#34;Notes on BDSM permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt; This page contains my notes from the podcast &lt;a href=&#34;https://soundcloud.com/voidjumper/ep5-nicole&#34;&gt;Voidjumper &amp; Nicole; on BDSM&lt;/a&gt;. It&#39;s edited to make most of the informations I found interesting readable and condensed. Due to the sensitive nature of the topic, I tried to be as clear and safe as possible, but if you find any mistake or wrongness, please contact me so I can fix them. Thanks! &lt;/aside&gt;&#xA;&#xA;&lt;p&gt;BDSM, or more precisely &lt;em&gt;BDDSSM&lt;/em&gt;, stands for &lt;em&gt;Bondage and Discipline, Domination and Submission, Sadism and Masochism&lt;/em&gt;. &lt;strong&gt;BDSM is about creating a safe environment using frameworks, where people can safely play with those things&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;People practicing BDSM can do, &lt;strong&gt;in context&lt;/strong&gt;, things they would normally never do in their daily lives. If they strike their partner, or say things that could considered as objectifying, humiliating, or emotionally painful ; most people would not find such behavior acceptable and would warn their relatives to step out of these relationships.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;play-and-magic-circles&#34; &gt;Play and magic circles&lt;a href=&#34;#play-and-magic-circles&#34; aria-label=&#34;Play and magic circles permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Since BDSM is about playing together, it&#39;s inherently a game, and since it does it in a specific context it creates for the game, it can be seen as a &lt;a href=&#34;https://en.wikipedia.org/wiki/Magic_circle_%28virtual_worlds%29&#34;&gt;magic circle&lt;/a&gt;, a space where normal rules of the world are suspended and replaced by new ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The term magic circle was initially coined by the Dutch historian/sociologist &lt;a href=&#34;ttps://en.wikipedia.org/wiki/Johan_Huizinga&#34;&gt;Johan Huizinga&lt;/a&gt; in his &lt;a href=&#34;https://en.wikipedia.org/wiki/Homo_Ludens&#34;&gt;Homo Ludens&lt;/a&gt; book, where he also listed what are the base characteristics of play.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those characteristics are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Play is free, is in fact freedom, and is chosen.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Play is not real life, it&#39;s separated from our daily lives.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Play always has a duration and a location.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Play is order, which means rules are supreme, absolute and not negotiable.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Play is not tied to financial or material gain.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt; About rule 5: when gain is involved, rule 1 is broken. Because outside forces will intervene in the play to benefit from it, a player is not free of doing what they want. &lt;/aside&gt;&#xA;&#xA;&lt;p&gt;In addition to these characteristics, that can easily be interpreted as rules, BDSM tries to provide &lt;em&gt;frameworks&lt;/em&gt; that enable play. Among them are &lt;strong&gt;SSC&lt;/strong&gt; and &lt;strong&gt;RACK&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;ssc-rack-and-their-differences&#34; &gt;SSC, RACK, and their differences&lt;a href=&#34;#ssc-rack-and-their-differences&#34; aria-label=&#34;SSC, RACK, and their differences permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;When using the SSC framework, everyone involved in the circle has to play in a &lt;strong&gt;Safe, Sane and Consensual&lt;/strong&gt; manner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Safe means preventing accidents and being equipped for emergencies. For example not choking someone without knowing how to do it properly. Not tying up a human being without having safety scissors nearby. Sane means not being intoxicated (alcohol, drugs), not doing stupid things (playing with fire and burning a house down). Think things in a sane manner. Consensual means asking if everyone on board is aware of what&#39;s going on. Is everyone in agreement, not intoxicated, not forced into this situation (see rule 5 mentioned previously).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RACK, or &lt;strong&gt;Risk Aware Consensual Kink&lt;/strong&gt;, was made in reaction to SSC, following the idea that nobody can be 100% safe or sane 100% of the time. People can slip up, safety nets cannot prevent everything, and not everyone has the same notion of what is safe. So what happens if one person goes further than the other anticipated? It means risks are taken. So RACK is about everyone consenting to take risks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Outside of the rules of SSC and RACK, the duration of play must be defined, details must be discussed about what each participant feels comfortable to do or not.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;talking-about-kinks&#34; &gt;Talking about kinks&lt;a href=&#34;#talking-about-kinks&#34; aria-label=&#34;Talking about kinks permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As it can be culturally complicated to talk about sex and kinks in many societies, participants trying to create a sexual or kinky relationship can feel awkward when talking about their desires, and can find themselves unable to explicitly say things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BDSM encourages to make the conversation explicit and safe in a fun way: by making the conversation about kinks a game (and thus a magic circle) in itself. Establishing simple rules of talk that all participants agree to follow, like an order of passage, or a signal to notify others that the current kink discussed is not safe, can make the experience easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This type of conversation also allows participants to think about details or events that may happen. For example, if a person decides to act as an animal, are their play partner OK with them peeing or pooping during the act? What happens if they fall from stairs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the most common rules is the definition of a safe word (the most common being &#34;red&#34;, probably as a reference to traffic lights) that can be used when someone wants to stop. When used, the magic circle is immediately dissolved (as the rules are absolute) and everyone checks on each other.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;aftercare&#34; &gt;Aftercare&lt;a href=&#34;#aftercare&#34; aria-label=&#34;Aftercare permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As explained before, BDSM allows its participants to play with dangerous things, and act in ways that are normally non-tolerated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is why, when the game is over and the magic circle is broken, &lt;strong&gt;aftercare must happen to help participants get back in the real world and their normal relationships&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eating chocolate together, drinking ice-cold water, cuddling, but also enforcing positivity and reminding everyone of their normal relationship, are ways of reinforcing that the game is over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s also important to debrief it, for example the next day, to know what everyone liked or dislike. It&#39;s, again, important to make everything explicit.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;usage-outside-of-bdsm&#34; &gt;Usage outside of BDSM&lt;a href=&#34;#usage-outside-of-bdsm&#34; aria-label=&#34;Usage outside of BDSM permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If the BDSM can seem intimidating, its play/magic circle aspect and frameworks for consent can actually be used by non-BDSM practitioners.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;make it explicit in a fun way&lt;/em&gt; method when talking about kinks can also be used to get or give consent in situations where the participants might suddenly need it. Flirt, for example, has become a complicated topic due to the difficulty of balancing seduction and consent. Going directly for a kiss without consent can be felt as weird or aggressive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But asking for consent in a fun and explicit way can help everyone out. Asking for consent with something like &lt;em&gt;&#34;I&#39;ve been looking at your lips for a while, and I really want to kiss them. Can I?&#34;&lt;/em&gt; allows the participants to stay both safe and in the mood. The person on the receiving hand can also choose to play, for example by using banter, and answer something in the style of &lt;em&gt;&#34;In the future you don&#39;t have to ask&#34;&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, as terminologies like &lt;em&gt;daddy&lt;/em&gt; or &lt;em&gt;spanking&lt;/em&gt; have become cultural norm and shorthand terms, some people who are already intimate and practicing some kinky games involving power might think it&#39;s unnecessary to discuss them. But the reality is that nobody that didn&#39;t ask for it wants to get spanked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Asking for consent is also a way of slowing things down, and giving everyone the time to eliminate the rush, but also profit from the situation, which can make it even more enjoyable.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;in-conclusion&#34; &gt;In conclusion&lt;a href=&#34;#in-conclusion&#34; aria-label=&#34;In conclusion permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;When people talk about BDSM they immediately think about dominatrix women in leather, with long boots and whips ; stern men hitting women with their belts while being called &#34;daddy&#34;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a part of the community, but it&#39;s not what BDSM is. It can be playful, joyous or celebratory too. &lt;strong&gt;BDSM is this magical moment that exists separated from everything else&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/notes-on-bdsm" rel="self" type="text/html"></link>
    <summary type="html">People practicing BDSM can do, in context, things they would normally never do in their daily lives.</summary>
  </entry>
  <entry>
    <title>Chemical love combo</title>
    <updated>2023-05-02T19:29:45Z</updated>
    <id>https://thomasorus.com/chemical-love-combo</id>
    <content type="html">&lt;h1 id=&#34;the-chemical-love-combo&#34; &gt;The chemical love combo&lt;a href=&#34;#the-chemical-love-combo&#34; aria-label=&#34;The chemical love combo permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Chemical Love is one of the a signature moves of I-no, a character from the fighting game series Guilty Gear. The Chemical Love combos are one of the most complex things I ever had to master in a fighting game, and the biggest knowledge check I ever encountered just to be able to properly use a character. It took me days of trial and error to make it work for the first time. It&#39;s a great testimony about how older fighting games used to be humbling bottomless pits.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-basics&#34; &gt;The basics&lt;a href=&#34;#the-basics&#34; aria-label=&#34;The basics permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Chemical Love is a powerful move: when doing it, I-no flips herself into the air, does a front split, and launches a sound wave what goes almost full screen and knocks the opponent down (a very powerful thing in Guilty Gear as recovery timings are fixed and give plenty of time to prepare your next attack). It&#39;s counterpart is that his execution is demanding: a half circle backward then forward motion + Kick button (or →↘↓↙← → Kick.)&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;video autoplay playsinline loop mute preload=&#34;metadata&#34; src=&#34;/uploaded/img/chemical.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;/video&gt;&lt;figcaption&gt;The Chemical Love. We can see the input motion is happening as the character crouches before the move happens.&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;But this move isn&#39;t just a standalone attack you throw out of nowhere, it&#39;s also a core part of I-no&#39;s combos. And that&#39;s where it becomes both complicated and amazing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Guilty Gear XX provides a move cancelling technique called &lt;em&gt;Roman Cancel&lt;/em&gt;. By pressing 3 buttons, it frees the character from what is it currently doing, while leaving its existing projectiles active. The basic version creates a red halo around the character.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;video autoplay playsinline loop mute preload=&#34;metadata&#34; src=&#34;/uploaded/img/roman-cancel.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;/video&gt;&lt;figcaption&gt;A classic Roman Cancel.&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Some of those cancels, when done during a specific time window that usually last 2 to 4 frames (32 to 64 milliseconds) and only exists on specific moves, are called &lt;em&gt;Force Roman Cancel&lt;/em&gt; (or FRC) and show a blue halo instead of red. The Chemical Love has an FRC point, meaning it can be used during combo.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;video autoplay playsinline loop mute preload=&#34;metadata&#34; src=&#34;/uploaded/img/chemical-frc.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;/video&gt;&lt;figcaption&gt;The Chemical Love can only be cancelled at a specific timing, creating a blue Force Roman Cancel.&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;But as I-no lifts herself in the air at the first frame of the move, cancelling it makes her fall to the ground before she can continue and attack. And as I-no does not have a traditional running motion, she cannot catch the opponent she just hit with the sound wave.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;video autoplay playsinline loop mute preload=&#34;metadata&#34; src=&#34;/uploaded/img/no-combo.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;/video&gt;&lt;figcaption&gt;Chemical Love is cancelled, I-no falls on the ground, then dashes forward but is too late to continue.&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Guilty Gear XX allows character to dash in the air, and I-no can do it too. Since we are canceling the Chemical Love, a move that lifts I-no in the air, she should be able to just air dash without having to go on the ground first, right?&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-air-the-ground-and-the-tiger&#34; &gt;The air, the ground, and the tiger&lt;a href=&#34;#the-air-the-ground-and-the-tiger&#34; aria-label=&#34;The air, the ground, and the tiger permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Well no. Because if the moves gives some &lt;em&gt;properties&lt;/em&gt; akin to being in the air (like invincibility on the legs), I-no is considered &lt;em&gt;on the ground&lt;/em&gt;, thus she cannot air dash. She has to jump first, then do the Chemical Love in the air, then cancel it with the FRC, then air dash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jumping and then inputing the complicated motion of the Chemical Love is near to impossible to do in such a short amount of time, which is why a &lt;em&gt;tiger knee&lt;/em&gt; motion has to be used. A Tiger Knee motion means inputing the move motion, then an extra upward direction, then the button that triggers the move. By doing so, the game input buffer is tricked: it has the move motion in memory, but only triggers it when the button is pressed, which happens after the jump.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For I-no, it means doing a half-circle backward that ends with a up-backward direction that acts as a jump, then forward, then the button (or →↘↓↙←↖ → Kick.). By doing so, I-no does the Chemical Love close to the ground, but is considered in the air.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;video autoplay playsinline loop mute preload=&#34;metadata&#34; src=&#34;/uploaded/img/tiger-knee.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;/video&gt;&lt;figcaption&gt;A Chemical Love done on the ground, then then done in the air using the Tiger Knee technique. The trail of dust indicates I-no jumped before doing the move.&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Once the character is properly considered in the air and the cancel can happen and I-no can technically air dash, the player has to input a double tap forward extremely fast before I-no falls. It&#39;s almost impossible to do when close to the ground, so once again the game buffer must be abused. Instead of doing Chemical Love &gt; 3 buttons &gt; Forward, Forward, it&#39;s necessary to input Chemical Love &gt; Forward &gt; 3 Buttons &gt; Forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way, the I-no doesn&#39;t have the time to fall back on the ground and instantly air dashes outside of the cancel, allowing the combo to continue.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;video autoplay playsinline loop mute preload=&#34;metadata&#34; src=&#34;/uploaded/img/chemical-combo.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;/video&gt;&lt;figcaption&gt;The final combo: Chemical Love done with a Tiger Knee motion, followed by Forward, then 3 buttons to cancel during the Force Roman Cancel Window, then Forward again, triggering the air dash, and then a few hits.&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;And that&#39;s it, that&#39;s all the basics needed to do a proper combo with I-no! But it&#39;s not over. Depending on the starter before the Chemical Love, the distance, and other factors, like the weight of the character, the remaining of the combo changes.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;but-wait-there-s-more&#34; &gt;But wait, there&#39;s more!&lt;a href=&#34;#but-wait-there-s-more&#34; aria-label=&#34;But wait, there&#39;s more! permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;There&#39;s actually another way of doing this combo! In Guilty Gear XX, there&#39;s a technique called &lt;em&gt;Jump Install&lt;/em&gt;, which consists of making the game believe the character is both on the ground and in the air, allowing them to &lt;em&gt;store&lt;/em&gt; a jump or an air dash until they go back to their idle stance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way it works is by using normal moves that are &lt;em&gt;jump-cancellable&lt;/em&gt;, which means their recovery animations can be cancelled by the character jumping. But the animation of the jump can also be cancelled by another move before the jump starts, yet the jump still registers. Which means the character does an attack, cancels its animation to jump, then cancels the jump animation with another attack. Nothing on the screen indicates a Jump Install happened, it can only be seen after the fact, when a character uses the air dash or the additional jump, in a situation where it&#39;s normally not possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is perfect for I-no! If she can make the game believe she is in the air while she is on the ground, when she cancels the Chemical Love with the FRC, she can air dash without doing the additional Tiger Knee motion.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;video autoplay playsinline loop mute preload=&#34;metadata&#34; src=&#34;/uploaded/img/ino-final-combo.mp4&#34; type=&#34;video/mp4&#34;&gt;&lt;/video&gt;&lt;figcaption&gt;The Chemical Love combo using the Jump Install technique. Notice there&#39;s no dust trail, which means I-no did the move without the Tiger Knee.&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;that-s-all-folks&#34; &gt;That&#39;s all folks&lt;a href=&#34;#that-s-all-folks&#34; aria-label=&#34;That&#39;s all folks permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This combo is an incredible knowledge check even by fighting games standards of the period. It requires not only to know how I-no works, but also to know some Guilty Gear specific techniques that are not explained in the game manual, as well as others, more generic fighting games techniques. Before the internet allowed knowledge to be shared more easily, it was near to impossible to learn this by yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, most fighting games don&#39;t try put essential stuff like this behind a knowledge or execution barrier. For business reasons, they prefer to tone down the strength of the moves and reduce the complexity of motions, which makes the game more accessible, less punitive, and overall, more successful. Still, it feels &lt;em&gt;good&lt;/em&gt; to do this combo in a real match. It&#39;s the same feeling as beating a hard boss in any other game. I miss this kind of feeling in more recent games.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/chemical-love-combo" rel="self" type="text/html"></link>
    <summary type="html">The hardest combo I ever had to learn in any fighting game</summary>
  </entry>
  <entry>
    <title>Third Strike Defensive and Offensive Mechanics</title>
    <updated>2024-10-29T18:04:40Z</updated>
    <id>https://thomasorus.com/third-strike-defensive-and-offensive-mechanics</id>
    <content type="html">&lt;h1 id=&#34;third-strike-defensive-and-offensive-mechanics&#34; &gt;Third Strike Defensive and Offensive Mechanics&lt;a href=&#34;#third-strike-defensive-and-offensive-mechanics&#34; aria-label=&#34;Third Strike Defensive and Offensive Mechanics permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This page is a summary of the &lt;a href=&#34;https://www.youtube.com/watch?v=SeKeLTNFqNM&#34;&gt;3s After School Episode 2&lt;/a&gt; and contains strategies to manage defense in Third Strike.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-80-20-rule&#34; &gt;The 80/20 rule&lt;a href=&#34;#the-80-20-rule&#34; aria-label=&#34;The 80/20 rule permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Spend 80% of your time playing reactively and 20% playing proactively. Playing reactively means watching the opponent and reacting to its actions, while proactive play is forcing your agenda on your opponent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reactive play should happen on the ground or by jumping vertically, as jumping forward/backward removes control and options, while giving away the landing position to the opponent, as most characters cannot change it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to be able to play reactively in a proper way, it&#39;s important to study matchups and find good answers and punishes for each characters strong buttons.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;wake-up-mechanics&#34; &gt;Wake up mechanics&lt;a href=&#34;#wake-up-mechanics&#34; aria-label=&#34;Wake up mechanics permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The charts below explain how offense and defense works in Third Strike, based on frame data and character options.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;how-it-works&#34; &gt;How it works&lt;a href=&#34;#how-it-works&#34; aria-label=&#34;How it works permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/wakeup-mechanics-1.png&#34; alt=&#34;A table chart showing attack and defensive options in Third Strike figcaption&#34;&gt;&lt;figcaption&gt;A chart of attack and defensive options in Third Strike. | &lt;small&gt;&lt;a href=&#34;/uploaded/wakeup-mechanics-1.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Throws come out in 3 frames. The character doing the throw is vulnerable during this period. It&#39;s possible to tech a throw before it comes out during frame 4 and 5, and then after it came out, from frame 7 to frame 11 (5 frames total).&lt;/li&gt;&#xA;&lt;li&gt;From frame 1 to frame 6 after waking up, characters are invincible to throws. It means the attacker has to delay its throw and that a meaty throw is active on frame 7.&lt;/li&gt;&#xA;&lt;li&gt;When the parry window is open (by taping forward or down) it&#39;s impossible to tech throws until the window closes (10 frames on the ground, 7 frames in the air). Therefore when an opponent can die from chip damage and they have no choice but to parry, throw is very strong.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;summary-of-options&#34; &gt;Summary of options&lt;a href=&#34;#summary-of-options&#34; aria-label=&#34;Summary of options permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/wakeup-mechanics-2.png&#34; alt=&#34;A table chart showing attack and defensive options in Third Strike figcaption&#34;&gt;&lt;figcaption&gt;A chart of attack and defensive options in Third Strike. | &lt;small&gt;&lt;a href=&#34;/uploaded/wakeup-mechanics-2.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Delayed tech while blocking is the strongest option as it only loses to delayed meaty. It can be enhanced by inputting an 1 frame airborne move or an invincible dragon punch.&lt;/li&gt;&#xA;&lt;li&gt;Reversal jump (if cornered) is the second better option as it only loses to meaty attack&lt;/li&gt;&#xA;&lt;li&gt;1 frame airborne move (if the character has one) it third as it creates a reset.&lt;/li&gt;&#xA;&lt;li&gt;Reversal throws and reversal attacks are less effective than delayed tech.&lt;/li&gt;&#xA;&lt;li&gt;Reversal parry is the worst of all, and should only used against chip damage (but against it loses to throws) and in situation where it&#39;s guaranteed.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;h2 id=&#34;option-selects&#34; &gt;Option selects&lt;a href=&#34;#option-selects&#34; aria-label=&#34;Option selects permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;An option select is inputting several commands and letting the game choose the best one.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;buffering-os&#34; &gt;Buffering OS&lt;a href=&#34;#buffering-os&#34; aria-label=&#34;Buffering OS permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Buffering OS is an offensive option select that automatically cancels a normal move with a special if the normal lands.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Input a cancellable normal, then a special&lt;/li&gt;&#xA;&lt;li&gt;If the normal lands on hit or block, the special comes out.&lt;/li&gt;&#xA;&lt;li&gt;If the normal doesn&#39;t land, the special does not come out.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;h3 id=&#34;ded&#34; &gt;DED&lt;a href=&#34;#ded&#34; aria-label=&#34;DED permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;DED is an offensive option select that automatically chooses between doing a super or not doing a super after a move, based on the available meter.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Input a move, then a super while the super bar is near completion.&lt;/li&gt;&#xA;&lt;li&gt;If the move hits, the super bar is filled and the super comes out.&lt;/li&gt;&#xA;&lt;li&gt;If the move does not hit, the super bar is not filled and the super does not come out.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;h3 id=&#34;crouch-tech-os&#34; &gt;Crouch Tech OS&lt;a href=&#34;#crouch-tech-os&#34; aria-label=&#34;Crouch Tech OS permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Crouch Tech OS is a defensive option select that automatically chooses between a crouching light punch and a throw tech.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Input down + LP + LK.&lt;/li&gt;&#xA;&lt;li&gt;If no opponent throw, LP comes out due to the input priority system.&lt;/li&gt;&#xA;&lt;li&gt;If the opponent throws, a throw tech happens.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;h3 id=&#34;normal-tech-os&#34; &gt;Normal + Tech OS&lt;a href=&#34;#normal-tech-os&#34; aria-label=&#34;Normal + Tech OS permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Normal + Tech OS is a defensive option select that automatically chooses between any normal and a throw tech.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Input a normal move, then a throw.&lt;/li&gt;&#xA;&lt;li&gt;If the opponent throws, a tech throw happens.&lt;/li&gt;&#xA;&lt;li&gt;If the opponent doesn&#39;t throw, the normal comes out.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;h3 id=&#34;parry-buffering-os&#34; &gt;Parry buffering OS&lt;a href=&#34;#parry-buffering-os&#34; aria-label=&#34;Parry buffering OS permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Parry buffering OS Tech OS is a defensive option select that automatically chooses between a parry and an attack.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Input parry, then a normal move.&lt;/li&gt;&#xA;&lt;li&gt;If the opponent attacks, the move is parried, then the attack comes out.&lt;/li&gt;&#xA;&lt;li&gt;If the opponent does not attack, the attack comes out normally.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;h3 id=&#34;sggk&#34; &gt;SGGK&lt;a href=&#34;#sggk&#34; aria-label=&#34;SGGK permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;SGGK is a defensive option select that automatically chooses between a trow, a tech throw or a hit after inputting a parry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here&#39;s how it works:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Input a parry (tap forward or low)&lt;/li&gt;&#xA;&lt;li&gt;Do a kara-throw (character specific, cancelling the first frame of a move by a throw)&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Situations:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Opponent does nothing -&gt; the game kara-throws.&lt;/li&gt;&#xA;&lt;li&gt;Opponent throws -&gt; the game techs the opponent throw.&lt;/li&gt;&#xA;&lt;li&gt;Opponent attacks -&gt; the game parries, then the attack used in the kara-throw comes out.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;h3 id=&#34;jump-tech-os&#34; &gt;Jump tech OS&lt;a href=&#34;#jump-tech-os&#34; aria-label=&#34;Jump tech OS permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Jump tech OS is a defensive option select that automatically chooses between a jump and a throw tech.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Press jump and throw at the same time.&lt;/li&gt;&#xA;&lt;li&gt;If the opponent throws, a tech throw happens.&lt;/li&gt;&#xA;&lt;li&gt;If the opponent doesn&#39;t throw, jump happens.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/third-strike-defensive-and-offensive-mechanics" rel="self" type="text/html"></link>
    <summary type="html">Notes on defense in Street Fighter 3: Third Strike</summary>
  </entry>
  <entry>
    <title>Third Strike Ryu Matchups Notes</title>
    <updated>2024-10-29T18:04:40Z</updated>
    <id>https://thomasorus.com/third-strike-ryu-matchups-notes</id>
    <content type="html">&lt;h1 id=&#34;third-strike-ryu-matchups-notes&#34; &gt;Third Strike Ryu Matchups Notes&lt;a href=&#34;#third-strike-ryu-matchups-notes&#34; aria-label=&#34;Third Strike Ryu Matchups Notes permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt; Due to a bug, Ryu has +2 frames of additional block stun when crouched. In this page, if a frame data has two values separated by &lt;em&gt;/&lt;/em&gt;, it means on block standing / on block crouching. Frame data is expressed from the point of view of the attacker. &lt;/aside&gt;&#xA;&#xA;&lt;p&gt;Definitions:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Joudan&lt;/dt&gt;&lt;dd&gt;Ryu &#34;donkey kick&#34; 41236 + kick&lt;/dd&gt;&lt;dt&gt;P2HPJ&lt;/dt&gt;&lt;dd&gt;Parry &gt; 2HP &gt; Joudan Kick EX&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h2 id=&#34;ryu-pressure&#34; &gt;Ryu Pressure&lt;a href=&#34;#ryu-pressure&#34; aria-label=&#34;Ryu Pressure permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;h3 id=&#34;blockstrings&#34; &gt;Blockstrings&lt;a href=&#34;#blockstrings&#34; aria-label=&#34;Blockstrings permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;2LK &gt; Kara throw&lt;/li&gt;&#xA;&lt;li&gt;2LP &gt; 2LK &gt; 2LK &gt; 2MK &gt; Hadoken &gt; Denjin&lt;/li&gt;&#xA;&lt;li&gt;Close MK (+2) &gt; 2MP (+3) &gt; 2MK &gt; Hadoken &gt; Denjin&lt;/li&gt;&#xA;&lt;li&gt;Close MK (+2) &gt; 6MP&lt;/li&gt;&#xA;&lt;li&gt;Close MK (+2) -&gt; far MK&lt;/li&gt;&#xA;&lt;li&gt;Close MK (+2) -&gt; 2LK (catch spam of lights) &gt; far MK&lt;/li&gt;&#xA;&lt;li&gt;Close MK &gt; Delayed parry &gt; P2HPJ&lt;/li&gt;&#xA;&lt;li&gt;Far stand MP &gt; Hadoken &gt; Denjin&lt;/li&gt;&#xA;&lt;li&gt;Far Stand MP (+4) &gt; 2MK (startup 7f) &gt; Delayed Hadoken&lt;/li&gt;&#xA;&lt;li&gt;Forward throw &gt; Opponent rolls &gt; 2MK &gt; ligth tatsu (almost safe distance ?)&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;mixups-and-things&#34; &gt;Mixups and things&lt;a href=&#34;#mixups-and-things&#34; aria-label=&#34;Mixups and things permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Opponent is on the ground &gt; 2LP (whiff) &gt; 2LP (whiff) &gt; P2HPJ&lt;/li&gt;&#xA;&lt;li&gt;Opponent is on the ground &gt; 2LP (whiff) &gt; 2LP (whiff) &gt; close HP (prevent jumps) &gt; far MK &gt; far HK (prevent jumps)&lt;/li&gt;&#xA;&lt;li&gt;Opponent is waking up &gt; 2MK &gt; Shoryuken &gt; Denjin&lt;/li&gt;&#xA;&lt;li&gt;If Denjin is parried and opponent close&gt; parry low&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h3 id=&#34;denjin-charge&#34; &gt;Denjin Charge&lt;a href=&#34;#denjin-charge&#34; aria-label=&#34;Denjin Charge permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Use PP + Diagonals to charge.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;Level 2: 8 points&lt;/li&gt;&#xA;&lt;li&gt;Level 3: 32 points&lt;/li&gt;&#xA;&lt;li&gt;Level 4: 80 points&lt;/li&gt;&#xA;&lt;li&gt;Level 5: 160 points&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;h2 id=&#34;matchups&#34; &gt;Matchups&lt;a href=&#34;#matchups&#34; aria-label=&#34;Matchups permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3 id=&#34;vs-chun-li&#34; &gt;Vs Chun-li&lt;a href=&#34;#vs-chun-li&#34; aria-label=&#34;Vs Chun-li permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Chun-li standing normals:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;LP&lt;/dt&gt;&lt;dd&gt;+2 on block, 3f startup. don&#39;t challenge if spammed.&lt;/dd&gt;&lt;dt&gt;MP&lt;/dt&gt;&lt;dd&gt;-2/0 on block.&lt;/dd&gt;&lt;dt&gt;HP&lt;/dt&gt;&lt;dd&gt;-2/0 on block, impossible to regain advantage after if spaced correctly, but P2HPJ Works.&lt;/dd&gt;&lt;dt&gt;4 + HP&lt;/dt&gt;&lt;dd&gt;-1/+1 on block, impossible to punish due to pushback.&lt;/dd&gt;&lt;dt&gt;LK&lt;/dt&gt;&lt;dd&gt;+1+3 on block, mid.&lt;/dd&gt;&lt;dt&gt;MK&lt;/dt&gt;&lt;dd&gt;close -2 (followup possible), far is -5, hard to punish due to pushback.&lt;/dd&gt;&lt;dt&gt;6 + MK&lt;/dt&gt;&lt;dd&gt;0/+2 on block.&lt;/dd&gt;&lt;dt&gt;HK&lt;/dt&gt;&lt;dd&gt;close is -3/-1 and starts in 4 frames, far is 0/+2 on block, avoids lows, can move forward. Almost impossible to punish as Chun-li has stronger buttons.&lt;/dd&gt;&lt;dt&gt;3 + HK&lt;/dt&gt;&lt;dd&gt;+8 on block.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Chun-li crouching normals:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to Ryu&#39;s crouching bug, almost all moves are impossible to punish.&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;2 + LP&lt;/dt&gt;&lt;dd&gt;*&lt;strong&gt;+3/+5&lt;/strong&gt;&lt;strong&gt; on block, startup is 2 frames.&lt;/dd&gt;&lt;dt&gt;2 + MP&lt;/dt&gt;&lt;dd&gt;-2 on block.&lt;/dd&gt;&lt;dt&gt;2 + HP&lt;/dt&gt;&lt;dd&gt;-1/+1 on block.&lt;/dd&gt;&lt;dt&gt;2 + LK&lt;/dt&gt;&lt;dd&gt;&lt;/strong&gt;&lt;strong&gt;+5&lt;/strong&gt;* on block.&lt;/dd&gt;&lt;dt&gt;2 + MK&lt;/dt&gt;&lt;dd&gt;0 on block.&lt;/dd&gt;&lt;dt&gt;2 + HK&lt;/dt&gt;&lt;dd&gt;-5 on block.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Chun-li specials:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Spinning Bird Kick&lt;/dt&gt;&lt;dd&gt;Safe (from -2 to -3) when guarded standing. Whiff when crounching, safest punish is 2MP.&lt;/dd&gt;&lt;dt&gt;Kikoken&lt;/dt&gt;&lt;dd&gt;LP is -17, MP is -10, HP is -4, EX is -7. If done close in the corner, Shoryuken EX works.&lt;/dd&gt;&lt;dt&gt;Hazan Shu&lt;/dt&gt;&lt;dd&gt;All versions are -2 on block.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Chun-li SA2 :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Startup is 2 frames.&lt;/li&gt;&#xA;&lt;li&gt;Is -23 on block.&lt;/li&gt;&#xA;&lt;li&gt;Goes through fireballs at some ranges.&lt;/li&gt;&#xA;&lt;li&gt;8 hits, then 8 hits again, then 1.&lt;/li&gt;&#xA;&lt;li&gt;Can punish 2HK when whiffed, even if a bit late, never use it when she has super.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3 id=&#34;vs-dudley&#34; &gt;Vs Dudley&lt;a href=&#34;#vs-dudley&#34; aria-label=&#34;Vs Dudley permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt; Almost all Dudley target combos are either slightly positive or negative on hit (from -1 to +3) and all of them are safe or slightly positive on block (from -1 to +2) and give Dudley enough space to be safe. It&#39;s better to not challenge them after hit and block. &lt;/aside&gt;&#xA;&#xA;&lt;p&gt;It&#39;s important to prevent Dudley from jumping by using stand HK, 2HP and stand LP as anti-airs. Stand HK disjointed hitbox kills a lot of Dudley normals. Be also careful to guard most of his attacks while standing to avoid Ryu&#39;s bug and make some of Dudley&#39;s moves easier to punish.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dudley standing normals:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;LP&lt;/dt&gt;&lt;dd&gt;+3 on block, target with MP is +1.&lt;/dd&gt;&lt;dt&gt;6 + LP&lt;/dt&gt;&lt;dd&gt;+1/+3 on block, better range than LP but 1 frame slower on startup.&lt;/dd&gt;&lt;dt&gt;MP&lt;/dt&gt;&lt;dd&gt;-1/+1 on block, 3f startup, don&#39;t challenge if spammed.&lt;/dd&gt;&lt;dt&gt;6 + MP&lt;/dt&gt;&lt;dd&gt;-1/+1 on block.&lt;/dd&gt;&lt;dt&gt;HP&lt;/dt&gt;&lt;dd&gt;-1/+1 on block, can be whiff punished by far MK easily if out of range, HK also work. 2MK is dangerous. P2HPJ Works.&lt;/dd&gt;&lt;dt&gt;HP (charged)&lt;/dt&gt;&lt;dd&gt;-1/-3 on block, can be whiff punished by 2HK during startup, otherwise it trades. P2HPJ works.&lt;/dd&gt;&lt;dt&gt;LK&lt;/dt&gt;&lt;dd&gt;+2/+4 on block.&lt;/dd&gt;&lt;dt&gt;MK&lt;/dt&gt;&lt;dd&gt;0/+2 on block.&lt;/dd&gt;&lt;dt&gt;6 + MK&lt;/dt&gt;&lt;dd&gt;+2/+4 on block.&lt;/dd&gt;&lt;dt&gt;HK&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;+4/+6 on block&lt;/strong&gt;, can be whiff punished by MK, 2MK or 2HK.&lt;/dd&gt;&lt;dt&gt;6 + HK&lt;/dt&gt;&lt;dd&gt;-2 on block, overhead.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Dudley Crouching normals:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All normals are either 0 or positive on block except for 2MK.&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;2 + MK&lt;/dt&gt;&lt;dd&gt; -10 on block but put Dudley out of range of everything fast enough except for 2HK.&lt;/dd&gt;&lt;dt&gt;2 + HK&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;+3 on block&lt;/strong&gt;, don&#39;t challenge after.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Dudley specials:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Machine Gun Blow (41236 + P)&lt;/dt&gt;&lt;dd&gt;-3/-1, -9/-7, -12/-15 and -15/-13 (EX) on block. Pushes Dudley back on block. Light version cannot be punished, medium and strong can be punished with 2MK &gt; Tatsumaki, EX can be punish with raw Ex Joudan.&lt;/dd&gt;&lt;dt&gt;Ducking Straight (41236 + K &gt; P)&lt;/dt&gt;&lt;dd&gt;-7 on block (standing, does not hit low). Punishable on block with HP Shoryuken if Dudley is not at max range.&lt;/dd&gt;&lt;dt&gt;Ducking Uppercut (41236 + K &gt; P)&lt;/dt&gt;&lt;dd&gt;-12/-14 on block. Punishable on block with 2MK &gt; Medium Tatsumaki, but needs to be done fast.&lt;/dd&gt;&lt;dt&gt;Short Swing Blow (63214 + K)&lt;/dt&gt;&lt;dd&gt;0/+2 on block. Resets situation.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Dudley Super Arts:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Rocket Uppercut&lt;/dt&gt;&lt;dd&gt;Startup is 0, easy to punish with HP &gt; Joudan EX when Dudley falls down.&lt;/dd&gt;&lt;dt&gt;Rolling Thunder&lt;/dt&gt;&lt;dd&gt;Startup is 1, -9/-11 on block. Can be punished with DP.&lt;/dd&gt;&lt;dt&gt;Corkscrew Blow&lt;/dt&gt;&lt;dd&gt;Startup is 0, -10/-12 on block. Can be punished with 2MK &gt; Tatsumaki if guarded standing and if Dudley is not too far. Beware of frame traps Corkscrew Blow &gt; Corkscrew Blow.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3 id=&#34;vs-yun&#34; &gt;Vs Yun&lt;a href=&#34;#vs-yun&#34; aria-label=&#34;Vs Yun permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Against Yun you want to be using moves to keep them out of the air like HK and air-to-airs, and you want to buffer parry (then immediately go back to block) to deal with their divekicks. You need to prove to the opponent that you will shut them down if they get too aggressive on you, and they&#39;ll play more cautiously. You have to make them respect you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yun standing normals:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All normals are either positive on block, or not enough negative to be punished even when standing, or push Yun too far when done at the right distance to prevent punition. Therefore there is not standing/blocking frame data details below.&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;LP&lt;/dt&gt;&lt;dd&gt; close +4 on block, far +1.&lt;/dd&gt;&lt;dt&gt;MP&lt;/dt&gt;&lt;dd&gt;*&lt;strong&gt;close +6 on block&lt;/strong&gt;*, far -3.&lt;/dd&gt;&lt;dt&gt;HP&lt;/dt&gt;&lt;dd&gt;close is -2 on block, and can be used as a meaty. Far is -5 on block, can be spaced to avoid punition. Best way to shut it down is stand MP or 2HK. P2HPJ Works.&lt;/dd&gt;&lt;dt&gt;6 + HP&lt;/dt&gt;&lt;dd&gt;-7, almost impossible de punish due to pushback.&lt;/dd&gt;&lt;dt&gt;LK&lt;/dt&gt;&lt;dd&gt;+2/+4 on block, is a mid.&lt;/dd&gt;&lt;dt&gt;MK&lt;/dt&gt;&lt;dd&gt;-4 on block when standing, can whiff crouching.&lt;/dd&gt;&lt;dt&gt;6 + MK&lt;/dt&gt;&lt;dd&gt;overhard, -1 on block.&lt;/dd&gt;&lt;dt&gt;HK&lt;/dt&gt;&lt;dd&gt;-5 on block, can be spaced to avoid punition.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;Yun Crouching normals:&lt;/p&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt; Due to Ryu&#39;s frame data bug (+2 when guarding low), all Yun&#39;s crouched normals are positive on block except for 2HK which is only -3. Be careful about 2MK being +1, very deceptive. &lt;/aside&gt;&#xA;&#xA;&lt;p&gt;Yun Dive Kicks:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All dive kicks have different frame datas depending of the height. But more importantly even the HK divenkick made at the worst height (like in the head) is at worst -4, with a good speacing leading up to +9 for Yun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way to deal with dives is to air-to-air them, try to parry and then immmediately block. Don&#39;t challenge after guarding one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yun Specials:&lt;/p&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;236 + P&lt;/dt&gt;&lt;dd&gt;All versions are -11 when blocked close. But they can be spaced so only the last active frames hit, which can result, especially with the HP version, to -2 on block. Ex version is always -2.&lt;/dd&gt;&lt;dt&gt;636 + P&lt;/dt&gt;&lt;dd&gt;LP is -1, MP is -3, HP is -5, EX is -7. Due to pushback, it&#39;s almost impossible to punish.&lt;/dd&gt;&lt;dt&gt;214 + P&lt;/dt&gt;&lt;dd&gt;All versions lead to 0, so neutral.&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;p&gt;During Genei:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All his normals have the best priority and can&#39;t be challenged, their frame data is better. It&#39;s better to just guard and try to survive. The only exception is its 6+MK overhead which becomes -4 on close range. But it&#39;s impossible to punish due to pushback.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/third-strike-ryu-matchups-notes" rel="self" type="text/html"></link>
    <summary type="html">Matchups Notes for Ryu in Street Fighter 3: Third Strike</summary>
  </entry>
  <entry>
    <title>Rethinking the engineering and processes of interface creation at Arkea</title>
    <updated>2023-10-05T17:31:31Z</updated>
    <id>https://thomasorus.com/rethinking-the-engineering-and-processes-of-interface-creation-at-arkea</id>
    <content type="html">&lt;h1 id=&#34;rethinking-the-engineering-and-processes-of-interface-creation-at-arkea&#34; &gt;Rethinking the engineering and processes of interface creation at Arkea&lt;a href=&#34;#rethinking-the-engineering-and-processes-of-interface-creation-at-arkea&#34; aria-label=&#34;Rethinking the engineering and processes of interface creation at Arkea permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;From 2018 to 2020 I joined the Arkea banking group as a UI engineer to help modernize the technical stack and processes. We moved from several intricate &lt;abbr title=&#34;An extension of the CSS language&#34;&gt;SASS&lt;/abbr&gt; codebases to a single library of components, flexible enough to support several designs and 100% &lt;abbr title=&#34;Web Content Accessibility Guidelines&#34;&gt;WCAG&lt;/abbr&gt; compliant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As this technical change restricted a very freeform design culture, I volunteered to participate in design meetings to help the designers, marketers and product owners understand how to work with a design system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This team effort resulted in a sharp decline of interface, accessibility and responsive bugs. It reduced drastically the cost of making, delivering and testing user interfaces.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/cmb1.png&#34; alt=&#34;Crédit Mutuel Arkea website screen capture figcaption&#34;&gt;&lt;figcaption&gt;A work in progress screen capture of the CMB website. At the time of screening, the goal was to recreate the most common features like bank transfers, credit card management, etc. | &lt;small&gt;&lt;a href=&#34;/uploaded/cmb1.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/cmb2.png&#34; alt=&#34;Crédit Mutuel Arkea storybook screen capture figcaption&#34;&gt;&lt;figcaption&gt;All components, as well as documentation and demos were stored inside a Storybook to facilitate development. | &lt;small&gt;&lt;a href=&#34;/uploaded/cmb2.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;the-client-s&#34; &gt;The client(s)&lt;a href=&#34;#the-client-s&#34; aria-label=&#34;The client(s) permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The Arkea group is a local banking behemot here in Brittany, employing around 5000 persons. The Credit Mutuel de Bretagne (shortened as &lt;em&gt;CMB&lt;/em&gt;) is the oldest business of the group, with agencies in almost all cities in the region.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CMB has a technical banking solution used internally by multiple subsidiaries that all have their specific needs. It also sells its banking solution to external companies, resulting in a very large codebase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I joined a 6 persons team in charge of developing user interfaces for all subsidiaries and clients and delivering them to other teams in the same service (around 100 people).&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-problem-s&#34; &gt;The problem(s)&lt;a href=&#34;#the-problem-s&#34; aria-label=&#34;The problem(s) permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Quite surprisingly, the whole service didn&#39;t have a dedicated design team. All product owners were grouped together in a single service, not in the same building, where they wrote specifications and designed their own interfaces by copy pasting and assembling bits of existing interfaces with Microsoft Paint. A single product owner with design tools experience would then translate those specifications into usable interfaces and deliver them to our team.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;User interfaces were initially developed in isolation as mockups, using HTML, SASS and native presentational JavaScript. Each subsidiaries or client had its own static &#34;gallery&#34; of mockup templates. Once developed, the code was delivered to teams of Java + JavaScript developers that implemented them into AngularJS applications and &#34;splitted&#34; the CSS code in smaller chunks using a Gulp task (affectionately named &lt;em&gt;Merger3000&lt;/em&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course this freeform way of working resulted in a lot of problems during implementation. Bits of existing interfaces would be merged into others. Product owners with no relevant UX or UI experience would sometimes create extremely complex user experiences, or try to differentiate their projects from others by asking for specific design changes like extra colors or font-sizes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was no graphical chart or design system. An existing SASS codebase developed by an external company years before acted as a basis. To allow design transgressions, each project parent &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;div&gt;&lt;/code&gt; had a class acting as a namespace. Inside those namespace, the CSS of existing elements was copied then modified for the specific design changes, resulting in an incredible amount of duplicated code for just tiny details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the main website, the uncompressed main CSS file weighted around 7 mega bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Duplicate this process by dozens of projects for a dozen subsidiaries and clients, and you realize the amount of code our team was in charge of. This situation made every project extremely expensive and long to deliver. The AngularJS Teams, bothered by the process, would sometimes fix the CSS problems themselves, resulting in a delta between our CSS and theirs. And if we delivered once again our CSS, it would erase theirs, resulting into regression only visible in production.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The put it simply: the design process, the technical stack and the delivery methods needed to change.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-solution-s&#34; &gt;The solution(s)&lt;a href=&#34;#the-solution-s&#34; aria-label=&#34;The solution(s) permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In 2019 our team was asked to reduce its time to market and reduce accessibility issues. Jérémie Le Scoezec, a member of our team, had already identified solutions and proposed the creation of a design system made of Web Components. As they are native to browsers, Web Components can be used in any situation. We could use just one of them in our existing pages, or use them in future stacks (at the time the successor of AngularJS wasn&#39;t yet decided between React, Angular and VueJS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jérémie and Marc Foletto, another member of the team, joined a task force for several months and started the implementation of our future design system. I took the role of technical adviser of our team, resulting in more contact and dialog with product owners. We decided together to deliver HTML/CSS mockups more close to the final product, so product owners could experience them and give us feedback before the AngularJS Teams took over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When our design system library started to take shape, I decided we should use it in small projects and see what happens. With the help of Jonathan Perchoc, a senior AngularJS developer from the AngularJS Team, we created a entire insurance subscription course that made it to production, validating the proof of concept.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This new approach created by Jérémie and Marc made our team work incredibly more easy. Accessibility problems could be fixed in a single file and then propagated to all clients. The AngularJS Team didn&#39;t have to touch any CSS, resulting in an easier identification of graphical bugs. The delivery tasks using Jenkins took seconds, instead of the 40 minutes needed for our old mockups. If the cost per components was higher than basic HTML and CSS, their reuse progressively reduced the time needed to assemble user interfaces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a year the library was mature and the team fully operational and involved in the project, thanks to JavaScript training sessions and meetings. We decided to deprecate our old mockups and only deliver user interfaces made with the library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, this technical change was not very appreciated by product owners. They feared this new process, not yet tested at scale, would cost more and delay delivery dates. They also felt disempowered on the design side. The library in itself was not a full design system with constraints, since there was no graphical chart. But it acted as a single source of truth for design elements, it enforced accessibility and good practices, resulting in less freedom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The design habits that clashed with accessibility and good practices were numerous. First, most pages had a lot of text, some of which were for good reasons (legal, accessibility), and most often for bad reasons (repetition of existing information). Secondly, to avoid surcharging pages, a lot of these texts were either hidden inside modals, or sprinkled in the page. This resulted in strange situations, like paragraphs in the middle of forms, which is not compatible with screen readers ; or text about the usability of a form being located after the form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moving all those texts before the forms resulted in extremely verbose pages which made the marketing team unhappy. I volunteered to participate in weekly design meetings with them, to answer questions and find solutions. Most of the time, my role during these meetings was to help question the importance of each element. Do we need to repeat this information so many times? What texts could be read the first time the user visits the page and can be hidden in an accordion on a second visit?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My involvement allowed me to know almost all components in the library and avoid duplicates or propose existing solutions to problems. Working together helped reduce the anxiety and fears of product owners and marketers and streamlined the design, development and delivery process.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;lesson-s-learned&#34; &gt;Lesson(s) learned&lt;a href=&#34;#lesson-s-learned&#34; aria-label=&#34;Lesson(s) learned permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;An old codebase becomes technical debt when collaborating, testing, debugging and delivering become painfull.&lt;/li&gt;&#xA;&lt;li&gt;Major technical stacks changes opportunities happen during small windows of time and should not be missed.&lt;/li&gt;&#xA;&lt;li&gt;Making big changes is not just about code but also about people, communication and training are as important as clean code.&lt;/li&gt;&#xA;&lt;li&gt;Web components are hard, and accessibility is even harder.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/rethinking-the-engineering-and-processes-of-interface-creation-at-arkea" rel="self" type="text/html"></link>
    <summary type="html">Rethinking the engineering and processes of interface creation at Arkea</summary>
  </entry>
  <entry>
    <title>Printed letters smart emails and modern blog stacks at Compte CO2</title>
    <updated>2021-11-12T15:47:35Z</updated>
    <id>https://thomasorus.com/printed-letters-smart-emails-and-modern-blog-stacks-at-compte-co2</id>
    <content type="html">&lt;h1 id=&#34;printed-letters-smart-emails-and-modern-blog-stacks-at-compte-co2&#34; &gt;Printed letters, smart emails and modern blog stacks at Compte CO2&lt;a href=&#34;#printed-letters-smart-emails-and-modern-blog-stacks-at-compte-co2&#34; aria-label=&#34;Printed letters, smart emails and modern blog stacks at Compte CO2 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;#in-short&#34;&gt;In short&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-client-s&#34;&gt;The client(s&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-problem-s&#34;&gt;The problem(s&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-solution-s&#34;&gt;The solution(s&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#lesson-s-learned&#34;&gt;Lesson(s&lt;/a&gt; learned)&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;in-short&#34; &gt;In short&lt;a href=&#34;#in-short&#34; aria-label=&#34;In short permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;When I arrived at Compte CO2, the company was launching new products and needed a total revamp of all its frontend styles. With the help of a graphic designer we started a six month marathon, redoing everything from the main website to the blog, but also email templates and print styles for printed bank documents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This short mission was a massive step forward in my career, as I was able to learn a lot about moderm JavaScript tooling and frameworks. I self-studied React and NodeJS before starting, and developed my first official component library for a client.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All those efforts resulted in a more cohesive vision for the company and a greater understanding of modern web development practices for me.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-client-s&#34; &gt;The client(s)&lt;a href=&#34;#the-client-s&#34; aria-label=&#34;The client(s) permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Compte CO2 is a banking startup dedicated to fighting climate change. To do so, it has its own money, the CO2, who&#39;s value is indexed on the official CO2 gaz price. Clients opening a bank account can either pay in Euros or in CO2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compte CO2 had a fairly recent custom made banking API entirely in NodeJS. Its website was made with Wordpress, and its mobile apps were created using React Native. React was well liked at the company and the CTO&#39;s wish was to invest more into it for all parts of the organization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The company headcount was small with only 6 people.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-problem-s&#34; &gt;The problem(s)&lt;a href=&#34;#the-problem-s&#34; aria-label=&#34;The problem(s) permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;When I joined in February 2018, the company was just issuing its first credit cards and had just launched its app on iOS and Android devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both came with a new design that hadn&#39;t been applied to the web. The two main enginers were busy working on banking features and updates for the apps, with no time for the redesign of the frontends, thus the reason I was hired.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a deadline set to September 2018, there was very little time and a lot to do.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;the-solution-s&#34; &gt;The solution(s)&lt;a href=&#34;#the-solution-s&#34; aria-label=&#34;The solution(s) permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As many other companies that grew fast, Compte CO2 didn&#39;t have design guidelines or a graphical chart. My first mission was, obviously, to contact the freelance graphic designer responsible for the new design, organize his work as reusable assets, and try to create design tokens. What are the main colors, the fonts, their sizes? Do we have a bank of images? Packshots of our credit card? Screen captures of our smartphone apps?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once it was done, I noticed that two of my colleagues were losing a ton of time manually editing documents in word. Those letters were super important: we glued the credit card on them before sending them to the client. This is when I realized we didn&#39;t have an automated way of generating print documents directly from our API. That was the second mission I took upon myself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once I had access to our clients API, I created a new NodeJS app that used Puppeteer, a library which provides a high-level API to control headless Chrome. Using this headless Chrome, I generated virtual pages using custom made HTML/CSS templates and our clients data, then saved them as a PDF file using the browser print API. I also programmed an automated deletion after some time, to avoid stocking too many files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course it meant developing templates made uniquely for print, which is not the most... exciting stuff? But it proved very useful a few days later, when I learned we also didn&#39;t have printable account statements too, a feature that was very often requested by clients. I spent a few more days on this before giving it back to our main backend enginer who implemented it in our mobile applications.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I was then supposed to start working on the website, but it turned out the design was not finished. To avoid wasting time, I tackled a new challenge: emails. The company had a lot of templates for things like real time payments, money transfers, and general communication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our system was built on Mailjet&#39;s API, and so no massive rework was to be expected on the backend. But on the frontend, the new graphical chart, with its use of SVG, gradients and custom fonts was extremely tricky to put into email templates. It is not well known outside of frontend development but most mail providers, even famous ones like Gmail, restrict the HTML and CSS rules that can be used on their platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes it&#39;s impossible to use a gradient, sometimes it&#39;s a background image, or a custom font. It becomes a puzzle when you have to provide readable email to clients. That&#39;s when I learned about progressive enhancement and degradation in frontend development. It&#39;s a way of coding in HTML and CSS that allows the design to look perfect on most modern platforms, and degrade in a controlled way for others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mailjet has an amazing feature which allows to simulate an email with the HTML and CSS constraints of most mainstream mail providers, apps and operating systems. Using this, I was able to create new and shinny templates that were still enjoyable and practical for people with outdated software and hardware.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;And finally the website! As we were running out of time, the webdesigner could only deliver classic, desktop templates. Our CTO wanted to part ways with Wordpress, at least for the frontend, and asked me to work on staticaly generated website. At the time the new cool kid in town was Gatsby, a static site generator built upon React and GraphQL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the CTO was busy turning our Wordpress into a headless CMS and connecting it to Gatsby, I started coding as the deadline was approaching. I soon realized I was going too fast and shooting myself in the foot, duplicating too much code. I took a step back to analyze the designs that were delivered, trying to detect patterns, identify common components, their variations, and organize them in categories.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once I was more confident, I restarted developing the React components, and it was a net positive for reusability and performance. It allowed the creation of a very interactive homepage, full of amusing widgets, converters and galeries. Performances were way better than the original Wordpress website with things like lazy loading and preload rules, rising our SEO scores even higher. When the homepage was done, I worked on the blog, a very important source of trafic for us because of its quality content.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was going smooth on the React side, but we faced difficulties with Gatsby. The framework was in version 1 at the time, and things like static queries were not yet implemented, resulting in a lot of props for things like basic images. Connecting our frontend to Wordpress with Graphql took a lot of time, as data from Wordpress was not always available and needed to be reworked. Weeks of works were lost due to these constraints, which resulted in more stress and pressure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end I wasn&#39;t able to see the website completely finished by the time my mission ended in August 2018. I left the company after delivering all the components necessary to build the expected pages, but it took several more weeks for our CTO to finish it.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;lesson-s-learned&#34; &gt;Lesson(s) learned&lt;a href=&#34;#lesson-s-learned&#34; aria-label=&#34;Lesson(s) learned permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Knowledge in languages such as HTML and CSS is extremely usefull in situation you are not used too, like old software or hardware.&lt;/li&gt;&#xA;&lt;li&gt;Progressive enhancement and degradation is an often forgotten part of accessibility.&lt;/li&gt;&#xA;&lt;li&gt;Modern development techniques are useful and often tempting, but sometimes projects are just too young and result in way too much time lost.&lt;/li&gt;&#xA;&lt;li&gt;Components are definitely the future of building interfaces for well structued projects.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/printed-letters-smart-emails-and-modern-blog-stacks-at-compte-co2" rel="self" type="text/html"></link>
    <summary type="html">Printed letters, smart emails and modern blog stacks at Compte CO2</summary>
  </entry>
  <entry>
    <title>I built my own little CMS</title>
    <updated>2025-08-17T16:52:26+02:00</updated>
    <id>https://thomasorus.com/i-built-my-own-little-cms</id>
    <content type="html">&lt;h1 id=&#34;i-built-my-own-little-cms&#34; &gt;I built my own little CMS&lt;a href=&#34;#i-built-my-own-little-cms&#34; aria-label=&#34;I built my own little CMS permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;After years of writing the pages of this website inside my code editor, it feels strange to write this journal entry directly in the website. That&#39;s because I&#39;ve moved away from my static site generator to fall back to my first love of the 2000: a CMS!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is curious, because I had been avoiding them! I&#39;ve managed several websites in the last 20 years, most of them were made with a CMS, and I always found it too &lt;em&gt;complicated&lt;/em&gt;. Why a database to store text? Why is this giant admin dashboard necessary? Why so many updates all the time? Why so many images? What do you mean I shouldn&#39;t have done &lt;code&gt;chmod 777 /&lt;/code&gt; and now my database is broken?!&lt;/p&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;The &lt;code&gt;chmod 777 /&lt;/code&gt; thing really happened.&lt;/aside&gt;&#xA;&#xA;&lt;h2 id=&#34;building-my-own-ssg-for-fun&#34; &gt;Building my own SSG for fun&lt;a href=&#34;#building-my-own-ssg-for-fun&#34; aria-label=&#34;Building my own SSG for fun permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;So when came the time for me to rebuild my own website, I wanted something simple: text files! Now that&#39;s simple! That&#39;s something I understand!  And there are numerous Static Site Generators (SSG) around, I should just pick one!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But inspired by my &lt;a href=&#34;https://merveilles.town/&#34;&gt;Merveilles&lt;/a&gt; folks, I went further and questioned everything. Do I like my content spread in dozens of files I can&#39;t remember the name? No! Do I like enclosing everything inside separate folders and navigating inside? That feels like navigating the Wordpress admin, &lt;em&gt;yuck&lt;/em&gt;! Do I even like using Markdown? Kindaaaaaa? I like the titles, not the image markup, and it&#39;s missing so many cool HTML attributes!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, around 2020, I built my own thing: a single giant text file I can &lt;code&gt;CTRL + F&lt;/code&gt; inside, a single giant image folder where I drop everything, and my own markup language so I can use &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;video&gt;&lt;/code&gt; and &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;dl&gt;&lt;/code&gt; tags! It was made with a mix of JavaScript files for parsing and writing, and shell scripts to convert images and launch a basic developer environment. To be honest, it was a complicated and frail setup just to put some pages on the internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nonetheless, I had tons of fun building it! It fitted me, and I learned a lot. After a few years, I moved the &lt;em&gt;HTML printing&lt;/em&gt; part to a SSG engine (&lt;a href=&#34;https://lume.land/&#34;&gt;Lume&lt;/a&gt; and then &lt;a href=&#34;ttps://www.11ty.dev/&#34;&gt;Eleventy&lt;/a&gt;) and it made it more stable (more info &lt;a href=&#34;/from-static-site-generator-to-static-site-processor&#34;&gt;here&lt;/a&gt;) while reducing maintenance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there was still too much &lt;em&gt;friction&lt;/em&gt;. The website was spread between 4 git repositories (open source code, private text files, private images, private production build) and required to ssh to the server to pull updates. When you&#39;re fixing a typo for the fourth time, it gets really annoying.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;using-the-computer-is-a-pain&#34; &gt;Using the computer is a pain&lt;a href=&#34;#using-the-computer-is-a-pain&#34; aria-label=&#34;Using the computer is a pain permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;When I started &lt;a href=&#34;/drawing&#34;&gt;drawing&lt;/a&gt; again in 2022, I wanted to share my progress on my own website, of course! This is when I realized static site generators are &lt;em&gt;terrible&lt;/em&gt; for sharing images (at least mine was).&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;I took pictures of my drawings with my phone. I had to transfer them to my computer.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Once transferred to the computer, I had to copy them into the image folder of the website.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Then I had to create or edit a page and put my specific syntax to insert them, while remembering their file names.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Then commit everything, push, ssh to prod, pull again, etc.&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now that&#39;s &lt;em&gt;friction&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This completely killed my ambition to share my drawing progress. Even outside of the laborious steps to put a few images on the internet, doing it meant I had to sit in front of the computer and engage with developer tools to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;sitting in an office chair in front of a screen&lt;/em&gt; position was/is still deeply associated to work in my brain, and not enjoyable or relaxing at all. After I burned-out due to work in late 2023, I wanted to be even more as far as possible from anything that reminded me of it, which included my desk and computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so, it was time for a change.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;i-m-building-a-team-stack&#34; &gt;I&#39;m building a &lt;del&gt;team&lt;/del&gt; stack&lt;a href=&#34;#i-m-building-a-team-stack&#34; aria-label=&#34;I&#39;m building a &lt;del&gt;team&lt;/del&gt; stack permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In 2024 I continued drawing, I went out more, and I was struggling to become a freelancer. In May, I &lt;a href=&#34;/where-do-i-code-from-here&#34;&gt;wrote&lt;/a&gt; about how I felt the frontend web developer role was shrinking, and that I needed to move to a more full-stack role, which meant doing &lt;em&gt;backend stuff&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And what better reason could I have to do backend than entirely redoing my own website?! Stars aligned, and I set up a loose plan with these constraints:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&lt;li&gt;I should be able to publish on this website from my phone, especially upload images easily. I shouldn&#39;t struggle with markup for them!&#xD;&lt;/li&gt;&#xA;&lt;li&gt;If I publish from my computer, it shouldn&#39;t be using developer tools. If I open them, it&#39;s for adding new features or fixing bugs only!&#xD;&lt;/li&gt;&#xA;&lt;li&gt;I will store the content in a database to relearn the basics of SQL and shift my mindset from files to database. It&#39;s been &lt;em&gt;years&lt;/em&gt; since I wrote a query, it&#39;s time!&#xD;&lt;/li&gt;&#xA;&lt;li&gt;I will use a statically typed programming language to move away from my JavaScript habits. Even better if I can use a true IDE and/or a debugger!&#xD;&lt;/li&gt;&#xA;&lt;li&gt;The programming language I will use should be easy to use, a good learning tool with good resources online, and in-demand on the job market. I would enjoy learning &lt;a href=&#34;https://gleam.run/&#34;&gt;Gleam&lt;/a&gt; but gotta be realistic, doing backend is already a big change in my habits!&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Everything should be easy to deploy, maintain and update. I don&#39;t want to fight dependencies and hosting issues, complicated setup, or depend on an hosting platform free tier!&#xD;&lt;/li&gt;&#xA;&lt;li&gt;I will reuse the same templates and design and bring the website back to feature parity with the existing version. I should not get distracted by frontend code!&lt;/li&gt;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;After considering all this, I went with &lt;a href=&#34;https://go.dev/&#34;&gt;the Go programming language&lt;/a&gt; and a &lt;a href=&#34;https://sqlite.org/index.html&#34;&gt;sqlite&lt;/a&gt; database. I was already attracted by Go after seeing a previous colleague work with it, it has a good STDLib, and tons of quality packages. As for sqlite, it has the benefits of just being a file, which fits me well since, you know, I like files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But most importantly, Go has good and up to date learning resources online: &lt;a href=&#34;https://go.dev/tour/welcome/1&#34;&gt;Go Tour&lt;/a&gt;, &lt;a href=&#34;https://gobyexample.com/&#34;&gt;Go By Example&lt;/a&gt;, &lt;a href=&#34;https://golang50shades.com/&#34;&gt;50 shades of Go&lt;/a&gt;, and many more. I was especially interested by Alex Edwards&#39; &lt;a href=&#34;https://lets-go.alexedwards.net/&#34;&gt;Let&#39;s Go&lt;/a&gt; and Thorsten Ball&#39;s &lt;a href=&#34;https://interpreterbook.com/&#34;&gt;Writing an interpreter in Go&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;go-go-penguin&#34; &gt;Go, Go, Penguin!&lt;a href=&#34;#go-go-penguin&#34; aria-label=&#34;Go, Go, Penguin! permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I started working on this new version in February 2025, following Alex Edwards&#39; book, and made good progress. I modified the database and code structure to fit my needs and it went smoothly. Outside of error handling (go to hell &lt;code&gt;if err != nil&lt;/code&gt;) and avoiding dependencies that requires external libraries or &lt;code&gt;cgo&lt;/code&gt;, I found the language to be pleasant to work with, and didn&#39;t regret choosing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What bothered me a bit tho, is the &lt;em&gt;good but could be better&lt;/em&gt; developer experience. I installed &lt;a href=&#34;https://github.com/air-verse/air&#34;&gt;air&lt;/a&gt; to have live reloading on save. Despite the project being small, it still took two to four seconds to rebuild and run the code, which isn&#39;t a lot, but coming from the JavaScript world, feels &lt;em&gt;slow&lt;/em&gt; and to be honest, a bit &lt;em&gt;dated&lt;/em&gt;. When I see C# time compilation at my job, I really think backend development needs to invest on this aspect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what was the most important missing tool was a modern CSS compiler. Outside of a SASS compiler, I found nothing?! I suppose Go projects use the JS ecosystem for these tasks, but I didn&#39;t want that. I just wanted to run &lt;code&gt;go run&lt;/code&gt; and have everything compiled. So I downloaded a binary of &lt;a href=&#34;https://lightningcss.dev/&#34;&gt;Lightning CSS CLI&lt;/a&gt; and added a build step in Air that compiled my CSS. Not perfect, but waaay better in my book than using &lt;code&gt;npm&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;If you are a Go developer and want to work on a package that matters, building a wrapper around Lightning CSS would actually be awesome. Just sayin&#39;.&lt;/aside&gt;&#xA;&#xA;&lt;h2 id=&#34;building-the-thing&#34; &gt;Building the thing&lt;a href=&#34;#building-the-thing&#34; aria-label=&#34;Building the thing permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Of course I underestimated the amount of work involved. Displaying pages from the database was easy. But managing page parents, visibility, image upload, RSS feed, user signup and login, as well as security, if not hard, just took more time than I anticipated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Among other things, making an editing experience that is good enough was important. The text is just a classic form, with the main text in an auto-sizing &lt;code&gt;&lt;span&gt;&lt;&lt;/span&gt;textarea&gt;&lt;/code&gt;. But images, my main focus, needed to be easy to upload and insert. So I did a bit of JavaScript to automatically insert the markup on upload, reposition the cursor where the alt text needs to be written, small details like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also added a preview of the page directly next to the editor, keyboard shortcuts to create or edit a page, better visibility settings for pages (public / unlisted / private). A few efforts like those will smooth my user experience, and I have more ideas in the same vein I haven&#39;t started yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall it was a good reintroduction of backend web development concepts. The project itself is well organized and I can add new features easily, which I intend to do: a time tracker, a mood tracker, galleries, and more! The fact I use a database opens a lot of possibilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you might be thinking, &lt;em&gt;nice, I would like to try that!&lt;/em&gt; and poor reader, I have bad news.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;i-won-t-open-source-it&#34; &gt;I won&#39;t open source it&lt;a href=&#34;#i-won-t-open-source-it&#34; aria-label=&#34;I won&#39;t open source it permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Almost all my code projects have been open sourced with the &lt;a href=&#34;https://anticapitalist.software/&#34;&gt;The Anti-Capitalist Software License&lt;/a&gt;, but unfortunately this CMS won&#39;t be part of this tradition. There are three main reasons for this.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;it-requires-refactors-and-planning&#34; &gt;It requires refactors and planning&lt;a href=&#34;#it-requires-refactors-and-planning&#34; aria-label=&#34;It requires refactors and planning permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;This project has too many things hard coded. If that&#39;s not an issue for my personal use, open sourcing the project would require removing my design, add a table for static values, write better documentation, create builds for different operating systems, create a public repository, fork it to add back my own design, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#39;s a lot, and as I said earlier, I intend to spend less time on the computer, not more. If people really want a CMS, there are dozens of offers out there that can probably fit their needs (use &lt;a href=&#34;https://getkirby.com/&#34;&gt;Kirby&lt;/a&gt;). I feel that not open sourcing my CMS will not change anything.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;i-don-t-entirely-own-the-code&#34; &gt;I don&#39;t entirely own the code&lt;a href=&#34;#i-don-t-entirely-own-the-code&#34; aria-label=&#34;I don&#39;t entirely own the code permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I followed Alex Edwards&#39; book very closely, and if I made big changes to the point it&#39;s not the same project at all in the end, all the structure, a good amount of the code, how things are named, come from the book. Basically, I cannot take ownership of the entire code base and thus, cannot share it. I tried contacting the author on this topic but got no answer.&lt;/p&gt;&#xA;&#xA;&lt;h3 id=&#34;there-s-ai-generated-code-inside&#34; &gt;There&#39;s AI generated code inside&lt;a href=&#34;#there-s-ai-generated-code-inside&#34; aria-label=&#34;There&#39;s AI generated code inside permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The title says it all, I don&#39;t feel like distributing a project with AI generated code inside. Even if it&#39;s only 200 lines, it feels like a moral failure from myself, a failure that won&#39;t happen again. I wrote about how and why I used an AI in &lt;a href=&#34;/i-tried-coding-with-ai-i-became-lazy-and-stupid&#34;&gt;this blog post&lt;/a&gt; if you are curious.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if Alex Edwards gives me the authorization, and I find some time to clean things, and I manage to rewrite the AI code, I &lt;em&gt;could&lt;/em&gt; open source it. But that&#39;s of lot of conditions, and again, this CMS exists to allow me to spend less time on the computer, not more.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;what-s-next&#34; &gt;What&#39;s next&lt;a href=&#34;#what-s-next&#34; aria-label=&#34;What&#39;s next permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Lot of things! I have new features to do, I have a big cleanup of old pages going on. Many of them are outdated, or I don&#39;t want them online anymore. I also want to start publishing a few of my drawings, especially the creation steps. I have a lot of pictures of drafts, sketches, failures, and want to share the process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also expect more entries in the journal. They are so easy to write now, that I may allow myself to publish more often. I will also write details about the CMS and its details inside a dedicated page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for reading, if you have remarks or suggestions, you can contact me by email or social networks. See you around!&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/i-built-my-own-little-cms" rel="self" type="text/html"></link>
    <summary type="html">Why I did it, how I did it, and more!</summary>
  </entry>
  <entry>
    <title>I tried coding with AI, I became lazy and stupid</title>
    <updated>2025-08-11T19:28:48+02:00</updated>
    <id>https://thomasorus.com/i-tried-coding-with-ai-i-became-lazy-and-stupid</id>
    <content type="html">&lt;h1 id=&#34;i-tried-coding-with-ai-i-became-lazy-and-stupid&#34; &gt;I tried coding with AI, I became lazy and stupid&lt;a href=&#34;#i-tried-coding-with-ai-i-became-lazy-and-stupid&#34; aria-label=&#34;I tried coding with AI, I became lazy and stupid permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Around April 2025, my boss at $dayjob insisted we try AI tools for coding. It wasn&#39;t toxic pressure or anything like &lt;em&gt;&#34;20% of your code needs to be AI&#34;&lt;/em&gt;, just a concern from him that we could miss out on something. I understand why he asked that and I don&#39;t blame him. We are in difficult economic period even for software, and we have salaries to pay. If AI can increase productivity or our margins, it should be at least put on the table of negotiations. I am not happy about this coming, but &lt;em&gt;I get it&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;details&gt;&lt;summary&gt;My personal stance of AI&lt;/summary&gt; I have personal reasons to dislike LLMs. My partner lost their writing job due to ChatGPT convincing their manager writers were now useless. A lot of artist friends struggle because of LLMs. We recently had an intern who lost her translator role due to LLMs. And even outside my personal experience, LLMs are based on stolen content, don&#39;t respect consent, waste huge amount of electricity and water, and are overall a new weapon for the capitalists in the &lt;a href=&#34;https://danmcquillan.org/ai_thatcherism.html&#34;&gt;class warfare&lt;/a&gt;. &lt;/details&gt;&#xA;&#xA;&lt;p&gt;The other reason why I folded comes from a toxic relationship I built with my job when I became a developer. I detailed in a previous blog post how choosing this career came with very high stakes which triggered a shift in my brain that hasn&#39;t left me since:&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;blockquote cite=&#34;/every-web-stack-is-a-product-now&#34;&gt;When I started web development seven years ago, I was in survival mode after years of low paying wages and unemployment. It &lt;em&gt;had&lt;/em&gt; to work, and for it to work, I &lt;em&gt;had&lt;/em&gt; to always learn more, read and listen about web development all the time, monitor the field, socialize as much as possible with my peers. This way, I would not get disposable and lose my job. I would build a network. I would be safe.&lt;/blockquote&gt;&lt;figcaption&gt;— I, &lt;a href=&#34;/every-web-stack-is-a-product-now&#34;&gt;In a blog post from 2022&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;10 years and 3 burnouts later, one can tell this mindset, even if it worked out for a while, wasn&#39;t sane or desirable. I had managed to put aside this fear of being disposable, but LLMs triggered it back big time. What if AI vendors were right? What if a future company I apply to requires you to use it? Am I going to lose my job? I&#39;m almost 40, what will I do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I tried using AI. First at my day job, because I wanted answers. But besides fixing TypeScript types errors, generating inaccessible template code, or reviewing my code for errors, I couldn&#39;t find a &lt;em&gt;life changing&lt;/em&gt; use out of it that all AI influencers talk about. I asked my colleagues about their own experiments, and many of them came to the same conclusion: It doesn&#39;t seem to help me help our clients achieve their goals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When July came I started building the image processing part of my new CMS that powers this website. Still stressed I couldn&#39;t get a real shot at coding with an LLM, and very tired by different personal events that fogged my brain, I decided it was the right task to try it seriously and get answers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After setting everything up in VS Code, opening the AI panel, giving access to the codebase and detailing my needs in a prompt, the LLM produced around 200 lines of code. Mostly functions using dependencies to convert, resize, process images. It wasn&#39;t perfect but after a few changes, the task was done and it had taken around 30 minutes, far less than if I had made it by hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was impressed. It really felt like I had superpowers! But then I had the idea to audit the code the LLM just produced, like I did at my $dayjob for a Vue application. Feeling that uploading files could be a source of security issues, I asked the same LLM to focus on this specific topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It found several critical issues: Directory traversal attacks, file size limits, system file overwrite, etc. I had no idea the initial code was this unsafe. I had reviewed the code, but without enough experience in backend development, how could I identify issues I didn&#39;t know existed? And why, if it knew about all those issues, did the LLM produce unsafe code in the first place?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I tried to fix the security issues, I quickly realized how this whole thing was a trap. Since I didn&#39;t write it, I didn&#39;t have a good bird&#39;s eye view of the code and what it did. I couldn&#39;t make changes quickly, which started to frustrated me. The easiest route was asking the LLM to deploy the fixes for me, so I did. More code was changed and added. It worked, but again, I could not tell if it was good or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That&#39;s when I stopped the experiment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was shocked by how easily I had slipped into this slacker way of programming. The LLM had produced shitty code, made me ignorant about my own code base, but also too lazy to try to fix it myself. And at the same time, the whole experience felt smooth, frictionless, empowering. In the moment I felt smarter, more productive, in control. But it was all an illusion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I knew about this too, as we had studies showing &lt;a href=&#34;https://www.researchgate.net/publication/392560878_Your_Brain_on_ChatGPT_Accumulation_of_Cognitive_Debt_when_Using_an_AI_Assistant_for_Essay_Writing_Task&#34;&gt;LLM use makes us dumb&lt;/a&gt;, and that &lt;a href=&#34;https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/&#34;&gt;self-reported productivity gains are false&lt;/a&gt;. But experiencing it for myself was a totally different feeling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It gave me a whole different perspective and answered my initial question: Will I get replaced by AI soon?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer is no. I don&#39;t think AI will take my job anytime soon because it&#39;s smarter and more productive than I am. I also don&#39;t think AI will make me &lt;a href=&#34;https://colton.dev/blog/curing-your-ai-10x-engineer-imposter-syndrome/&#34;&gt;10 times more productive&lt;/a&gt;. If I lose my job due to AI, it will be because I used it so much it made me lazy and stupid to the point where another human has to replace me and I become unemployable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I shouldn&#39;t invest time in AI. I should invest more time studying new things that interest me. That&#39;s probably the only way to keep doing this job and, you know, &lt;em&gt;be safe&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;aside&gt;&lt;p&gt;Side note&lt;/p&gt;Thanks to &lt;a href=&#34;https://locdandloaded.net/about/&#34;&gt;Lucile&lt;/a&gt; for fixing my broken English. If you liked this article, check out &lt;a href=&#34;https://locdandloaded.net/2025/05/13/human-cost-ai/&#34;&gt;her post on the human cost of AI in video games localization&lt;/a&gt;.&lt;/aside&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/i-tried-coding-with-ai-i-became-lazy-and-stupid" rel="self" type="text/html"></link>
    <summary type="html">Robots won&#39;t replace me, but another human probably will.</summary>
  </entry>
  <entry>
    <title>Mandala</title>
    <updated>2025-09-28T20:26:25+02:00</updated>
    <id>https://thomasorus.com/mandala</id>
    <content type="html">&lt;h1 id=&#34;mandala&#34; &gt;Mandala&lt;a href=&#34;#mandala&#34; aria-label=&#34;Mandala permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/mandala.jpg&#34; alt=&#34;A black and white drawing. A person is in the middle of the drawing, they seemed surprised: eyes wide open looking at your the viewer, mouth half open. Their hands, are positioned to protect something: two tinly skeletons, dancing into one of the palms. Around their face, 5 giant cat faces surround them. The one of the left has the mouth open and eyes closed, and is getting captured by a spiraling strand of hair. The one of the top left has strands falling to its head that gives him a neglected but funny look, and it looks with curiosity. The one at the top looks at you, the viewer, with round eyes. It has two big combed strands of hair giving it a more serious look. The one at the top left is looking down, and has very long straight hair strands. The last one, on the bottom left, is angrily biting a strand of hair that then falls on the shoulder of the person. The multiple hair strands are detailed, and the background is fully dark. It feels both funny and somehow alarming. figcaption&#34;&gt;&lt;figcaption&gt;Final drawing. | &lt;small&gt;&lt;a href=&#34;/uploaded/mandala.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;concept&#34; &gt;Concept&lt;a href=&#34;#concept&#34; aria-label=&#34;Concept permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I had the idea while I was in a train for Paris in late November 2023. I was trying to find new ways to play with my favorite topic of the time: human, cats, skeletons.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_8724.jpg&#34; alt=&#34;the original drawing figcaption&#34;&gt;&lt;figcaption&gt;The original sketch on an A6 piece of paper | &lt;small&gt;&lt;a href=&#34;/uploaded/IMG_8724.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;The initial concept was « a mandala of cats » to which I added a Mary pose for the character.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/05FD5B08-327D-43BA-B8F7-C24C79003618.jpg&#34; alt=&#34;Examples figcaption&#34;&gt;&lt;figcaption&gt;I didn&#39;t have those specific images in mind when I had the idea, but was inspired by these styles. Left: William Adolphe Bouguereau, The Virgin of the Lilies, 1899. Right: A mandala I found on the internet | &lt;small&gt;&lt;a href=&#34;/uploaded/05FD5B08-327D-43BA-B8F7-C24C79003618.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;The second sketch was made on A2 paper.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_7684.jpg&#34; alt=&#34;A rough sketch with the same idea as the original, but with more flowing hair. figcaption&#34;&gt;&lt;figcaption&gt;Without thinking too much about it, I used the hair as a way to construct the image and fill the gaps between the cats | &lt;small&gt;&lt;a href=&#34;/uploaded/IMG_7684.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_7696.jpg&#34; alt=&#34;A closeup on the face. The features are more detailed, with sleepy eyes, an half open mouth, and more hair figcaption&#34;&gt;&lt;figcaption&gt;During that period I was focusing a lot on face features, especially lips. | &lt;small&gt;&lt;a href=&#34;/uploaded/IMG_7696.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_8725.jpg&#34; alt=&#34;The sketch with more cats. They are entangled with hair strands. The hands of the character are not drawn yet. figcaption&#34;&gt;&lt;figcaption&gt;Instead of just drawing standing cats which felt boring, I decided to make them more alive by playing with the hair strands. | &lt;small&gt;&lt;a href=&#34;/uploaded/IMG_8725.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_0691.jpg&#34; alt=&#34;A closeup with the hands redraw. figcaption&#34;&gt;&lt;figcaption&gt;I took a picture of my own hand to draw those. I added dancing skeletons instead of a skull, inspired by Fantasia&#39;s Night On Bald Mountain. | &lt;small&gt;&lt;a href=&#34;/uploaded/IMG_0691.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;On the topic of Night on Bald Mountain, check its amazing &lt;a href=&#34;https://andreasdeja.blogspot.com/2015/05/chernabog.html&#34;&gt;concept art&lt;/a&gt; by by &lt;a href=&#34;https://fr.wikipedia.org/wiki/Bill_Tytla&#34;&gt;Bill Tytla&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_0697.jpg&#34; alt=&#34;The finalized sketch, with all 5 cats surrounding the main character, that keeps smalls dancing skeletons in its hands. figcaption&#34;&gt;&lt;figcaption&gt;The &#34;final&#34; initial sketch. | &lt;small&gt;&lt;a href=&#34;/uploaded/IMG_0697.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;The sketch was then left untouched for a few months, as a lot of details felt wrong and I didn&#39;t know how to approach the inking. More than ever, I felt the gigantic hair strands were going too far from the initial idea and were too distracting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started iterating on the sketch using a tablet. I did several tests: removing hair from the body, removing most strands, and more.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/86fa5773faa0442c.png&#34; alt=&#34;An edited version of the sketch figcaption&#34;&gt;&lt;figcaption&gt;My first test was removing the hair from the body, to regain some clarity. | &lt;small&gt;&lt;a href=&#34;/uploaded/86fa5773faa0442c.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/c1bd1a57503aa80a.png&#34; alt=&#34;An ever more edited version of the sketch. The wild hair strands are gone. figcaption&#34;&gt;&lt;figcaption&gt;This version tried to go back to the initial A5 sketch and see if it could work. It didn&#39;t. | &lt;small&gt;&lt;a href=&#34;/uploaded/c1bd1a57503aa80a.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/6878daa4b234f295.jpg&#34; alt=&#34;Another version, this time with two strands and cats looking at each others. figcaption&#34;&gt;&lt;figcaption&gt;This version tried several things, like directing the viewer&#39;s eyes using the cats sights. The left strand made me realize I could maybe add cat ears to the character and use them as the source of the air surrounding the cats. | &lt;small&gt;&lt;a href=&#34;/uploaded/6878daa4b234f295.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/2df334495e2b863b.png&#34; alt=&#34;Part of the sketch. The hair is now going out of the head and rolling around one of the cats, and giving bangs to another. figcaption&#34;&gt;&lt;figcaption&gt;This is when it clicked, when I decided to rework how the hair is used, from just flowing without purpose to give the cats haircuts. | &lt;small&gt;&lt;a href=&#34;/uploaded/2df334495e2b863b.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/1f21689097556c81.jpg&#34; alt=&#34;The sketch now features 5 cats having different hairstyles. figcaption&#34;&gt;&lt;figcaption&gt;I redrew three of the cats to make them less cartoony and fit better in the composition. | &lt;small&gt;&lt;a href=&#34;/uploaded/1f21689097556c81.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/33ec75a6c502cd6d.png&#34; alt=&#34;Same drawing but the head is smaller, as well as the eyes. figcaption&#34;&gt;&lt;figcaption&gt;Finally, I reworked the face to reduce its size, mostly for the eyes. I redrew them entirely and adjusted the hair to have two proper cat ears made of hair. | &lt;small&gt;&lt;a href=&#34;/uploaded/33ec75a6c502cd6d.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/b7f405f29e5d834f.jpg&#34; alt=&#34;The initial A2 paper sketch on the left, and a printed version of the new one on the right to compare them. figcaption&#34;&gt;&lt;figcaption&gt;Still unsatisfied with the eyes, I decided to go for a more surprised attitude and opened them more, which felt more in tune with what is happening in the drawing. Then I printed the sketch in several A4 sheets and reconstructed the drawing in its initial size. | &lt;small&gt;&lt;a href=&#34;/uploaded/b7f405f29e5d834f.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/acb71986175573b7.jpg&#34; alt=&#34;A sheet of paper with an in-progress drawing. We can see the printed sketch below through the paper. figcaption&#34;&gt;&lt;figcaption&gt;I started the inking by doing a pencil pass, then used drawing pencils. Notice the way too detailed bangs. | &lt;small&gt;&lt;a href=&#34;/uploaded/acb71986175573b7.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/inking.jpg&#34; alt=&#34;Four inking styles for the hair. figcaption&#34;&gt;&lt;figcaption&gt;I was unsure about how to ink the hair. I did several tests and if some of them were great, like the top right corner, it was very easy to fail it and having to start over. I then searched for another approach. | &lt;small&gt;&lt;a href=&#34;/uploaded/inking.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/b9e97e71970920c2.jpg&#34; alt=&#34;Detail on the inking, lots of strands flowing into a spiral. figcaption&#34;&gt;&lt;figcaption&gt;I finally made it work after switching to a pencil brush and doing lines that I filled after. | &lt;small&gt;&lt;a href=&#34;/uploaded/b9e97e71970920c2.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/9d7b92f469a6553e.jpg&#34; alt=&#34;All the cats and hair inked figcaption&#34;&gt;&lt;figcaption&gt;Once the process was discovered I managed to apply it to the rest of the drawing, and finish the inking. | &lt;small&gt;&lt;a href=&#34;/uploaded/9d7b92f469a6553e.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;The A2 paper sheet was then scanned by a professional, retouched to remove imperfections and add contrast, and a black background with a white outline.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/mandala.jpg&#34; alt=&#34;A black and white drawing. A person is in the middle of the drawing, they seemed surprised: eyes wide open looking at your the viewer, mouth half open. Their hands, are positioned to protect something: two tinly skeletons, dancing into one of the palms. Around their face, 5 giant cat faces surround them. The one of the left has the mouth open and eyes closed, and is getting captured by a spiraling strand of hair. The one of the top left has strands falling to its head that gives him a neglected but funny look, and it looks with curiosity. The one at the top looks at you, the viewer, with round eyes. It has two big combed strands of hair giving it a more serious look. The one at the top left is looking down, and has very long straight hair strands. The last one, on the bottom left, is angrily biting a strand of hair that then falls on the shoulder of the person. The multiple hair strands are detailed, and the background is fully dark. It feels both funny and somehow alarming. figcaption&#34;&gt;&lt;figcaption&gt;Final drawing. It was printed in A4 for sell, and I did an A2 version for myself. | &lt;small&gt;&lt;a href=&#34;/uploaded/mandala.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/mandala" rel="self" type="text/html"></link>
    <summary type="html">One person, five cats, two skeletons, a year and half.</summary>
  </entry>
  <entry>
    <title>Drool</title>
    <updated>2025-09-28T19:05:36+02:00</updated>
    <id>https://thomasorus.com/drool</id>
    <content type="html">&lt;h1 id=&#34;drool&#34; &gt;Drool&lt;a href=&#34;#drool&#34; aria-label=&#34;Drool permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/Drool---A4---CMJN---smaller.png&#34; alt=&#34;A woman is laying down, a giant cat goes over her shoulder and drools on her chest, forming a puddle that falls into a crater. From the crater, half a dozen of small skeletons emerge and start walking, jumping, having fun. figcaption&#34;&gt;&lt;figcaption&gt;The finished piece. | &lt;small&gt;&lt;a href=&#34;/uploaded/Drool---A4---CMJN---smaller.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;The idea came from an inktober 2022 prompt: dream. I had this classic idea of being hunted by a beast in your sleep, which is shown in the initial sketches:&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_6213.jpg&#34; alt=&#34;Two very rough drawings side to side. The difference with the finished piece was that the person was laying on the ground, the cat was more like a black dog, and the little skeletons were marching in line at the bottom of the page. figcaption&#34;&gt;&lt;figcaption&gt;The rough sketch and ink test. | &lt;small&gt;&lt;a href=&#34;/uploaded/IMG_6213.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I didn&#39;t thought about it at the time, but the inspiration was probably &lt;em&gt;The Nightmare&lt;/em&gt; by Henry Fuseli:&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/nightmare-fuseli.jpg&#34; alt=&#34;The Nightmare is a 1781 oil painting by the Swiss artist Henry Fuseli. It shows a woman with her arms thrown below her, in deep sleep as she undergoes a nightmare as an almost hidden horse looks on as a demonic and ape-like incubus crouches on her chest. figcaption&#34;&gt;&lt;figcaption&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/The_Nightmare&#34;&gt;Wikipedia page&lt;/a&gt; | &lt;small&gt;&lt;a href=&#34;/uploaded/nightmare-fuseli.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;But after that, I thought it was too nightmarish, and decided to replace the &#34;beast&#34; with a cat (the inspiration was a Devon Rex). I also re-framed everything into the page.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_6209.jpg&#34; alt=&#34;The paper drawing for the final piece. figcaption&#34;&gt;&lt;figcaption&gt;The final sketch. | &lt;small&gt;&lt;a href=&#34;/uploaded/IMG_6209.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;As for the inking, it was done with a chinese type brush and black ink.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/Drool---A4---CMJN---smaller.png&#34; alt=&#34;A woman is laying down, a giant cat goes over her shoulder and drools on her chest, forming a puddle that falls into a crater. From the crater, half a dozen of small skeletons emerge and start walking, jumping, having fun. figcaption&#34;&gt;&lt;figcaption&gt;The finished piece. | &lt;small&gt;&lt;a href=&#34;/uploaded/Drool---A4---CMJN---smaller.png&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I had a lot of fun doing this piece, which encouraged me to continue with the same theme later.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/drool" rel="self" type="text/html"></link>
    <summary type="html">A random Inktober idea created a new series</summary>
  </entry>
  <entry>
    <title>Drawtober 2025</title>
    <updated>2025-10-11T10:15:47+02:00</updated>
    <id>https://thomasorus.com/drawtober-2025</id>
    <content type="html">&lt;h1 id=&#34;drawtober-2025&#34; &gt;Drawtober 2025&lt;a href=&#34;#drawtober-2025&#34; aria-label=&#34;Drawtober 2025 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;For this year&#39;s drawtober, I will essentially draw concept arts for my own fantasy world.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;day-1&#34; &gt;Day 1&lt;a href=&#34;#day-1&#34; aria-label=&#34;Day 1 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_2004.jpg&#34; alt=&#34;A black and white drawing of a character with big eyes, thorns made of brambles, dark hair, flower pendant&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/IMG_2004.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Character concept research. Flower pendants are worn to demonstrate the affiliation to a flower lord.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;day-2&#34; &gt;Day 2&lt;a href=&#34;#day-2&#34; aria-label=&#34;Day 2 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_2007.jpg&#34; alt=&#34;Black and white drawing of a person with brambles coming out of its forehead. The brambles were cut but leaves and fruits are still growing.&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/IMG_2007.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Character concept research. Growing flowers on the skull is a secretly guarded (and thus costly) process used by the aristocracy as a status symbol and only done at botanic academies. Each flower represents a family and seeds are incredibly expensive. Hijacking this process to grow brambles, a parasite plant used by commoners, is considered an insult.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;day-3&#34; &gt;Day 3&lt;a href=&#34;#day-3&#34; aria-label=&#34;Day 3 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_2011.jpg&#34; alt=&#34;A drawing of a creature. Satyre legs, human torso without arms, head without face with a giant thin beak&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/IMG_2011.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Creature concept research. With a height of around 3 meters, it travel in packs of hundreds and destroy everything in their way by cutting it with their « beaks » (woodpecker style) who’s made of an almost indestructible material. Nobody know where they come from or reproduce, if they eat, how they communicate. When they die, the pack destroys the corpse, making them impossible to study. If one would manage to retrieve the beak, they would be able to craft incredible things out of it.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;day-4&#34; &gt;Day 4&lt;a href=&#34;#day-4&#34; aria-label=&#34;Day 4 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_2012.jpg&#34; alt=&#34;A giant flower with a small silhouette at its feet&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/IMG_2012.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Flower drawing practice. Flower harvesters are tasked by their masters with finding giant flowers that could, in a few hundred years and with the right conditions, become habitable like the existing ones. Unfortunately, most giant flowers die before reaching a decent size, mostly due to brambles suffocating them.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;day-5&#34; &gt;Day 5&lt;a href=&#34;#day-5&#34; aria-label=&#34;Day 5 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_2017.jpg&#34; alt=&#34;Drawing of a person sleeping naked curved on a round shape. On its back two carnivorous plants are implanted, mouth open, waiting for a wasp flying above to land&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/IMG_2017.jpg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Flower drawing practice. Carnivorous plants share the nutriments they receive from their preys to their host, hence limiting the necessity of transporting food during harvest expeditions. Grafting flowers is often done for religious or political benefits. But when a plant is grafted, it allows the host to benefit from its characteristics.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;day-6&#34; &gt;Day 6&lt;a href=&#34;#day-6&#34; aria-label=&#34;Day 6 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_2021.jpg&#34; alt=&#34;A character wearing a very tall and dark hat with a flower pattern&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/IMG_2021.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Quick costume study. After the skull graft of their flower seeds, and until the reveal to the lord, students of the botanic school wear a mandatory headdress to hide their blooms to everybody. Removing it is only allowed during individual sun bath hours. Depending on the flower, the headdress can become quite tall.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;day-7&#34; &gt;Day 7&lt;a href=&#34;#day-7&#34; aria-label=&#34;Day 7 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_2022.jpg&#34; alt=&#34;Drawing of a hand holding what appears t be a small plant in a pot, except the plant has three heads, some sleeping, some awaken.&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/IMG_2022.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Quick lore study. The dried head plants are a well hidden secret among the botanic academy. No one knows how they are made, but all have been discovered where disappearances have been reported, mainly in dense bramble areas that are rarely explored. Rumour has it that a creature vegetates humans. Head plants can be moisturized to be revived, and some of them can even speak. Unfortunately, they just mumble incoherently about imaginary worlds.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;day-8&#34; &gt;Day 8&lt;a href=&#34;#day-8&#34; aria-label=&#34;Day 8 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;figure&gt;&lt;img loading=&#34;lazy&#34; src=&#34;/processed/IMG_2026.jpg&#34; alt=&#34;A muscular person with an intense stare, brambles on the forehead, black top&#34;&gt;&lt;figcaption&gt;&lt;small&gt;&lt;a href=&#34;/uploaded/IMG_2026.jpeg&#34;&gt;Full size&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Quick character study. Harvesters can lose a lot of weight and muscles during their missions due to the lack of proper nutrition. When they come back to the botanical school, they usually eat and exercise a lot, leading to excessive body changes.&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/drawtober-2025" rel="self" type="text/html"></link>
    <summary type="html">All drawings for drawtober 2025</summary>
  </entry>
  <entry>
    <title>2025</title>
    <updated>2026-01-13T10:42:22+01:00</updated>
    <id>https://thomasorus.com/2025</id>
    <content type="html">&lt;h1 id=&#34;2025&#34; &gt;2025&lt;a href=&#34;#2025&#34; aria-label=&#34;2025 permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Despite everything happening in the world, 2025 was one of the happiest years of my recent life. I feel that a lot of my efforts paid off, making my life richer, more interesting, and allowing me to learn more about myself.&lt;/p&gt;&#xA;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/-yRwuIjjJ48?si=ui9TBU-vBGSW8bzG&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&#xA;&lt;h2 id=&#34;some-things-stabilized&#34; &gt;Some things stabilized&lt;a href=&#34;#some-things-stabilized&#34; aria-label=&#34;Some things stabilized permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;My partner&#39;s disability was recognized by the state. She receives a temporary pension so we don&#39;t have to stress about money as much. She had surgery, recovered swiftly, and can walk again. Therefor, my role as a caregiver was reduced immensely, a relief as we enter our 20th year together!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for my own health, it&#39;s getting better. Pain in my back, shoulders, hands and arms diminished thanks to exercise. I was able to rule-out a few concerns I had (among them tachycardia and nerve issues) thanks to exams, and others are ongoing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite a lot of troubles at work, going from management issues, toxic clients, or people quitting, I&#39;m still feeling OK. I am actually detached and it feels great. I still care enough to work at the best of my abilities but once I close my laptop, work disappears. But I am getting very bored by frontend web development tho, and asked if I could evolve into project management. I had a positive response, but we&#39;ll have to discuss it further. I won&#39;t do it if the company doesn&#39;t accept a best effort obligation. Taking up the role without having the means to do it is a trap I refuse to fall into.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally, my non-monogamous life stabilized. I now understand what I am looking for, I am able to explain it properly. It led to long term lover-friends relationships, with people who are all emotionally mature, caring, and are overall amazing and interesting human beings.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;my-brain-went-rogue&#34; &gt;My brain went rogue&lt;a href=&#34;#my-brain-went-rogue&#34; aria-label=&#34;My brain went rogue permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A thing that didn&#39;t stabilize is my brain. I had several moments that felt &lt;em&gt;not right&lt;/em&gt;. Among them:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;The urge for something, anything, to happen, &lt;em&gt;right now&lt;/em&gt;. I crave adventure and novelty, but also stress when outside a familiar environment.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Feeling overwhelmed and overstimulated by the number of &lt;em&gt;things&lt;/em&gt; in my environment, mostly objects but also sounds, lights, etc.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;An inability to find, use and sometimes think about things if they are not directly visible. For example, messy storage becomes just a &lt;em&gt;mass of indistinct things&lt;/em&gt; I cannot manage and I give up.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;The feeling of never doing enough while never defining what is &lt;em&gt;enough&lt;/em&gt;. Happened especially in social and profesional settings.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;An increasing difficulty to focus on tasks that aren&#39;t interesting to me, to the point of forgetting about them.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My theory, as for why it happens now and more, is that I am slowly getting rid of a performative social attitude I built years ago. For the last 20, maybe even 30 years I spent a lot of energy into pleasing others, doing things right, being a reliable friend, colleague and spouse. To the detriment of my own well being and sometimes, health.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am unsure why I work like this. Could be anxiety, past experiences, educations, role models. Who knows? Almost everyone around me, including psychiatrists, think I have ADHD. It lead to a &lt;a href=&#34;/so-it-wasnt-me-not-being-enough&#34;&gt;huge mental breakdown&lt;/a&gt;. I&#39;ll be seeing a neuropsychiatrist in a few weeks and try to find out what&#39;s going on.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;but-overall-i-am-happy&#34; &gt;But overall I am happy&lt;a href=&#34;#but-overall-i-am-happy&#34; aria-label=&#34;But overall I am happy permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This year marked a radical shift: I am actually listening to my needs, wants and obsessions. Allowing myself to be... well, myself, has made me extremely happy and fulfilled this year. I regained a lot of freedom to do new things, made a lot of encounters that led to new activities, experiences and discoveries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can go from little things like wearing earrings, buying new clothes or doing new piercings ; to more fundamental shifts like trying out stressful social gatherings, asking others to do things for my own benefit, or abandoning moral positions that actually led me to infantilize or disrespect the individuality of others. Seeing my loved ones respond positively to these changes lifted a huge amount of stress from my shoulders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For all these reasons, I can say 2025 was among the best years of my life. I haven&#39;t felt this alive, this &lt;em&gt;myself&lt;/em&gt; for years, and I hope it will continue for a long time.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;other-significant-things&#34; &gt;Other significant things&lt;a href=&#34;#other-significant-things&#34; aria-label=&#34;Other significant things permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Stopped my 15 years old podcast + website dedicated to fighting games.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Stopped my 7 years old freelance shop.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;David Lynch died and it affected me more than I expected (here&#39;s an &lt;a href=&#34;https://artreview.com/daydreaming-is-so-important-to-me-how-david-lynch-fishes-for-ideas/&#34;&gt;interview of him&lt;/a&gt; I enjoyed).&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Exhibited and sol my art for the first time and had a blast &lt;a href=&#34;/la-foire-aux-croutes-2025&#34;&gt;full blog post&lt;/a&gt;.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Tried to code with AI and &lt;a href=&#34;/i-tried-coding-with-ai-i-became-lazy-and-stupid&#34;&gt;became stupid and lazy&lt;/a&gt;.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Migrated this website from a static site generator to &lt;a href=&#34;/i-built-my-own-little-cms&#34;&gt;my own CMS built in GO&lt;/a&gt;.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;I started documenting the steps for some drawings I did. You can see the creative process behind &lt;a href=&#34;/drool&#34;&gt;Drool&lt;/a&gt; and &lt;a href=&#34;/mandala&#34;&gt;Mandala&lt;/a&gt; in their respective pages.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Failed Inktober/Drawtober due to sickness. I focused on a fantasy setting I had in mind for a few years, both &lt;a href=&#34;/drawtober-2025&#34;&gt;writing and drawing&lt;/a&gt; elements of this world.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;&lt;h2 id=&#34;did-i-achieved-my-2024-goals&#34; &gt;Did I achieved my 2024 goals?&lt;a href=&#34;#did-i-achieved-my-2024-goals&#34; aria-label=&#34;Did I achieved my 2024 goals? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;dl&gt;&lt;dt&gt;Take equally care of myself and my loved ones&lt;/dt&gt;&lt;dd&gt;Yes !&#xD;&lt;/dd&gt;&lt;dt&gt;Draw more and better, make a plan about it&lt;/dt&gt;&lt;dd&gt;Yes !&#xD;&lt;/dd&gt;&lt;dt&gt;Participate in an art fare or expo&lt;/dt&gt;&lt;dd&gt;Yes !&#xD;&lt;/dd&gt;&lt;dt&gt;Participate in a fanzine&lt;/dt&gt;&lt;dd&gt;No !&#xD;&lt;/dd&gt;&lt;dt&gt;Rebuild my website to fit my needs&lt;/dt&gt;&lt;dd&gt;Yes !&#xD;&lt;/dd&gt;&lt;dt&gt;Go back to the gym with a proper musculation program&lt;/dt&gt;&lt;dd&gt;Yes !&#xD;&lt;/dd&gt;&lt;dt&gt;Read books and watch movies&lt;/dt&gt;&lt;dd&gt;Yes !&#xD;&lt;/dd&gt;&lt;dt&gt;Get diagnosed for ADHD, keep using notebooks&lt;/dt&gt;&lt;dd&gt;No !&#xD;&lt;/dd&gt;&lt;dt&gt;Finally finish my apartment and buy new furniture&lt;/dt&gt;&lt;dd&gt;Ongoing !&#xD;&lt;/dd&gt;&lt;dt&gt;Do another single self-update on Web Dev novelties&lt;/dt&gt;&lt;dd&gt;No !&#xD;&lt;/dd&gt;&lt;dt&gt;Be a responsible and pragmatic developer at my future job&lt;/dt&gt;&lt;dd&gt;Yes !&#xD;&lt;/dd&gt;&lt;dt&gt;Go on vacation both alone, and with my partner&lt;/dt&gt;&lt;dd&gt;Yes !&#xD;&lt;/dd&gt;&lt;dt&gt;Use my newly gained freedom to explore even more personal things&lt;/dt&gt;&lt;dd&gt;Yes !&lt;/dd&gt;&lt;/dl&gt;&#xA;&#xA;&lt;h2 id=&#34;2026-goals&#34; &gt;2026 goals&lt;a href=&#34;#2026-goals&#34; aria-label=&#34;2026 goals permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&lt;li&gt;Keep being a little more &lt;em&gt;me&lt;/em&gt; every day.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Learn to let go for real.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Continue to balance equally taking care of myself and others.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Nurture my relationships with others.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Participate in an art fare with a broader range of art than last year.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Write more on my website about various things.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Finish my CMS.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Go on vacation alone again, and with my partner.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Refurnish and redecorate more rooms in my apartment.&#xD;&lt;/li&gt;&#xA;&lt;li&gt;Keep exploring fashion to find my own style.&lt;/li&gt;&lt;/ul&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/2025" rel="self" type="text/html"></link>
    <summary type="html">My 2025 year review.</summary>
  </entry>
  <entry>
    <title>Is frontend development a dead-end career?</title>
    <updated>2026-02-24T11:34:22+01:00</updated>
    <id>https://thomasorus.com/is-frontend-development-a-dead-end-career</id>
    <content type="html">&lt;h1 id=&#34;is-frontend-development-a-dead-end-career&#34; &gt;Is frontend development a dead-end career?&lt;a href=&#34;#is-frontend-development-a-dead-end-career&#34; aria-label=&#34;Is frontend development a dead-end career? permalink&#34; style=&#34;color:currentColor;opacity:0.4;font-size: 0.4em;margin-left: 1ch; text-decoration:none;&#34; title=&#34;Link to this title&#34;&gt;&amp;#35;&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;It&#39;s been almost a year at my current job. I was hired as a frontend developer and UI/UX coordinator, but I&#39;ve been slowly shifting to a project manager role, which I enjoy a lot and where I think I contribute more. We build enterprise web apps, the kinds you will never see online, never hear about, but that power entire companies. The config application for the car assembly line, the bank counsellor website that outputs your mortgage rate, the warehouse inventory systems... That&#39;s the kind of thing we do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For backend engineers that&#39;s a very interesting job. You get to understand how entire professional fields work, and try to reproduce them in code. But for us the frontend guys? The interest is, &lt;em&gt;limited&lt;/em&gt; to put it simply. We&#39;re talking about pages with multi-step conditional forms, tables with lots of columns and filters, 20 nuances of inputs, modals... The real challenge isn&#39;t building an innovative UI or UX, it&#39;s maintaining a consistency in project that can last years and go into the hands of multiple developers. Hence my &lt;em&gt;UI/UX coordinator&lt;/em&gt; role where I look at my colleagues work and sternly say &#34;That margin should be &lt;code&gt;xs&lt;/code&gt;, not &lt;code&gt;sm&lt;/code&gt;&#34; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because here&#39;s the thing: this type of client doesn&#39;t care if it&#39;s pretty or not and won&#39;t pay for design system work or maintenance. To them, stock &lt;a href=&#34;https://getbootstrap.com/&#34;&gt;Bootstrap&lt;/a&gt; or &lt;a href=&#34;https://m3.material.io/&#34;&gt;Material Design&lt;/a&gt; is amazingly beautiful compared to their current Windev application. What they want is stability and predictability, they care &lt;em&gt;it works the same&lt;/em&gt; when they encounter the same interface. Sometimes, if a process is too complex for new hires, they will engage into talks to make it more user friendly, but that&#39;s it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Until recently, the only generated code we used were the types for TypeScript and API calls functions generated from the backend, which saved us a lot of repetitive work. We made experiments with generative AI and found out we could generate a lot of our template code. All that&#39;s left to do is connect both, the &lt;em&gt;front of the frontend &lt;/em&gt; and the &lt;em&gt;back of the frontend&lt;/em&gt;, mostly click events, stores, reactivity, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;People will say that&#39;s where the fun is, and sometimes yes, I agree. I&#39;ve been on projects where building the state was basically building a complex state machine out of dozens of calls from vendor specific APIs. But how often do you do that? And &lt;em&gt;why&lt;/em&gt; would you do that if you are developing the backend yourself and can pop an endpoint with all the data your frontend needs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so I&#39;ve been wondering about the future. With frameworks, component libraries, LLMs, the recession pushing to deliver fast even if mediocre code and features, who needs someone who can write HTML, CSS, JS? Who can pay for the craft of web development? Are the common frontend developers folks, not the &lt;em&gt;already installed elite freelancers building websites for prestigious clients&lt;/em&gt;, only destined to do assembly line of components by prompting LLMs before putting some glue between code blocks they didn&#39;t write?&lt;/p&gt;&#xA;&#xA;</content>
    <link href="https://thomasorus.com/is-frontend-development-a-dead-end-career" rel="self" type="text/html"></link>
    <summary type="html">At the time of frameworks, component libraries and LLMs, who needs someone who can write CSS?</summary>
  </entry>
</feed>