<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Patrick Desjardins Blog</title><link>https://patrickdesjardins.com/blog</link><description>Technical blog posts by Patrick Desjardins</description><language>en</language><lastBuildDate>Wed, 12 Aug 2026 00:00:00 +0000</lastBuildDate><item><title>Using epaper for studying</title><link>https://patrickdesjardins.com/blog/using-epaper-for-studying</link><description>A few months ago, I  and within a few weeks I was taking page after page of notes using . I initially liked it, but I missed taking notes with a pen. Something about scribbling, annotating, and illustrating my thoughts helps me focus and retain better than copy-pasting or typing. When I was doing my…</description><pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/using-epaper-for-studying</guid></item><item><title>HATEOAS as the Natural Interface for Autonomous Agents</title><link>https://patrickdesjardins.com/blog/hateoas-as-the-natural-interface-for-autonomous-agents</link><description>The web was built for humans using a browser. APIs were built for developers who read documentation. Both scenarios never anticipate autonomous agents that must reason about what to do next. As LLM agents increasingly interact with services, a question emerges that few people are addressing directly…</description><pubDate>Fri, 17 Jul 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/hateoas-as-the-natural-interface-for-autonomous-agents</guid></item><item><title>Generating Documentation with AI</title><link>https://patrickdesjardins.com/blog/generating-documentation-with-ai</link><description>I will argue that generating documentation with AI is useful, specifically the kind that lives as dedicated documentation files in folders alongside the code, and specifically for business logic and architecture. My thesis is that this documentation is valuable because it serves humans and AI agents…</description><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/generating-documentation-with-ai</guid></item><item><title>How to test in TypeScript 2026 edition</title><link>https://patrickdesjardins.com/blog/how-to-unit-test-private-method-in-typescript-2026-edition</link><description>I wrote in , , , and  about TypeScript and private functions. Eleven years later, I still believe that relaxing encapsulation to ease testability has the best return on investment (ROI). In this blog post I will argue that separating classes and interfaces preserves a portion of the encapsulation wh…</description><pubDate>Thu, 09 Jul 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-unit-test-private-method-in-typescript-2026-edition</guid></item><item><title>Mastodon Thread on a Static Website</title><link>https://patrickdesjardins.com/blog/mastodon-thread-static-website</link><description>I recently visited  and noticed a simple idea that I liked: comments do not need to live inside the website database. They can live on the social web, and the website can point to the discussion. For a static website, this is appealing because I do not want to run a comment server, to moderate a loc…</description><pubDate>Sat, 20 Jun 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/mastodon-thread-static-website</guid></item><item><title>Replacing NextJS With a Rust Static Site Generator</title><link>https://patrickdesjardins.com/blog/replacing-nextjs-with-a-rust-static-site-generator</link><description>I recently moved this website away from NextJS as the static generation engine. The site was working, but it had become heavier than what I needed. Most pages are static. Most content is markdown. The build was doing a lot of framework work for a problem that had become much smaller than the framewo…</description><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/replacing-nextjs-with-a-rust-static-site-generator</guid></item><item><title>Audiobook machine version 3 using an ELECROW ESP32 Rotary Display 240x240</title><link>https://patrickdesjardins.com/blog/audiomachine-version3-using-esp32-rotary-display</link><description>I built an audiobook machine for my daughter in January 2022 using a Raspberry Pi and RFID cards (). In early 2026, I built a second version for my son using an ESP32 and a TFT display (). Over time, I wanted to replace my daughter&apos;s original device because the RFID cards became cumbersome whenever…</description><pubDate>Sat, 13 Jun 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/audiomachine-version3-using-esp32-rotary-display</guid></item><item><title>How to Transfer Files Between Computers Using HDMI (Part 8: Registration, CRC, and a Working Transfer)</title><link>https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-8-registration-and-crc</link><description> ended on a frustrating note. Pagination was supposed to fix missing frames, but the real capture path still failed. I could loop the video twelve times, record 850 megs of footage, and still be short six frames. The decoder would report something like: &gt; We have not receive all frames. We received…</description><pubDate>Fri, 05 Jun 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-8-registration-and-crc</guid></item><item><title>How a GPU Turned Kokoro TTS Bottleneck From Minutes Into Seconds</title><link>https://patrickdesjardins.com/blog/how-a-gpu-turned-kokoro-bottleneck-from-minutes-into-seconds</link><description>I recently ran into a very practical performance problem in a study-generation pipeline. The application takes lesson notes from Trilium, turns them into teaching scripts, generates flashcards, synthesizes narration with Kokoro TTS, renders a simple MP4 with ffmpeg, and uploads the result to YouTube…</description><pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-a-gpu-turned-kokoro-bottleneck-from-minutes-into-seconds</guid></item><item><title>Automatic Audio Note Summary with Flash Card using AI</title><link>https://patrickdesjardins.com/blog/automatic-audio-note-summary-with-flash-card-using-ai</link><description>I recently  and I am taking my notes in  which allows accessing notes through an API. Since I save all my courses in a hierarchy of course → lesson → objective, I can automatically generate summaries from my own notes. My idea was not to generate notes from the course content itself but rather t…</description><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/automatic-audio-note-summary-with-flash-card-using-ai</guid></item><item><title>React to React Native using AI</title><link>https://patrickdesjardins.com/blog/react-to-react-native-using-ai</link><description>Early in my career, I started with VB5 and VB6 before moving to web development using PHP. Since then, I have stayed focused on the web because the ease of distribution and the ability to reach millions of users across devices always felt like a major advantage. Throughout those years, the iPhone ap…</description><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/react-to-react-native-using-ai</guid></item><item><title>Codex usage as bad as Claude</title><link>https://patrickdesjardins.com/blog/codex-usage-as-bad-as-claude</link><description>A month ago : &gt;I’ve ended up using Codex every day. Last weekend I even used it for 5 hours straight and never hit a limit. That honeymoon phase lasted about three weeks. Lately, I’ve noticed I can barely use it for normal coding for more than 30 to 45 minutes before hitting a wall. Even worse,…</description><pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/codex-usage-as-bad-as-claude</guid></item><item><title>What is Code Quality in the Era of AI?</title><link>https://patrickdesjardins.com/blog/what-is-code-quality-in-the-era-of-aI</link><description>I have been coding for over 28 years now. I have worked with Visual Basic, Java, C++, PHP, JavaScript, TypeScript, Python, and even a little bit of Rust. Having worked at over 15 companies and on at least double that many projects, I have seen a great deal of code. Throughout my education, my profes…</description><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/what-is-code-quality-in-the-era-of-aI</guid></item><item><title>Silicon Valley: Pursuit of Leadership</title><link>https://patrickdesjardins.com/blog/silicon-valley-pursuit-of-leadership</link><description>Silicon Valley is an interesting place to be. It sits at the center of innovation with large companies and funders shaping entire industries. After spending enough time here, it is easy to believe that the world operates like Silicon Valley. However, when you stay connected with family and friends o…</description><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/silicon-valley-pursuit-of-leadership</guid></item><item><title>Speed Parallel of AI to Cars</title><link>https://patrickdesjardins.com/blog/speed-parallel-of-ai-to-cars</link><description>I recently had an interesting conversation with one of our VPs. I was describing that we need to embrace the direction of AI. Today, AI is moving people from walking speed to car speed. When you think about it, that level of speed on a highway is significant, and it comes with real risk. Humans had…</description><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/speed-parallel-of-ai-to-cars</guid></item><item><title>New AI Work Process of 5 Days</title><link>https://patrickdesjardins.com/blog/new-ai-work-process-of-5-days</link><description>I am currently leading a squad of four engineers, and we are working in an unconventional way: one week at a time. While short sprints have existed in the past, we are taking a slightly different twist. The reason I introduced this new work lifecycle was that we are developing a product with an AI-f…</description><pubDate>Thu, 09 Apr 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/new-ai-work-process-of-5-days</guid></item><item><title>Automating The Gatekeeper</title><link>https://patrickdesjardins.com/blog/automating-the-gatekeeper</link><description>As AI continues to transform the development of software, we must fundamentally shift our habits to keep pace. Many traditional workflows have not yet adapted to this new reality, including early requirement gathering, permission systems, and the standard practices for design and code reviews. I hav…</description><pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/automating-the-gatekeeper</guid></item><item><title>The AI-First Lifecycle</title><link>https://patrickdesjardins.com/blog/the-ai-first-lifecycle</link><description>Today, I want to talk about how software engineering is changing with AI. More specifically, how the entire software lifecycle needs to adapt. Right now, most of the attention is on coding. We see constant updates about tools like Claude, Codex, or Cursor, and how they improve developer productivity…</description><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/the-ai-first-lifecycle</guid></item><item><title>The AI Meeting Paradox</title><link>https://patrickdesjardins.com/blog/the-ai-meeting-paradox</link><description>Today I want to talk about how AI is transforming meetings. I have noticed more and more people using it during discussions. In the past, it was already common to have laptops open in meetings, and sometimes a few people would search Google while someone was speaking. Today it feels different. Many…</description><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/the-ai-meeting-paradox</guid></item><item><title>The Vibe Coding Plateau</title><link>https://patrickdesjardins.com/blog/the-vibe-coding-plateau</link><description>Today, I want to talk about the difference between having a vibe coding project as a side project and using the same approach at work. The main difference is the long-term consequences of the code, but also the fact that the code will continue to be worked on by other people. I notice that many deve…</description><pubDate>Fri, 27 Mar 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/the-vibe-coding-plateau</guid></item><item><title>Kokoro TTS: Free using GPU with Many Voices</title><link>https://patrickdesjardins.com/blog/Kokoro-tts-free-using-gpu-with-many-voices</link><description>I recently had many voices to generate from English text. By many, I mean about 5,000 paragraphs. One requirement I had was to produce a non-robotic voice. After searching, I was open to using a service like OpenAI TTS and paying for it, but it was quite a large amount of text to generate. Since I h…</description><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/Kokoro-tts-free-using-gpu-with-many-voices</guid></item><item><title>Gemini brings my son&apos;s name in the wrong context</title><link>https://patrickdesjardins.com/blog/Gemini-my-son-wrong-context</link><description>For a little while, I moved from ChatGPT to Gemini for questions that were not related to a specific code base. Recently, I was doing some research in a new thread about houses in different areas of the United States. Suddenly, I noticed that Gemini added a note: &gt; If you are moving to a new propert…</description><pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/Gemini-my-son-wrong-context</guid></item><item><title>The Consequences of Easy Access to AI</title><link>https://patrickdesjardins.com/blog/the-consequences-of-easy-access-to-ai</link><description>The Dunning–Kruger effect occurs when individuals with limited knowledge in a domain believe that they have suddenly become experts in it. With easy access to AI tools, the Dunning–Kruger effect appears stronger than ever. Software engineering has always had areas, such as user interface design,…</description><pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/the-consequences-of-easy-access-to-ai</guid></item><item><title>AI and Playwright MCP</title><link>https://patrickdesjardins.com/blog/ai-playwright-mcp</link><description>User interfaces and automation have always been tricky. After all, part of the process requires seeing the final result, as theoretically styling can fall into many traps. For a long time, people created unit tests using Jest or other UI frameworks and, with utility functions, could test React compo…</description><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/ai-playwright-mcp</guid></item><item><title>Cancelled Claude Code Pro</title><link>https://patrickdesjardins.com/blog/cancelled-claude-code-pro</link><description>At the beginning of the year, I subscribed to a year of Claude Code Pro (200$). Last weekend, I cancelled it. The reason is simple: I was hitting the limit every evening after 30 to 60 minutes. Instead of upgrading from Pro to Max, which would have increased the price by 10x, I decided to try OpenAI…</description><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/cancelled-claude-code-pro</guid></item><item><title>AI Blinders remain why human still have an edge for now</title><link>https://patrickdesjardins.com/blog/AI-blinders-remain-why-humans-still-have-an-edge-for-now</link><description>&gt; The black side panels added to a horse&apos;s head during a race are primarily called blinkers (or blinders in the United States). These devices are plastic cups attached to a fabric hood placed over the horse&apos;s head and under the bridle to limit the animal&apos;s wide peripheral vision Much like a racehors…</description><pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/AI-blinders-remain-why-humans-still-have-an-edge-for-now</guid></item><item><title>20$ of Codex Pro vs 20$ Claude Pro</title><link>https://patrickdesjardins.com/blog/20-codex-20-claude</link><description>I have paid $20 a month for Claude Pro since the start of the year. I usually only have time to code at night once my kids are sleeping, which gives me a tight window of two to three hours. The problem is how Claude handles usage. You get a set amount of data you can use every five hours. Even if yo…</description><pubDate>Fri, 06 Mar 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/20-codex-20-claude</guid></item><item><title>AI Coding, Trust and Review</title><link>https://patrickdesjardins.com/blog/ai-trust-and-review</link><description>The more I use AI, the more I believe it represents the future of accelerated development; however, I am also increasingly wary of its tendency to &quot;drift&quot; in the wrong direction. While it consistently finds solutions, they aren&apos;t always the optimal ones, a reality that persists whether using Claude,…</description><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/ai-trust-and-review</guid></item><item><title>Transforming Software Development one Agent at a Time</title><link>https://patrickdesjardins.com/blog/transforming-software-development-one-agent-at-time</link><description>My journey into professionally developing agents that perform software engineering tasks is going beyond having the system simply write code. As I work more and more with agents, I realize that they are excellent at following very clear directives, but they often won’t think further. A part of me…</description><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/transforming-software-development-one-agent-at-time</guid></item><item><title>How to make your AI agents remember and forget?</title><link>https://patrickdesjardins.com/blog/how-to-make-agent-ai-remember-and-forget</link><description>Like humans, an agent interacting with a large language model has memory constraints. Similarly, some models have larger capacity to retain information and act upon it. The LLM receives a limited number of tokens describing the memory it can use to reason and generate accurate responses. This capaci…</description><pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-make-agent-ai-remember-and-forget</guid></item><item><title>Code Quality in 2026 with AI</title><link>https://patrickdesjardins.com/blog/code-quality-2026-with-ai</link><description>I have been working extensively with multiple AI agents coding in parallel. Imagine dozens of agents operating at the speed of ten engineers. The volume of new code reaches thousands of lines every day. The question is inevitable: how do we preserve quality? The answer may surprise some, but it is n…</description><pubDate>Mon, 23 Feb 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/code-quality-2026-with-ai</guid></item><item><title>Multi-Agents and the Future</title><link>https://patrickdesjardins.com/blog/multi-agents-and-the-future</link><description>I joined Roblox few months ago. My job description contained this paragraph: &gt;  Driving technical excellence and strategic innovation across Roblox&apos;s core operations. Lead the development of high-impact internal products that empower teams and shape the future of how Roblox operates. Use AI to trans…</description><pubDate>Thu, 19 Feb 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/multi-agents-and-the-future</guid></item><item><title>Making a Systemd Journal Dashboard</title><link>https://patrickdesjardins.com/blog/making-systemd-journal-dashboard</link><description>I’m running several projects on my mini PC: 1. Discord bot 2. YouTube Radio 3. My personal note-taking server using Trilium 4. An AI RAG system I developed for Trilium 5. A Google Home audiobook service All of them write their logs to the Linux systemd journal. To inspect logs, I had to manually S…</description><pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/making-systemd-journal-dashboard</guid></item><item><title>Running Local LLM on a Nvidia 5080 for Coding</title><link>https://patrickdesjardins.com/blog/runninglocal-llm-nvidia-5080-for-coding</link><description>Few weekends ago, I wanted to see what would be the best model of coding that I could run locally on my Intel 9 with 32 gig of ram and my Nvidia 5080 with 8gig of vram. The idea was to run  to QWEN 3.0 to have a local Claude. The result was impressive in term of how fast the response occured but the…</description><pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/runninglocal-llm-nvidia-5080-for-coding</guid></item><item><title>YouTube Streaming Radio with More AI</title><link>https://patrickdesjardins.com/blog/youtube-streaming-radio-with-auto-ai-summary-with-more-ai</link><description>I recently built a  that allows me to queue YouTube videos from my phone and stream only the audio back to me. I&apos;ve been using it during my commute for over two weeks now. I&apos;ve since improved several parts of the system, such as having AI suggest other videos to queue based on the last few tracks I…</description><pubDate>Thu, 05 Feb 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/youtube-streaming-radio-with-auto-ai-summary-with-more-ai</guid></item><item><title>YouTube Streaming Radio with Auto AI Summary</title><link>https://patrickdesjardins.com/blog/youtube-streaming-radio-with-auto-ai-summary</link><description>I go to the office every day of the week. I , and my commute is only 15–20 minutes, perfect for listening to an audiobook you can find on YouTube. Many of the videos I like are roughly that length. However, streaming a YouTube video from my phone has a few inconveniences. The first issue is that I…</description><pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/youtube-streaming-radio-with-auto-ai-summary</guid></item><item><title>Audiobook Machine Version 2 with ESP-32</title><link>https://patrickdesjardins.com/blog/audiobook-machine-version-2-with-esp-32</link><description>Several years ago, I built an audiobook machine using a Raspberry Pi and RFID cards (see the  about the project). My daughter has been using it almost every night. I recorded more than 50 different stories, and it quickly became a hit. However, the machine was clunky. It had a few issues with wires…</description><pubDate>Thu, 22 Jan 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/audiobook-machine-version-2-with-esp-32</guid></item><item><title>Trilium with RAG for AI Prompting</title><link>https://patrickdesjardins.com/blog/trilium-rag-ai-prompt</link><description>I recently . I like Trilium a lot for its simplicity and because it is easy to move to another system later. At the same time, it remains flexible without becoming complex. Trilium has a BETA feature that allows you to provide a ChatGPT API key to perform AI prompting. Unfortunately, it never worked…</description><pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/trilium-rag-ai-prompt</guid></item><item><title>Recapitulation 2025</title><link>https://patrickdesjardins.com/blog/recapitulation-2025</link><description>I realized that I skipped the recapitulation of 2024 and 2023. The last one was . Another year with a lower amount of writing with 22 blog posts. 2024 had 18 and 2023 exactly 25. Far from the average of one per 1.5 per week in the first 7 years. Nonetheless, I continue enjoying the time I spend on t…</description><pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/recapitulation-2025</guid></item><item><title>Trilium Note Taking with Mini-PC server host</title><link>https://patrickdesjardins.com/blog/trilium-note-taking-with-mini-pc-server-host</link><description>I have been using Microsoft OneNote since I joined Microsoft as a software engineer in 2014. I am paying Microsoft for storage as my notes increased largely when I did my Master&apos;s degree. I was uploading PDFs, annotating with a pen and taking note with a pen as well. However, I am slowly taking only…</description><pubDate>Fri, 12 Dec 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/trilium-note-taking-with-mini-pc-server-host</guid></item><item><title>Python Retirement Simulator using past Sp500 performance</title><link>https://patrickdesjardins.com/blog/python-retirement-simulator-sp-500</link><description>I have recently read more about Monte Carlo simulation and the . I opted for Python and a framework called  to try different hyperparameters. I never used Optuna, but I recall from my machine learning master&apos;s degree that it is ideal to optimize toward a maximum value, which in my case would be the…</description><pubDate>Thu, 06 Nov 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/python-retirement-simulator-sp-500</guid></item><item><title>Software Engineering and Remote Work</title><link>https://patrickdesjardins.com/blog/software-engineering-and-remote-work</link><description>I will skim some of the context, but in recent years, I have been in many different companies and teams with different operational models, including remote, hybrid, and in-office. In one of my experiences, the team was entirely on-site and then moved to a hybrid model. In this short article, I&apos;ll de…</description><pubDate>Wed, 29 Oct 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/software-engineering-and-remote-work</guid></item><item><title>TypeScript Injection of Value Using Decorator</title><link>https://patrickdesjardins.com/blog/typescript-decorator-injection-value</link><description>TypeScript is a great language for writing code that is type-safe and easy to read. However, sometimes you need to inject a value into a class or function. This can be done using a decorator. In this article, we will see how we can inject from a single source of truth values into a class. We will al…</description><pubDate>Tue, 21 Oct 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-decorator-injection-value</guid></item><item><title>SSE Streaming using HTTP Post?</title><link>https://patrickdesjardins.com/blog/sse-streaming-using-http-post</link><description> known as SSE uses by default HTTP GET with the EventSource JavaScript object. However, when handling a large volume of data, HTTP GET using a query string falls short. Relying on HTTP Post and a large body is better. In this article, I&apos;ll show how to use SSE with HTTP POST when connecting to an API…</description><pubDate>Mon, 13 Oct 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/sse-streaming-using-http-post</guid></item><item><title>Python Coroutine vs Future</title><link>https://patrickdesjardins.com/blog/python-coroutine-future</link><description>Most of my day, I use TypeScript and JavaScript. The concept of asynchronous programming is relatively straightforward, involving async functions that must be awaited. To set everything in perspective for a TypeScript developer, here is a simple code: function mySyncFunction(): string { return &quot;Test…</description><pubDate>Thu, 04 Sep 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/python-coroutine-future</guid></item><item><title>Python Asynchronous with to_thread</title><link>https://patrickdesjardins.com/blog/python-asynchronous-to_thread</link><description>Up to recently, I was using an older style to invoke a synchronous function in Python that required using a worker pool. However, there is a more elegant way, more concise and straightforward possibility using Python 3.9+. The new function is part of async.io and is named to_thread. Before Python ve…</description><pubDate>Thu, 28 Aug 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/python-asynchronous-to_thread</guid></item><item><title>Python Modulo</title><link>https://patrickdesjardins.com/blog/python-modulo</link><description>I was writing code in Python that required a modulo. The code worked until the number was negative. -321 % 10 Applying a modulo 10 to a number is an easy way to get the last digit. 321 modulo 10 is 1. I was expecting -321 modulo 10 to be 1. That is the case in JavaScript, not in Python. In Python, -…</description><pubDate>Tue, 26 Aug 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/python-modulo</guid></item><item><title>3D Printed a Race Lap Counter</title><link>https://patrickdesjardins.com/blog/3dprinting-race-lap-counter</link><description>My son received a Carrera race track for his birthday. He loves it! I recently started learning CAD and 3D printing and quickly built a simple dual-flap system that flips when the car crosses the finish line. It was simple, cost less than 1$ to print. However, looking at the design, I could see some…</description><pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/3dprinting-race-lap-counter</guid></item><item><title>Python Asynchronous Queue</title><link>https://patrickdesjardins.com/blog/python-asynchronous-queue</link><description>The library asyncio offers a queue. A producer injects data into the queue. A consumer reads data from the queue. The queue is first-in, first-out (FIFO) and is useful when there is incoming data that is difficult to synchronize with the output process. For example, a system might receive data and s…</description><pubDate>Fri, 15 Aug 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/python-asynchronous-queue</guid></item><item><title>Python Asynchronous Code</title><link>https://patrickdesjardins.com/blog/python-asynchronous-code</link><description>Python offers various methods for handling code that executes in a non-sequential manner. Python can use asynchronous programming, threading (threading module), and multiprocessing (multiprocessing module) to achieve concurrency. In this article, we will focus on the library called asyncio, which is…</description><pubDate>Wed, 13 Aug 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/python-asynchronous-code</guid></item><item><title>Electronic Water Bottle 3D Printed Machine </title><link>https://patrickdesjardins.com/blog/electronic-water-bottle-3d-printed</link><description>When I was young, I had a dot-matrix printer, followed by an inkjet, a color inkjet, and, for over 15 years, a laser printer. A month ago, I bought my first 3d printer. I am late to the party, as they became more available a few years ago, but I never found the appeal, as many people seem to print t…</description><pubDate>Fri, 18 Jul 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/electronic-water-bottle-3d-printed</guid></item><item><title>Discord Bot that Uses LLM to Access User Statistics</title><link>https://patrickdesjardins.com/blog/discord-bot-that-uses-LLM-to-access-user-statistics</link><description>I own a Discord server where I have over 140 members. I have a bot that perform several automation like role assignation, finding games for the users, provide daily statistics, and more. The latest feature gives the user the ability to ask questions about their statistics using a large language mode…</description><pubDate>Tue, 15 Jul 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/discord-bot-that-uses-LLM-to-access-user-statistics</guid></item><item><title>Adding an Embedded Vector Search in my Next JS SSG blog</title><link>https://patrickdesjardins.com/blog/adding-embedded-vector-search-next-js-ssg-blog</link><description>The last time I had a search on my blog was when it was hosted using WordPress. Using Next JS static site generation (SSG) for my blog and hosting it on GitHub Pages, I needed a way to implement search functionality without relying on a backend. I implemented a vector search using Python that genera…</description><pubDate>Sun, 01 Jun 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/adding-embedded-vector-search-next-js-ssg-blog</guid></item><item><title>My Basic Go Stock Game First Iteration </title><link>https://patrickdesjardins.com/blog/my-basic-go-stock-game-first-iteration</link><description>Last month, I started learning the programming language Go (golang). Anytime I am learning, I always do two things: write about it and start projects. Writing helps me write my thoughts, what I&apos;ve learned, but also it always opens my mind to other ideas and questions to further my comprehension. Doi…</description><pubDate>Tue, 22 Apr 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/my-basic-go-stock-game-first-iteration</guid></item><item><title>Unit Testing with Go Shaped How to Design my Functions</title><link>https://patrickdesjardins.com/blog/unit-testing-go-functions</link><description>I have developed in many ways throughout the years from a very strict object-oriented approach with Java and C# to a more functional approach using JavaScript, TypeScript, and Python. In the first project, I started using Go, and I was in the mindset of creating a function that takes an object as a…</description><pubDate>Mon, 07 Apr 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/unit-testing-go-functions</guid></item><item><title>Starting to Learn Go</title><link>https://patrickdesjardins.com/blog/starting-to-learn-go</link><description>Stepping back from this single blog post, we can see a huge shift in programming languages. I started blogging in 2011, and my focus was mainly on web development using C# (.Net framework) and JavaScript. My programming language interest was tightly coupled to my day-to-day programming language. Whi…</description><pubDate>Tue, 25 Mar 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/starting-to-learn-go</guid></item><item><title>Python Automated Test</title><link>https://patrickdesjardins.com/blog/python-unit-test</link><description>I wrote about 200 automated (unit and integration) tests in the last few months in my , and I am delighted by the experience. The best is the extremely low friction to mock using pytest and unit test.mock. Mocking a function is as simple as using @patch.object and the module (file) that contains the…</description><pubDate>Wed, 05 Mar 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/python-unit-test</guid></item><item><title>My Thoughts on Python (2025)</title><link>https://patrickdesjardins.com/blog/my-thoughts-on-python-2025</link><description>My first hand with Python was between 2018 and 2021 when I studied machine learning master&apos;s degree. Last year, I started building a Discord Bot which increased in size in the last few months. Here are my thoughts. Python introduced types in 2015 in Python 3.5. During my assignments I never used the…</description><pubDate>Fri, 31 Jan 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/my-thoughts-on-python-2025</guid></item><item><title>The Curse of the Overloaded People</title><link>https://patrickdesjardins.com/blog/the-curse-of-overloaded-people</link><description>In this short essay, I&apos;ll explain why people who overload their time are not only inefficient but a detriment to a team. I will tackle the topic using the perspective of a software engineer, a project/product manager, and an engineering manager. Before splitting into three different personas, the ma…</description><pubDate>Fri, 24 Jan 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/the-curse-of-overloaded-people</guid></item><item><title>10 Points to Increase Software Quality</title><link>https://patrickdesjardins.com/blog/10-points-to-increase-software-quality</link><description>In my career, I have noticed a few details that significantly increase the quality of a software product. Here is a summary followed by a more detailed explanation: 1) Use the system that is being developed 2) The financial incentive must not be aligned to the KPI 3) Freedom to add features, improve…</description><pubDate>Tue, 14 Jan 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/10-points-to-increase-software-quality</guid></item><item><title>The Evolution of my Gaming Discord Bot Using Python</title><link>https://patrickdesjardins.com/blog/the-evolution-gaming-discord-bot-using-python</link><description>I have been coding a Discord bot for about 6 months now in Python (see this introduction ). I have learned a lot about the Discord API, Python, and how to manage a bot. I wanted to share my experience with you. This post will cover few features with a glimpse of the code. The bot&apos;s initial goal was…</description><pubDate>Thu, 02 Jan 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/the-evolution-gaming-discord-bot-using-python</guid></item><item><title>How Long Does It Take to Write a System Design Book?</title><link>https://patrickdesjardins.com/blog/how-long-does-it-take-to-write-a-system-design-book</link><description>I landed a new job in November 2023 and I had two weeks before starting. I had a lot of notes from my interviews and I wanted to reorganize them. I decided to write a system design book to collect everything in an easy way to consume the information for the next time I need to interview. Drafting th…</description><pubDate>Mon, 11 Nov 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-long-does-it-take-to-write-a-system-design-book</guid></item><item><title>The Reasons Why I Wrote a System Design Book</title><link>https://patrickdesjardins.com/blog/why-i-wrote-a-system-design-book</link><description>In 2023, I was in a period of interviews for a new job. The process splits the interview in three topics: algorithms, system design and behavioral. The system design was interesting as it has a large scope of potential questions. Most of the questions are about design that most engineer never had to…</description><pubDate>Thu, 07 Nov 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/why-i-wrote-a-system-design-book</guid></item><item><title>An Overview of the Creation of a Discord Bot Using Python</title><link>https://patrickdesjardins.com/blog/python-discord-bot-introduction</link><description>I have been playing video games sporadically for a few months and have a small group of people with whom I enjoy playing. However, we needed help finding a way to communicate in advance who would be online after work to play. After a quick search in Discord&apos;s marketplace, I couldn&apos;t find a simple wa…</description><pubDate>Sat, 26 Oct 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/python-discord-bot-introduction</guid></item><item><title>Hosting a Discord Bot on a Raspberry PI</title><link>https://patrickdesjardins.com/blog/hosting-a-discord-bot-on-raspberry-pi</link><description>I recently worked on a Discord bot that allows the user of the guild (Discord server) to react to an emoji for a specific time of the day. The bot posts a single message daily and lets people vote when they will be active. Once the code was written, I was looking for a place to host the script. I ch…</description><pubDate>Sat, 21 Sep 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/hosting-a-discord-bot-on-raspberry-pi</guid></item><item><title>How to create MacOS notification for Pull Request Code Review?</title><link>https://patrickdesjardins.com/blog/git-notification-macos-pull-request</link><description>Depending on your situation, you may be limited in receiving notifications when it is time for you to review a pull request. Depending on your seniority and role, you may quickly provide code feedback to keep the pull request flowing into the development branch. Thus, having a notification on your s…</description><pubDate>Fri, 06 Sep 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/git-notification-macos-pull-request</guid></item><item><title>NextJS API Pipe And Filter Pattern</title><link>https://patrickdesjardins.com/blog/next-js-api-pipe-and-filter-pattern</link><description>Every endpoint of an API service has different steps, such as receiving the request and sending a response. Every step can fail, requiring stopping the flow of operation and sending an HTTP response with an error code, message, and other information. Without an established pattern, the code becomes…</description><pubDate>Thu, 25 Jul 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/next-js-api-pipe-and-filter-pattern</guid></item><item><title>TypeScript 5.4 NoInfer Utility Type</title><link>https://patrickdesjardins.com/blog/typescript-noinfer-utility-type</link><description>The latest TypeScript version, 5.4, brings a new utility type. The type NoInfer is a utility type that helps to prevent the inference of a type variable in a generic function. This utility type is proper when using generic types in a function, but TypeScript doesn&apos;t want to infer the type. The NoInf…</description><pubDate>Thu, 09 May 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-noinfer-utility-type</guid></item><item><title>Git Hook in a NextJS Project using TypeScript and Lint</title><link>https://patrickdesjardins.com/blog/git-hook-nextjs-project-typescript-lint</link><description>Git Hooks are scripts that run automatically before or after a Git command. They help enforce coding standards, run tests, and perform other tasks. In this article, we will create a pre-commit Git Hook in a NextJS project using TypeScript and Lint. The first step is to install Husky and Lint-Staged.…</description><pubDate>Wed, 24 Apr 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/git-hook-nextjs-project-typescript-lint</guid></item><item><title>NextJS 14 Authentication and Middleware</title><link>https://patrickdesjardins.com/blog/nextjs14-authentication-and-middleware</link><description>Middleware has changed since NextJS 13. A single middleware file exists at the root, restricting access to the request and response objects. Enforcing authentication for web and API routes fits well in the middleware as they are a required path for each request. The advantage is that authentication…</description><pubDate>Sun, 14 Apr 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/nextjs14-authentication-and-middleware</guid></item><item><title>Adding Console and Network Logs in Playwright</title><link>https://patrickdesjardins.com/blog/adding-console-and-network-logs-in-playwright</link><description>I will show you how to add console and network logs in Playwright. Logs are helpful when you have tests working locally but not on a CI/CD pipeline. You can use these logs to debug and understand what&apos;s happening. The first step is to add the logs to the test. You can use the page.on(&apos;console&apos;) and…</description><pubDate>Mon, 01 Apr 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/adding-console-and-network-logs-in-playwright</guid></item><item><title>How to Silence Bash Commands</title><link>https://patrickdesjardins.com/blog/how-to-silence-bash-commands</link><description>There are ways to redirect the outputs of a terminal&apos;s command if the output is not desirable. Before getting into the _how_, let&apos;s describe the concept of &quot;File Descriptor&quot; or fd. Using a terminal, you have three fd. The first one is the input. The terminal refers to the input file descriptor as fd…</description><pubDate>Thu, 21 Mar 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-silence-bash-commands</guid></item><item><title>How to Debug a Kubernetes Pod</title><link>https://patrickdesjardins.com/blog/how-to-debug-a-kubernetes-pod</link><description>Your code is working locally and then you push into your testing environment, or worse your production environment and it does not. How can you debug the code running into your Kubernetes pod? Two ways to get insight are: reading the console log from the pod or to get access using a terminal to the…</description><pubDate>Wed, 13 Mar 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-debug-a-kubernetes-pod</guid></item><item><title>TypeScript and Jest to Mock a Module Function</title><link>https://patrickdesjardins.com/blog/typescript-and-jest-to-mock-a-module-function</link><description>The use case is this one: you have a function that live directly into a TypeScript (.ts) file. The function returns an array using a service. The service does an HTTP request and use crypto hashing function from an old library not compatible with Jest. In any case, you do not want to perform the HTT…</description><pubDate>Fri, 08 Mar 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-and-jest-to-mock-a-module-function</guid></item><item><title>Coding a Blog with NextJS SSG and MDX</title><link>https://patrickdesjardins.com/blog/coding-a-blog-with-nextjs-ssg-and-mdx</link><description>I recently posted that I migrated from Gatsby to NextJS. I am sharing how I built my blog with NextJS, SSG, and MDX. NextJS is currently one of the most popular React frameworks for building server-side logic. NextJS allows some operations to run not on the client side but on the server side. Static…</description><pubDate>Wed, 21 Feb 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/coding-a-blog-with-nextjs-ssg-and-mdx</guid></item><item><title>Migrating my Static Blog from Gatsby to NextJS</title><link>https://patrickdesjardins.com/blog/migrating-static-blog-gatsby-to-nextjs</link><description>In 2021, I migrated my WordPress Blog to Gatsby (see ). The main goal was to reduce the hosting cost and have a faster website. Within two years, I started to feel the pain of Gatsby. The core problem was twofold: It was impossible to migrate from Gatsby v3 to v4 and v5, and slow build time. The mig…</description><pubDate>Wed, 14 Feb 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/migrating-static-blog-gatsby-to-nextjs</guid></item><item><title>Display Git Pull Request Status on the Steelseries APEX 7 TKL keyboard OLED</title><link>https://patrickdesjardins.com/blog/git-to-steelseries-keyboard</link><description>The  has a small OLED screen. Steelseries offers an application called  where you can configure LED and OLED. The application is a marketplace with several game and application integrations. The most interesting is the . The SDK contains an HTTP  JSON API. The API, using JSON messages, allows you to…</description><pubDate>Wed, 07 Feb 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/git-to-steelseries-keyboard</guid></item><item><title>Merge and Rebase with Auto Stash to Accelerate Pulling</title><link>https://patrickdesjardins.com/blog/git-autostash</link><description>Keeping your branch up-to-date with the main branch or the feature branch is a necessity. Waiting too long and you may have more conflicts to resolve. The normal command is invoking git pull. However, if you have uncommitted changes, you will need to stash them first or create a commit before receiv…</description><pubDate>Tue, 30 Jan 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/git-autostash</guid></item><item><title>Reasons for not using Property Destructuring in React when using TypeScript</title><link>https://patrickdesjardins.com/blog/typescript-react-reasons-not-to-desctruct-props</link><description>I have been using React with TypeScript for over seven years. With the transition toward the function component, I see a widely used pattern in JavaScript React emerging into TypeScript React but without a solid gain for the developer experience. I am talking about the use of property destruction in…</description><pubDate>Fri, 26 Jan 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-react-reasons-not-to-desctruct-props</guid></item><item><title>Implementing the Map and Reduce JavaScript Functions in TypeScript</title><link>https://patrickdesjardins.com/blog/implementing-the-map-and-reduce-javascript-function-in-typescript</link><description>JavaScript is a language with several built-in functions. In this article, we will implement some of them in TypeScript. The goal is to understand how they work and to have a better understanding of the language. The map function loops each element of an array. The function takes a callback function…</description><pubDate>Fri, 08 Dec 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/implementing-the-map-and-reduce-javascript-function-in-typescript</guid></item><item><title>Learning the Linux Command Line lsof and awk by Killing a Process that Hold a Port</title><link>https://patrickdesjardins.com/blog/learning-lsof-awk-by-killing-a-process</link><description>Developing web applications and services requires opening ports on a machine. In some situations, a process using a port might die without releasing the port -- the process is dead but runs in the background, keeping the port reserved. Thus, the solution is to kill the process. Sometimes, some ports…</description><pubDate>Tue, 19 Sep 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/learning-lsof-awk-by-killing-a-process</guid></item><item><title>Typescript Consuming and Producing Redpanda Messages</title><link>https://patrickdesjardins.com/blog/typescript-consuming-producing-redpanda-message</link><description>Redpanda is a C++ implementation of Kafka that is very performance and easy to install because it does not require Java or Apache Zookeeper. Redpanda, like Kafka, is a pub/sub system allowing messages to travel from a producer to one or many consumers. The goal is to start an instance of Redpanda, c…</description><pubDate>Mon, 11 Sep 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-consuming-producing-redpanda-message</guid></item><item><title>How to Build NodeJS with OpenSSL?</title><link>https://patrickdesjardins.com/blog/how-to-build-nodejs-with-openssl</link><description>Once in a while, your work environment could be more optimal for what you try to achieve. The current situation was that I had to use a MacOS with LibreSSL under a supervised man-in-the-middle security loop that mangled the SSL certificates. The network had changed, and using Microsoft Identity Clie…</description><pubDate>Tue, 15 Aug 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-build-nodejs-with-openssl</guid></item><item><title>How to Transfer Files Between Computers Using HDMI (Part 7: Pagination)</title><link>https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-7-pagination</link><description>Transferring data using the HDMI cable and the capture card continues to demonstrate how easily corruption can cause the file to be unusable. Let&apos;s review a few points that demonstrate that we have some inconsistancy around frames. ffmpeg -f dshow -list_options true -i video=&quot;USB Video&quot; Shows vcodec…</description><pubDate>Sat, 08 Jul 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-7-pagination</guid></item><item><title>How to Transfer Files Between Computers Using HDMI (Part 6: Instruction and Black and White)</title><link>https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-6-instruction-black-white</link><description>Last time, we determined that the original idea of relying on a insignificant character to fill the frame is not great. It causes non-text content to break as soon as the selected character can be found in the middle of the content. The solution is to reserve space at the beginning of the first fram…</description><pubDate>Wed, 14 Jun 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-6-instruction-black-white</guid></item><item><title>How to Transfer Files Between Computers Using HDMI (Part 5: Instruction Header)</title><link>https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-5-instruction-header</link><description>This fifth article is about how to transfer a file using only video from one computer to another. Using a capture card and a HDMI output, we can play a video containing a file&apos;s content and read the video on the other end. Once the video is received, we can extract the content and have the file. At…</description><pubDate>Sun, 04 Jun 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-5-instruction-header</guid></item><item><title>How to Transfer Files Between Computers Using HDMI (Part 4: HDMI Failure)</title><link>https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-4-hdmi-failure</link><description>Reading the video without going by the video card and the HDMI cable was a success. However, when it was the time to send the video in these additional steps, the video received was corrupted. The failure was subtle as the footage could play and had the red frame and some colors on the top. However,…</description><pubDate>Fri, 26 May 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-4-hdmi-failure</guid></item><item><title>How to Transfer Files Between Computers Using HDMI (Part 3: Reading Video)</title><link>https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-3-reading-video</link><description>In this third part, we assume the Rust code has generated the video and the source computer, containing the file to transfer, is playing the video in loops into the HDMI display. The HDMI display is the one connected to the HDMI capture card and thus is on the second computer (target) is a web camer…</description><pubDate>Tue, 23 May 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-3-reading-video</guid></item><item><title>How to Transfer Files Between Computers Using HDMI (Part 2: Prototype Code Video Creation)</title><link>https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-2-prototype-code-video</link><description>The second part of transferring a file via video using HDMI will focus on the file-to-video and video-to-file code portions. The following blog article will explain flaws when communicating via HDMI. Even with the appearance of flaws, the prototype in this article works: a video file will contain th…</description><pubDate>Tue, 16 May 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-2-prototype-code-video</guid></item><item><title>How to Transfer Files Between Computers Using HDMI (Part 1: Plan)</title><link>https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-1-Plan</link><description>In this series of blog posts, I will discuss transferring files using an HDMI port to a USB port of another computer. The goal of transferring a file using HDMI is to share a file without using the computer USB or Internet, or Ethernet between two machines. The blog posts are written as the solution…</description><pubDate>Fri, 12 May 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-transfer-files-between-computers-using-HDMI-Part-1-Plan</guid></item><item><title>How to Create a Dispatch Function that is Strongly Typed with its Payload?</title><link>https://patrickdesjardins.com/blog/how-to-create-a-dispatch-function-strongly-typed-payload</link><description>You want to send an action from a list of specific possible actions. The action (called in this article trigger) must be accompanied of data that need to be strongly typed. Thus, each trigger must have a unique name and a payload with a type determined when the developer writes down the list of poss…</description><pubDate>Wed, 12 Apr 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-create-a-dispatch-function-strongly-typed-payload</guid></item><item><title>TypeScript Iterators, Generator Functions and Infinite Stream of Data</title><link>https://patrickdesjardins.com/blog/typescript-iterators-generator-functions-an-infinite-stream-of-data</link><description>We discussed about  in a recent blog article. Today, we introduce generator functions that are a step further into iterable behavior in TypeScript. Similar to a normal TypeScript function, a generator returns a value. However, a generator can return many values. A generator function is a function th…</description><pubDate>Fri, 07 Apr 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-iterators-generator-functions-an-infinite-stream-of-data</guid></item><item><title>Understand TypeScript Iterator and Iterable</title><link>https://patrickdesjardins.com/blog/understand-typeScript-iterator-and-iterable</link><description>TypeScript follows ECMAScript (JavaScript) specification, and the concept of iteration grew up in the language in the past few years. Thus, TypeScript support since many versions of the idea of iterator and iterable. I only had a use case to rely on them outside looping collection recently, where I…</description><pubDate>Fri, 24 Mar 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/understand-typeScript-iterator-and-iterable</guid></item><item><title>How to use TypeScript Satisfies Operator Keyword?</title><link>https://patrickdesjardins.com/blog/how-to-use-typeScript-satisfies-operator-keyword</link><description>My first reaction when satisfies operator launched with TypeScript 4.9 was that it was one more complex to understand in the language. I continued my way without spending much of my time understand the goal until one day I stumble into a scenario that was problematic for many years. TypeScript shoul…</description><pubDate>Fri, 17 Mar 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-use-typeScript-satisfies-operator-keyword</guid></item><item><title>How to set NodeJS Apollo GraphQL Subscription Context for your WebSocket functions and for your Resolvers?</title><link>https://patrickdesjardins.com/blog/how-to-set-nodejs-apollo-graphql-subscription-context</link><description>Using  entails relying on the . There is some documentation surrounding handling context in both libraries, but a minor detail escapes both sides: where to set the context. Before digging into the specifics of the implementation, let&apos;s quickly talk about the context. Context is a mechanism to share…</description><pubDate>Thu, 09 Mar 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-set-nodejs-apollo-graphql-subscription-context</guid></item><item><title>Migration from Create React App CRA to ViteJS</title><link>https://patrickdesjardins.com/blog/migration-from-create-react-app-cra-to-vitejs</link><description>Create React App (CRA) has been around since 2016 and has been a delight since its origin. CRA allows starting coding fast by avoiding the recurrent problem with a project to configure its tools. The web development ecosystem surrounding JavaScript has been 2010 changing a lot with tools that requir…</description><pubDate>Thu, 02 Mar 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/migration-from-create-react-app-cra-to-vitejs</guid></item><item><title>How to Recruit An Employee in 90 minutes?</title><link>https://patrickdesjardins.com/blog/recruit-someone-in-90-minutes</link><description>After many years and many different software companies, I concluded that spending a total of 90 minutes with one candidate gives the same result as the current trend of spending over 6 to 8h. Therefore, the current time format could be more effective, and the interview content needs to be geared tow…</description><pubDate>Fri, 24 Feb 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/recruit-someone-in-90-minutes</guid></item><item><title>My experience migrating TypeScript libraries to Rust</title><link>https://patrickdesjardins.com/blog/migrating-typescript-library-to-rust</link><description>I recently migrated a couple of Rust libraries from TypeScript using a subset of features of well-known TypeScript libraries. So far, I have the following Rust repositories: - : Hide message into an image - : Perform hilbert calculation - : Format the number of byte in a human readable format - : Fo…</description><pubDate>Thu, 16 Feb 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/migrating-typescript-library-to-rust</guid></item><item><title>How to have many GraphQL server with Apollo Client?</title><link>https://patrickdesjardins.com/blog/how-to-have-many-graphql-servers-with-apollo-client</link><description>Apollo client and React are two popular libraries and an excellent combination for fetching GraphQL data from a server into a web application. The well-documented approach is to use the Apollo Client and then the Apollo React Context. const client = new ApolloClient({ uri: &quot;//yourgraphqlserver_1/gra…</description><pubDate>Thu, 09 Feb 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-have-many-graphql-servers-with-apollo-client</guid></item><item><title>React Apollo Client Local State with Default Value on Fragment</title><link>https://patrickdesjardins.com/blog/react-apollo-client-local-state-default-value</link><description>The best approach is to rely on the local state if you need to add additional value to an existing GraphQL entity from your GraphQL server. Apollo has several patterns, and in this article, I am showing how to use the local state using the InMemoryCache and the writeFragment method. The main reason…</description><pubDate>Thu, 02 Feb 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/react-apollo-client-local-state-default-value</guid></item><item><title>React Client Side State Management with Zustand</title><link>https://patrickdesjardins.com/blog/react-client-side-state-management-zustand</link><description>In a  I explained that the React Context is re-rendering a lot if you change the state inside the context. I concluded that using a state management, like Redux, might still be relevant. However, Redux comes with its baggage of middleware, connection, hooks, actions, etc. So, here enters a more stra…</description><pubDate>Fri, 27 Jan 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/react-client-side-state-management-zustand</guid></item><item><title>React Context and How to Avoid repetitive re-rendering</title><link>https://patrickdesjardins.com/blog/react-context-how-to-avoid-rendering</link><description>In this article, we will see how to optimize the usage of a context to avoid rendering components along the path of the context. We already explored . This time, we will focus on children that are not functions. The small project is an application with three layers. The top layer, named Layer1 is wr…</description><pubDate>Fri, 20 Jan 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/react-context-how-to-avoid-rendering</guid></item><item><title>How to Pause and Resume Apollo GraphQL Subscription using The Guild GraphQL CodeGen</title><link>https://patrickdesjardins.com/blog/how-to-pause-apollo-graphql-subscription</link><description>Using  is my first instinct when consuming a GraphQL on the front end. It works flawlessly by producing strongly typed TypeScript code to perform your custom GraphQL queries. There is a plugin to generate the operation called typescript-operation. In the past, I decided to avoid but recently been a…</description><pubDate>Thu, 12 Jan 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-pause-apollo-graphql-subscription</guid></item><item><title>Steganography: How to hide text in an image</title><link>https://patrickdesjardins.com/blog/what-is-steganography-how-to-hide-text-in-image</link><description>The word steganography means to hide something, like a text into something else, like an image. The definition is very high level. Hence, it has a variety of ways to accomplish the goal of steganography. I&apos;ll show you how to use the least significant bits in this article. Wikipedia a as short mentio…</description><pubDate>Mon, 02 Jan 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/what-is-steganography-how-to-hide-text-in-image</guid></item><item><title>11 Keys to be successful with remote workers as a software engineer in a hybrid work environment</title><link>https://patrickdesjardins.com/blog/keys-success-remote-work-hybrid-environment</link><description>After working in 100% office, 100% remote, and in a hybrid situation, I gathered 11 elements for having a thriving hybrid work environment. Note that I am writing this article in a hybrid position but as an individual, like working in-person, fully remote, and hybrid. At the root of a successful hyb…</description><pubDate>Wed, 28 Dec 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/keys-success-remote-work-hybrid-environment</guid></item><item><title>Recapitulation 2022</title><link>https://patrickdesjardins.com/blog/recapitulation-2022</link><description>Last year I started my recapitulation with the impression that it was not a year in which I accomplished much compared to all the previous years. 2022 was similar in the sense of feeling but taking the time to write about my years showed me wrong. 2021 was low in blog posts with . 2022 was way more…</description><pubDate>Wed, 28 Dec 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/recapitulation-2022</guid></item><item><title>Sharing Code Between TypeScript Repositories Using Git Submodules</title><link>https://patrickdesjardins.com/blog/typescript-sharing-code-with-git-submodules</link><description>Imagine you have two TypeScript projects that have a similarity. You can avoid duplication and share some code. A viable solution to share is to extract the code into a reusable NPM library and use the NPM library in both projects. However, it has some overhead and might not fit your current process…</description><pubDate>Thu, 15 Dec 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-sharing-code-with-git-submodules</guid></item><item><title>How to use mpsc::unbounded to share data between Rust threads</title><link>https://patrickdesjardins.com/blog/rust-how-to-use-mpsc-unbounded-to-share-data-between-rust-threads</link><description>Moving information between threads is always a delicate task. This is because so many issues can occur, and Rust is built around safety; hence it has a safe way to send information between two threads. One way is to rely on the futures crate and use a unbounded. The documentation is fuzzy around how…</description><pubDate>Sat, 26 Nov 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/rust-how-to-use-mpsc-unbounded-to-share-data-between-rust-threads</guid></item><item><title>How to debug Rust CLI application with VsCode using Windows</title><link>https://patrickdesjardins.com/blog/rust-how-to-debug-cli-</link><description>Before debugging using Visual Studio Code (VSCode), you need to have VsCode and . VsCode&apos;s debug configuration file is under .vscode/launch.json. You need two entries: one for your executable (command line) to test the _cli_ and one for the unit tests. { &quot;version&quot;: &quot;0.2.0&quot;, &quot;configurations&quot;: [ { &quot;ty…</description><pubDate>Mon, 21 Nov 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/rust-how-to-debug-cli-</guid></item><item><title>How to Minimized React Children Function Component Render</title><link>https://patrickdesjardins.com/blog/react-children-function-render</link><description>If you have a hierarchy of components, you may have one or more components that wrap HTML elements around something else. For example, you can have a Layout component that wraps a child component. The child can be anything from now to the future- it does not matter. React uses the term  to inject an…</description><pubDate>Wed, 16 Nov 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/react-children-function-render</guid></item><item><title>Rust: Structure Memory when Using a Function</title><link>https://patrickdesjardins.com/blog/rust-struct-memory-function</link><description>I recently learned about the tool called clippy that is available if you use cargo. It provides lint information on your Rust code to ensure you are using good practices but also helps to use Rust idiomatic and consistent code. For example, one recommendation was to not use .clone() on one of my str…</description><pubDate>Fri, 04 Nov 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/rust-struct-memory-function</guid></item><item><title>Porting my Hilbert Curve Code from TypeScript to Rust</title><link>https://patrickdesjardins.com/blog/rust-hilbert-curve-implementation</link><description>I developed a  to compute the  a few months ago. The library transforms from a point to a coordinate (1d to 2d) and the other way around. In addition, I am slowly getting familiar with ), a language developed to be as fast as C++ with type safety in the last few days. One way to learn is to develop…</description><pubDate>Tue, 01 Nov 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/rust-hilbert-curve-implementation</guid></item><item><title>How to use CSS variables in React components and CSS files</title><link>https://patrickdesjardins.com/blog/react-css-variable-component-css-files</link><description>If you want to define at a single place values to use inside your React components and inside CSS files, you need a central location. I enjoy keeping colors and styles all in CSS files (or CSS modules). Settling into a solution of defining all values in CSS as the source of truth is technically poss…</description><pubDate>Thu, 27 Oct 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/react-css-variable-component-css-files</guid></item><item><title>Using Framer Motion to animate keyframe event on a parent following up by a children transition</title><link>https://patrickdesjardins.com/blog/framermotion-keyframe-animation</link><description>In this article, we will fade in a tiny box into the viewport by using animated steps. The animation uses , which is a React library that helps perform animation using CSS transitions. This article focus on using animation with steps, also known as key frames. The keyframes change the position and t…</description><pubDate>Thu, 20 Oct 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/framermotion-keyframe-animation</guid></item><item><title>How to animate unmounting of a child with Framer Motion</title><link>https://patrickdesjardins.com/blog/framermotion-animate-children-unmount</link><description>Imagine the situation where you have one parent and a direct child component. The child component has a list of elements. These elements are animated as the parent component is mounted. The parent renders the child that renders the list of elements, and each element is animated in a staggered fashio…</description><pubDate>Mon, 10 Oct 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/framermotion-animate-children-unmount</guid></item><item><title>Using Framer Motion to transition (position) between two React components</title><link>https://patrickdesjardins.com/blog/framermotion-div-position-transition</link><description>In this article, we will see how to have an HTML div at a specific boundary (x, y, width and height) and moving it to a second boundary to actually load another component. Visually the transparent to the user we will mount/unmount behind the curtain! Confusing! In other words, we have two React comp…</description><pubDate>Tue, 04 Oct 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/framermotion-div-position-transition</guid></item><item><title>How to Add HTTPS to your Kubernetes Ingress</title><link>https://patrickdesjardins.com/blog/azure-kubernetes-https</link><description>The article&apos;s goal is to expose enhance your Kubernetes Ingress  allowing HTTPS (certificate SSL/TLS). Next step, the ingress certificate manager: REGISTRY_NAME=realtimepixel CERT_MANAGER_REGISTRY=quay.io CERT_MANAGER_TAG=v1.8.0 CERT_MANAGER_IMAGE_CONTROLLER=jetstack/cert-manager-controller CERT_MAN…</description><pubDate>Sat, 01 Oct 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/azure-kubernetes-https</guid></item><item><title>How to fix the import EcmaScript module error with Create React App and Framer</title><link>https://patrickdesjardins.com/blog/create-react-app-framer-typescript</link><description> is a library that animates React components. The library allows many interactions, from moving HTML elements to moving SVG paths. What is particularly interesting with Framer is the capability to animate when a React component is mounted and unmounted, making the HTML fade in and out or move more a…</description><pubDate>Wed, 21 Sep 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/create-react-app-framer-typescript</guid></item><item><title>How to Debug a Kubernetes Pod that Crash at Startup (works on Microsoft Azure Kubernetes)?</title><link>https://patrickdesjardins.com/blog/azure-kubernetes-pod-debug-crash</link><description>I had a pod that worked well on my machine but was not once deployed on Azure Kubernetes. It was constantly rebooting with the status CrashLoopBackOff. It was impossible to use kubectl exec -it on the ill pod: it was always closing and restarting. However, there is a trick that is not perfect but mi…</description><pubDate>Wed, 07 Sep 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/azure-kubernetes-pod-debug-crash</guid></item><item><title>How to Access your Web Application on Kubernetes Azure</title><link>https://patrickdesjardins.com/blog/azure-kubernetes-public-access</link><description>The article&apos;s goal is to expose your web application on the Internet. We already  our three Docker images. However, while having the deployment and service up and running, the load-balancer was still not accessible when performing an HTTP request. Between the article where I  and now, I decided to p…</description><pubDate>Wed, 07 Sep 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/azure-kubernetes-public-access</guid></item><item><title>Typescript Utility Type Partial Expect</title><link>https://patrickdesjardins.com/blog/typescript-utility-type-partial-expect</link><description>The situation is that you want to transform an existing type into all optional fields except a subset of the fields to be required. A use case is that you wish to have all fields except the primary key and many other keys you know must always be present. We need to create a custom TypeScript utility…</description><pubDate>Mon, 05 Sep 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-utility-type-partial-expect</guid></item><item><title>How to reverse proxy your NodeJS frontend server with NGINX using Docker to talk to your backend?</title><link>https://patrickdesjardins.com/blog/docker-image-reverse-proxy-node</link><description>The title is a little longer to hold all the proper keywords, but we will discuss how you can have your web application perform HTTP requests to your frontend instead of directly accessing your backend API. The reason can be multiple, sometimes is a question of permission. The backend is only availa…</description><pubDate>Tue, 23 Aug 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/docker-image-reverse-proxy-node</guid></item><item><title>How to have ViteJS (via SolidJS) to Hot Reload when inside a Docker Container</title><link>https://patrickdesjardins.com/blog/docker-vitejs-hot-reload</link><description>Suppose you are using ViteJS to automate your TypeScript, JSX, and CSS, then you will need to adjust the ViteJS configuration to use the hot-reload mechanism still. Likewise, you will need to perform these steps using SolidJS instead of CRA since SolidJS relies on ViteJS. My current example works if…</description><pubDate>Tue, 09 Aug 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/docker-vitejs-hot-reload</guid></item><item><title>An Introduction to Microsoft Azure and Kubernetes using Helm and Docker Images</title><link>https://patrickdesjardins.com/blog/azure-intro-kubernetes</link><description>Kubernetes is a convenient way to deploy an infrastructure of services in a central place. Once you have your service Docker images built and deployed you can use Kubernetes to deploy multiple instances across the cloud. In this article, we will see how Microsoft Azure can use a Kubernetes configura…</description><pubDate>Fri, 05 Aug 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/azure-intro-kubernetes</guid></item><item><title>How to use Kubernetes with Microsoft Azure and GitHub and how to debug if it does not workout</title><link>https://patrickdesjardins.com/blog/azure-docker-container-repository-github</link><description>Kubernetes is a convenient way to deploy an infrastructure of services in a central place. Once you have your service Docker images built and deployed you can use Kubernetes to deploy multiple instances across the cloud. In this article, we will see how Microsoft Azure can use a Kubernetes configura…</description><pubDate>Thu, 28 Jul 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/azure-docker-container-repository-github</guid></item><item><title>How to host Docker images on Microsoft Azure</title><link>https://patrickdesjardins.com/blog/azure-docker-container-repository</link><description>There are many resources about hosting an image on Microsoft Azure but most assume some expertise around Azure -- I have none. At least, I have not touched Azure for at least five years (at that time, the user interface was using the &quot;blade&quot; format). In this article, I&apos;ll describe how to host a Dock…</description><pubDate>Thu, 14 Jul 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/azure-docker-container-repository</guid></item><item><title>How to Output Audio and Video from a Windows machine to a MacBook Pro</title><link>https://patrickdesjardins.com/blog/how-to-output-audio-video-windows-macos</link><description>I currently work in a rigorous and secure environment. Therefore, I cannot install everything I need to have a high-quality meeting production. I mean using my XLR microphone and my few cameras by high quality. Currently, I am not an administrator of my Macbook Pro M1 machine. Hence, I cannot instal…</description><pubDate>Fri, 17 Jun 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-output-audio-video-windows-macos</guid></item><item><title>GraphQL Map Type</title><link>https://patrickdesjardins.com/blog/graphql-map-type</link><description>The battle between science and art in software engineering is constantly appearing. On one end, softwares are based on scientific mathematical concepts. On the other end, it lies in opinions and personal preferences. However, regardless of your situation, you must decide and move on. This article wi…</description><pubDate>Fri, 20 May 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/graphql-map-type</guid></item><item><title>How to configure Docker to have a shared folder between two containers?</title><link>https://patrickdesjardins.com/blog/docker-nodejs-shared-folder</link><description>In this article, I explain how to configure Docker to have two independent services in two different containers, but both of them reference a shared folder. repository |----&gt; service1 |----&gt; service2 |----&gt; shared The article focus on: 1. Docker configuration 2. TypeScript configuration The challeng…</description><pubDate>Mon, 09 May 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/docker-nodejs-shared-folder</guid></item><item><title>How to Import Files from a Sibling Folder when Using TypeScript and NodeJS</title><link>https://patrickdesjardins.com/blog/typescript-nodejs-sibling-project</link><description>Imagine you have two kinds of services inside your project: frontend and backend. You may want to share some interfaces or other TypeScript files. The idea is to have a sibling folder to the frontend and backend folders called shared. The idea is far from being exotic and workout naturally without d…</description><pubDate>Mon, 02 May 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-nodejs-sibling-project</guid></item><item><title>How to configure Docker with two containers: Frontend and Backend</title><link>https://patrickdesjardins.com/blog/docker-nodejs-frontend-backend</link><description>In this article, I explain how to configure Docker to have two independent services (server): 1. One service hosts the static files from a SolidJS framework (same apply to React) 2. One service operates a NodeJS server that hosts a basic REST service (could be used for any backend service) The artic…</description><pubDate>Tue, 26 Apr 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/docker-nodejs-frontend-backend</guid></item><item><title>Typescript and GraphQL: Custom Scalar with Apollo Client</title><link>https://patrickdesjardins.com/blog/typescript-codegen-graphql-custom-scalar</link><description>Imagine you must interact with a system that provides 64 bits type, like a long in  by GraphQL. The  for 64 bits. Relying on number cause issue with a number above . Hence, above that size, in JavaScript you must create a wrapped type called BigInt. While this article focuses on Long to BigInt, it i…</description><pubDate>Tue, 19 Apr 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-codegen-graphql-custom-scalar</guid></item><item><title>SolidJS: How to create an animation of a wave</title><link>https://patrickdesjardins.com/blog/solidjs-animated-wave</link><description>In this short article, we will see how to create with SolidJS this dynamic wave effect that simulates a water wave that goes from the bottom of the screen. Of course, performing the same with React would be very similar. The goal is to create a dynamic wave over the current application. Hence, we ne…</description><pubDate>Tue, 12 Apr 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/solidjs-animated-wave</guid></item><item><title>Side Project: Exercise Machine using Water</title><link>https://patrickdesjardins.com/blog/gym-project</link><description>Last summer, I unsuccessfully moved a kid-inflated pool - it contained too much water. The mass volumic of the water tricked me! Forward to this past winter, I had the idea to create an exercise machine where the source of weight is water. Water has the characteristic to be almost free and also that…</description><pubDate>Thu, 07 Apr 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/gym-project</guid></item><item><title>SolidJS: Where is useCallback?</title><link>https://patrickdesjardins.com/blog/solidjs-where-is-usecallback</link><description>If you are coming from React, you may wonder where the hook useCallback is? SolidJS does not have an equivalency because it does not need one! React relies on reference to know if something is changing or not. Similarly, SolidJS does the same thing. However, React executes the component code at ever…</description><pubDate>Sat, 02 Apr 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/solidjs-where-is-usecallback</guid></item><item><title>TypeScript Type with Full Optional Field Might Cause you Issue</title><link>https://patrickdesjardins.com/blog/typescript-full-optional-type-issue</link><description>I recently received a message from one of my teammates asking to look at a piece of code that was compiled but wrong. After a moment, I realized that the interface (type) that was used was coming from a generated package from one of our gRPC. Because all the gRPC Protobuf type had their fields optio…</description><pubDate>Wed, 30 Mar 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-full-optional-type-issue</guid></item><item><title>SolidJS: Context Simple Pattern</title><link>https://patrickdesjardins.com/blog/solidjs-context-pattern</link><description>I have discussed in the past two patterns that can be used with . In this article, we will see in action the _second pattern_ described in the previous article with SolidJS. The pattern is the one described in the official documentation and the one I have been using recently. Why use this pattern? -…</description><pubDate>Tue, 22 Mar 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/solidjs-context-pattern</guid></item><item><title>SolidJS: CreateEffect without Triggering Initialization</title><link>https://patrickdesjardins.com/blog/solidjs-effect-reaction-initialization</link><description>In SolidJS, it is possible to listen to a specific variable. When the reference change (object) or value (primitive type), the effect is triggered. Coming from React, you might relate to the useEffect hook. In the ecosystem of SolidJS, it is called createEffect. React does not handle a use case well…</description><pubDate>Fri, 18 Mar 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/solidjs-effect-reaction-initialization</guid></item><item><title>How to have MP4 video in your GatsbyJS Blog MDX file</title><link>https://patrickdesjardins.com/blog/gatsbyjs-mdx-video-mp4-support</link><description>I have a love and hate relationship with GatsbyJS. I like how fast it renders my blog compared to WordPress. However, a basic feature like hosting MP4 requires some particular configurations. After a couple of evenings trying, I finally found the right recipe. You need to have the ffmpeg open-source…</description><pubDate>Tue, 15 Mar 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/gatsbyjs-mdx-video-mp4-support</guid></item><item><title>SolidJS: How to Execute Code When UnMounting or when an Effect Ends</title><link>https://patrickdesjardins.com/blog/solidjs-cleanup</link><description>I&apos;ll cover two scenarios here: 1) You want to execute code when your component is unmounted 2) You want to execute code when an effect is completed In React, unmounting code was once upon a time the job of a dedicated method of the component class componentWillUnmount. With React Hooks, the unmounti…</description><pubDate>Thu, 10 Mar 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/solidjs-cleanup</guid></item><item><title>SolidJS: How to React on Property Change</title><link>https://patrickdesjardins.com/blog/solidjs-react-on-props-change</link><description>In this article, we will show a couple of ways to react to a change of property with SolidJS. There are many types of reactions: - We can recompute another variable. For example, a value is built upon a property. - We can execute code. For example, clearing a list or a canvas. The first case is call…</description><pubDate>Mon, 07 Mar 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/solidjs-react-on-props-change</guid></item><item><title>SolidJS First Try Review</title><link>https://patrickdesjardins.com/blog/solidjs-first-try-review</link><description>After building a smallish component in a few hours, this blog post is a quick review of  framework. Thus, it is not an in-depth review. In a nutshell, SolidJS is an alternative to React. The main selling point of the SolidJS framework is that it relies on JSX, with a very similar way to build compon…</description><pubDate>Thu, 03 Mar 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/solidjs-first-try-review</guid></item><item><title>A Safe Way to Define Immutable Default Values in TypeScript</title><link>https://patrickdesjardins.com/blog/typescript-immutable-default-values</link><description>Regardless of the framework you are using, you will end up having some area of code that relies on default values. When the state relies on an object, there is a way to ensure that the default values are not mutated in the future. The simplest way to define a set of default values is to assign an ob…</description><pubDate>Thu, 24 Feb 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-immutable-default-values</guid></item><item><title>How to type your React Children Property in TypeScript</title><link>https://patrickdesjardins.com/blog/typescript-react-children-types</link><description>When you are using TypeScript and React, a good practice is to type your property. Each component is well defined and clear with what to provide. For example: interface MyOptions { name: string; } export const MyComponent = (props: MyOptions) =&gt; { // ... }; In React, a popular pattern is allowing th…</description><pubDate>Mon, 21 Feb 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-react-children-types</guid></item><item><title>TypeScript ImportHelpers Compiler Options</title><link>https://patrickdesjardins.com/blog/typescript-compiler-option-helpers</link><description>TypeScript transpiles your code into JavaScript. In the process, some common functions must be injected into the code if the target does not support the feature. For example, if you are using the spread operator and target an old version of ECMAScript that does not support it, TypeScript must shim a…</description><pubDate>Tue, 15 Feb 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-compiler-option-helpers</guid></item><item><title>TypeScript Class Override Keyword Increase Maintainability</title><link>https://patrickdesjardins.com/blog/typescript-override-keyword</link><description>TypeScript added the keyword override with version 4.3. The keyword allows to mark a function in a class which marks the function to be expected to be redefined in a subclass. Before that keyword, or if you do not use it today (at version 4.5) the code still compiles. You can define the same functio…</description><pubDate>Fri, 11 Feb 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-override-keyword</guid></item><item><title>TypeScript Ergonomic Brand Checks</title><link>https://patrickdesjardins.com/blog/typescript-ergonomic-brand-checks</link><description>In short, the term &quot;Ergonomic Brand Checks&quot; is linked to branding. Branding is a way to dynamically check for a type. It comes with JavaScript being schemaless. In JavaScript, you need to check for a field/property that exist on an object to ensure you are manipulating an object desired. For example…</description><pubDate>Fri, 04 Feb 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-ergonomic-brand-checks</guid></item><item><title>TypeScript Dynamic Discriminant with Template String</title><link>https://patrickdesjardins.com/blog/typescript-dynamic-discriminant-with-template-string</link><description>An improvement with TypeScript 4.5 compared to 4.4 is the ability to discriminate on a dynamically constructed type with a pattern. Template string type has been around for a few versions, but it was impossible to narrow down until 4.5. Before getting into the specific, here is an example of two int…</description><pubDate>Mon, 31 Jan 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-dynamic-discriminant-with-template-string</guid></item><item><title>TypeScript Awaited Type</title><link>https://patrickdesjardins.com/blog/typescript-awaited-type</link><description>Before TypeScript version 4.5, there was a unexpected type conversion happening with Promise. The current code is working prior to version 4.5. async function computationLogic&lt;T&gt;(arg: Promise&lt;T&gt;): Promise&lt;T[]&gt; { return [await arg]; } class Observer&lt;T&gt; { private value: T | undefined; public construct…</description><pubDate>Wed, 26 Jan 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-awaited-type</guid></item><item><title>Typescript Web Project and Environment Variables</title><link>https://patrickdesjardins.com/blog/typescript-webproject-environment-variables</link><description>Many projects require to have configurations. These configurations change depending on the environment. For example, you can have a different service DNS address and port to connect depending if you are developing locally or in a testing environment, or in production. A typical pattern is to set var…</description><pubDate>Wed, 26 Jan 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-webproject-environment-variables</guid></item><item><title>TypeScript Static Unnamed Method with version 4.4</title><link>https://patrickdesjardins.com/blog/typescript-static-methods</link><description>TypeScript version 4.4 gives the possibility to have a static block inside a class. The addition follows the EcmaScript standard to allow an unnamed function to be called when the static class is accessed for the first time. Like initializing a static variable in a class, the static block is called…</description><pubDate>Thu, 20 Jan 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-static-methods</guid></item><item><title>TypeScript Index Signature Dynamic Signature Property with version 4.4</title><link>https://patrickdesjardins.com/blog/typescript-index-signature-dynamic-properties</link><description>JavaScript as a way to key-value in a dictionary/map way that is very flexible. It works by using a string for the name of the property, and then you can assign a value. TypeScript is providing type association to the value, but before 4.4 you could not. We can summarize what was possible before Typ…</description><pubDate>Fri, 14 Jan 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-index-signature-dynamic-properties</guid></item><item><title>TypeScript Guard Condition Improvements with version 4.4</title><link>https://patrickdesjardins.com/blog/typescript-guard-condition-improvements</link><description>TypeScript allows variables to be of several types. For example, a function&apos;s parameter can be a number or a string. Or another example can be a variable within a function can be a union of several types. function transform(arg: number | string) { let result = &quot;&quot;; if (typeof arg === &quot;string&quot;) { resu…</description><pubDate>Mon, 10 Jan 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-guard-condition-improvements</guid></item><item><title>The CAP Theorem Explained</title><link>https://patrickdesjardins.com/blog/the-cap-theorem-explained</link><description>The CAP theorem consists of three characteristics that are pillars to distributed system. The premise of the CAP theorem is that you can only have two of the three characteristics enabled at the same time. But is that true? First, let&apos;s define a distributed system. A distributed system is a solution…</description><pubDate>Thu, 06 Jan 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/the-cap-theorem-explained</guid></item><item><title>Recapitulation 2021</title><link>https://patrickdesjardins.com/blog/recaptulation-year-2021</link><description>For several years, when I was looking back at what I accomplished during the year, I had the feeling that it was another year that had beaten all my previous ones. Strangely, I do not have that sensation for the first time (as I can remember). I am writing these first few lines and realizing that 20…</description><pubDate>Tue, 28 Dec 2021 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/recaptulation-year-2021</guid></item><item><title>I Completed my Master Degree</title><link>https://patrickdesjardins.com/blog/i-completed-my-master-degree</link><description>In 2017, I decided to adhere to . During that year, I wrote two books, built an online course, read 22 books, had two new patents, changed team at Microsoft, moved to California, started to work at Netflix, and got admitted into Georgia Tech Master Program (OMSC) that would start the year after. For…</description><pubDate>Thu, 16 Dec 2021 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/i-completed-my-master-degree</guid></item><item><title>TypeScript Performance Tests with Github Workflow</title><link>https://patrickdesjardins.com/blog/typeScript-performance-tests-github-workflow</link><description>Automation is vital for delivering a product of consistent quality. In that domain, automated assertive unit tests are the epitome. Unit tests are a well-accepted cog in a software engineer arsenal and rarely contested. While avoiding injecting new errors in the code is critical, ensuring another no…</description><pubDate>Mon, 13 Dec 2021 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typeScript-performance-tests-github-workflow</guid></item><item><title>How to be Notified of an Action between React Components?</title><link>https://patrickdesjardins.com/blog/how-to-be-notified-of-an-action-between-react-components</link><description>The topic of this article follows the recent topic of . The following example is based on two sibling components. One has a textbox, and one has a button. The button triggers the action to reset the field to an initial value. Thus, the component that fires the event is **unaware** of the initial val…</description><pubDate>Mon, 08 Nov 2021 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-be-notified-of-an-action-between-react-components</guid></item><item><title>Communicating Between Sibling React Hook Components</title><link>https://patrickdesjardins.com/blog/communicating-between-sibling-react-hook-components</link><description>Communication between React&apos;s components is natural using the properties of each component. However, if a child wants to send information back the tree of components, some additional work is required. In this article, I&apos;ll clarify how to communicate top-down, bottom-up, and side-to-side. Let&apos;s start…</description><pubDate>Mon, 01 Nov 2021 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/communicating-between-sibling-react-hook-components</guid></item><item><title>How to schedule blog articles with GatsbyJS</title><link>https://patrickdesjardins.com/blog/how-to-schedule-blog-articles-with-gatsbyjs</link><description>Coming from writing my blog articles on WordPress, I was rapidly disappointed that I couldn&apos;t write down a blog article in advance. Indeed, I could write the article without pushing to the master branch or leverage Git by creating a branch for each article and merge when ready to publish. However, I…</description><pubDate>Tue, 05 Oct 2021 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-schedule-blog-articles-with-gatsbyjs</guid></item><item><title>Migrating my WordPress Blog to Gatsby</title><link>https://patrickdesjardins.com/blog/migrating-my-wordpress-blog-to-gatsby</link><description>When I renewed my VPS account for the year, I realized something: I do not have much going on anymore. In the last five years, I have been relying on the VPS because of my blog.  I have been hosting since 2011 on WordPress my blog using Apache and MySql.  So, one of my objectives was to transfer my…</description><pubDate>Thu, 23 Sep 2021 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/migrating-my-wordpress-blog-to-gatsby</guid></item><item><title>Two Patterns with React Context</title><link>https://patrickdesjardins.com/blog/two-patterns-with-react-context</link><description>For some reason, I am always copying a previous React Context before creating a new one. I recently realized that I was copying two different patterns. In this article, I&apos;ll expose the two patterns. The first pattern is succinct but requires relying on a class. First, the logic of the shared code, t…</description><pubDate>Fri, 27 Aug 2021 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/two-patterns-with-react-context</guid></item><item><title>My recapitulation of 2020: another great year</title><link>https://patrickdesjardins.com/blog/my-recapitulation-of-2020-another-great-year</link><description>I wrote a recapitulative in  and skipped in 2019. After blogging weekly since 2011, I decided to take a hiatus with my second children&apos;s upcoming. In 2020, I wrote a single post about my custom made desk -- that&apos;s it. However, today is different. Today, I will re-iterate the idea for the year 2020 b…</description><pubDate>Mon, 28 Dec 2020 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/my-recapitulation-of-2020-another-great-year</guid></item><item><title>Working From Home Desk</title><link>https://patrickdesjardins.com/blog/working-from-home-desk</link><description>Working from home can be challenging for many reasons. My situation is that I have a four years old and a one-year-old child. I like working from home but not confined in a small room alone. With Covid-19, I have been working from home and my old Ikea desk was flawed. I had to barricade my surroundi…</description><pubDate>Mon, 11 May 2020 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/working-from-home-desk</guid></item><item><title>Book of 2019</title><link>https://patrickdesjardins.com/blog/book-of-2019</link><description>Since few years (, I dress a list of books that I read. Last year, I recognized that a brief summary along the book titles would be beneficial for me and for the reader. I started the year with a few books/reading on machine learning. I took the class &quot;Machine Learning&quot; at Georgia Tech as being one…</description><pubDate>Thu, 26 Dec 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/book-of-2019</guid></item><item><title>Sending Telemetry from GraphQL under NodeJS without Spamming</title><link>https://patrickdesjardins.com/blog/sending-telemetry-from-graphql-under-nodejs-without-spamming</link><description>I am running a GraphQL server hosted with NodeJS. Under the hood, it is an Express server with Apollo Middleware. I am collecting different information along with errors. The way it works is that I have an Elastic Search server fronted by a simple REST API facade. The endpoint on the REST accepts a…</description><pubDate>Tue, 11 Jun 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/sending-telemetry-from-graphql-under-nodejs-without-spamming</guid></item><item><title>Georgia Tech Online Master Degree Review after 4 semesters</title><link>https://patrickdesjardins.com/blog/georgia-tech-online-master-degree-review-after-4-semesters</link><description>I joined  at the end of 2017 with the idea to expand my knowledge in an area I am interested: machine learning. At the time I am writing this blog entry, I have completed four semesters with a grade of &quot;A&quot;, and six more remain to complete the program. At the dawn of the Summer 2019 semester, I decid…</description><pubDate>Thu, 06 Jun 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/georgia-tech-online-master-degree-review-after-4-semesters</guid></item><item><title>How to Collect HTTP Request Telemetry with GraphQL and RESTDataSource?</title><link>https://patrickdesjardins.com/blog/how-to-collect-http-request-telemetry-with-graphql-and-restdatasource</link><description>I have been working in a GraphQL solution at Netflix for few months now. I am always keen to have insight about what is going on. While I created from the ground-up the GraphQL server with NodeJS I had in mind to find a way to give me, the software engineer, some insights by providing some direct fe…</description><pubDate>Tue, 28 May 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-collect-http-request-telemetry-with-graphql-and-restdatasource</guid></item><item><title>Validating Consumer of GraphQL with Jenkins</title><link>https://patrickdesjardins.com/blog/validating-consumer-of-graphql</link><description>I will demonstrate a way to configure a continuous environment that gives insight on if a change on the GraphQL server can impact negatively a consumer. The solution assumes that both code bases are under the same organization, not under the same repository and that Jenkins is used. I like to start…</description><pubDate>Wed, 22 May 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/validating-consumer-of-graphql</guid></item><item><title>A Single GraphQL&apos;s Schema for Internal and External Users</title><link>https://patrickdesjardins.com/blog/a-single-graphqls-schema-for-internal-and-external-users</link><description>Imagine the scenario that you have a GraphQL schema that is consumed only by engineers of your organization. However, some engineers work on external facing applications while some other works on internal applications. The difference is subtle, but some information must remain confidential. While it…</description><pubDate>Tue, 14 May 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/a-single-graphqls-schema-for-internal-and-external-users</guid></item><item><title>How to Pass Value to useCallback in React Hooks</title><link>https://patrickdesjardins.com/blog/how-to-pass-value-to-usecallback-in-react-hooks</link><description>UseCallback allows having the same reference for a call back function which has the benefit of only changing when something changes. This is primordial when callbacks are passed down the React component chain to avoid component to be rendered without an actual real reason causing performance issue.…</description><pubDate>Thu, 09 May 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-pass-value-to-usecallback-in-react-hooks</guid></item><item><title>TypeScript Exhaustive Check your Reducer</title><link>https://patrickdesjardins.com/blog/typescript-exhaustive-check-your-reducer</link><description>A few weeks ago, I wrote about how to use . The natural follow-up for many is to ensure that the set of action allowed is all served with the reducer. Not only it helps to tidy up the accepted actions by reducers when building the reducer, it also help ensuring during the lifetime of the reducer tha…</description><pubDate>Wed, 01 May 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-exhaustive-check-your-reducer</guid></item><item><title>The authorization and authentication in GraphQL</title><link>https://patrickdesjardins.com/blog/the-authorization-and-authentication-in-graphql</link><description>Implementing a service that covers many systems might be frightful in term of data exposition. While wandering the Internet for resources about GraphQL and security, we often see cases where the security is not paramount -- it is easier to ignore security. The reality is that most corporation that d…</description><pubDate>Thu, 25 Apr 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/the-authorization-and-authentication-in-graphql</guid></item><item><title>How to consume GraphQL in TypeScript and React</title><link>https://patrickdesjardins.com/blog/how-to-consume-graphql-in-typescript-and-react</link><description>In this article I&apos;ll cover two different approach concerning rendering information coming from a GraphQL server in React while being strongly typed. The first approach is the one I prefer because it is not intrusive. It is very similar of to do a normal REST Ajax call. It can be swapped from an exis…</description><pubDate>Wed, 17 Apr 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-consume-graphql-in-typescript-and-react</guid></item><item><title>GraphQL Extension to Collect HTTP and Resolvers Telemetry</title><link>https://patrickdesjardins.com/blog/graphql-extension-to-collect-http-and-resolvers-telemetry</link><description>The more my graph was increasing, the more resolvers I built. The more resolvers I had, the more data loaders I created, the more HTTP endpoints I had to call and so on. The complexity of the code was rising as well as the possibility to have a catastrophic amount of HTTP requests to be performed by…</description><pubDate>Tue, 09 Apr 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/graphql-extension-to-collect-http-and-resolvers-telemetry</guid></item><item><title>How to automatically generate TypeScript for consumer of your GraphQL</title><link>https://patrickdesjardins.com/blog/how-to-automatically-generate-typescript-for-consumer-of-your-graphql</link><description>One strength of GraphQL is that it has types. In an ideal world, the consumer of the GraphQL would receive the payload strongly typed. The reason that it is not the case is natural. The data that is moving from the server to the client who invoked the query receives a JSON format that does not have…</description><pubDate>Tue, 02 Apr 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-automatically-generate-typescript-for-consumer-of-your-graphql</guid></item><item><title>Accessing your local machine from a Docker container</title><link>https://patrickdesjardins.com/blog/accessing-your-local-machine-from-a-docker-container</link><description>A small entry about Docker. I am using Docker mostly in development to have one Docker per web application I am running. It gives me the advantage to have different instances of Apache running that are isolated. A few time ago, I wanted to perform an HTTP request from inside the Docker container bac…</description><pubDate>Fri, 22 Mar 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/accessing-your-local-machine-from-a-docker-container</guid></item><item><title>How to Curl a GraphQL API?</title><link>https://patrickdesjardins.com/blog/how-to-curl-a-graphql-api</link><description>In the last few months, I have been implementing a GraphQL server in TypeScript and NodeJS using Apollo. You can build your query with the playground and see the result immediately. At the top, a &quot;Curl&quot; button generates a Curl command. However, it writes the command with many options that are not re…</description><pubDate>Tue, 19 Mar 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-curl-a-graphql-api</guid></item><item><title>Configuring Apollo Playground and API on two different URL</title><link>https://patrickdesjardins.com/blog/configuring-apollo-playground-and-api-on-two-different-url</link><description>By default, Apollo GraphQL middleware install the server in Express under the same URL. If you use the URL in the browser (GET), the playground loads. If you use the URL as a POST the data is returned. The website and the API are both using the same URL. It is problematic if you want the playground…</description><pubDate>Wed, 13 Mar 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/configuring-apollo-playground-and-api-on-two-different-url</guid></item><item><title>TypeScript with Strong Typed Action when using useReducer of React Hooks</title><link>https://patrickdesjardins.com/blog/typescript-with-strong-typed-action-when-using-usereducer-of-react-hooks</link><description>The technic I will demonstrate in this article comes from what I was using with the traditional React and Redux. Now, with React Hooks we do not need to use Redux anymore but the same principles exist with the hook _useReducer_. I have witnessed many people struggling using TypeScript and Redux beca…</description><pubDate>Tue, 05 Mar 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/typescript-with-strong-typed-action-when-using-usereducer-of-react-hooks</guid></item><item><title>GraphQL Resolvers with Apollo</title><link>https://patrickdesjardins.com/blog/graphql-resolvers-with-apollo</link><description>In this article, we will discuss about two topics that concern resolvers and performance. So far, and by default, everytime a resolver is invoked, this one execute its actions which is mostly be to fetch the data. The problem is that in a graph there is potentially redundant information that will be…</description><pubDate>Tue, 26 Feb 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/graphql-resolvers-with-apollo</guid></item><item><title>How to setup a TypeScript, NodeJS, Express Apollo Server to easy debugging with VsCode</title><link>https://patrickdesjardins.com/blog/how-to-setup-a-typescript-nodejs-express-apollo-server-to-easy-debugging-with-vscode</link><description>There is a lot of keyword in the title but this is not a clickbait, we will setup without too much burden a simple configuration that will allow Visual Studio Code (VsCode) to hook into a GraphQL installation. The idea is that everytime a TypeScript file is saved that automatically the file is trans…</description><pubDate>Thu, 21 Feb 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/how-to-setup-a-typescript-nodejs-express-apollo-server-to-easy-debugging-with-vscode</guid></item><item><title>Apollo GraphQL Resolvers and Data Source separation</title><link>https://patrickdesjardins.com/blog/apollo-graphql-resolvers-and-data-source-separation</link><description>Resolvers can perform asynchronous call to fetch data. Using the specific implementation to perform the fetch in the resolver cause the resolver to have high-coupling into the technology to access the data but also increase the complexity of the resolver by boosting the size of each function with th…</description><pubDate>Wed, 13 Feb 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/apollo-graphql-resolvers-and-data-source-separation</guid></item><item><title>GraphQL Query with Argument</title><link>https://patrickdesjardins.com/blog/graphql-query-with-argument</link><description>A part of me wish that the flexibility of GraphQL would extend further in term of parameter to a query. The reality is that the maintainer of a GraphQL service must provide a set of acceptable inputs. The rational is that GraphQL needs to query a services or any source of data in a known way. For ex…</description><pubDate>Thu, 07 Feb 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/graphql-query-with-argument</guid></item><item><title>GraphQL Context</title><link>https://patrickdesjardins.com/blog/graphql-context</link><description>GraphQL has a mechanism to pass information to every resolver. The resolvers are at the core of resolving core logic about how to fetch the data. It is a centerpiece in term of security by allowing to know which user is authenticated and how to filter the information of this particular one. The reso…</description><pubDate>Mon, 28 Jan 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/graphql-context</guid></item><item><title>Apollo Server and Secured Playground</title><link>https://patrickdesjardins.com/blog/apollo-server-and-secured-playground</link><description>In the  I demonstrate how easy is to setup the playground. However, there is still a piece that is missing and is authentication.   , I explicitly mentioned that every request goes first through Apache that has a special module that handles authentication. Apache will set in the HTTP request some h…</description><pubDate>Fri, 25 Jan 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/apollo-server-and-secured-playground</guid></item><item><title>Apollo Server Playground</title><link>https://patrickdesjardins.com/blog/apollo-server-playground</link><description>Apollo comes with a handy playground. The playground is simple web portal that allows a rich experience to craft a GraphQL query against the Apollo GraphQL server. The interactive system gives autocomplete, schema discovery and display the response. It is a very valuable tool when developing because…</description><pubDate>Tue, 22 Jan 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/apollo-server-playground</guid></item><item><title>Install Apollo Server to host a GraphQL service</title><link>https://patrickdesjardins.com/blog/install-apollo-server-to-host-a-graphql-service</link><description>This is the second post about my journey on prototyping a GraphQL service to abstract all REST and gRPC services that we have at Netflix Open Connect. You can consult the  and the high-level architecture to have a better idea of the motivation. In this article, I&apos;ll start diving into how to get star…</description><pubDate>Mon, 14 Jan 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/install-apollo-server-to-host-a-graphql-service</guid></item><item><title>Getting Started with GraphQL for Netflix Open Connect</title><link>https://patrickdesjardins.com/blog/getting-started-with-graphql-for-netflix-open-connect</link><description>I recently started an initiative about GraphQL for Netflix Open Connect. Netflix already invests in GraphQL and some of the other teams previously discussed on the Netflix&apos;s Medium page  and . I&apos;ll approach the writing of my discovery with GraphQL not in hindsight but during my journey.  is an open…</description><pubDate>Thu, 10 Jan 2019 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/getting-started-with-graphql-for-netflix-open-connect</guid></item><item><title>Recapitulation of 2018</title><link>https://patrickdesjardins.com/blog/recapitulation-of-2018</link><description>In a fast-paced life, we often lose track of all accomplishments realized thorough the year. Since 2017, I have written my year review. You can consult . As mentioned in the introduction of my 2017 review, since the previous five years or so, everything keeps growing and improving in my life. Thanks…</description><pubDate>Fri, 28 Dec 2018 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/recapitulation-of-2018</guid></item><item><title>Book of 2018</title><link>https://patrickdesjardins.com/blog/book-of-2018</link><description>Here is the list of book I read in 2018. You can consult my  in my 2017&apos;s accomplishments. -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  Next year, I plan to write down a paragraph for each book but for this year, it will be a plain list.</description><pubDate>Wed, 19 Dec 2018 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/book-of-2018</guid></item><item><title>Using OneNote to record online classes</title><link>https://patrickdesjardins.com/blog/using-onenote-to-record-online-classes</link><description>I am taking online classes for my . For the first three semesters, I used Google Doc to write down all my notes during lecture. The lectures are provided by Udacity which are using videos to teach the content. After three semesters, I realized that my way of taking notes was not efficient. First, I…</description><pubDate>Tue, 11 Dec 2018 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/using-onenote-to-record-online-classes</guid></item><item><title>The Best Development Browser Resolution</title><link>https://patrickdesjardins.com/blog/the-best-development-browser-resolution</link><description>An interesting challenge with web development is the unlimited different combination of width and height that people can consume the application. I am developing with a wide screen most of the time and once in a while directly on my MacBook Pro that has a retina resolution. In all cases, I have the…</description><pubDate>Wed, 28 Nov 2018 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/the-best-development-browser-resolution</guid></item><item><title>Adding Telemetry to your Web Application</title><link>https://patrickdesjardins.com/blog/adding-telemetry-to-your-web-application</link><description>I wrote several months ago about . In this article, I&apos;ll write how it works more technically. First and foremost, the application needs a thin layer to send the telemetry to the backend. I wrote a small internal library that handles basic telemetry needs. For example, if we want to collect a user be…</description><pubDate>Wed, 21 Nov 2018 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/adding-telemetry-to-your-web-application</guid></item><item><title>Re-Reselect your whole Redux State</title><link>https://patrickdesjardins.com/blog/re-reselect-your-whole-redux-state</link><description>Re-Reselect is a library that uses Reselect. Both have the capability to memoize a function returns by its input. It means that if the input of a determine function change, the function is executed and the return is saved in memory. The saved copy of the information is used until one of the specifie…</description><pubDate>Tue, 13 Nov 2018 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/re-reselect-your-whole-redux-state</guid></item><item><title>Testing Redux next and api.dispatch with TypeScript and Jest</title><link>https://patrickdesjardins.com/blog/testing-redux-next-and-api-dispatch-with-typescript-and-jest</link><description>A middleware in Redux can have quite a lot of logic. In fact, this is my favorite place to place logic. The rationale is that it can be triggered by an action, still, have the time to request data from the backend server with an Ajax call and can dispatch other actions that can be computed by anothe…</description><pubDate>Wed, 07 Nov 2018 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/testing-redux-next-and-api-dispatch-with-typescript-and-jest</guid></item><item><title>Redux Structure Best Practices</title><link>https://patrickdesjardins.com/blog/redux-structure-best-practices</link><description>I have been coding in one of our web application at Netflix for more than 15 months, and I realized that my Redux&apos;s state got better in time. In hindsight, it is easy to recognize that the initial draft of the state was performing its job but not efficiently. However, after a few Internet searches,…</description><pubDate>Tue, 30 Oct 2018 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/redux-structure-best-practices</guid></item><item><title>React Ref with children caveat</title><link>https://patrickdesjardins.com/blog/react-ref-with-children-caveat</link><description>Recently, I had the requirement to disable some parts of the user interface if an entity is under a specific state. I decided to create a reusable component that would blur its child and show a message to the user explaining why a section of the screen is inaccessible. You can see the final renderin…</description><pubDate>Wed, 24 Oct 2018 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/react-ref-with-children-caveat</guid></item><item><title>Mocking Every Functions of an Object with Jest and TypeScript</title><link>https://patrickdesjardins.com/blog/mocking-every-functions-of-an-object-with-jest-and-typescript</link><description>Most of the time, it is enough to simply mock a handful amount of member of an object while performing unit tests. However, if you are using the dependency injection pattern, it is faster to not send an actual object and manually cherry-pick which function to test. Since you are injected an external…</description><pubDate>Thu, 18 Oct 2018 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/mocking-every-functions-of-an-object-with-jest-and-typescript</guid></item><item><title>Dragging a DOM Element Visually Properly</title><link>https://patrickdesjardins.com/blog/dragging-a-dom-element-visually-properly</link><description>A few weeks ago, I started using a web appliance (Trello) to handle my side projects priority.  The main action is moving the cards between columns and I realized that I did a way better job when I worked at Microsoft with Visual Studio Team Services than Trello. You can compare with the following…</description><pubDate>Tue, 09 Oct 2018 00:00:00 +0000</pubDate><guid isPermaLink="true">https://patrickdesjardins.com/blog/dragging-a-dom-element-visually-properly</guid></item></channel></rss>