CINXE.COM
Jordi's Ramblings
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="description" content="Notes about PHP, Open Source and perhaps more"> <meta property="og:title" content="Jordi's Ramblings"/> <meta property="og:type" content="website" /> <meta property="og:url" content="https://seld.be/"/> <meta property="og:description" content="Notes about PHP, Open Source and perhaps more" /> <title>Jordi's Ramblings</title> <link rel="home" href="https://seld.be"> <link rel="icon" href="/favicon.ico"> <link href="/feed.atom" type="application/atom+xml" rel="alternate" title="Jordi's Ramblings Atom Feed"> <script async src="https://www.googletagmanager.com/gtag/js?id=G-QGN4JJEDTM"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-QGN4JJEDTM'); </script> <!-- TODO self-host this --> <link href="https://fonts.googleapis.com/css?family=Nunito+Sans:300,300i,400,400i,700,700i,800,800i" rel="stylesheet"> <link rel="stylesheet" href="/assets/build/css/main.css?id=d00f50ff97ec6d83fcce"> </head> <body class="flex flex-col justify-between min-h-screen text-gray-800 dark:text-green-500 leading-normal font-sans dark:font-mono bg-gray-100 dark:bg-gray-800"> <header class="flex items-center shadow bg-white dark:bg-gray-900 border-b dark:border-green-300 h-24 py-4" role="banner"> <div class="container flex items-center max-w-4xl mx-auto px-4 lg:px-8"> <div class="flex items-center"> <a href="/" title="Jordi's Ramblings home" class="inline-flex items-center"> <h1 class="text-lg md:text-2xl text-blue-800 dark:text-green-400 font-semibold hover:text-blue-600 dark:hover:text-green-200 my-0">Jordi's Ramblings</h1> </a> </div> <div id="vue-search" class="flex flex-1 justify-end items-center"> <search></search> <nav class="hidden lg:flex items-center justify-end text-lg"> <a title="Jordi's Ramblings Blog" href="/notes" class="ml-6 text-gray-700 hover:text-blue-600 dark:text-green-500 dark:hover:text-green-400 "> Blog </a> <a title="Jordi's Ramblings About" href="/about" class="ml-6 text-gray-700 hover:text-blue-600 dark:text-green-500 dark:hover:text-green-400 "> About </a> <a title="Jordi's Ramblings Atom Feed" href="/feed.atom" class="ml-6 text-gray-700 hover:text-blue-600 dark:text-green-500 dark:hover:text-green-400"> Feed </a> <a title="Dark Mode" class="ml-4 cursor-pointer toggle-dark dark:hidden inline-block">🕶</a> <a title="Light Mode" class="ml-4 cursor-pointer toggle-dark hidden dark:inline-block">☀</a> </nav> <button class="flex justify-center items-center bg-blue-500 border border-blue-500 dark:bg-green-400 dark:border-green-400 h-10 px-5 rounded-full lg:hidden focus:outline-none" onclick="navMenu.toggle()" > <svg id="js-nav-menu-show" xmlns="http://www.w3.org/2000/svg" class="fill-current text-white h-9 w-4" viewBox="0 0 32 32" > <path d="M4,10h24c1.104,0,2-0.896,2-2s-0.896-2-2-2H4C2.896,6,2,6.896,2,8S2.896,10,4,10z M28,14H4c-1.104,0-2,0.896-2,2 s0.896,2,2,2h24c1.104,0,2-0.896,2-2S29.104,14,28,14z M28,22H4c-1.104,0-2,0.896-2,2s0.896,2,2,2h24c1.104,0,2-0.896,2-2 S29.104,22,28,22z"/> </svg> <svg id="js-nav-menu-hide" xmlns="http://www.w3.org/2000/svg" class="hidden fill-current text-white h-9 w-4" viewBox="0 0 36 30" > <polygon points="32.8,4.4 28.6,0.2 18,10.8 7.4,0.2 3.2,4.4 13.8,15 3.2,25.6 7.4,29.8 18,19.2 28.6,29.8 32.8,25.6 22.2,15 "/> </svg> </button> </div> </div> </header> <nav id="js-nav-menu" class="w-auto px-2 pt-6 pb-2 bg-gray-200 dark:bg-gray-700 shadow hidden lg:hidden"> <ul class="my-0"> <li class="pl-4 list-none"> <a title="Jordi's Ramblings Blog" href="/notes" class="block mt-0 mb-4 text-sm no-underline text-gray-800 hover:text-blue-500 dark:text-green-300 dark:hover:text-green-100" >Blog</a> </li> <li class="pl-4 list-none"> <a title="Jordi's Ramblings About" href="/about" class="block mt-0 mb-4 text-sm no-underline text-gray-800 hover:text-blue-500 dark:text-green-300 dark:hover:text-green-100" >About</a> </li> <li class="pl-4 list-none"> <a title="Jordi's Ramblings Atom Feed" href="/feed.atom" class="block mt-0 mb-4 text-sm no-underline text-gray-800 hover:text-blue-500 dark:text-green-300 dark:hover:text-green-100" >Feed</a> </li> </ul> </nav> <main role="main" class="flex-auto w-full container max-w-4xl mx-auto bg-white dark:bg-black mt-6 p-6"> <div class="w-full mb-6"> <p class="text-gray-700 dark:text-green-500 font-medium my-2"> August 3, 2022 </p> <h2 class="text-3xl mt-0"> <a href="https://seld.be/notes/narrowing-types-for-static-analysis" title="Read Narrowing types for static analysis" class="text-gray-900 dark:text-green-500 font-extrabold"> Narrowing types for static analysis </a> </h2> <p class="mt-0 mb-4">I have spent the last year moving a few big old codebases, including Composer, to PHPStan's level 8. Here are a few lessons I think I have learned in the process. I was for a while skeptical about using the baseline feature as it seemed to me like...</p> <a href="https://seld.be/notes/narrowing-types-for-static-analysis" title="Read - Narrowing types for static analysis" class="uppercase tracking-wide mb-4"> Read </a> </div> <hr class="border-b my-6"> <div class="w-full mb-6"> <p class="text-gray-700 dark:text-green-500 font-medium my-2"> July 26, 2022 </p> <h2 class="text-3xl mt-0"> <a href="https://seld.be/notes/a-nomenclature-of-hate" title="Read A nomenclature of hate" class="text-gray-900 dark:text-green-500 font-extrabold"> A nomenclature of hate </a> </h2> <p class="mt-0 mb-4">(What feels like) a lifetime of maintaining open source projects has left me with some things to say about the haters. I'm not sure why. Trying to do a light take of it instead of getting mad, here is a post categorizing them. Your average online...</p> <a href="https://seld.be/notes/a-nomenclature-of-hate" title="Read - A nomenclature of hate" class="uppercase tracking-wide mb-4"> Read </a> </div> <hr class="border-b my-6"> <div class="w-full mb-6"> <p class="text-gray-700 dark:text-green-500 font-medium my-2"> April 2, 2022 </p> <h2 class="text-3xl mt-0"> <a href="https://seld.be/notes/new-jigsaw-site" title="Read New Jigsaw-based Site" class="text-gray-900 dark:text-green-500 font-extrabold"> New Jigsaw-based Site </a> </h2> <p class="mt-0 mb-4">My blog was always based on some home-grown CMS I built during my studies in.. checks CV 2007-2008. This was mostly fine but it had no markdown support and it was one more server to manage. I would like to try and write some more content here again so...</p> <a href="https://seld.be/notes/new-jigsaw-site" title="Read - New Jigsaw-based Site" class="uppercase tracking-wide mb-4"> Read </a> </div> <div class="flex flex-col md:flex-row md:-mx-6"> <div class="w-full md:w-1/2 md:mx-6"> <div class="flex flex-col mb-4"> <p class="text-gray-700 dark:text-green-500 font-medium my-2"> May 16, 2018 </p> <h2 class="text-3xl mt-0"> <a href="https://seld.be/notes/developing-on-windows-in-2018" title="Read more - Web Development on Windows in 2018" class="text-gray-900 dark:text-green-500 font-extrabold" >Web Development on Windows in 2018</a> </h2> <p class="mb-4 mt-0">I have been developing web apps on Windows for the last 10+ years. I ran PHP, Apache then Nginx, MySQL and Postgres, Redis and others. I dabbed in VMs at some point but was always dissatisfied with...</p> <a href="https://seld.be/notes/developing-on-windows-in-2018" title="Read more - Web Development on Windows in 2018" class="uppercase font-semibold tracking-wide mb-2" >Read</a> </div> </div> <hr class="block md:hidden w-full border-b mt-2 mb-6"> <div class="w-full md:w-1/2 md:mx-6"> <div class="flex flex-col mb-4"> <p class="text-gray-700 dark:text-green-500 font-medium my-2"> May 15, 2018 </p> <h2 class="text-3xl mt-0"> <a href="https://seld.be/notes/php-versions-stats-2018-1-edition" title="Read more - PHP Versions Stats - 2018.1 Edition" class="text-gray-900 dark:text-green-500 font-extrabold" >PHP Versions Stats - 2018.1 Edition</a> </h2> <p class="mb-4 mt-0">It's stats o'clock! See 2014, 2015, 2016.1, 2016.2, 2017.1 and 2017.2 for previous similar posts. A quick note on methodology, because all these stats are imperfect as they just sample some subset...</p> <a href="https://seld.be/notes/php-versions-stats-2018-1-edition" title="Read more - PHP Versions Stats - 2018.1 Edition" class="uppercase font-semibold tracking-wide mb-2" >Read</a> </div> </div> </div> <hr class="w-full border-b mt-2 mb-6"> <div class="flex flex-col md:flex-row md:-mx-6"> <div class="w-full md:w-1/2 md:mx-6"> <div class="flex flex-col mb-4"> <p class="text-gray-700 dark:text-green-500 font-medium my-2"> November 13, 2017 </p> <h2 class="text-3xl mt-0"> <a href="https://seld.be/notes/php-versions-stats-2017-2-edition" title="Read more - PHP Versions Stats - 2017.2 Edition" class="text-gray-900 dark:text-green-500 font-extrabold" >PHP Versions Stats - 2017.2 Edition</a> </h2> <p class="mb-4 mt-0">It's stats o'clock! See 2014, 2015, 2016.1, 2016.2 and 2017.1 for previous similar posts. A quick note on methodology, because all these stats are imperfect as they just sample some subset of the...</p> <a href="https://seld.be/notes/php-versions-stats-2017-2-edition" title="Read more - PHP Versions Stats - 2017.2 Edition" class="uppercase font-semibold tracking-wide mb-2" >Read</a> </div> </div> <hr class="block md:hidden w-full border-b mt-2 mb-6"> <div class="w-full md:w-1/2 md:mx-6"> <div class="flex flex-col mb-4"> <p class="text-gray-700 dark:text-green-500 font-medium my-2"> May 7, 2017 </p> <h2 class="text-3xl mt-0"> <a href="https://seld.be/notes/php-versions-stats-2017-1-edition" title="Read more - PHP Versions Stats - 2017.1 Edition" class="text-gray-900 dark:text-green-500 font-extrabold" >PHP Versions Stats - 2017.1 Edition</a> </h2> <p class="mb-4 mt-0">It's stats o'clock! See 2014, 2015, 2016.1 and 2016.2 for previous similar posts. A quick note on methodology, because all these stats are imperfect as they just sample some subset of the PHP user...</p> <a href="https://seld.be/notes/php-versions-stats-2017-1-edition" title="Read more - PHP Versions Stats - 2017.1 Edition" class="uppercase font-semibold tracking-wide mb-2" >Read</a> </div> </div> </div> <hr class="w-full border-b mt-2 mb-6"> <div class="flex flex-col md:flex-row md:-mx-6"> <div class="w-full md:w-1/2 md:mx-6"> <div class="flex flex-col mb-4"> <p class="text-gray-700 dark:text-green-500 font-medium my-2"> November 18, 2016 </p> <h2 class="text-3xl mt-0"> <a href="https://seld.be/notes/php-versions-stats-2016-2-edition" title="Read more - PHP Versions Stats - 2016.2 Edition" class="text-gray-900 dark:text-green-500 font-extrabold" >PHP Versions Stats - 2016.2 Edition</a> </h2> <p class="mb-4 mt-0">It's stats o'clock! See 2014, 2015 and 2016.1 for previous similar posts. A quick note on methodology, because all these stats are imperfect as they just sample some subset of the PHP user base. I...</p> <a href="https://seld.be/notes/php-versions-stats-2016-2-edition" title="Read more - PHP Versions Stats - 2016.2 Edition" class="uppercase font-semibold tracking-wide mb-2" >Read</a> </div> </div> <hr class="block md:hidden w-full border-b mt-2 mb-6"> <div class="w-full md:w-1/2 md:mx-6"> <div class="flex flex-col mb-4"> <p class="text-gray-700 dark:text-green-500 font-medium my-2"> June 29, 2016 </p> <h2 class="text-3xl mt-0"> <a href="https://seld.be/notes/typo-squatting-and-packagist" title="Read more - Typo Squatting and Packagist" class="text-gray-900 dark:text-green-500 font-extrabold" >Typo Squatting and Packagist</a> </h2> <p class="mb-4 mt-0">Earlier this month an article was published summarizing Nikolai Philipp Tschacher's thesis about typosquatting. In short typosquatting is a way to attack users of a package manager by registering a...</p> <a href="https://seld.be/notes/typo-squatting-and-packagist" title="Read more - Typo Squatting and Packagist" class="uppercase font-semibold tracking-wide mb-2" >Read</a> </div> </div> </div> </main> <footer class="bg-white dark:bg-gray-900 text-center text-sm mt-12 py-4" role="contentinfo"> <ul class="flex flex-col md:flex-row justify-center"> <li class="list-none md:mr-2"> <a href="https://twitter.com/seldaek">Twitter</a> </li> <li class="list-none md:mr-2"> <a href="mailto:j.boggiano@seld.be">E-Mail</a> </li> <li class="list-none md:mr-2"> <a href="https://github.com/Seldaek">GitHub</a> </li> <li class="list-none md:mr-2"> <a href="/wishlist">Wishlist</a> </li> <li class="list-none"> All content © Jordi Boggiano 2006-2022. </li> </ul> </footer> <script src="/assets/build/js/main.js?id=d987125254011a3fac10"></script> <script> const navMenu = { toggle() { const menu = document.getElementById('js-nav-menu'); menu.classList.toggle('hidden'); menu.classList.toggle('lg:block'); document.getElementById('js-nav-menu-hide').classList.toggle('hidden'); document.getElementById('js-nav-menu-show').classList.toggle('hidden'); }, } </script> </body> </html>