# Christophe Avonture > Personal blog about Docker, WSL, Python, Quarto, PHP, Joomla, Docusaurus and even more 273 articles. Each has a plain-Markdown mirror at its own permalink plus `.md` (e.g. `https://www.avonture.be/blog/.md`). ## Series (full-text bundles) Each link is every article in that series, concatenated in reading order — one request instead of many. - [Bluesky Docusaurus component](https://www.avonture.be/llms/bluesky-docusaurus-component.txt) — 2 article(s) - [Building and testing REST APIs](https://www.avonture.be/llms/building-and-testing-rest-apis.txt) — 5 article(s) - [Claude Code](https://www.avonture.be/llms/claude-code.txt) — 2 article(s) - [code quality](https://www.avonture.be/llms/code-quality.txt) — 10 article(s) - [Coding using a devcontainer](https://www.avonture.be/llms/coding-using-a-devcontainer.txt) — 7 article(s) - [Create your joomla website using Docker](https://www.avonture.be/llms/create-your-joomla-website-using-docker.txt) — 6 article(s) - [Creating Docusaurus components](https://www.avonture.be/llms/creating-docusaurus-components.txt) — 26 article(s) - [Customize your shell with ZSH](https://www.avonture.be/llms/customize-your-shell-with-zsh.txt) — 7 article(s) - [Diagrams as code](https://www.avonture.be/llms/diagrams-as-code.txt) — 8 article(s) - [Discovering Docusaurus](https://www.avonture.be/llms/discovering-docusaurus.txt) — 3 article(s) - [Discovering Quarto](https://www.avonture.be/llms/discovering-quarto.txt) — 12 article(s) - [Display Docusaurus Blog Posts as Cards - A Step-by-Step Guide](https://www.avonture.be/llms/display-docusaurus-blog-posts-as-cards-a-step-by-step-guide.txt) — 2 article(s) - [Functional testing](https://www.avonture.be/llms/functional-testing.txt) — 3 article(s) - [Modern CLI tools for your terminal](https://www.avonture.be/llms/modern-cli-tools-for-your-terminal.txt) — 9 article(s) - [MS Excel - Connect to a SQL Server database](https://www.avonture.be/llms/ms-excel-connect-to-a-sql-server-database.txt) — 2 article(s) - [Ollama daily use](https://www.avonture.be/llms/ollama-daily-use.txt) — 9 article(s) - [Running Docusaurus using Docker](https://www.avonture.be/llms/running-docusaurus-using-docker.txt) — 3 article(s) - [Running Oracle Database Server as a Docker container](https://www.avonture.be/llms/running-oracle-database-server-as-a-docker-container.txt) — 3 article(s) - [Self-host your own services](https://www.avonture.be/llms/self-host-your-own-services.txt) — 7 article(s) - [SSH - From your first key to remote development](https://www.avonture.be/llms/ssh-from-your-first-key-to-remote-development.txt) — 9 article(s) - [VBA & MS Office automation](https://www.avonture.be/llms/vba-ms-office-automation.txt) — 10 article(s) - [VSCode - Tips, extensions and shortcuts](https://www.avonture.be/llms/vscode-tips-extensions-and-shortcuts.txt) — 13 article(s) - [Windows Terminal](https://www.avonture.be/llms/windows-terminal.txt) — 4 article(s) - [WinSCP & remote file transfer](https://www.avonture.be/llms/win-scp-remote-file-transfer.txt) — 8 article(s) - [Writing better Bash scripts](https://www.avonture.be/llms/writing-better-bash-scripts.txt) — 10 article(s) - [WSL2 - Install, move and use it](https://www.avonture.be/llms/wsl2-install-move-and-use-it.txt) — 6 article(s) ## ai - [Accessing Ollama across your local network](https://www.avonture.be/blog/accessing-ollama-across-your-local-network) — Learn how to set up a dedicated Ollama server on your local network and connect your code editor to it for a private, free AI coding assistant. - [AI - Image generation using recraft.ai](https://www.avonture.be/blog/ai-image-generation) — Recraft.ai - Discover an advanced AI image generation tool that offers fine-tuning, image variations, custom sizing, and accurate text rendering. - [ai-data: Let a Local LLM Write Your jq and awk One-Liners](https://www.avonture.be/blog/ollama-ai-data) — A zsh function that reads a JSON or CSV file, understands its actual fields, and suggests 5 practical jq/awk commands tailored to that exact file — picked via fzf, then loaded onto your command line (not run for you) so you see, edit and learn the exact command before pressing Enter. - [ai-diagram: From a Sentence (or a compose.yaml) to a Mermaid Diagram](https://www.avonture.be/blog/ollama-ai-diagram) — A zsh function that turns a plain-English description, or an existing config file like a docker-compose.yaml, into a Mermaid diagram — printed as a ready-to-paste fenced code block. Where docker-python-mermaid needs a script written for each input format, ai-diagram takes whatever you have in hand. - [ai-explain: ELI5 for Scripts and Errors, Right in Your Terminal](https://www.avonture.be/blog/ollama-ai-explain) — Another function in the Ollama daily-use series: pipe any script, error message, or stack trace to ai-explain and get a plain-English explanation of what it does or what went wrong — entirely local, no cloud required. - [ai-review, ai-secrets, ai-commit: Three zsh Checks Before Every git Commit](https://www.avonture.be/blog/ollama-git-precommit) — Three zsh functions that together form a local, offline pre-commit quality gate: ai-review catches SOLID violations and naming issues, ai-secrets separates real hardcoded credentials from false positives, and ai-commit drafts the Conventional Commits message once the diff is actually clean. - [ai-test: Generate Missing Unit Tests From Your Terminal With a Local LLM](https://www.avonture.be/blog/ollama-test-generator) — Turn your local Ollama model into an on-demand unit test generator. A zsh function that reads a Bash, PHP or Python file, detects whether you already have tests for it, prints only the missing Bats/Pest/Pytest cases needed for full coverage, offers to save them where the framework expects them, and runs the suite in a throw-away Docker container. - [ai-translate & ai-summarize: Confidential Documents, Handled 100% Locally](https://www.avonture.be/blog/ollama-ai-docs) — Two zsh functions that translate or summarize a Word, PDF, PowerPoint or Excel document without a single byte leaving your machine — Docling extracts the text locally, a local Ollama model does the translation or summary. Built for the document you'd never paste into a cloud translation tool. - [AnythingLLM: Chat With All Your Scattered Documentation](https://www.avonture.be/blog/anythingllm-chat-with-your-docs) — AnythingLLM turns a pile of Markdown, Quarto, PDF, DOCX, Excel and PowerPoint files into something you can actually chat with, backed by a local Ollama model. Part 1 sets it up on a single machine; Part 2 keeps the documents on my work PC while borrowing the GPU sitting at home. - [Ask My Blog: Turning 259 Articles Into 2,160 Searchable Questions](https://www.avonture.be/blog/docusaurus-ask-my-blog) — A local LLM reads every article on your blog and writes the questions a developer would actually type into a search bar, each one mapped to the exact heading that answers it. The result is a build-time question index searched with plain BM25 in the browser — no embeddings, no API key, no vector database. Full pipeline, plugin and component included. - [Claude Code - From Slash Commands to a Layered Workflow](https://www.avonture.be/blog/claude-code-workflow) — How this blog's .claude/ folder grew from a handful of slash commands into commands, hooks, skills, agents and rules working together — a practical learning path, including where a deterministic script beats asking the AI. - [Claude Code - Optimizing Token Usage](https://www.avonture.be/blog/claude-ia-spare-tokens) — A practical guide to reducing token consumption in Claude Code; CLI commands, optimization of CLAUDE.md, and other context management. - [How I used Google Gemini Nano Banana on my blog](https://www.avonture.be/blog/gemini-meerkat) — See how Google Gemini Nano was used to generate all the custom images for this blog, including a meerkat mascot. - [Installing Ollama and get local AI](https://www.avonture.be/blog/ollama-installation) — Learn how to deploy Ollama locally via Docker to run private, free LLMs and enable AI-powered code autocompletion in VSCode. - [Open WebUI — Beyond the Chat: Models, RAG, Tools and API Keys](https://www.avonture.be/blog/open-webui-advanced) — Open WebUI is much more than a chat interface for Ollama. Custom model presets with system prompts, local document RAG, web search, Python Tools and personal API keys let you build a genuinely useful local AI workspace. - [Playing with Ollama - Create a blog post analyzer with a local LLM](https://www.avonture.be/blog/docusaurus-ollama-tags) — A Dockerized devcontainer with two Python scripts: the first sends each Markdown blog post to a local Ollama model to generate tags, the second compares those tags across posts to suggest which articles should link to each other. No cloud API, no manual tagging. - [Restore Marknotes with Lovable.dev](https://www.avonture.be/blog/lovable-dev-ai) — Ask Lovable.dev to create a full dockerized application with a backend using Python and FastAPI and a frontend using React. - [Tabnine - AI Autocomplete & Chat for Javascript, Python, Typescript, PHP, Go, Java & more](https://www.avonture.be/blog/vscode-tabnine) — Tabnine was once a must-have free AI autocomplete extension for VS Code. As of 2025 it is enterprise-only ($39/user/month). This article is kept as a historical reference. ## apache - [Apache .htaccess file](https://www.avonture.be/blog/apache-htaccess) — Master your Apache .htaccess file with essential tips and tricks for security, redirection, file access control, Content Security Policy (CSP), forcing HTTPS, and performance optimization. ## api - [API REST - How to write good APIs](https://www.avonture.be/blog/php-api-tips) — Master REST API best practices for clean and scalable design. Get tips on correct URI notation, using plural nouns, and utilizing HTTP verbs for semantically correct endpoints. - [Bruno - A postman-like tool - GUI and CLI](https://www.avonture.be/blog/bruno) — Explore Bruno, a powerful Postman-like API testing tool with both GUI and CLI support. - [Don't query your PostgreSQL db anymore, prefer PostgREST](https://www.avonture.be/blog/docker-postgrest) — Use Docker and PostgREST to instantly turn your PostgreSQL database into a powerful RESTful API. Eliminate SQL queries and complex database models from your application code with this simple setup tutorial. - [Python - Fast API - Create your JSON API in Python in one minute](https://www.avonture.be/blog/python-fastapi) — Build your first Python JSON API with FastAPI in under a minute! This tutorial covers Docker setup, automated API documentation (Swagger/ReDoc), and hot-reload for rapid development. - [Using Postman to play with API](https://www.avonture.be/blog/postman) — Master API testing with Postman. Use it as a powerful unit test tool to validate response status, enforce data structure, and prevent regressions in your API development workflow. - [Validate your OpenAPI schema against the Belgif REST standards](https://www.avonture.be/blog/belgif-api-linter) — Validate your FastAPI OpenAPI schema against the Belgif REST standards using Docker, with step-by-step fixes for the most common linting errors. ## bash - [Atuin — Supercharge Your Shell History With a Searchable, Timestamped Database](https://www.avonture.be/blog/atuin-bash-history) — Tired of losing commands in the default CTRL+R maze? Atuin replaces your shell history with a full-featured TUI backed by SQLite — timestamps, context, multi-machine sync, and a clean comparison with FZF-based history search. - [Bash - ASCII art](https://www.avonture.be/blog/bash-ascii-art) — Learn how to add eye-catching ASCII art banners to your Bash scripts for a bigger visual impact. Includes a full sample code implementation. - [Bash - Echo on the console and in a logfile in the same time](https://www.avonture.be/blog/bash-console-log-together) — Tired of silent Bash scripts? Learn the simple, effective method to simultaneously echo command output to the console and write it to a log file line-by-line. - [Bash - Loading environment variables from a file](https://www.avonture.be/blog/bash-load-env) — Learn how to load environment variables from a .env file into a Bash script, so you can externalize configuration and reuse variables across other applications like Laravel. - [Bash - Script to add logging features to your script](https://www.avonture.be/blog/bash-logging) — Add robust logging features to your Bash scripts with this simple, reusable library. Get automatic log files, timestamps, and full function call traces for easy debugging. - [Get health information from your running containers](https://www.avonture.be/blog/docker-healthy) — Get health information from your running Docker containers instantly. This article shows a bash script using docker ps and docker inspect for quick checks. - [Keep running and count the number of files in a folder using inotifywait](https://www.avonture.be/blog/linux-inotifywait) — Use Linux inotifywait to continuously monitor a directory and get a real-time, running count of newly created files with a simple Bash script. - [Linux - Generate documentation from Bash scripts](https://www.avonture.be/blog/linux-generate-documentation-from-bash-scripts) — Learn to auto-generate documentation for your Bash scripts on Linux. This guide provides a custom script to parse function doc blocks and create structured Markdown files automatically. - [Linux - Sort functions in a Bash script](https://www.avonture.be/blog/linux-sort-functions-in-script) — Learn how to use diff and sort in Bash to check if functions in your shell scripts are defined in alphabetical order. Includes a script to scan an entire directory. - [Linux - Take advantage of the number of CPUs you have; start concurrent jobs](https://www.avonture.be/blog/bash-parallel-task) — Optimize your Bash scripts! Learn how to run concurrent jobs and leverage all your CPU cores using process IDs (pids), wait, and nproc to dramatically reduce execution time. - [Linux - Using a progression bar in your script](https://www.avonture.be/blog/bash-progression-bar) — Add a visual progression bar to your Bash scripts on Linux. This guide shows you how to easily implement a progress bar to track concurrent jobs, visualize progress, and improve your terminal user interface. - [Streamline Your Frontend - Minifying Assets with Docker, Bash, and YAML](https://www.avonture.be/blog/assets-minification) — Drop the heavy Node toolchains. Build a fast, dependency-free asset minification pipeline using a declarative YAML manifest, Bash, and Docker. ## bluesky - [Create our own Docusaurus React component and provide a "Share on Bluesky" button](https://www.avonture.be/blog/docusaurus-bluesky-share) — Build a custom Docusaurus React component that adds a “Share on Bluesky” button to your blog posts. - [Show Bluesky comments on Docusaurus and, too, number of likes/reposts](https://www.avonture.be/blog/docusaurus-bluesky-comments) — Integrate Bluesky comments, likes, and repost counts directly into your Docusaurus blog posts. ## code-quality - [Clean code - Linux Bash - Keep the number of function parameters as small as possible](https://www.avonture.be/blog/linux-bash-too-many-function-parameters) — Apply Clean Code to your Linux Bash scripts. Discover how to avoid too many function parameters by using a simple, robust associative array solution. - [Dagger.io - Using dagger to automate your CI workflows](https://www.avonture.be/blog/dagger-python) — Automate your CI/CD workflows with Dagger.io and Python. Quickly run code quality tools (Pylint, Black, Ruff) and test your entire pipeline locally to simplify integration. - [Docker image that provides static analysis tools for PHP](https://www.avonture.be/blog/php-jakzal-phpqa) — Use the jakzal/phpqa Docker image to instantly run dozens of static analysis and code quality tools for your PHP codebase, including linters and fixers, without any installation. - [Format poorly formatted PHP code](https://www.avonture.be/blog/online-php-linter) — Need to clean up messy PHP code fast? Discover the best online PHP linter, Pint-express (based on Laravel Pint), to instantly format and beautify your code. No installation needed! - [Git - pre-commit-hooks](https://www.avonture.be/blog/git-precommit) — Hate failed CI/CD pipelines? Discover how to use Git pre-commit hooks, focusing on the pre-commit framework, to enforce code quality standards locally before you push. - [Markdown linter - solve formatting issue in md files](https://www.avonture.be/blog/markdown-lint) — Automatically solve Markdown formatting issues with the markdownlint tool and Docker. Learn how to check, configure, and use the --fix flag for consistent, clean .md files. - [Python - Code Quality tools](https://www.avonture.be/blog/python-qa) — Elevate your Python code quality! Discover 9 essential static analysis tools like Pylint, Black, and mypy, plus an optimal QA workflow to ensure cleaner, bug-free code. ## component - [A component for showing code snippets in a Docusaurus blog](https://www.avonture.be/blog/docusaurus-snippets) — Learn how to build a custom React component to embed dynamic code snippets in your Docusaurus blog for a more interactive reader experience. - [A Docusaurus component that alerts readers the article is over a year old](https://www.avonture.be/blog/docusaurus-old-notice) — Displays a warning banner when the page content is over a year old - [Add a "Copy as Markdown" Button to Your Docusaurus Blog](https://www.avonture.be/blog/docusaurus-copy-as-markdown) — Build a "Copy as Markdown" button and a "View raw" link for your Docusaurus blog posts — a build-time plugin that writes a plain-Markdown mirror next to every article, plus the tiny React component that fetches it and copies it to the clipboard. Full source included. - [Adding Reader Reactions to Your Docusaurus Blog](https://www.avonture.be/blog/docusaurus-reactions) — Build a fully working "Was this article helpful?" widget for your Docusaurus blog. Step-by-step guide covering the PHP backend, React component, CSS module, Docusaurus swizzle, and an admin dashboard — everything you need to reproduce it from scratch. - [AI-Powered Code Tooltips in Docusaurus — Explain Like I'm Five](https://www.avonture.be/blog/docusaurus-eli5-snippet-tooltips) — Add hover tooltips to tricky code lines in your Docusaurus blog — powered by Claude, generated at build time, zero browser latency. Covers the remark plugin, the React renderer, and the CLI script. - [Automating TL;DR Summaries with Gemini AI](https://www.avonture.be/blog/gemini-tldr) — Improve your reader's experience by automatically generating concise TL;DR summaries for your blog posts using Google's Gemini AI and Python. - [Bring Your CLI Tutorials to Life with a Typewriter Terminal](https://www.avonture.be/blog/docusaurus-terminal-typewriter) — Add a typewriter animation to your Docusaurus Terminal component — command lines typed character-by-character, output lines appearing in sequence, with a blinking cursor and a click-to-skip escape hatch. Three new props, zero breaking changes. - [Change how Docusaurus will create img tags](https://www.avonture.be/blog/docusaurus-override-img) — Customize the way Docusaurus generates tags to better control image rendering and behavior. - [Creating a search&replace plugin for Docusaurus](https://www.avonture.be/blog/docusaurus-plugin-replace) — Automatically replace “markdown” with “Markdown” across all your content to keep your posts consistent. - [Display Docusaurus Blog Posts as Cards - A Step-by-Step Guide](https://www.avonture.be/blog/docusaurus-cards) — Learn how to visually showcase your Docusaurus blog posts using customizable card layouts. - [Displaying related posts below our Docusaurus article](https://www.avonture.be/blog/docusaurus-relatedposts) — Enhance your Docusaurus blog by showing related posts beneath each article for better content discovery. - [Drawing a Map of My Own Blog](https://www.avonture.be/blog/docusaurus-blog-map) — Build an interactive map of your whole Docusaurus corpus — every article as a bubble wearing the site's mascot, sized by how many other posts link to it, positioned by a force-directed layout that runs at build time in Node so the browser never ships d3-force. Includes the plugin, the canvas component, and the plain-list fallback that keeps the page usable with JavaScript disabled. - [Introducing the ProjectSetup Component - A Standardized Way to Share Project Structures](https://www.avonture.be/blog/docusaurus-project-setup) — Learn how to use the new ProjectSetup component to easily share project structures in your Docusaurus blog posts, complete with interactive file snippets and automated setup scripts. - [Let Readers Flag Issues — A Multi-Type Feedback Widget for Docusaurus](https://www.avonture.be/blog/docusaurus-typo-report-component) — Build a secure, SSR-safe reader-feedback widget for your Docusaurus blog — text selection, 4 feedback types, PHP API with HMAC nonce, rate limiting, deduplication, admin dashboard, and email notifications. - [Organize Your Docusaurus Content with a Custom Series Component](https://www.avonture.be/blog/docusaurus-series) — Learn how to group related Docusaurus blog posts into a seamless reading experience using a custom Series component. - [Overrides the generation of img tags with Docusaurus](https://www.avonture.be/blog/docusaurus-lazy-loading) — Learn how to customize the rendering of tags in Docusaurus for enhanced control over image output. - [Providing a go to the top button in Docusaurus posts](https://www.avonture.be/blog/docusaurus-go-top) — Learn how to easily add a "go to the top" button, often with a fun animated icon, to your Docusaurus blog posts using a custom React component and theme override. - [The Third Door: A Floating Chat Bubble, and the Feature Nobody Could Find](https://www.avonture.be/blog/docusaurus-ask-my-blog-bubble) — A feature your visitors cannot find does not exist. This article adds a floating "Ask my blog" bubble to a Docusaurus site — a third entry point into the same question index, and the first one that needs no prior knowledge. Includes the overlay mutual-exclusion trick that keeps two independent floating dialogs from ever opening at once. ## customization - [Customize your Linux prompt with Powerlevel10k](https://www.avonture.be/blog/powerlevel10k_sandbox) — Test and customize the Powerlevel10k Zsh theme for your Linux or WSL prompt in a safe Docker sandbox environment before committing to a full installation. - [Let's revisit the ls command thanks to eza](https://www.avonture.be/blog/linux-eza) — Tired of typing ls -alh? Discover eza, the modern, feature-rich replacement for the basic Linux ls command. Learn how to install it and set up a powerful new alias for a better command-line experience. ## database - [Discovering Pentaho, an ETL program](https://www.avonture.be/blog/pentaho-discovery) — Discover Pentaho Data Integration (ETL). Follow this step-by-step guide to install Pentaho (PDI/Kettle) on Linux and load data from an Excel file into a PostgreSQL database using Docker. - [Drawdb-app - Render your database model as png, markdown, mermaid, ...](https://www.avonture.be/blog/drawdb-app) — Easily visualize and document your database model with DrawDB-app. Import SQL files, generate diagrams, and export to PNG, Markdown, Mermaid, and more. - [DuckDB - Query JSON and CSV Files With SQL, No Database Required](https://www.avonture.be/blog/duckdb-json-csv) — Run real SQL — joins, window functions, GROUP BY — directly against JSON and CSV files, no import step, no server, no schema to define. Dockerized, with a duckdb shell function that works from any folder. The tool I reach for once awk or jq stop being enough. - [Play with Microsoft SQL Server 2022 using Docker](https://www.avonture.be/blog/docker-mssql-server) — Easily run MSSQL Server 2022 using Docker. This step-by-step guide shows you how to install the container, connect with SSMS, and start querying your database. - [Using Adminer, pgadmin or phpmyadmin to access your Docker database container](https://www.avonture.be/blog/docker-adminer-pgadmin-phpmyadmin) — Use Adminer, pgadmin, or phpmyadmin to access your Docker database container. Get the simple command-line instructions for MySQL, MariaDB, and PostgreSQL. ## devcontainer - [Devcontainer - Name Your Container and Group It in Docker Desktop](https://www.avonture.be/blog/devcontainer-container-name) — Stop getting random container names like serene_ganguly from VS Code devcontainers; use runArgs to force a name and group containers in Docker Desktop. - [Make your Quarto project Devcontainer-Ready — No More Setup Headaches](https://www.avonture.be/blog/quarto-devcontainer) — Convert any Quarto project into a fully portable, VSCode-powered devcontainer in minutes. - [Open a DevContainer on a Remote Server with VSCode Remote SSH and ProxyJump](https://www.avonture.be/blog/vscode-remote-ssh-proxyjump-devcontainer) — Chain VSCode Remote SSH, ProxyJump and Dev Containers to open a devcontainer that runs directly on a remote Linux server — so your scripts can reach services that are only accessible from that server's network. ## doc-as-code - [Build a mind map using Docker and Markdown](https://www.avonture.be/blog/docker-mindmap) — Learn how to easily create a dynamic mind map using Markmap, Docker, and Markdown. Convert plain text into a beautiful, interactive HTML mind map. - [Docker - Diagrams as code](https://www.avonture.be/blog/docker-diagram-as-code) — Generate stunning infrastructure and application diagrams directly from Python code using the diagrams library and a simple Docker command. Visualize your complex systems as code effortlessly. - [Documentation as Code - Transform Your Infrastructure into Beautiful Diagrams with Python and Mermaid](https://www.avonture.be/blog/docker-python-mermaid) — Automate your Documentation as Code by building a Dockerized Python and Mermaid CLI stack to generate dynamic architecture diagrams directly from your codebase. - [Getting a more attractive mindmap with Markmap and Quarto](https://www.avonture.be/blog/vscode-docker-markmap) — Generate attractive mindmaps from Markdown using Markmap and customize them in VSCode. Render the final, beautiful HTML result with Quarto and Docker. - [How to generate a graph from compose.yaml](https://www.avonture.be/blog/docker-compose-viz) — Instantly visualize your Docker Compose architecture. Use `compose-viz` to generate a clear graph of services, dependencies, and exposed ports from your `compose.yaml` file. - [Quarto - How I Built a Self-Documenting Ecosystem for 50+ Projects](https://www.avonture.be/blog/quarto-industrialisation) — A deep dive into how I engineered a fully automated documentation ecosystem using Quarto and Docker, transforming documentation from a chore into a high-performance build pipeline. - [Rendering a JSON file as a mind map](https://www.avonture.be/blog/json-crack) — Transform complex JSON data into clear, interactive mind maps with JSON Crack. Discover how this powerful tool simplifies data visualization and enhances data understanding. ## docker - [Docker - Explain me like I'm five - What's Docker for?](https://www.avonture.be/blog/docker-definition-like-im-five) — What is Docker? We use a simple recipe analogy to give you an easy-to-understand, 'explain like I'm five' definition of Docker images and containers. - [Docker - How to group containers together](https://www.avonture.be/blog/docker-name-property) — Learn how to organize Docker containers into logical groups using compose.yaml for a cleaner workflow. - [Docker - Install and use Git in a container just like you do on your host](https://www.avonture.be/blog/docker-git) — Improve your dev workflow! Learn to install and set up Git inside your Docker container by sharing your host's configuration and SSH key, allowing you to run all Git commands without exiting the container. - [Docker - Run Graphical User Interfaces - Firefox, Chrome & GIMP](https://www.avonture.be/blog/docker-run-linux-gui) — Unlock the power of Docker! A step-by-step guide to running Linux Graphical User Interfaces (GUIs) like Firefox, Chrome, and GIMP in Docker containers. - [Docker - Running some GUI interfaces in the browser](https://www.avonture.be/blog/docker-gui-in-browser) — Easily run Linux GUI applications like Firefox and GIMP in a Docker container and access them directly through your web browser with these simple commands. - [Docker Dive — X-Ray Your Images and Kill the Waste](https://www.avonture.be/blog/docker-dive) — Use dive to inspect every layer of a Docker image, spot wasted megabytes hidden by deleted files, and walk step by step from a 1 GB bloated image down to a tight, efficient build. - [Docker inspect - Retrieve network's information](https://www.avonture.be/blog/docker-inspect) — Use docker inspect to quickly retrieve detailed configuration and network information for your Docker containers in JSON format. Get a power tip with jq. - [Docker-out-of-Docker aka DooD](https://www.avonture.be/blog/docker-out-of-docker-dood) — Master Docker-out-of-Docker (DooD) to run Docker commands inside a container. A practical guide covering setup for root and secure unprivileged users via Docker socket mounting. - [lazydocker: A Terminal Dashboard for Docker, Containerized](https://www.avonture.be/blog/lazydocker) — lazydocker is a single-binary terminal UI that shows every container, image, volume and network at a glance, with live stats and logs. This article containerizes it — no host install — and adds a `lazydocker` shell function, for zsh or bash, so it picks up whatever project's compose.yaml you're currently standing in. - [One Docker Image for Production and Devcontainers - The Clean Way](https://www.avonture.be/blog/docker-prod-devcontainer) — Learn how to design a Docker setup that delivers a secure, minimal production image while enabling effortless local development through VS Code Devcontainers with clean overrides and environment isolation - [Play with Docker and Assembly programming language](https://www.avonture.be/blog/docker-assembly) — Learn how to combine modern Docker technology with the classic x86 Assembly programming language. This guide provides a step-by-step "Hello, World!" example for both MS-DOS and Linux environments. - [Play with Docker and Java](https://www.avonture.be/blog/docker-java) — Learn how to compile and run Java applications using Docker. Set up a Java development environment quickly without local installation, perfect for developers new to Java and Docker. - [Play with Docker and Pascal](https://www.avonture.be/blog/docker-pascal) — Can you run 30-year-old Pascal code today? Yes! This guide shows you how to use Docker and the Free Pascal Compiler (FPC) to compile and execute your legacy Turbo Pascal programs. - [Quickly install WordPress in just three commands](https://www.avonture.be/blog/docker-wordpress) — Install a complete WordPress site with Docker in just three simple commands. Learn how to set up the network, database (MySQL/MariaDB), and WordPress container quickly and easily. - [Running an HTML site in seconds using Docker](https://www.avonture.be/blog/docker-html-site) — Run any static HTML website in seconds with just ONE Docker command. Skip the headache of installing and configuring Apache or Nginx for a quick local setup. - [Self-hosted monitoring tool](https://www.avonture.be/blog/docker_uptime_kuma) — Learn how to easily set up Uptime Kuma, a free, self-hosted website monitoring tool, using a simple Docker command. Keep track of your sites' uptime, ensure data persistence, and configure notifications. - [Share data between your running Docker container and your computer](https://www.avonture.be/blog/docker-volume) — Unlock data persistence in Docker! Learn how to use volumes (-v) to effectively share and manage files between your host machine and running containers. - [Troubleshooting for Docker containers - Accessing the other one](https://www.avonture.be/blog/docker-networking-troubleshooting) — Troubleshoot Docker container networking - test ports, DNS, and fix proxy issues so one container can reliably call another API on the same network. - [Understanding the depends_on condition in Docker compose files](https://www.avonture.be/blog/docker-health-condition) — Prevent startup errors in your multi-service applications. Learn to use the healthcheck property and depends_on condition service_healthy in Docker Compose to ensure your application waits for the database to be fully ready before starting. - [Update php.ini when using a Docker image](https://www.avonture.be/blog/docker-php-ini) — A step-by-step guide on how to update your php.ini file inside a Docker container using a compose.yaml volume mount. Solve common issues like maximum file upload size. - [Using Docker init to quickly dockerize your PHP application](https://www.avonture.be/blog/docker-init-php-apache) — Quickly dockerize your PHP application with Apache using the docker init command. This wizard-based tool generates the necessary Docker files and shows secure database integration. - [Using Docker network and the extra_hosts property](https://www.avonture.be/blog/docker-network-and-extra-hosts) — Resolve host aliases inside Docker containers! Learn to use docker network and the extra_hosts property in docker compose to seamlessly connect your services. - [Using volumes with Docker, use cases](https://www.avonture.be/blog/docker-volumes) — Master Docker volumes to stop losing data! Explore Docker-managed volumes, mounted volumes, and real-world use cases for container data persistence. ## docusaurus - [Best Practice - Customizing the Docusaurus RSS Feed for Full Content & Images](https://www.avonture.be/blog/blog-post-feed) — Upgrade your Docusaurus blog's RSS file. Write a plugin to disable the basic feed and include full article content, images and enhanced metadata for better readers. - [Encapsulate an entire Docusaurus site in a Docker image](https://www.avonture.be/blog/docker-docusaurus-prod) — Deploy your Docusaurus documentation site in production with Docker. Follow this step-by-step guide on creating a highly efficient, multi-stage Docker image. - [Getting the number of published posts](https://www.avonture.be/blog/docusaurus-number-of-posts) — Learn the quick and easy way to display the total number of published blog posts on your Docusaurus site using custom components and theme API. - [How to indicate AI-assisted content in a Docusaurus blog](https://www.avonture.be/blog/docusaurus-ai-gemini) — A step-by-step guide to show when a blog post has been written with the help of an AI like Google Gemini, by adding an icon and an author. - [Inject ASCII Art in any HTML pages rendered by Docusaurus](https://www.avonture.be/blog/docusaurus-ascii-art) — Inject an ASCII-art banner into every generated Docusaurus HTML page using a lightweight postBuild plugin. Appears in page source or can be rendered visibly. - [Meerkat Mischief: Sprinkling Easter Eggs Across my Blog](https://www.avonture.be/blog/docusaurus-easter-eggs) — A tour of eight small, discoverable easter eggs added to this Docusaurus blog — a hidden ASCII-art meerkat in the page source, a Konami-code sprite run, a console.log wink, a tab-away favicon swap, rotating 404 messages, a hidden sitemap comment and more — plus the real bugs (key-repeat, an AZERTY keyboard mismatch, a wrong emoji, a postBuild race condition, a blurry favicon) caught along the way. - [Running Docusaurus using Docker](https://www.avonture.be/blog/running-docusaurus-with-docker) — Streamline Docusaurus blog development! Build a single Docker image for production and use VS Code Dev Containers for consistent, fast, and isolated editing. - [Running Docusaurus with Docker](https://www.avonture.be/blog/docusaurus-docker) — Run Docusaurus with Docker! Follow this easy tutorial to create your Docusaurus Docker image, use docker compose, and get your documentation or blog running fast. - [Running some checks on your Docusaurus images](https://www.avonture.be/blog/docusaurus-check-images) — A Python script to verify lazy loading and size of images in your Docusaurus site using Playwright and BeautifulSoup. - [Running your own blog with Docusaurus and Docker](https://www.avonture.be/blog/docusaurus-docker-own-blog) — Take full control of your self-hosted Docusaurus blog running in a Docker container. A step-by-step guide to site customization, volume mounting, and managing content. - [Shake Your Phone, Startle the Meerkat](https://www.avonture.be/blog/docusaurus-shake-easter-egg) — A ninth easter egg for this blog, built for readers on a phone: shake it — in Chrome or in the installed PWA — and the meerkat mascot takes over the full screen, startled, for about two seconds. Covers the devicemotion 'jerk' math behind shake detection, the three-phase overlay animation, how to test it from a desktop DevTools console with no accelerometer at all, and a real bug caught along the way — an AI image generator that drew a transparent-background placeholder as literal opaque pixels instead of real alpha. - [Showing the changelog of your post](https://www.avonture.be/blog/docusaurus-changelog) — Showing the changelog of your post - [Site creation](https://www.avonture.be/blog/site-creation) — Follow the steps taken to create this Docusaurus blog. Learn about using essential plugins like search, sitemap, image zoom, and adding the Giscus comment system. - [Some tips and tricks when written articles for Docusaurus](https://www.avonture.be/blog/docusaurus-articles-tips) — Boost your Docusaurus articles with essential tips and tricks. Learn how to add Admonitions, apply inline styling, and highlight code lines easily. - [Tags management in Docusaurus](https://www.avonture.be/blog/docusaurus-tags) — Automate Docusaurus tag management with this Python script. Clean up duplicates, fix casing, and merge tags safely across hundreds of Markdown files via Docker. - [Welcome](https://www.avonture.be/blog/welcome) — Built with Docusaurus, this is the welcome post for Christophe Avonture's blog. Find a collection of personal notes on Markdown, Docker, PHP development, and devOps. - [Your Blog Is Unreadable to an AI. Here Is the Fix.](https://www.avonture.be/blog/docusaurus-llms-txt) — A growing share of your readers arrive through an AI assistant — and what they get is your HTML, wrapped in navigation, React widgets and collapsed accordions. This article generates a plain-Markdown mirror of every article, a /llms.txt index, and per-series full-text bundles, by degrading the MDX source rather than converting the rendered HTML. Includes the fallback rule that makes the export impossible to break. ## excel - [Excel Formula Beautifier](https://www.avonture.be/blog/excel-formatter) — Make your complex Excel formulas easy to read! Use the Excel Formula Beautifier to instantly format and clarify your spreadsheet formulas for better understanding. - [Markdown - Convert Excel ranges to Markdown tables](https://www.avonture.be/blog/markdown-xls2md) — Easily convert Excel ranges into clean Markdown tables with the XLS2MD online tool. Just copy your cells and paste to generate the code and a live HTML preview. - [MS Excel - Connect to a SQL Server database, run a query and get the results](https://www.avonture.be/blog/vba-excel-sql-server) — Connect MS Excel to SQL Server with VBA. Run SQL queries, inject results directly into your spreadsheet, and preserve formatting. Learn the best method for data refresh or secure sharing. - [MS Excel - Connect to a SQL Server database, run a query and get the results - Step by step](https://www.avonture.be/blog/vba-excel-sql-server-part-2) — Connect MS Excel VBA to SQL Server with this step-by-step tutorial. Learn to run SQL queries, retrieve data, and output results into your spreadsheet. Docker setup included. - [MS Excel - Get the list of references used in your modules](https://www.avonture.be/blog/vba-excel-list-references) — VBA developer? Stop manually checking references! Use this VBS script to automatically retrieve a list of all VBA references in multiple Excel .xlsm or .xlam files. - [MS Excel - How to call a SOAP web service](https://www.avonture.be/blog/vba-excel-call-soap-webservice) — Master calling SOAP web services from MS Excel using VBA. Get the code and a step-by-step tutorial to validate VAT numbers with the VIES service. - [MS Office - How to create a ribbon in Excel](https://www.avonture.be/blog/vba-excel-ribbon) — Step-by-step guide on creating a custom VBA Excel Ribbon. Use XML and VBA to add your own tabs, groups, buttons, and powerful features to your Excel workbooks. - [MS Office - Load dropdown from Excel's range](https://www.avonture.be/blog/vba-excel-ribbon-load) — Load an Excel range into your custom VBA Ribbon dropdown control. This step-by-step tutorial covers the VBA code, Custom UI XML, and named ranges needed for a dynamic solution. ## fzf - [Beyond the Monolith - Organizing Your ZSH Workflow Like a Pro](https://www.avonture.be/blog/modular-zsh-workflow) — Stop bloating your shell configuration. Learn why moving ZSH functions to standalone files improves performance and maintainability, featuring a universal project navigator. - [FZF + ripgrep: Interactive Code Search with Live Preview](https://www.avonture.be/blog/fzf-ripgrep) — Combine ripgrep and fzf with a bat syntax-highlighted preview panel to build an interactive code search — then open the result directly in VSCode at the exact matching line. ## git - [delta: a Syntax-Highlighted Pager for git diff](https://www.avonture.be/blog/git-delta) — Stop squinting at raw git diff outputs. Learn how to install and configure Delta to add syntax highlighting and side-by-side views in under 5 minutes. - [Git - Some tips for your .gitconfig file](https://www.avonture.be/blog/git-config) — Customize your Git workflow with essential ~/.gitconfig file tips. Learn to create a git undo alias, manage remote branches, handle credentials, and enforce SSH. - [git worktree: Work on Two Branches at the Same Time](https://www.avonture.be/blog/git-worktree) — git worktree lets you check out multiple branches as real directories simultaneously — no stashing, no context loss. Keep your Docker stack running while handling hotfixes in parallel. - [Showing the last 3 updated branches when you jump in a git repo](https://www.avonture.be/blog/git-branches-gst) — Learn how to configure ZSH to automatically display your most recently updated Git branches whenever you enter a repository or check its status. ## github - [Automate your GitHub README with your latest blog posts](https://www.avonture.be/blog/github-profile-last-blogposts) — Keep your GitHub profile README up to date with your latest blog posts using GitHub Actions. Learn how to set up a scheduled workflow that fetches your RSS feed and updates your README automatically every week. - [GitHub - Connect your account using SSH and start to work with git@ protocol](https://www.avonture.be/blog/github-connect-using-ssh) — Secure your GitHub connection! Follow this easy, step-by-step guide to set up SSH keys and use the git@ protocol for safer and quicker Git operations. - [GitHub - How to find email addresses for most users](https://www.avonture.be/blog/github-retrieve-email) — Quickly find a GitHub user's email address. Learn three effective methods using a web tool, the public API, or by inspecting a commit with the .patch trick. - [GitHub - Use Actions to deploy this blog](https://www.avonture.be/blog/github-action) — Stop manual FTP deployments! Learn how to automate your blog's deployment with GitHub Actions. This step-by-step guide shows you how to set up the workflow and use repository secrets for automatic updates on every push. - [VBS - Auto update script](https://www.avonture.be/blog/vbs-auto-update) — Automate updates for your VBS (Visual Basic Script) console scripts! Learn how to create a self-updating VBS file that connects to GitHub, checks for new versions, and overwrites itself. ## gitlab - [GitLab - Running Docker-out-of-Docker in your CI](https://www.avonture.be/blog/gitlab-docker-out-of-docker) — Learn how to set up Docker-out-of-Docker (DooD) in your GitLab CI/CD pipeline. This guide covers configuring your GitLab Runner to share the host's Docker socket and project files, allowing containers to run `docker run` commands. - [GitLab - Using an SSH key to connect to private repo](https://www.avonture.be/blog/gitlab-runner-ssh-key) — Step-by-step guide on configuring a GitLab CI/CD runner to securely use a private SSH key for accessing and cloning private repositories. - [GitLab - Using Docker private images](https://www.avonture.be/blog/gitlab-using-private-images) — Use a private Docker image from Docker Hub in your GitLab CI/CD pipeline. Learn to create a read-only token and set up the necessary GitLab CI/CD variables for authentication. ## joomla - [Create your Joomla website using Docker - Part 1](https://www.avonture.be/blog/docker-joomla) — Learn how to quickly set up your Joomla website locally using Docker. This step-by-step guide covers Docker Compose, database configuration (MySQL/MariaDB), and running your services. - [Create your Joomla website using Docker - Part 2](https://www.avonture.be/blog/docker-joomla-part-2) — Create your persistent Joomla website with Docker in one command. This Part 2 guide focuses on advanced automation using compose.yaml and makefile. - [FrankenPHP, a modern application server for PHP](https://www.avonture.be/blog/frankenphp-docker-joomla) — Learn how to set up a Joomla website using Docker and FrankenPHP, a modern PHP server that's up to 3.5x faster than PHP-FPM. Includes a simple compose.yaml setup. - [Joomla - delete tables from your database according to a certain prefix](https://www.avonture.be/blog/joomla-db-kill-tables-prefix) — Clean up your Joomla database by easily deleting unwanted tables using a specific prefix. Follow this step-by-step guide to use a simple PHP utility safely. - [Joomla - Run a SQL statement outside Joomla and display a nice HTML table](https://www.avonture.be/blog/joomla-show-table) — Easily export live Joomla data to Microsoft Excel. Learn to run a custom SQL query outside of Joomla and display the results in a refreshable HTML table for spreadsheet linking. - [Restore a Joomla backup using Docker](https://www.avonture.be/blog/docker-joomla-restore-jpa) — Easily restore your Joomla website backup locally using Docker, Docker Compose, and Akeeba Kickstart. A simple make import command is all it takes. - [Start Joomla with Docker in just a few clicks](https://www.avonture.be/blog/docker-joomla-right-to-the-point) — Start your Joomla website with Docker in just a few clicks! Follow this quick, right-to-the-point guide to launch your Joomla project instantly using a simple Docker Compose setup. ## laravel - [Laravel Filament](https://www.avonture.be/blog/laravel-filament) — Discover Laravel Filament, a collection of beautiful full-stack components for building administration interfaces with the TALL stack. A free alternative to Laravel Nova. - [Laravel Telescope](https://www.avonture.be/blog/laravel-telescope) — Laravel Telescope is your ultimate debugging assistant, offering realtime insights into your application's queries, exceptions, cache, and logs. Understand and fix issues faster. - [Working with Laravel events](https://www.avonture.be/blog/laravel_events) — Explore the power of Laravel events for clean, decoupled code. This guide provides a practical, step-by-step example of creating and dispatching an event with a listener. ## linux - [Batch edit of environment file](https://www.avonture.be/blog/update-env-files-cli) — Stop manually editing .env files! Learn how to use a simple Linux function to batch update environment variables safely for consistent deployment across all your servers. - [CaesiumCLT – Effortlessly compress your images right on your device](https://www.avonture.be/blog/reduce-image-size) — Fast and efficient lossy/lossless image compression tool - [Compare environment files in the Linux console](https://www.avonture.be/blog/compare-env-files-cli) — Struggling to sync your .env and .env.example files? Learn a powerful Linux CLI command using diff, grep, and sort to accurately compare environment variables and skip comments. - [Discovering Zorin](https://www.avonture.be/blog/zorin) — Trying a new OS? Zorin OS 18 is a Linux distribution based on Ubuntu, perfect for switching from Windows. Easy install, familiar interface, and great compatibility! - [FTP - Remove files and folders at light speed](https://www.avonture.be/blog/ftp-erase-files) — Stop the slow process of deleting files via FTP! Learn how to remove entire websites and folders at lightning speed using a simple, self-deleting PHP script—even without SSH access. - [hyperfine — Stop Guessing Which Command Is Faster, Measure It](https://www.avonture.be/blog/hyperfine) — hyperfine is a command-line benchmarking tool written in Rust. It runs your commands many times, supports warmup runs, computes statistics on time and memory, and tells you definitively which one is faster — with export to Markdown, CSV or JSON. - [Introduction to fzf - Fuzzy Finder](https://www.avonture.be/blog/linux-fzf-introduction) — Master the Linux command line with fzf (Fuzzy Finder). Discover its powerful fuzzy search for history (CTRL+R) and file selection (CTRL+T) to boost your productivity. - [JSON - Faker & Mockup](https://www.avonture.be/blog/json-faker) — Generate and validate JSON data using Python's Faker library and Mockaroo. Learn to create fake data for testing and ensure file quality with schemas. - [JSON - Online linter](https://www.avonture.be/blog/json-lint) — Find a quick and easy online JSON linter tool. Paste your JSON string to display it as a clear, readable tree-view with code folding features. - [Linux - Compare two versions of the same script](https://www.avonture.be/blog/linux-compare-two-versions-of-the-same-script) — Use a simple Linux command-line trick with diff, grep, and awk to compare two versions of the same Bash script. Quickly identify missing or new functions across file versions or entire folders. - [Linux - Comparing two folders/files in the console](https://www.avonture.be/blog/linux-diff-file-folder) — Efficiently compare two files or entire folders in Linux using the diff command. Get advanced bash scripts for industrial-level comparison. - [Linux - Working with the history of your last fired actions](https://www.avonture.be/blog/linux-history) — Master your Linux command line history. Learn how to view, locate (.bash_history, .zsh_history), and manage your previously executed commands with essential tips. - [Master your ssh command and select the host from a list](https://www.avonture.be/blog/ssh-with-fuzzy-finder) — Build an interactive, searchable SSH host selector using FZF. Learn to modularize your SSH configurations, add rich documentation, and trigger advanced custom actions via a fast Terminal User Interface. - [Search and replace (or add) using sed](https://www.avonture.be/blog/linux-sed-tips) — Master Linux sed for dynamic file editing. Learn how to search and replace an existing variable or seamlessly add a new line if the variable is not found in your configuration file. - [Start lubuntu Desktop in Docker](https://www.avonture.be/blog/docker-lubuntu) — Learn how to run the Lubuntu Desktop GUI in a Docker container on Windows using an X Server. A perfect, disposable environment for Linux learning and experimenting. - [The jq utility for Linux](https://www.avonture.be/blog/linux-jq) — Use the powerful Linux jq utility to manipulate JSON data, prettify output, and filter nodes directly from your command line and shell scripts. - [The xmlstarlet utility for Linux](https://www.avonture.be/blog/linux-xmlstarlet) — Master XML data manipulation on the Linux command line with xmlstarlet. This guide shows you how to beautify XML output and filter nodes using XPath expressions - [Ubuntu - Install from scratch](https://www.avonture.be/blog/ubuntu-install) — Install Ubuntu Desktop 24.04 from scratch with this easy, step-by-step guide. Learn how to turn off Bitlocker, create a bootable USB, and solve the NVIDIA driver installation bug. - [yq — The YAML Processor You Already Know How to Use](https://www.avonture.be/blog/linux-yq) — yq is to YAML what jq is to JSON. Query and edit your Docker Compose files, CI configs, and any YAML document from the command line — no installation required beyond Docker. ## makefile - [Linux Makefile - Adding a help screen](https://www.avonture.be/blog/makefile-help) — Implement a beautiful and clear help screen in your Linux Makefile. A simple guide to automatically list all targets, descriptions, and create grouped sections. - [Linux Makefile - When to use a makefile](https://www.avonture.be/blog/makefile-using-make) — Stop memorizing complex Docker commands. Learn when and how to use a Linux makefile with GNU make to automate your project setup, logging, and environment management. - [Makefile - Tutorial and Tips & Tricks](https://www.avonture.be/blog/makefile_tips) — Essential Makefile tips and tricks for automation. Learn to check file existence, run dependent targets, use conditional logic, suppress errors, and integrate with Docker in your scripts. ## markdown - [Docling - Convert PDF, Word, PowerPoint, Excel and HTML to Markdown, GPU-Accelerated](https://www.avonture.be/blog/docling) — A Docker batteries-included setup for Docling, IBM's document-conversion library: PDF, Word, PowerPoint, Excel and HTML files converted into clean Markdown, with GPU acceleration for machines with spare VRAM. A companion to my Markitdown article — same idea, a heavier engine underneath. - [Markdown - Convert CSV to Markdown tables](https://www.avonture.be/blog/markdown-csv2md) — Quickly convert CSV content into clean, formatted Markdown tables using the CSV2MD tool. Learn how to use this efficient converter, including options for delimiters and transposing tables. - [Markitdown - Convert files and MS Office documents to Markdown](https://www.avonture.be/blog/markitdown) — Easily convert MS Office documents (Word, Excel) and PDFs into Markdown format with Microsoft's Markitdown tool. Includes step-by-step instructions for installation via Docker. ## msaccess - [Export MS Access objects](https://www.avonture.be/blog/vba-access-export) — Easily version control your MS Access database! Export all VBA code, forms, modules, queries, and reports to flat files using a simple VBS script for GitHub integration. - [How to optimize an existing MS Access database](https://www.avonture.be/blog/msaccess-optimize) — Speed up your slow Microsoft Access database with this step-by-step optimization guide. Learn to improve table structure, use indexes, optimize queries, and compact your database for better performance. - [VBS - Retrieve the list of fields in a MS Access Database](https://www.avonture.be/blog/vbs-msaccess-get-fields) — Use a VBScript to easily retrieve a detailed list of fields from your MS Access database. Analyze field size, type, and actual value length to optimize your database structure. ## oracle - [Accessing an Oracle database using .Net, NodeJS, PHP and Python](https://www.avonture.be/blog/oracle-dotnet-nodejs-php-python) — Step-by-step guide to accessing an Oracle database container with .Net, Node.js, PHP, and Python. Includes Dockerfile and full code samples for each language. (154 characters) - [Running Oracle Database Server as a Docker container](https://www.avonture.be/blog/docker-oracle-database-server) — Learn how to run Oracle Database Server inside a Docker container. This step-by-step guide covers image setup, license acceptance, token generation, and database access. - [Transform an Oracle DB as OpenData using Oracle REST Data Services](https://www.avonture.be/blog/docker-oracle-ords) — Set up Oracle REST Data Services (ORDS) in Docker to transform your Oracle DB into OpenData with a powerful REST API. Includes filtering and pagination. ## php - [Docker init now supports PHP](https://www.avonture.be/blog/docker-init) — Containerize your PHP application fast! This guide shows you how to use the new Docker init feature with PHP and Apache, including a walk-through of the generated Dockerfile and compose.yaml files. - [Generating documentation for a PHP codebase](https://www.avonture.be/blog/docker-phpdocumentor) — Generate high-quality documentation for your PHP codebase effortlessly. This guide shows you how to use the phpDocumentor Docker image to create documentation with a single command. - [Install a PHP Docker environment in a matter of seconds](https://www.avonture.be/blog/php-devcontainer) — Quickly set up a PHP Docker Dev Container environment for VSCode. Get Composer and pre-installed static analysis tools like PHP-CS-Fixer and Rector instantly. - [Install Docker and play with PHP](https://www.avonture.be/blog/install-docker) — Install Docker and run PHP with Apache instantly using containers. Learn to easily switch between PHP versions (like 7.4 and 8.1) without painful local conflicts. - [Obfuscate your PHP code](https://www.avonture.be/blog/php-obfuscator) — Protect your PHP code with obfuscation. Discover how the php_obfuscator script works and if AI tools like Copilot can still de-obfuscate your proprietary source code. - [PHP code refactoring in VSCode](https://www.avonture.be/blog/vscode-php-refactoring) — Master PHP code refactoring in VSCode with this guide. Use the free PHP Refactor Tool extension to safely rename symbols, classes, and extract new methods. - [PHP development in a devcontainer with preinstalled code quality tools](https://www.avonture.be/blog/vscode-devcontainer) — Stop fighting code quality issues. Set up a consistent PHP development environment instantly! This step-by-step guide shows you how to configure a VSCode Devcontainer with preinstalled quality and analysis tools. - [Rector 1.0.0 🎉🎉🎉, my friend, my coach](https://www.avonture.be/blog/php-rector) — Meet PHP Rector, the free, powerful tool for automatic PHP codebase upgrades and refactoring. Instantly improve code quality and become a better PHP developer. - [The easiest way to run a PHP script / website](https://www.avonture.be/blog/docker-php-run-script-or-website) — The easiest way to run a standard PHP script or website instantly using Docker. Just one docker run command and your code is live for quick testing. ## python - [Docker - Easy setup of Python under Windows](https://www.avonture.be/blog/docker-python-devcontainer-windows) — Easily set up a Python development environment on Windows using Docker and VSCode devcontainers. Start coding instantly without installing Python locally. - [Docker - Even easier setup of Python](https://www.avonture.be/blog/docker-python-devcontainer-microsoft) — Streamline your Python development. This guide shows you how to use Docker and Microsoft Devcontainers for an incredibly easy and reproducible Python environment setup. - [Docker - Python devcontainer](https://www.avonture.be/blog/docker-python-devcontainer) — Learn how to quickly set up a VSCode devcontainer for Python development using Docker. Get the full Dockerfile, compose.yaml, and .docker.env configurations. - [Pandas - Merge two or more files and create a merged one](https://www.avonture.be/blog/python-pandas-merge) — Efficiently merge two or more CSV or Excel files in Python using the powerful Pandas library. Learn step-by-step how to handle mismatched records and consolidate data like employee salaries across multiple years into a single, clean DataFrame. - [Play with Docker and Python](https://www.avonture.be/blog/docker-python) — Forget complex Python setup. Learn how to quickly run your Python scripts using Docker containers, from "Hello World" to a Hangman game, and simplify your development. - [Python - Generate flows using pydot](https://www.avonture.be/blog/python-pydot) — Use Python and the pydot library to easily generate diagrams-as-code like ETL flowcharts, class diagrams, and decision trees. Includes Docker setup and code examples. ## quarto - [Level Up Your Presentations with Quarto, reveal.js, Decktape, Docker and DevContainers](https://www.avonture.be/blog/running-revealjs-with-docker) — Create reveal.js slideshow with Quarto, Decktape, Docker and DevContainers. Write your content in Markdown. Export as HTML and PDF (thanks to Decktape) - [My favorite Quarto extensions](https://www.avonture.be/blog/quarto-extensions) — My favorite Quarto extensions - Learn about essential Quarto filters for partial content templating, Font Awesome icons, including external code files, and simple search-replace macros to enhance your documentation workflow. - [Quarto Callout Blocks](https://www.avonture.be/blog/quarto-callout-blocks) — Discover the Quarto Callout Block syntax for creating attention-grabbing admonitions (Tips, Warnings, Cautions) in your reports. Includes a handy VSCode snippet. - [Quarto conditional display](https://www.avonture.be/blog/quarto-conditional-display) — Learn to use Quarto's conditional display features (content-visible, content-hidden) to control what content appears in different output formats (HTML, PDF, Word, slides) from a single Markdown file. - [Quarto includes short code](https://www.avonture.be/blog/quarto-includes-shortcode) — Learn how to use the Quarto includes short code to break down long documents into multiple, organized files, making your writing process easier. - [Quarto Inline style](https://www.avonture.be/blog/quarto-inline-style) — Quickly apply inline CSS styles in Quarto for HTML documents using the []{} syntax. Highlight text instantly without writing a full CSS class. - [Running Quarto Markdown in Docker](https://www.avonture.be/blog/docker-quarto) — Run Quarto Markdown in Docker for easy documentation and slideshow generation. Learn to build your own Docker image and render Markdown to PDF, HTML, and Reveal.js. - [Some tips and tricks for Quarto when rendering as a reveal.js slideshow](https://www.avonture.be/blog/quarto-revealjs-tips) — Elevate your Quarto presentations! Discover essential tips and tricks for rendering stunning reveal.js slideshows, including custom title slides, logo placement, CSS/JS customization, and advanced slide layouts. - [Use Quarto and create a PowerPoint slideshow](https://www.avonture.be/blog/quarto-powerpoint) — Discover how to convert your Markdown documentation into a PowerPoint (.pptx) slideshow or an online reveal.js presentation using Quarto. - [Using Mustache templating with Quarto](https://www.avonture.be/blog/quarto-mustache) — Master Mustache templating in Quarto! Discover how to use the quarto-partials extension to create structured, repetitive documentation pages for your static website project. - [Using variables from external file in your Quarto project](https://www.avonture.be/blog/quarto-project-variables) — Stop hardcoding! Learn how to easily manage and reuse variables in your Quarto documentation using external YAML files and environment variables. ## security - [aeSecure - QuickScan - Free viruses scanner](https://www.avonture.be/blog/aesecure-quickscan) — Quickly scan your Joomla website for viruses and suspicious files using the free aeSecure QuickScan tool. Originally created by Christophe Avonture, the project is now maintained by AFUJ (Association Francophone des Utilisateurs de Joomla). ## self-hosted - [Exterminate them all, fight spam directly at PlanetHoster - N0C](https://www.avonture.be/blog/planethoster-n0c-spam) — Automate your spam fight on PlanetHoster N0C! Discover how to generate and deploy custom Sieve rules using RoundCube and a script to efficiently block large amounts of unwanted emails. - [Exterminate them all, fight spam directly at your host company](https://www.avonture.be/blog/cpanel-spam) — Stop email spam at the source! Discover how to use cPanel's SpamAssassin to blacklist and whitelist domains, including an advanced method for directly editing the user_prefs file via FTP. - [Exterminate them all, kill spam using GitHub Actions](https://www.avonture.be/blog/planethoster-n0c-spam-roundcube-action) — Kill spam automatically! This guide shows how to leverage GitHub Actions, JSON, and a Bash script to generate and deploy Roundcube Sieve filters on your PlanetHoster N0C hosting environment, automating your blocklist management. - [Heimdall - Web dashboard](https://www.avonture.be/blog/heimdall-dashboard) — Tired of old browser bookmarks? Learn how to self-host and set up Heimdall, a beautiful web dashboard that gives you immediate, personalized access to all your favorite applications and links via Docker. - [How to self-host Matomo](https://www.avonture.be/blog/matomo-install) — Self-host Matomo for free and gain GDPR-compliant website analytics. This simple guide covers installation, database setup, and Docusaurus integration. - [Install LimeSurvey using Docker](https://www.avonture.be/blog/docker-limesurvey) — Learn to install LimeSurvey quickly and easily using Docker Compose. A complete guide on setup, data persistence with volumes, and running specific versions. - [karakeep - The Bookmark Everything App](https://www.avonture.be/blog/docker-karakeep) — Discover karakeep, the self-hosted bookmark, note-taking, and image manager. Follow this easy guide to install the "Bookmark Everything App" using Docker Compose. - [Self-hosted note-taking application](https://www.avonture.be/blog/docker-memos) — Deploy the memos self-hosted note-taking application quickly using Docker. Learn how to use its simple features - Markdown, checklists, tags, and image pasting. - [SQL - Formatting tool](https://www.avonture.be/blog/sql-formatter) — Easily clean up unreadable, legacy SQL code with a simple formatting tool. Make your SQL queries instantly readable and kickstart your code review process. ## ssh - [Docker secrets - Using your SSH key during the build process](https://www.avonture.be/blog/docker-use-ssh-during-build) — Securely access private Git repositories during your Docker build using SSH keys and Docker secrets. Includes complete Dockerfile and compose.yaml examples to prevent secrets from being stored in your final image. - [How to connect to your hosting server using SSH](https://www.avonture.be/blog/connect-using-ssh-to-your-hosting-server) — Learn how to connect to your hosting server using SSH with key-based authentication and a simple alias for easy access. - [SSH - Autosuggestions with ZSH](https://www.avonture.be/blog/zsh-plugin-ssh-config-suggestions) — Get instant SSH autosuggestions in ZSH. Learn to install the zsh-ssh-config-suggestions plugin and display all your ~/.ssh/config aliases with a simple TAB press. - [SSH - Launch a terminal on your session without having to authenticate yourself](https://www.avonture.be/blog/linux-ssh-scp) — Stop typing your SSH password! Learn how to use SSH keys and `ssh-copy-id` to launch a Linux terminal session instantly without having to authenticate yourself every time. - [SSH Config Generator: Wildcard Stanzas, Aliases, and Automated Logins](https://www.avonture.be/blog/ssh-config-tips) — Generate your SSH config in seconds — then understand how it works: one wildcard eliminates every repeated ProxyJump and IdentityFile, domain stanzas set usernames for FQDNs, short aliases need their own User line, and RemoteCommand lands you directly as the application user. - [SSH Remote development with VSCode](https://www.avonture.be/blog/vscode-remote-ssh) — Use VS Code Remote - SSH: connect to production servers, and edit/execute remotely while avoiding common pitfalls. - [Using sftp on the command line, with or without a proxy](https://www.avonture.be/blog/linux-sftp-cli) — Connect to SFTP servers using the Linux command line. Get tips on automation with sshpass, setting custom ports, and configuring proxy server access. ## ssl - [Docker - Configure your localhost to use SSL](https://www.avonture.be/blog/docker-localhost-ssl) — Configure your Docker localhost to use SSL (HTTPS) without browser warnings. This step-by-step guide uses mkcert to generate trusted certificates for Apache, Nginx, and PHP containers. - [Encrypt sensitive data using SSL and Docker](https://www.avonture.be/blog/docker_ssl_encrypt) — Securely encrypt and decrypt sensitive files using the OpenSSL image in Docker. Includes simple scripts for Linux and Windows to protect your secrets before storing them in Git or the cloud. ## tests - [Introduction to Behat](https://www.avonture.be/blog/behat-introduction) — Learn how to use Behat, the open-source Behavior-Driven Development (BDD) framework for PHP. This introduction covers writing powerful functional tests in plain language and setting up your first project. - [Introduction to Cypress](https://www.avonture.be/blog/cypress) — Get started with Cypress for functional testing. This comprehensive guide covers setup, running tests with Docker containers, synchronizing your test files, and capturing error screenshots. - [Linux - Bash scripts - Running unit tests with bats/bats](https://www.avonture.be/blog/bats-unit-tests) — Learn how to effectively unit test your Bash scripts on Linux using the powerful bats (Bash Automated Testing System) framework. See practical examples for assertions, output checks, and failures. - [Write PHP unit tests using Pest](https://www.avonture.be/blog/pest_tips) — Master PHP unit testing with Pest! Discover easy installation, the expressive expect syntax, datasets, snapshots, and powerful architectural testing features. - [Writing functional tests with Pest](https://www.avonture.be/blog/pest-functional-testing) — Discover how to write clean and expressive functional tests using the Pest PHP testing framework. ## uncategorized - [Happy New Year 2024](https://www.avonture.be/blog/new-year-2024) — Happy New Year 2024! Wish you success, curiosity, and new skills in Docker, Linux, Markdown, and PHP this year. ## vba - [VBS - Get list of files and generate a CSV](https://www.avonture.be/blog/vbs-files-csv) — Need a file list in CSV format? Use this VBScript to scan a folder, including sub-folders, and output file details like size, date, and owner for easy analysis. ## vscode - [Autosave feature in VSCode](https://www.avonture.be/blog/vscode-autosave) — Tired of forgetting to save files in VS Code? Learn how to easily enable the Autosave feature, set it to onFocusChange, and never lose unsaved changes again! - [CodeSnap addon for VSCode](https://www.avonture.be/blog/vscode-codesnap) — Easily take beautiful, shareable screenshots of your code snippets right inside VS Code with the CodeSnap extension. A simple, step-by-step guide. - [Do I need VSCode on my machine to use it?](https://www.avonture.be/blog/vscode-code-server) — Learn how to run VSCode in your browser using Docker and the `code-server` image. Edit code remotely without installing VSCode on your local machine. - [Error Lens addon for VSCode](https://www.avonture.be/blog/vscode-errorlens) — Never miss a warning again! The VSCode Error Lens addon shows errors, notices, and warnings directly in your editor's coding area, helping you write better code faster and catch typos that lead to silent bugs. - [Export the list of extensions you've installed in VSCode](https://www.avonture.be/blog/vscode-export-list-of-extensions) — Export and share your list of installed VS Code extensions using the `code --list-extensions` command. Learn how to generate direct installation commands for easy setup on a new machine using PowerShell or Linux. - [Markdown folding not working](https://www.avonture.be/blog/vscode-markdown-code-folding) — Fix your VS Code Markdown code folding issue! Learn why folding may not be working and discover the simple solution to enable code blocks and headings folding for a cleaner editing experience. - [Multiple cursors in vscode](https://www.avonture.be/blog/vscode-multiple-cursors) — Need to edit multiple lines in VSCode where search/replace fails? Learn the powerful Multiple Cursors feature and the quick keyboard shortcut to make bulk edits instantly. - [PHP Getter and Setter in VSCode](https://www.avonture.be/blog/vscode-php-getter-setter) — Implement secure PHP Getters and Setters in VSCode effortlessly. Learn the best practices for private class properties and use the recommended extension to generate them instantly. - [Start vscode from github.com](https://www.avonture.be/blog/vscode-github-dev) — Did you know you can open VSCode for any GitHub repository instantly? Discover the secret shortcut—just press the dot key (.). Start coding online now! - [Sticky scroll in vscode](https://www.avonture.be/blog/vscode-sticky-scroll) — Enable VS Code's powerful Sticky Scroll feature! Keep contextual lines (like class, function, or section headings) pinned to the top of your editor for effortless code and document navigation. - [Todo Tree in VSCode](https://www.avonture.be/blog/vscode-todo-tree) — Stop forgetting your TODOs and FIXMEs! Use the VSCode Todo Tree extension to summarize all code annotations like TODO, FIXME, and TEMPORARY into one easy-to-track dashboard. - [Using the JetBrains Mono font in vscode](https://www.avonture.be/blog/vscode-jetbrains-font) — Improve your coding experience! Learn how to install the free and highly legible JetBrains Mono font and enable beautiful font ligatures in VSCode with this quick configuration guide. - [Working with regions in VSCode](https://www.avonture.be/blog/vscode-regions) — Master code folding in VSCode with regions. Learn how to use them in PHP and how to enable region support for unsupported files like Dockerfile with a simple extension. ## windows - [Enable case sensitivity for filenames under DOS](https://www.avonture.be/blog/dos-case-sensitive) — Learn how to enable case sensitivity for filenames in a specific folder on Windows, just like on Linux. Use PowerShell and the fsutil.exe command. - [Microsoft Outlook - VBA - Save emails as PDF](https://www.avonture.be/blog/outlook-vba-pdf) — Learn how to implement a VBA macro in Microsoft Outlook to easily save selected emails as PDF files to your hard drive, complete with step-by-step installation and usage instructions. - [Update all out-of-date Windows programs in batch](https://www.avonture.be/blog/windows-winget) — Update all your out-of-date Windows programs in a batch using the powerful winget command-line tool. Learn the commands for a fast and efficient system. ## windows-terminal - [Use a background image in your Windows Terminal console](https://www.avonture.be/blog/windows-terminal-background) — Customize your Windows Terminal! Follow this simple, step-by-step guide to set a cool background image in your console and ditch the old, boring black screen. - [Windows Terminal](https://www.avonture.be/blog/windows-terminal) — A complete guide to Windows Terminal. Discover how to install, customize profiles, use backgrounds, and configure settings for WSL, Docker, and multi-tab startup actions. - [Windows Terminal - Adding a SSH profile](https://www.avonture.be/blog/windows-terminal-ssh-profile) — Adding a SSH profile to Windows Terminal to quickly connect to your servers without typing the full SSH command each time. - [Windows Terminal - Split Panes](https://www.avonture.be/blog/windows-terminal-split-panes) — Learn how to split panes in Windows Terminal for efficient multitasking; shortcuts, configuration tips, and workflow examples. ## winscp - [Fatal error was starting Putty after having saved settings](https://www.avonture.be/blog/putty-no-supported-authentication-methods) — Fix the frustrating PuTTY 'No supported authentication methods available' fatal error after saving settings. Learn the quick solution by deleting a specific PuTTY registry entry. - [KeePass - Overriding the URL field](https://www.avonture.be/blog/keepass-overriding-url) — Learn how to override the KeePass URL field to launch programs like PuTTY, WinSCP, or a Remote Desktop connection (RDP) directly from your entries. - [Search your FTP server at lightning speed](https://www.avonture.be/blog/php-grep-searching-at-lightning-speed) — Tired of painfully slow FTP search functions? Discover php_grep, the ultra-fast PHP script that uses regular expressions to find content on your FTP server at lightning speed. - [WinSCP - Download files with specific extension recursively](https://www.avonture.be/blog/winscp-download-recursively-files) — Learn how to use WinSCP's scripting feature to download files with a specific extension (like .php) recursively from your FTP/SFTP server. Includes a simple script example. - [WinSCP - Retrieve a stored password](https://www.avonture.be/blog/winscp-retrieve-password) — Did you forget a saved WinSCP password? Follow this quick guide to enable logging and retrieve your stored password in plain text from your session log file. - [WinSCP - Synchronize host and remote](https://www.avonture.be/blog/winscp-synchronize-both) — Use a script with WinSCP to easily synchronize files between your local host and a remote FTP/SFTP server. Learn the commands for local, remote, or bi-directional synchronization. - [WinSCP - Visual Basic for Application use](https://www.avonture.be/blog/winscp-vba) — Automate secure SFTP/FTP file transfers directly from MS Office. Learn how to call the WinSCP DLLs using simple Visual Basic for Application (VBA) code with a practical example. ## wsl - [Docker Build Cache Ate 180 GB — Here's How to Get Them Back](https://www.avonture.be/blog/wsl-docker-vhdx-cleanup) — Docker's build cache accumulates silently inside WSL2's VHDX virtual disk — and Windows never reclaims that space on its own. Here is the full fix: three common steps, then one compaction method that depends on whether you have local admin rights. - [Move WSL to another location](https://www.avonture.be/blog/move-wsl-to-another-location) — Running low on C drive space? Follow this step-by-step guide to safely move your WSL (Windows Subsystem for Linux) distribution and Docker data to a new drive location using the wsl --export and wsl --import commands. - [Open your Linux folder in Windows Explorer](https://www.avonture.be/blog/wsl-windows-explorer) — Access your Linux files in Windows Explorer! Learn the simple command to open your current WSL folder and how to quickly fix the "wsl.localhost is not accessible" error. - [Opening an RDP connection to the Linux local instance](https://www.avonture.be/blog/wslg-rpd-connection) — Learn how to open an RDP connection to your WSLg Linux instance (Ubuntu) for a full graphical desktop environment. Follow this step-by-step guide to installing and configuring xrdp. - [Starting the default associated Windows program on WSL](https://www.avonture.be/blog/wsl-powershell) — Learn the simple command to open files like PDFs and HTML from your WSL Linux console using their default Windows application - powershell.exe. ## zsh - [Autosuggestions in the console using ZSH](https://www.avonture.be/blog/zsh-plugin-autosuggestions) — Boost your ZSH console efficiency. Install the zsh-autosuggestions plugin easily and get intelligent command suggestions from your history as you type. - [How to install Oh-My-ZSH](https://www.avonture.be/blog/zsh-install) — Install Zsh and Oh-My-ZSH easily! Learn to power up your Linux terminal with the Powerlevel10k theme, custom functions like take, and essential daily-use features. - [ripgrep — The Search Tool That Changed My WSL2 Workflow](https://www.avonture.be/blog/ripgrep) — Discover ripgrep, the blazingly fast grep alternative written in Rust. Installation on Ubuntu/WSL2, ZSH configuration, practical shell functions, and real-world use cases that will transform how you search code every day. - [Syntax highlighting in the console using ZSH](https://www.avonture.be/blog/zsh-syntax-highlighting) — Enhance your Zsh console with syntax highlighting! See commands turn green (valid) or red (invalid) as you type. Quick installation guide for zsh-syntax-highlighting. - [ZSH Functions - Customizing Your Shell for Docker Management](https://www.avonture.be/blog/zsh-docker-functions) — A collection of ZSH functions to enhance your terminal experience, including interactive Docker container management with fzf. Start new sessions, stop containers, and more with ease.