56,966 blogs · [ { "id": "01a0d06d-411d-72ff-9d56-53605cd5931d", "title": "Alan's Lair", "url": "https://www.franzoni.eu/", "published_at": "2026-09-23T03:55:37+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606068fceb", "title": "Alan Franzoni - Alan's Lair", "url": "https://www.franzoni.eu/author/alan/", "published_at": "2026-08-11T11:18:38+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53605cef0fb7", "title": "Public speaking", "url": "https://www.franzoni.eu/public-speaking/", "published_at": "2026-03-30T11:29:20+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-64496a0b8f11", "title": "AI-assisted coding trumps vibe coding", "url": "https://www.franzoni.eu/ai-assisted-coding-trumps-vibe-coding/", "published_at": "2025-06-19T15:04:41+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53605d2a66a9", "title": "About this site", "url": "https://www.franzoni.eu/about/", "published_at": "2024-12-15T09:00:39+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-64496a6b8457", "title": "How to use AI to suck at user experience", "url": "https://www.franzoni.eu/how-to-use-ai-to-suck-at-customer-support/", "published_at": "2023-08-26T13:31:47+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53605e06bf26", "title": "License, legal and credits", "url": "https://www.franzoni.eu/license-legal-and-credits/", "published_at": "2023-03-15T11:49:24+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53608124c93e", "title": "cloud - Alan's Lair", "url": "https://www.franzoni.eu/tag/cloud/", "published_at": "2023-03-14T09:43:28+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-64496b2ee589", "title": "How to do a bad comparison of cloud vs colocation", "url": "https://www.franzoni.eu/how-to-do-a/", "published_at": "2023-03-13T21:49:05+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-64496b79d6d8", "title": "Password requirements: myths and madness", "url": "https://www.franzoni.eu/password-requirements-myths-madness/", "published_at": "2022-12-22T20:41:14+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536081bd8afb", "title": "passwords - Alan's Lair", "url": "https://www.franzoni.eu/tag/passwords/", "published_at": "2022-12-22T20:41:09+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-64496bcf4423", "title": "Ransomware-resistant backups with duplicity and AWS S3", "url": "https://www.franzoni.eu/ransomware-resistant-backups/", "published_at": "2022-01-27T19:50:24+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536081c7fedc", "title": "backups - Alan's Lair", "url": "https://www.franzoni.eu/tag/backups/", "published_at": "2022-01-27T19:49:05+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-64496c55ffc2", "title": "Log4j haters: just STFU", "url": "https://www.franzoni.eu/log4j-haters-please/", "published_at": "2021-12-16T21:25:01+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-64496cd2cd45", "title": "Consistent Hashing for Dummies", "url": "https://www.franzoni.eu/consistent-hashing-for-dummies/", "published_at": "2021-10-28T12:28:02+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53605e9ae6ea", "title": "About me", "url": "https://www.franzoni.eu/about-me/", "published_at": "2020-12-12T08:29:49+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-64496d4529c4", "title": "The curse of the downvote", "url": "https://www.franzoni.eu/the-curse-of-the-downvote/", "published_at": "2019-09-21T12:07:46+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-64496d8f5008", "title": "Machine Learning: a sound primer", "url": "https://www.franzoni.eu/machine-learning-a-sound-primer/", "published_at": "2019-07-31T08:40:54+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536081ec7b99", "title": "machinelearning - Alan's Lair", "url": "https://www.franzoni.eu/tag/machinelearning/", "published_at": "2019-07-31T08:40:28+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53608245685f", "title": "statistics - Alan's Lair", "url": "https://www.franzoni.eu/tag/statistics/", "published_at": "2019-07-31T08:40:28+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-64496e57c902", "title": "Standalone, single-file, editable Python scripts WITH DEPENDENCIES", "url": "https://www.franzoni.eu/single-file-editable-python-scripts-with-dependencies/", "published_at": "2019-02-19T20:58:00+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-64496e82b33b", "title": "Application authors: please don't force users into your language or packaging details", "url": "https://www.franzoni.eu/software-authors-please-dont-force-me-into-your-packaging-woes/", "published_at": "2019-01-10T17:10:00+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536083250309", "title": "delivery - Alan's Lair", "url": "https://www.franzoni.eu/tag/delivery/", "published_at": "2019-01-10T14:40:57+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-64496f204868", "title": "Misaligned Expectations: investigating the expectations gap", "url": "https://www.franzoni.eu/misaligned-expectations-investigating-the-expectations-gap/", "published_at": "2018-07-05T21:12:20+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-64496fe83fc8", "title": "SCP taming: stop local silliness", "url": "https://www.franzoni.eu/scp-taming-stop-local-sillyness/", "published_at": "2018-04-26T10:38:49+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-5360841c42f5", "title": "scp - Alan's Lair", "url": "https://www.franzoni.eu/tag/scp/", "published_at": "2018-04-26T10:31:51+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-644970d4fe1d", "title": "Productivity, the office, and the open floor plan", "url": "https://www.franzoni.eu/productivity-the-office-and-an-open-floor-plan/", "published_at": "2018-04-18T12:43:37+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53605ea7ca9b", "title": null, "url": "https://www.franzoni.eu/projects/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53605f6a7df0", "title": "Donate!", "url": "https://www.franzoni.eu/donate/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536068fa68be", "title": null, "url": "https://www.franzoni.eu/pycharm-rubymine-and-idea-linux-desktop-entries/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-5360692b76b0", "title": "Using trial as test runner with zc.buildout", "url": "https://www.franzoni.eu/using-trial-as-test-runner-with-zc-buildout/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606a285c32", "title": "Unit testing with Twisted: testing protocols", "url": "https://www.franzoni.eu/unit-testing-with-twisted-testing-protocols/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606a959e1c", "title": "Mock Javamail primer", "url": "https://www.franzoni.eu/mock-javamail-primer/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606b658765", "title": "Deploy any Java webapp via war to Heroku", "url": "https://www.franzoni.eu/deploy-any-java-webapp-via-war-to-heroku/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606c3de76d", "title": "Jetbrains IDEs: dock-aware launcher for Linux", "url": "https://www.franzoni.eu/jetbrains-ides-dock-aware-launcher-for-linux/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606cce309c", "title": "Unicode and encoding: Python vs Java shootout, part 1", "url": "https://www.franzoni.eu/unicode-and-encoding-python-vs-java-shootout-part-1/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606ccfd7b0", "title": null, "url": "https://www.franzoni.eu/unicode-and-encoding-python-vs-java-shootout-part-2/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606d9aa7be", "title": null, "url": "https://www.franzoni.eu/php-killer-features/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606da3b647", "title": null, "url": "https://www.franzoni.eu/building-a-successful-community-driven-software-project-part-1/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606db0579b", "title": "One Assertion Per Test Considered Ambiguous", "url": "https://www.franzoni.eu/one-assertion-per-test-considered-ambiguous/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606dd4da78", "title": "Python Packaging Woes - part 2", "url": "https://www.franzoni.eu/python-packaging-woes-part-2/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606e454865", "title": "Building a successful community-driven software project: part 4", "url": "https://www.franzoni.eu/building-a-successful-community-driven-software-project-part-4/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606e8f0dcf", "title": "Building a successful community-driven software project: part 2", "url": "https://www.franzoni.eu/building-a-successful-community-driven-software-project-part-2/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606f4d5b90", "title": "Building a successful community-driven software project: part 3", "url": "https://www.franzoni.eu/building-a-successful-community-driven-software-project-part-3/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53606f5dbcc4", "title": "Apple and OpenJDK: was I wrong?", "url": "https://www.franzoni.eu/apple-and-openjdk-was-i-wrong/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607048fa17", "title": "Python Packaging Woes: part 3", "url": "https://www.franzoni.eu/python-packaging-woes-part-3/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-5360713cb35a", "title": "Python Packaging woes - part 1", "url": "https://www.franzoni.eu/python-packaging-woes-part-1/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607197d76c", "title": "ssh client: stopping key verification complaints inside your own private network", "url": "https://www.franzoni.eu/ssh-client-stopping-key-verification-complaints-inside-your-own-private-network/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-5360722d11fb", "title": "ssh-copy-id with nonstandard sshd port", "url": "https://www.franzoni.eu/ssh-copy-id-with-nonstandard-sshd-port/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607316c952", "title": "Wmctrl: gather and focus your chosen window by hotkey", "url": "https://www.franzoni.eu/wmctrl-gather-and-focus-your-chosen-window-by-hotkey/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-5360735cf511", "title": "apt-get update: fixing 'package index files are corrupted'", "url": "https://www.franzoni.eu/apt-get-update-fixing-package-index-files-are-corrupted/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536073cca79d", "title": "Quick log for bash scripts, with line limit", "url": "https://www.franzoni.eu/quick-log-for-bash-scripts-with-line-limit/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536073f22ee1", "title": null, "url": "https://www.franzoni.eu/thunderbird-temporary-directory/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607489874b", "title": null, "url": "https://www.franzoni.eu/keep-your-tomcat-instance-up-to-date-and-keep-apps-and-configuration-tidy/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536074914f5c", "title": null, "url": "https://www.franzoni.eu/ubuntu-faster-release-upgrade/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536075806c02", "title": null, "url": "https://www.franzoni.eu/dropbox-and-mercurial-and-lived-happily-ever-after/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536075bfbf88", "title": "I wish sudo would ask for my password less often", "url": "https://www.franzoni.eu/i-wish-sudo-would-ask-for-my-password-less-often/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-5360765fa7f9", "title": "Disown is your friend", "url": "https://www.franzoni.eu/disown-is-your-friend/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536076815931", "title": "Unfreezing your desktop: when Compiz goes wrong", "url": "https://www.franzoni.eu/unfreezing-your-desktop-when-compiz-goes-wrong/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-5360773328f8", "title": "Kill Me Softly: killing a process The Right Way", "url": "https://www.franzoni.eu/kill-me-softly-killing-a-process-the-right-way/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536077f2ecae", "title": "chmod and the capital X", "url": "https://www.franzoni.eu/chmod-and-the-capital-x/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536078486896", "title": "Puppet Http Source for files", "url": "https://www.franzoni.eu/puppet-http-source-for-files/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536078a7fb6f", "title": "SSH hostnames configuration and shortcuts", "url": "https://www.franzoni.eu/ssh-hostnames-configuration-and-shortcuts/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-5360793b6879", "title": "Python: discover the type of an object", "url": "https://www.franzoni.eu/python-discover-the-type-of-an-object/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536079ae0498", "title": "Git Flow is superflous and complex", "url": "https://www.franzoni.eu/git-flow-is-superflous-and-complex/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536079b1d878", "title": "Automated cleanup of Docker leavings", "url": "https://www.franzoni.eu/cleaning-up-docker-leavings/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607a950654", "title": "badblocks: test your mass storage!", "url": "https://www.franzoni.eu/badblocks-test-your-mass-storage-2/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607aa33980", "title": "Python requests SSL and InsecurePlatformWarning", "url": "https://www.franzoni.eu/python-requests-ssl-and-insecureplatformwarning/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607acbaa53", "title": "Parkinson's law and estimates", "url": "https://www.franzoni.eu/parkinsons-law-and-estimates/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607b889b5e", "title": "Enabling Process vs Bureaucratic Process", "url": "https://www.franzoni.eu/enabling-process-vs-bureaucratic-process/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607c221445", "title": "Students that don't "get" computer science - bimodality as a teaching failure", "url": "https://www.franzoni.eu/students-that-dont-get-computer-science-bimodality/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607ceb5159", "title": null, "url": "https://www.franzoni.eu/stopping-the-internet-of-noise/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607d0afe53", "title": null, "url": "https://www.franzoni.eu/shell-scripting-when-to-use-the-long-or-the-shor/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607d869194", "title": null, "url": "https://www.franzoni.eu/git-identities/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607dccd941", "title": null, "url": "https://www.franzoni.eu/why-apple-should-not-ditch-java/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607e8096f6", "title": null, "url": "https://www.franzoni.eu/dont-give-a-shell-to-system-users-use-su/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607f778c91", "title": null, "url": "https://www.franzoni.eu/primitive-types-are-not-your-friends/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53607fef6015", "title": null, "url": "https://www.franzoni.eu/purging-outdated-kernels-on-systems-with-unattended-upgrades/", "published_at": "2018-03-29T13:28:33+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-5360845c8977", "title": null, "url": "https://www.franzoni.eu/tag/mostlyunixish/", "published_at": "2018-02-14T14:50:09+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53608557c076", "title": null, "url": "https://www.franzoni.eu/tag/python/", "published_at": "2018-02-14T14:50:09+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536085cbf483", "title": null, "url": "https://www.franzoni.eu/tag/ollivander/", "published_at": "2018-02-14T14:50:09+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-5360861eaf02", "title": null, "url": "https://www.franzoni.eu/tag/datacrunching/", "published_at": "2018-02-14T14:50:09+00:00" }, { "id": "01a08779-c4c8-72cd-a8d2-644971b3b9db", "title": "Command line data crunching with Python", "url": "https://www.franzoni.eu/command-line-data-crunching-with-python/", "published_at": "2018-02-14T14:44:51+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53608621aa12", "title": null, "url": "https://www.franzoni.eu/tag/php/", "published_at": "2018-02-09T14:38:13+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536086a4d565", "title": null, "url": "https://www.franzoni.eu/tag/web/", "published_at": "2018-02-09T14:38:13+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536086a7ce48", "title": null, "url": "https://www.franzoni.eu/tag/programming/", "published_at": "2018-02-09T14:38:13+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53608788c365", "title": null, "url": "https://www.franzoni.eu/tag/community/", "published_at": "2018-02-09T14:37:50+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536088262ade", "title": null, "url": "https://www.franzoni.eu/tag/ubuntu/", "published_at": "2018-02-09T14:37:50+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536088faf422", "title": null, "url": "https://www.franzoni.eu/tag/linux/", "published_at": "2018-02-09T14:37:50+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-5360893e7f71", "title": null, "url": "https://www.franzoni.eu/tag/ancientwisdom/", "published_at": "2018-02-09T14:37:50+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53608a3b8d42", "title": null, "url": "https://www.franzoni.eu/tag/compiz/", "published_at": "2018-02-09T14:37:50+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53608b32c7ec", "title": null, "url": "https://www.franzoni.eu/tag/type-system/", "published_at": "2018-02-09T14:37:15+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53608c0e75fc", "title": null, "url": "https://www.franzoni.eu/tag/rants/", "published_at": "2017-07-04T21:48:23+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53608c9afbc2", "title": null, "url": "https://www.franzoni.eu/tag/thoughts/", "published_at": "2017-07-04T21:48:23+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53608d462930", "title": null, "url": "https://www.franzoni.eu/tag/teach/", "published_at": "2017-03-17T08:29:38+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53608de25785", "title": null, "url": "https://www.franzoni.eu/tag/cs/", "published_at": "2017-03-17T08:29:38+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53608ea91743", "title": null, "url": "https://www.franzoni.eu/tag/industry/", "published_at": "2017-03-17T08:29:38+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-53608f6d684e", "title": null, "url": "https://www.franzoni.eu/tag/academy/", "published_at": "2017-03-17T08:29:38+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-5360905e2ccd", "title": null, "url": "https://www.franzoni.eu/tag/process/", "published_at": "2016-11-17T22:06:49+00:00" }, { "id": "01a0d06d-411d-72ff-9d56-536090e2d4b4", "title": null, "url": "https://www.franzoni.eu/tag/bureaucracy/", "published_at": "2016-11-17T22:06:49+00:00" } ] posts Claim your blog
Back to franzoni.eu
Blog · corpus.blog/blogs/franzoni.eu/posts

franzoni.eu

franzoni.eu

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016