<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>romain.dorgueil.net</title><description>I craft software, play music, trade some go stones amongst a few other things.</description><link>https://romain.dorgueil.net/</link><language>en</language><item><title>How to start a named tmux session with a window name and a directory?</title><link>https://romain.dorgueil.net/blog/en/tips/2026/06/05/start-named-tmux-session-window-directory/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/tips/2026/06/05/start-named-tmux-session-window-directory/</guid><description>Create a detached tmux session, name its first window, and start it in a chosen directory, all in one command.</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><category>tips</category><category>tmux</category><category>terminal</category><category>shell</category><category>productivity</category></item><item><title>How to create or attach to a tmux session in one command?</title><link>https://romain.dorgueil.net/blog/en/tips/2026/06/04/create-or-attach-tmux-session/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/tips/2026/06/04/create-or-attach-tmux-session/</guid><description>A single idempotent tmux command that creates a session or attaches to it if it already exists — perfect for scripts and shell startup files.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>tips</category><category>tmux</category><category>terminal</category><category>shell</category><category>productivity</category></item><item><title>Simple ETL with Bonobo - Europython 2017</title><link>https://romain.dorgueil.net/blog/en/talk/2017/07/12/simple-etl-with-bonobo-europython-2017/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/talk/2017/07/12/simple-etl-with-bonobo-europython-2017/</guid><description>Presentation of Bonobo ETL at EuroPython 2017 - a simple Python 3.5+ tool for extract-transform-load processes. Includes video, slides and sprint summary.</description><pubDate>Wed, 12 Jul 2017 00:00:00 GMT</pubDate><category>conference</category><category>python</category><category>event</category><category>ep2017</category><category>talk</category></item><item><title>Your best SEO strategy is to ignore it</title><link>https://romain.dorgueil.net/blog/en/startup/2016/10/10/your-best-seo-strategy-is-to-ignore-it/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/startup/2016/10/10/your-best-seo-strategy-is-to-ignore-it/</guid><description>Stop wasting your time on Search Engine Optimizations (SEO), your business needs is a product that your users love, bots will follow them.</description><pubDate>Mon, 10 Oct 2016 00:00:00 GMT</pubDate><category>seo</category><category>web</category><category>content</category><category>marketing</category><category>start-up</category><category>company</category><category>business</category><category>product</category></item><item><title>How to hint search engines about pagination?</title><link>https://romain.dorgueil.net/blog/en/tips/2016/09/12/meta-tags-pagination-canonical/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/tips/2016/09/12/meta-tags-pagination-canonical/</guid><description>Use rel=prev and rel=next link tags to help search engines understand pagination structure on your website, improving crawling and indexing of paginated content.</description><pubDate>Mon, 12 Sep 2016 00:00:00 GMT</pubDate><category>tips</category><category>web</category><category>seo</category><category>google</category><category>pagination</category></item><item><title>How to clean up already merged git branches?</title><link>https://romain.dorgueil.net/blog/en/tips/2016/09/09/cleanup-merged-git-branches/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/tips/2016/09/09/cleanup-merged-git-branches/</guid><description>Clean up merged git branches using git-sweep to remove outdated branches from both local and remote repositories, keeping your git tree organized.</description><pubDate>Fri, 09 Sep 2016 00:00:00 GMT</pubDate><category>tips</category><category>git</category><category>software</category><category>release</category><category>vcs</category></item><item><title>How to redirect non-www versions of your website in nginx?</title><link>https://romain.dorgueil.net/blog/en/tips/2016/09/08/redirect-non-www-to-main/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/tips/2016/09/08/redirect-non-www-to-main/</guid><description>Configure nginx to redirect non-www domains to www (or vice versa) for SEO consistency, including HTTP to HTTPS redirects with proper deep link support.</description><pubDate>Thu, 08 Sep 2016 00:00:00 GMT</pubDate><category>tips</category><category>web</category><category>nginx</category><category>http</category><category>seo</category></item><item><title>Instrument, Measure and Learn</title><link>https://romain.dorgueil.net/blog/en/web-performance/2016/09/06/4-instrumentation-measure-learn/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/web-performance/2016/09/06/4-instrumentation-measure-learn/</guid><description>Measure web performance improvements using Pagespeed statistics, Google Analytics, Search Console, and PageSpeed Insights to track connection time, response time, and user experience.</description><pubDate>Tue, 06 Sep 2016 00:00:00 GMT</pubDate><category>web</category><category>http</category><category>nginx</category><category>pagespeed</category><category>performance</category><category>assets</category><category>cdn</category><category>amazon</category><category>cloudfront</category><category>docker</category><category>container</category></item><item><title>Amazon Cloudfront as our Content Delivery Network</title><link>https://romain.dorgueil.net/blog/en/web-performance/2016/09/06/3-amazon-cloudfront-cdn/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/web-performance/2016/09/06/3-amazon-cloudfront-cdn/</guid><description>Configure Amazon CloudFront CDN with Nginx and Pagespeed to serve static assets from geographically distributed edge locations, reducing server load and improving performance.</description><pubDate>Tue, 06 Sep 2016 00:00:00 GMT</pubDate><category>web</category><category>http</category><category>nginx</category><category>pagespeed</category><category>performance</category><category>assets</category><category>cdn</category><category>amazon</category><category>cloudfront</category><category>docker</category><category>container</category></item><item><title>Nginx, pagespeed and a simple node.js backend</title><link>https://romain.dorgueil.net/blog/en/web-performance/2016/09/06/2-nginx-pagespeed-nodejs/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/web-performance/2016/09/06/2-nginx-pagespeed-nodejs/</guid><description>Set up Nginx with Pagespeed module and Node.js backend in Docker containers for automatic asset optimization, HTML minification, and improved web performance without code changes.</description><pubDate>Tue, 06 Sep 2016 00:00:00 GMT</pubDate><category>web</category><category>http</category><category>nginx</category><category>pagespeed</category><category>performance</category><category>assets</category><category>docker</category><category>container</category><category>nodejs</category></item><item><title>Serving the web at light-speed</title><link>https://romain.dorgueil.net/blog/en/web-performance/2016/09/06/1-light-speed-web-performance/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/web-performance/2016/09/06/1-light-speed-web-performance/</guid><description>Optimize website load speed using Nginx with Pagespeed module and Amazon CloudFront CDN. Part 1 of a 4-part series covering tools, techniques, and performance measurement.</description><pubDate>Tue, 06 Sep 2016 00:00:00 GMT</pubDate><category>web</category><category>http</category><category>nginx</category><category>pagespeed</category><category>performance</category><category>assets</category><category>cdn</category><category>amazon</category><category>cloudfront</category><category>docker</category><category>container</category></item><item><title>How to run asynchronous python callables in parallel?</title><link>https://romain.dorgueil.net/blog/en/tips/2016/09/05/asynchronous-python-parralel/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/tips/2016/09/05/asynchronous-python-parralel/</guid><description>Run multiple asynchronous Python functions concurrently using asyncio.wait() to process tasks as they complete, with example code and sequence diagram.</description><pubDate>Mon, 05 Sep 2016 00:00:00 GMT</pubDate><category>tips</category><category>python</category><category>async</category><category>parallel</category><category>tasks</category><category>threading</category></item><item><title>How to rollout or rollback a deployment on a Kubernetes cluster?</title><link>https://romain.dorgueil.net/blog/en/tips/2016/08/27/rollout-rollback-kubernetes-deployment/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/tips/2016/08/27/rollout-rollback-kubernetes-deployment/</guid><description>Learn how to safely rollout new versions and rollback deployments on Kubernetes clusters using kubectl commands, with examples of rolling update strategies and health checks.</description><pubDate>Sat, 27 Aug 2016 00:00:00 GMT</pubDate><category>tips</category><category>docker</category><category>container</category><category>kubernetes</category><category>google-cloud</category><category>amazon-web-services</category><category>system</category><category>operations</category></item><item><title>How to manage your releases using git-semver?</title><link>https://romain.dorgueil.net/blog/en/tips/2016/08/20/releases-with-git-semver/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/tips/2016/08/20/releases-with-git-semver/</guid><description>Manage software releases consistently using git-semver tool for semantic versioning, with step-by-step instructions for version generation, tagging, and PyPI publishing.</description><pubDate>Sat, 20 Aug 2016 00:00:00 GMT</pubDate><category>tips</category><category>release</category><category>software</category><category>versioning</category><category>semantic</category><category>semver</category><category>git</category></item><item><title>How to retrieve the path where the running script is located?</title><link>https://romain.dorgueil.net/blog/en/tips/2016/08/16/retrieve-a-shell-script-current-path/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/tips/2016/08/16/retrieve-a-shell-script-current-path/</guid><description>Bash shell tip: Get the real path of a running script using a cross-platform solution that handles symbolic links and relative paths.</description><pubDate>Tue, 16 Aug 2016 00:00:00 GMT</pubDate><category>tips</category><category>bash</category><category>shell</category><category>path</category><category>unix</category><category>linux</category><category>system</category></item><item><title>Planning poker is not about estimating</title><link>https://romain.dorgueil.net/blog/en/agile/2016/08/02/planning-poker-is-not-about-estimating/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/agile/2016/08/02/planning-poker-is-not-about-estimating/</guid><description>Planning poker is more than an estimation technique - it&apos;s a powerful tool for improving team communication, sharing knowledge, and leveraging collective intelligence in software development.</description><pubDate>Tue, 02 Aug 2016 00:00:00 GMT</pubDate><category>agile</category><category>planning poker</category><category>estimating</category><category>communication</category><category>knowledge</category></item><item><title>Future is now</title><link>https://romain.dorgueil.net/blog/en/europython/2016/07/28/future-is-now/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/europython/2016/07/28/future-is-now/</guid><description>EuroPython 2016 highlights on Python&apos;s future including class attribute ordering (PEP 520), descriptor naming (PEP 487), Jupyter Lab improvements, and PyParallel GIL solution.</description><pubDate>Thu, 28 Jul 2016 00:00:00 GMT</pubDate><category>conference</category><category>python</category><category>event</category><category>ep2016</category><category>future</category></item><item><title>Asynchronous programming with python</title><link>https://romain.dorgueil.net/blog/en/europython/2016/07/27/asynchronous-programming/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/europython/2016/07/27/asynchronous-programming/</guid><description>EuroPython 2016 notes on asynchronous programming with Python including asyncio patterns, futures, Twisted integration, and new async tools like uvloop and asyncpg.</description><pubDate>Wed, 27 Jul 2016 00:00:00 GMT</pubDate><category>conference</category><category>python</category><category>event</category><category>ep2016</category><category>asyncio</category></item><item><title>Data processing</title><link>https://romain.dorgueil.net/blog/en/europython/2016/07/27/data-processing/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/europython/2016/07/27/data-processing/</guid><description>A few notes from EuroPython 2016 about data processing, natural language processing, machine learning...</description><pubDate>Wed, 27 Jul 2016 00:00:00 GMT</pubDate><category>conference</category><category>python</category><category>event</category><category>ep2016</category><category>data</category></item><item><title>Testing</title><link>https://romain.dorgueil.net/blog/en/europython/2016/07/27/testing/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/europython/2016/07/27/testing/</guid><description>A few notes from EuroPython 2016 about testing and quality assurance.</description><pubDate>Wed, 27 Jul 2016 00:00:00 GMT</pubDate><category>conference</category><category>python</category><category>event</category><category>ep2016</category><category>testing</category></item><item><title>Web scraping</title><link>https://romain.dorgueil.net/blog/en/europython/2016/07/27/web-scraping/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/europython/2016/07/27/web-scraping/</guid><description>Notes from EuroPython 2016 on web scraping tools and best practices including Jupyter, Selenium, client-server architectures, and Scrapy.</description><pubDate>Wed, 27 Jul 2016 00:00:00 GMT</pubDate><category>conference</category><category>python</category><category>event</category><category>ep2016</category><category>scraping</category><category>crawling</category></item><item><title>EuroPython 2016</title><link>https://romain.dorgueil.net/blog/en/europython/2016/07/26/europython-2016/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/europython/2016/07/26/europython-2016/</guid><description>My notes about Europython 2016 Bilbao. Topics: asyncio, scraping, data processing, machine learning, testing, and some goodies from the future.</description><pubDate>Tue, 26 Jul 2016 00:00:00 GMT</pubDate><category>conference</category><category>python</category><category>event</category><category>ep2016</category></item><item><title>Docker: The container (r)evolution</title><link>https://romain.dorgueil.net/blog/en/talk/2014/12/27/docker-the-container-revolution/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/talk/2014/12/27/docker-the-container-revolution/</guid><description>Presentation about Docker and container technologies at Anchor Coworking on December 27th, 2014, including slides and Q&amp;A session covering Docker, CoreOS, Rocket, and practical DevOps considerations.</description><pubDate>Sat, 27 Dec 2014 00:00:00 GMT</pubDate><category>docker</category><category>linux</category><category>infrastructure</category><category>container</category><category>delivery</category><category>devops</category></item><item><title>Private Registry 103: Nginx front container</title><link>https://romain.dorgueil.net/blog/en/docker/2014/12/22/docker-registry-nginx-front-container/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/docker/2014/12/22/docker-registry-nginx-front-container/</guid><description>Set up Nginx as a reverse proxy for Docker private registry in a separate container, enabling virtual host configuration and fine-grained HTTP control.</description><pubDate>Mon, 22 Dec 2014 00:00:00 GMT</pubDate><category>docker</category><category>linux</category><category>infrastructure</category><category>container</category><category>devops</category><category>lxc</category><category>docker registry</category><category>nginx</category><category>orchestration</category></item><item><title>Private Registry 102: Use Amazon S3 for data storage</title><link>https://romain.dorgueil.net/blog/en/docker/2014/12/21/docker-registry-amazon-s3-storage-backend/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/docker/2014/12/21/docker-registry-amazon-s3-storage-backend/</guid><description>Configure Docker private registry to use Amazon S3 as storage backend for container images, including IAM setup, common issues, and complete working configuration.</description><pubDate>Sun, 21 Dec 2014 00:00:00 GMT</pubDate><category>docker</category><category>linux</category><category>infrastructure</category><category>container</category><category>devops</category><category>lxc</category><category>docker registry</category><category>aufs</category><category>filesystem</category><category>amazon s3</category><category>aws</category><category>cloud</category></item><item><title>Private Registry 101: Setup a local private repository</title><link>https://romain.dorgueil.net/blog/en/docker/2014/12/20/docker-setup-a-private-registry/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/docker/2014/12/20/docker-setup-a-private-registry/</guid><description>Step-by-step guide to set up a private Docker registry using the official registry container, including local setup, common issues, and solutions for insecure registry endpoints.</description><pubDate>Sat, 20 Dec 2014 00:00:00 GMT</pubDate><category>docker</category><category>linux</category><category>infrastructure</category><category>container</category><category>devops</category><category>lxc</category><category>docker registry</category></item><item><title>Configuration and aliases</title><link>https://romain.dorgueil.net/blog/en/git/2014/12/16/git-config/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/git/2014/12/16/git-config/</guid><description>Essential Git configuration commands and useful aliases to set up a productive Git environment, including shortcuts for common commands and color settings.</description><pubDate>Tue, 16 Dec 2014 00:00:00 GMT</pubDate><category>git</category><category>config</category><category>environment</category><category>dvcs</category></item><item><title>I see huge controllers ...</title><link>https://romain.dorgueil.net/blog/en/php/2011/09/05/i-see-huge-controllers/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/php/2011/09/05/i-see-huge-controllers/</guid><description>Best practices for organizing PHP/Symfony controllers and model layers to avoid spaghetti code, reduce maintenance costs, and improve developer productivity.</description><pubDate>Mon, 05 Sep 2011 00:00:00 GMT</pubDate><category>php</category><category>programming</category><category>best practice</category><category>symfony1</category></item><item><title>Give your WSGI application super-powers</title><link>https://romain.dorgueil.net/blog/en/python/2011/08/29/give-your-app-superpowers/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/python/2011/08/29/give-your-app-superpowers/</guid><description>Learn how to enhance your WSGI applications with powerful middleware, including the amazing weberror interactive Ajax debugger for Python web development.</description><pubDate>Mon, 29 Aug 2011 00:00:00 GMT</pubDate><category>python</category><category>wsgi</category><category>http</category><category>web</category><category>debugger</category><category>webob</category><category>middleware</category></item><item><title>WSGI, the first steps</title><link>https://romain.dorgueil.net/blog/en/python/2011/08/22/wsgi-the-first-steps/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/python/2011/08/22/wsgi-the-first-steps/</guid><description>Build a Python web application from scratch using WSGI, the standard interface between web servers and Python applications, with practical examples using webob.</description><pubDate>Mon, 22 Aug 2011 00:00:00 GMT</pubDate><category>python</category><category>wsgi</category><category>http</category><category>web</category><category>tutorial</category><category>webob</category></item><item><title>Handling empty WHERE IN clauses in DBALs</title><link>https://romain.dorgueil.net/blog/en/database/2011/01/10/handling-empty-where-in-clauses-in-dbals/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/database/2011/01/10/handling-empty-where-in-clauses-in-dbals/</guid><description>Comparing how different ORMs (Doctrine, Propel, SQLAlchemy, Django, Rails) handle empty WHERE IN clauses in SQL, and why the simplest approach is often correct.</description><pubDate>Mon, 10 Jan 2011 00:00:00 GMT</pubDate><category>sql</category><category>python</category><category>php</category><category>database</category><category>django</category><category>sqlalchemy</category><category>propel1</category><category>doctrine1</category><category>ruby on rails</category></item><item><title>HTTP is the web&apos;s language</title><link>https://romain.dorgueil.net/blog/en/the-roots/2010/01/24/http-is-the-webs-language/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/the-roots/2010/01/24/http-is-the-webs-language/</guid><description>Understanding HTTP fundamentals: the request/response protocol, methods (GET, POST), status codes, and why web developers must know the language of the web.</description><pubDate>Sun, 24 Jan 2010 00:00:00 GMT</pubDate><category>misc</category><category>programming</category><category>http</category><category>standard</category><category>roots</category><category>web</category></item><item><title>All about backward compatibility...</title><link>https://romain.dorgueil.net/blog/en/software/2009/09/23/all-about-backward-compatibility/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/software/2009/09/23/all-about-backward-compatibility/</guid><description>Real-world case study of a backward compatibility break in PHP 5.2.11 that affected symfony projects, highlighting why stable branches must remain stable.</description><pubDate>Wed, 23 Sep 2009 00:00:00 GMT</pubDate><category>misc</category><category>software</category><category>best practice</category><category>php</category><category>programming</category></item><item><title>Foreign key&apos;s onDelete for dummies</title><link>https://romain.dorgueil.net/blog/en/database/2008/07/10/foreign-keys-ondelete-for-dummies/</link><guid isPermaLink="true">https://romain.dorgueil.net/blog/en/database/2008/07/10/foreign-keys-ondelete-for-dummies/</guid><description>Understanding foreign key onDelete behaviors in relational databases: RESTRICT, CASCADE, and SET NULL modes with practical examples for Doctrine and Propel ORMs.</description><pubDate>Thu, 10 Jul 2008 00:00:00 GMT</pubDate><category>php</category><category>database</category><category>doctrine1</category><category>propel1</category><category>yaml</category><category>xml</category><category>relation</category></item></channel></rss>