<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Michaël Perrin’s Blog</title><description>Développeur web freelance spécialisé dans la création de sites web sur mesure (React / Next.js, Symfony, WordPress). Je vous accompagne dans la conception, le développement et le maintien de votre site web.</description><link>https://www.michaelperrin.fr</link><item><title>Upgrade from Create React App to Vite</title><link>https://www.michaelperrin.fr/blog/2023/08/migrate-a-react-project-from-cra-to-vite</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2023/08/migrate-a-react-project-from-cra-to-vite</guid><description>A step by step guide to migrate a React project from Create React App to Vite</description><pubDate>Fri, 25 Aug 2023 00:00:00 GMT</pubDate></item><item><title>Printing the web, part 2: HTML and CSS for printing books</title><link>https://www.michaelperrin.fr/blog/2019/11/printing-the-web-part-2-html-and-css-for-printing-books</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2019/11/printing-the-web-part-2-html-and-css-for-printing-books</guid><description>You wouldn&apos;t believe all that can be done with CSS for print. This article introduces all the little-known CSS properties that will allow to create a book: table of contents, page numbers, headers and footers, footnotes, etc.</description><pubDate>Mon, 04 Nov 2019 00:00:00 GMT</pubDate></item><item><title>Printing the web, part 1: retrieving content from the web</title><link>https://www.michaelperrin.fr/blog/2019/10/printing-the-web-part-1-retrieving-content-from-the-web</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2019/10/printing-the-web-part-1-retrieving-content-from-the-web</guid><description>This article is part of two articles that explain how to print web content into a book (a PDF file). In this first article, we&apos;ll create a script to scrape content from a web page.</description><pubDate>Fri, 25 Oct 2019 00:00:00 GMT</pubDate></item><item><title>WordCamp Vancouver 2019 – WordPress, the automated way - slides</title><link>https://www.michaelperrin.fr/blog/2019/09/wordcamp-vancouver-2019-wordpress-the-automated-way-slides</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2019/09/wordcamp-vancouver-2019-wordpress-the-automated-way-slides</guid><description>My takeaway on the WordCamp Vancouver 2019 event.</description><pubDate>Mon, 30 Sep 2019 00:00:00 GMT</pubDate></item><item><title>Advanced regular expression features to match Markdown links</title><link>https://www.michaelperrin.fr/blog/2019/02/advanced-regular-expressions</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2019/02/advanced-regular-expressions</guid><description>Learn advanced regular expression techniques like non-capturing groups, named groups, look behind expressions and recursion. We will apply all these techniques with a regular expression that matches Markdown links.</description><pubDate>Thu, 14 Feb 2019 00:00:00 GMT</pubDate></item><item><title>WordPress, the automated way (part 1): setup</title><link>https://www.michaelperrin.fr/blog/2018/10/automate-wordpress-part-1</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2018/10/automate-wordpress-part-1</guid><description>Automate WordPress installation, configuration and deployment with Docker. Plugins will be automatically installed, MySQL initialialized, admin user created by default, just by running one command!</description><pubDate>Fri, 26 Oct 2018 00:00:00 GMT</pubDate></item><item><title>Implement a ReCaptcha React component validated by Symfony</title><link>https://www.michaelperrin.fr/blog/2018/09/implement-react-component-for-recaptcha-and-checking-with-symfony</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2018/09/implement-react-component-for-recaptcha-and-checking-with-symfony</guid><description>We are going to implement a React component to render a Google ReCaptcha element, and will add PHP / Symfony service to check that the ReCaptcha was correctly filled by the user.</description><pubDate>Fri, 28 Sep 2018 00:00:00 GMT</pubDate></item><item><title>Implementation of a GraphQL mutation with file upload</title><link>https://www.michaelperrin.fr/blog/2018/09/implementation-of-agraphql-mutation-with-file-upload</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2018/09/implementation-of-agraphql-mutation-with-file-upload</guid><description>I&apos;m going to explain in this article how to implement a form with a file input that will upload the file to the server using a GraphQL mutation.</description><pubDate>Wed, 19 Sep 2018 00:00:00 GMT</pubDate></item><item><title>Create the missing podcast from a web radio station with Docker, VLC and PHP</title><link>https://www.michaelperrin.fr/blog/2018/08/create-a-podcast-with-symfony-and-vlc</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2018/08/create-a-podcast-with-symfony-and-vlc</guid><description>How to record any radio stream with a script and using VLC in the command line.</description><pubDate>Tue, 14 Aug 2018 00:00:00 GMT</pubDate></item><item><title>Using Redis for session handling in Symfony 4.1+</title><link>https://www.michaelperrin.fr/blog/2018/08/redis-session-handling-in-symfony</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2018/08/redis-session-handling-in-symfony</guid><description>How to use Redis in Symfony project to manage user sessions.</description><pubDate>Tue, 14 Aug 2018 00:00:00 GMT</pubDate></item><item><title>3 ways to get Docker for Mac faster on your Symfony app.</title><link>https://www.michaelperrin.fr/blog/2017/04/docker-for-mac-on-a-symfony-app</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2017/04/docker-for-mac-on-a-symfony-app</guid><description>Docker is an awesome tool for development but it turns out to be very slow on Mac by default on Symfony apps. We&apos;ll eexplore ways to make your Symfony project run much faster on Docker.</description><pubDate>Fri, 14 Apr 2017 00:00:00 GMT</pubDate></item><item><title>Migrating users to a secure hashing algorithm in Symfony</title><link>https://www.michaelperrin.fr/blog/2017/01/migrating-users-to-a-secure-hashing-algorithm-in-symfony</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2017/01/migrating-users-to-a-secure-hashing-algorithm-in-symfony</guid><description>This article explains how to gracefully convert your insecurely encrypted passwords to a secure method (using Bcrypt for instance).</description><pubDate>Tue, 17 Jan 2017 00:00:00 GMT</pubDate></item><item><title>Yarn, the next package manager for JavaScript</title><link>https://www.michaelperrin.fr/blog/2016/10/yarn-the-next-javascript-package-manager</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2016/10/yarn-the-next-javascript-package-manager</guid><description>In this article, we&apos;ll compare npm with yarn</description><pubDate>Sun, 16 Oct 2016 00:00:00 GMT</pubDate></item><item><title>Generating PDF files with Symfony</title><link>https://www.michaelperrin.fr/blog/2016/02/generating-pdf-files-with-symfony</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2016/02/generating-pdf-files-with-symfony</guid><description>This article explains how to generate PDF files in Symfony with KnpSnappyBundle and the underlying wkhtmltopdf library.</description><pubDate>Wed, 17 Feb 2016 00:00:00 GMT</pubDate></item><item><title>Retour sur la Symfony Live 2015</title><link>https://www.michaelperrin.fr/blog/2015/04/retour-sur-la-symfony-live-2015</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2015/04/retour-sur-la-symfony-live-2015</guid><description>Un retour sur la Symfony Live de 2015.</description><pubDate>Wed, 15 Apr 2015 00:00:00 GMT</pubDate></item><item><title>My contributions to Doctrine 2.5</title><link>https://www.michaelperrin.fr/blog/2015/02/small-new-doctrine-2-5-additions</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2015/02/small-new-doctrine-2-5-additions</guid><description>Some developer experience improvements in Doctrine ORM.</description><pubDate>Sun, 08 Feb 2015 00:00:00 GMT</pubDate></item><item><title>Doctrine filters and annotations to improve security and ease development in a Symfony app</title><link>https://www.michaelperrin.fr/blog/2014/12/doctrine-filters</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2014/12/doctrine-filters</guid><description>Make use of Doctrine filters in your Symfony project to improve security in your app and automate some query parts.</description><pubDate>Fri, 05 Dec 2014 00:00:00 GMT</pubDate></item><item><title>Twig Extensions 1.2 released with two new i18n filters</title><link>https://www.michaelperrin.fr/blog/2014/11/twig-extensions-1-2-released-two-new-i18n-filters</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2014/11/twig-extensions-1-2-released-two-new-i18n-filters</guid><description>Internationalisation filters in Twig.</description><pubDate>Fri, 14 Nov 2014 00:00:00 GMT</pubDate></item><item><title>Clear input control with Bootstrap 3</title><link>https://www.michaelperrin.fr/blog/2014/10/clear-input-control-bootstrap-3</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2014/10/clear-input-control-bootstrap-3</guid><description>CSS tricks to add a &quot;Clear&quot; control on text inputs.</description><pubDate>Sat, 25 Oct 2014 00:00:00 GMT</pubDate></item><item><title>4-digit years for localized dates in Twig templates</title><link>https://www.michaelperrin.fr/blog/2014/02/4-digit-years-localized-dates-twig-templates</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2014/02/4-digit-years-localized-dates-twig-templates</guid><description>Building a Twig extension to display localized dates with 4-digit years</description><pubDate>Tue, 11 Feb 2014 00:00:00 GMT</pubDate></item><item><title>Leverage Symfony2 extra features to simplify controller actions</title><link>https://www.michaelperrin.fr/blog/2013/09/leverage-symfony2-features-to-simplify-a-crud</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2013/09/leverage-symfony2-features-to-simplify-a-crud</guid><description>This post presents two simple yet underused Symfony features that make controller action code shorter and simpler to understand.</description><pubDate>Tue, 03 Sep 2013 00:00:00 GMT</pubDate></item><item><title>Doctrine DBAL - Count updated rows</title><link>https://www.michaelperrin.fr/blog/2013/05/doctrine-dbal-count-number-of-updated-rows</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2013/05/doctrine-dbal-count-number-of-updated-rows</guid><description>Just a little tip to count how many rows have been updated after the execution of a Doctrine query.</description><pubDate>Tue, 14 May 2013 00:00:00 GMT</pubDate></item><item><title>Modal sheet dialogs in Javascript: Bootstrap modal sheet plugin</title><link>https://www.michaelperrin.fr/blog/2013/04/os-x-sheet-dialogs-in-javascript</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2013/04/os-x-sheet-dialogs-in-javascript</guid><description>Implementation of modal sheet dialogs (the OS X way) using Boostrap.</description><pubDate>Sat, 13 Apr 2013 00:00:00 GMT</pubDate></item><item><title>Notification messages for JSON responses with jQuery and Symfony2</title><link>https://www.michaelperrin.fr/blog/2013/03/notification-flash-messages-for-json-responses-with-symfony2</link><guid isPermaLink="true">https://www.michaelperrin.fr/blog/2013/03/notification-flash-messages-for-json-responses-with-symfony2</guid><description>We’re going to setup an easy-to-use notification system using jQuery and the Symfony2 event dispatcher, plus some CSS to get things look nice.</description><pubDate>Thu, 07 Mar 2013 00:00:00 GMT</pubDate></item></channel></rss>