<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/feed-style.xsl" type="text/xsl"?><rss version="2.0"><channel><title>op111.net</title><description>An online notebook with recipes for web development by Demetris Kikizas</description><link>https://op111.net/</link><item><title>I released nobot, a detection system for low-effort bots</title><link>https://op111.net/posts/2026/02/nobot-detection-system-for-low-effort-bots/</link><guid isPermaLink="true">https://op111.net/posts/2026/02/nobot-detection-system-for-low-effort-bots/</guid><pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate></item><item><title>How to block Googlebot impersonators</title><link>https://op111.net/posts/2025/11/block-googlebot-impersonators/</link><guid isPermaLink="true">https://op111.net/posts/2025/11/block-googlebot-impersonators/</guid><description>Apache snippets to block fake Googlebots</description><pubDate>Sat, 08 Nov 2025 00:00:00 GMT</pubDate></item><item><title>SEO and SEM badness</title><link>https://op111.net/posts/2025/11/semrush/</link><guid isPermaLink="true">https://op111.net/posts/2025/11/semrush/</guid><description>SEMrush</description><pubDate>Tue, 04 Nov 2025 00:00:00 GMT</pubDate></item><item><title>PNG and modern image formats: A comparison of lossless image compression</title><link>https://op111.net/posts/2025/10/png-and-modern-formats-lossless-image-compression/</link><guid isPermaLink="true">https://op111.net/posts/2025/10/png-and-modern-formats-lossless-image-compression/</guid><description>A benchmark of lossless image compression comparing PNG with AVIF, HEIF, JPEG XL, and WebP for fourteen graphics images</description><pubDate>Wed, 15 Oct 2025 00:00:00 GMT</pubDate></item><item><title>oxipng and friends: A comparison of PNG optimization tools</title><link>https://op111.net/posts/2025/09/png-compression-oxipng-optipng-fileoptimizer-cwebp/</link><guid isPermaLink="true">https://op111.net/posts/2025/09/png-compression-oxipng-optipng-fileoptimizer-cwebp/</guid><description>A comparison of PNG compression with optipng, oxipng, and FileOptimizer; also includes results of lossless conversion from PNG to WebP</description><pubDate>Thu, 11 Sep 2025 00:00:00 GMT</pubDate></item><item><title>Omni Carousel</title><link>https://op111.net/posts/2025/07/omni-carousel/</link><guid isPermaLink="true">https://op111.net/posts/2025/07/omni-carousel/</guid><description>Earlier this month I published Omni Carousel — Check it out!</description><pubDate>Fri, 11 Jul 2025 00:00:00 GMT</pubDate></item><item><title>WooCommerce hooks added in versions 6.0 to 8.3</title><link>https://op111.net/posts/2023/11/woocommerce-new-hooks-60-to-83/</link><guid isPermaLink="true">https://op111.net/posts/2023/11/woocommerce-new-hooks-60-to-83/</guid><pubDate>Thu, 30 Nov 2023 00:00:00 GMT</pubDate></item><item><title>WooCommerce filter hooks</title><link>https://op111.net/posts/2023/11/woocommerce-filter-hooks/</link><guid isPermaLink="true">https://op111.net/posts/2023/11/woocommerce-filter-hooks/</guid><pubDate>Wed, 29 Nov 2023 00:00:00 GMT</pubDate></item><item><title>Lean HTML markup with modern CSS</title><link>https://op111.net/posts/2023/08/lean-html-markup-with-modern-css/</link><guid isPermaLink="true">https://op111.net/posts/2023/08/lean-html-markup-with-modern-css/</guid><pubDate>Sun, 06 Aug 2023 00:00:00 GMT</pubDate></item><item><title>Astro resources for beginners</title><link>https://op111.net/posts/2023/07/astro-resources-for-beginners/</link><guid isPermaLink="true">https://op111.net/posts/2023/07/astro-resources-for-beginners/</guid><description>A selection of resources that helped me move this site from WordPress to Astro</description><pubDate>Sun, 09 Jul 2023 00:00:00 GMT</pubDate></item><item><title>WordPress developer notes for versions 5.8, 5.9, 6.0 and 6.1</title><link>https://op111.net/posts/2022/09/wordpres-developer-notes-58-59-60-61/</link><guid isPermaLink="true">https://op111.net/posts/2022/09/wordpres-developer-notes-58-59-60-61/</guid><description>Reading list of developer documentation for WordPress 5.8, 5.9, 6.0 and 6.1</description><pubDate>Wed, 21 Sep 2022 00:00:00 GMT</pubDate></item><item><title>Lorem ipsum: Article no. 2</title><link>https://op111.net/posts/2022/06/lorem-ipsum-article-no-2/</link><guid isPermaLink="true">https://op111.net/posts/2022/06/lorem-ipsum-article-no-2/</guid><description>This is a Lorem Ipsum post, intended for testing various features of the website setup</description><pubDate>Mon, 06 Jun 2022 04:06:31 GMT</pubDate></item><item><title>How to merge two Git repositories</title><link>https://op111.net/posts/2021/04/merge-two-git-repositories/</link><guid isPermaLink="true">https://op111.net/posts/2021/04/merge-two-git-repositories/</guid><description>How to merge two repos in five quick steps (from a Stack Overflow answer)</description><pubDate>Thu, 08 Apr 2021 00:00:00 GMT</pubDate></item><item><title>How to target HTML elements that have no CSS classes</title><link>https://op111.net/posts/2020/10/target-html-elements-without-classes/</link><guid isPermaLink="true">https://op111.net/posts/2020/10/target-html-elements-without-classes/</guid><pubDate>Sat, 24 Oct 2020 00:00:00 GMT</pubDate></item><item><title>How to delete (empty) the content of a file in Linux</title><link>https://op111.net/posts/2020/08/delete-file-content-in-linux/</link><guid isPermaLink="true">https://op111.net/posts/2020/08/delete-file-content-in-linux/</guid><pubDate>Fri, 14 Aug 2020 00:00:00 GMT</pubDate></item><item><title>How to auto-renew Let’s Encrypt certificates in Debian 10</title><link>https://op111.net/posts/2020/07/auto-renew-lets-encrypt-certificates-in-debian-10/</link><guid isPermaLink="true">https://op111.net/posts/2020/07/auto-renew-lets-encrypt-certificates-in-debian-10/</guid><pubDate>Mon, 06 Jul 2020 00:00:00 GMT</pubDate></item><item><title>How to remove the ID and all CSS classes from WordPress menu items</title><link>https://op111.net/posts/2020/07/remove-id-and-all-css-classes-from-wordpress-menu-items/</link><guid isPermaLink="true">https://op111.net/posts/2020/07/remove-id-and-all-css-classes-from-wordpress-menu-items/</guid><pubDate>Sat, 04 Jul 2020 00:00:00 GMT</pubDate></item><item><title>How to remove file lines that match a pattern</title><link>https://op111.net/posts/2020/07/remove-lines-that-match-pattern/</link><guid isPermaLink="true">https://op111.net/posts/2020/07/remove-lines-that-match-pattern/</guid><pubDate>Fri, 03 Jul 2020 00:00:00 GMT</pubDate></item><item><title>WordPress security checklist</title><link>https://op111.net/posts/2020/06/wordpress-security-checklist/</link><guid isPermaLink="true">https://op111.net/posts/2020/06/wordpress-security-checklist/</guid><pubDate>Mon, 29 Jun 2020 00:00:00 GMT</pubDate></item><item><title>How to delete a Let’s Encrypt certificate</title><link>https://op111.net/posts/2020/06/delete-lets-encrypt-certificate/</link><guid isPermaLink="true">https://op111.net/posts/2020/06/delete-lets-encrypt-certificate/</guid><pubDate>Tue, 16 Jun 2020 00:00:00 GMT</pubDate></item><item><title>How to unban an IP address in fail2ban</title><link>https://op111.net/posts/2020/06/unban-ip-address-in-fail2ban/</link><guid isPermaLink="true">https://op111.net/posts/2020/06/unban-ip-address-in-fail2ban/</guid><pubDate>Sat, 13 Jun 2020 00:00:00 GMT</pubDate></item><item><title>How to disable manual uploading of WordPress themes and plugins in Apache 2.4</title><link>https://op111.net/posts/2020/06/disable-manual-uploading-of-wordpress-plugins-and-themes/</link><guid isPermaLink="true">https://op111.net/posts/2020/06/disable-manual-uploading-of-wordpress-plugins-and-themes/</guid><pubDate>Thu, 11 Jun 2020 00:00:00 GMT</pubDate></item><item><title>PHP versions in Linux distributions</title><link>https://op111.net/posts/2020/06/php-versions-in-linux/</link><guid isPermaLink="true">https://op111.net/posts/2020/06/php-versions-in-linux/</guid><pubDate>Sat, 06 Jun 2020 00:00:00 GMT</pubDate></item><item><title>Unsupported CSS selectors invalidate the whole selector group</title><link>https://op111.net/posts/2020/06/unsupported-css-selectors-invalidate-selector-group/</link><guid isPermaLink="true">https://op111.net/posts/2020/06/unsupported-css-selectors-invalidate-selector-group/</guid><description>What happens when you group supported and unsupported CSS selectors together, and how to avoid it</description><pubDate>Thu, 04 Jun 2020 00:00:00 GMT</pubDate></item><item><title>WordPress default roles and capabilities</title><link>https://op111.net/posts/2020/06/wordpress-default-roles-and-capabilities/</link><guid isPermaLink="true">https://op111.net/posts/2020/06/wordpress-default-roles-and-capabilities/</guid><pubDate>Thu, 04 Jun 2020 00:00:00 GMT</pubDate></item><item><title>How to search and replace in nano</title><link>https://op111.net/posts/2020/06/search-and-replace-in-nano/</link><guid isPermaLink="true">https://op111.net/posts/2020/06/search-and-replace-in-nano/</guid><pubDate>Tue, 02 Jun 2020 00:00:00 GMT</pubDate></item><item><title>How to block the WordPress xmlrpc.php globally in Apache 2.4 with exceptions for specific sites</title><link>https://op111.net/posts/2020/06/block-wordpress-xmlrpc-php-globally-with-exceptions/</link><guid isPermaLink="true">https://op111.net/posts/2020/06/block-wordpress-xmlrpc-php-globally-with-exceptions/</guid><pubDate>Mon, 01 Jun 2020 00:00:00 GMT</pubDate></item><item><title>Resources for CSS grid</title><link>https://op111.net/posts/2020/06/css-grid-resources/</link><guid isPermaLink="true">https://op111.net/posts/2020/06/css-grid-resources/</guid><pubDate>Mon, 01 Jun 2020 00:00:00 GMT</pubDate></item><item><title>WordPress WP-CLI commands</title><link>https://op111.net/posts/2020/05/wordpress-wp-cli-commands/</link><guid isPermaLink="true">https://op111.net/posts/2020/05/wordpress-wp-cli-commands/</guid><pubDate>Sat, 30 May 2020 00:00:00 GMT</pubDate></item><item><title>How to block HTTP/1.* requests to wp-login.php in Apache 2.4</title><link>https://op111.net/posts/2020/05/block-http-1-requests-to-wp-login-in-apache-24/</link><guid isPermaLink="true">https://op111.net/posts/2020/05/block-http-1-requests-to-wp-login-in-apache-24/</guid><pubDate>Wed, 27 May 2020 00:00:00 GMT</pubDate></item><item><title>Debian manpages</title><link>https://op111.net/posts/2020/05/debian-manpages/</link><guid isPermaLink="true">https://op111.net/posts/2020/05/debian-manpages/</guid><pubDate>Wed, 27 May 2020 00:00:00 GMT</pubDate></item><item><title>How to filter the output of Contact Form 7 or any other shortcode in WordPress</title><link>https://op111.net/posts/2017/09/wordpress-contact-form-7-shortcode-filter/</link><guid isPermaLink="true">https://op111.net/posts/2017/09/wordpress-contact-form-7-shortcode-filter/</guid><pubDate>Sat, 02 Sep 2017 00:00:00 GMT</pubDate></item><item><title>How to edit the PATH environment variable in Windows without pain</title><link>https://op111.net/posts/2011/01/edit-path-in-windows/</link><guid isPermaLink="true">https://op111.net/posts/2011/01/edit-path-in-windows/</guid><description>Four alternative applications to edit the PATH and other environment variables in Windows. Two are CLI tools, two are GUI tools, and all are available for free</description><pubDate>Sat, 29 Jan 2011 00:00:00 GMT</pubDate></item><item><title>The WordPress excerpt: What, why, how, tips and plugins</title><link>https://op111.net/posts/2009/02/wordpress-excerpts/</link><guid isPermaLink="true">https://op111.net/posts/2009/02/wordpress-excerpts/</guid><pubDate>Tue, 17 Feb 2009 00:00:00 GMT</pubDate></item><item><title>How to make a child theme for WordPress: A pictorial introduction for beginners</title><link>https://op111.net/posts/2008/08/wordpress-child-themes/</link><guid isPermaLink="true">https://op111.net/posts/2008/08/wordpress-child-themes/</guid><pubDate>Thu, 28 Aug 2008 00:00:00 GMT</pubDate></item></channel></rss>