<?xml version="1.0" encoding="UTF-8"?>
<!-- This sitemap was dynamically generated on 2026-06-30 at 21:02 by All in One SEO v4.7.5 - the original SEO plugin for WordPress. -->

<?xml-stylesheet type="text/xsl" href="https://gbh.fruitbat.io/default-sitemap.xsl"?>

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>gbh</title>
		<link><![CDATA[https://gbh.fruitbat.io]]></link>
		<description><![CDATA[gbh]]></description>
		<lastBuildDate><![CDATA[Wed, 23 Jul 2025 14:43:58 +0800]]></lastBuildDate>
		<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
		<atom:link href="https://gbh.fruitbat.io/sitemap.rss" rel="self" type="application/rss+xml" />
		<ttl><![CDATA[60]]></ttl>

		<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2025/07/23/php-manipulating-file-pointers-with-fseek-and-ftell/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2025/07/23/php-manipulating-file-pointers-with-fseek-and-ftell/]]></link>
			<title>php: manipulating file pointers with fseek and ftell</title>
			<pubDate><![CDATA[Wed, 23 Jul 2025 14:43:58 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2025/01/29/php-writing-command-line-applications-with-macrame/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2025/01/29/php-writing-command-line-applications-with-macrame/]]></link>
			<title>php: writing command-line applications with macrame. pt 1</title>
			<pubDate><![CDATA[Wed, 19 Feb 2025 14:40:21 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2025/08/13/nginx-making-basic-auth-useful/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2025/08/13/nginx-making-basic-auth-useful/]]></link>
			<title>nginx: making basic auth useful</title>
			<pubDate><![CDATA[Wed, 13 Aug 2025 14:45:58 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/privacy/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/privacy/]]></link>
			<title>privacy</title>
			<pubDate><![CDATA[Tue, 03 Sep 2024 17:43:37 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/09/19/mysql-thai-food-near-me-or-doing-geo-distance-calculations-in-your-database/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/09/19/mysql-thai-food-near-me-or-doing-geo-distance-calculations-in-your-database/]]></link>
			<title>mysql: &#8220;thai food near me&#8221;, or: doing geo distance calculations in your database.</title>
			<pubDate><![CDATA[Thu, 19 Sep 2024 18:54:01 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/09/30/vim-five-tips-to-become-a-more-mediocre-vim-user/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/09/30/vim-five-tips-to-become-a-more-mediocre-vim-user/]]></link>
			<title>vim: five tips to become a more mediocre vim user</title>
			<pubDate><![CDATA[Mon, 30 Sep 2024 15:06:36 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2025/07/03/linux-looking-under-the-hood-of-neofetch/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2025/07/03/linux-looking-under-the-hood-of-neofetch/]]></link>
			<title>linux: looking under the hood of neofetch</title>
			<pubDate><![CDATA[Mon, 07 Jul 2025 17:14:01 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2025/02/19/php-writing-command-line-applications-with-macrame-pt-2/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2025/02/19/php-writing-command-line-applications-with-macrame-pt-2/]]></link>
			<title>php: writing command-line applications with macrame. pt 2</title>
			<pubDate><![CDATA[Mon, 07 Jul 2025 17:13:29 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2025/02/07/php-powerful-sorting-with-usort/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2025/02/07/php-powerful-sorting-with-usort/]]></link>
			<title>php: powerful sorting with usort</title>
			<pubDate><![CDATA[Fri, 07 Feb 2025 15:52:31 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/09/05/nginx-putting-your-site-in-downtime-for-everyone-except-you/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/09/05/nginx-putting-your-site-in-downtime-for-everyone-except-you/]]></link>
			<title>nginx: putting your site in &#8216;downtime&#8217; for everyone except you</title>
			<pubDate><![CDATA[Fri, 06 Sep 2024 18:08:00 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/07/22/php-concurrency-with-processes-pt-1-using-pcntl_fork-for-fun-and-performance/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/07/22/php-concurrency-with-processes-pt-1-using-pcntl_fork-for-fun-and-performance/]]></link>
			<title>php: concurrency with processes. pt. 1: using pcntl_fork for fun and performance</title>
			<pubDate><![CDATA[Mon, 19 Aug 2024 14:59:11 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/08/19/php-concurrency-with-processes-pt-2-interprocess-communication-with-shmop/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/08/19/php-concurrency-with-processes-pt-2-interprocess-communication-with-shmop/]]></link>
			<title>php: concurrency with processes. pt. 2: interprocess communication with shmop</title>
			<pubDate><![CDATA[Mon, 19 Aug 2024 14:58:20 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/06/27/amber-writing-bash-scripts-in-amber-instead-pt-3-the-standard-library/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/06/27/amber-writing-bash-scripts-in-amber-instead-pt-3-the-standard-library/]]></link>
			<title>amber: writing bash scripts in amber instead. pt. 3: the standard library</title>
			<pubDate><![CDATA[Wed, 03 Jul 2024 15:13:14 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/07/03/amber-writing-bash-scripts-in-amber-instead-pt-4-functions/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/07/03/amber-writing-bash-scripts-in-amber-instead-pt-4-functions/]]></link>
			<title>amber: writing bash scripts in amber instead. pt. 4: functions</title>
			<pubDate><![CDATA[Wed, 03 Jul 2024 15:12:57 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/05/28/mysql-using-json-data-and-not-hating-it/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/05/28/mysql-using-json-data-and-not-hating-it/]]></link>
			<title>mysql: using json data and not hating it</title>
			<pubDate><![CDATA[Wed, 29 May 2024 12:53:07 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/06/18/amber-writing-bash-scripts-in-amber-instead-pt-1-commands-and-error-handling/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/06/18/amber-writing-bash-scripts-in-amber-instead-pt-1-commands-and-error-handling/]]></link>
			<title>amber: writing bash scripts in amber instead. pt. 1: commands and error handling</title>
			<pubDate><![CDATA[Wed, 03 Jul 2024 14:48:51 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/06/20/amber-writing-bash-scripts-in-amber-instead-pt-2-loops-and-ifs/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/06/20/amber-writing-bash-scripts-in-amber-instead-pt-2-loops-and-ifs/]]></link>
			<title>amber: writing bash scripts in amber instead. pt. 2: loops and ifs</title>
			<pubDate><![CDATA[Wed, 03 Jul 2024 14:48:31 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/05/21/bash-splitting-tarballs-the-easy-way/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/05/21/bash-splitting-tarballs-the-easy-way/]]></link>
			<title>bash: splitting tarballs the &#8216;easy&#8217; way</title>
			<pubDate><![CDATA[Tue, 21 May 2024 14:44:45 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2025/09/09/php-a-curl-cheatsheet/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2025/09/09/php-a-curl-cheatsheet/]]></link>
			<title>php: a curl cheatsheet</title>
			<pubDate><![CDATA[Tue, 09 Sep 2025 15:44:11 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/06/04/php-doing-recursion-with-recursive-iteratoriterators/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/06/04/php-doing-recursion-with-recursive-iteratoriterators/]]></link>
			<title>php: doing recursion with recursive iterator(iterator)s</title>
			<pubDate><![CDATA[Tue, 04 Jun 2024 13:47:04 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/05/12/nginx-serving-private-files-with-x-accel/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/05/12/nginx-serving-private-files-with-x-accel/]]></link>
			<title>nginx: serving private files with X-Accel-Redirect</title>
			<pubDate><![CDATA[Thu, 16 May 2024 14:56:28 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/04/22/uploading-to-s3-with-bash/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/04/22/uploading-to-s3-with-bash/]]></link>
			<title>bash: uploading to s3 using curl</title>
			<pubDate><![CDATA[Thu, 16 May 2024 14:42:05 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/04/29/managing-disk-space-in-bash/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/04/29/managing-disk-space-in-bash/]]></link>
			<title>managing disk space in bash</title>
			<pubDate><![CDATA[Thu, 16 May 2024 14:38:59 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/04/18/making-mysql-stdout-less-or-more-of-a-mess/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/04/18/making-mysql-stdout-less-or-more-of-a-mess/]]></link>
			<title>making mysql STDOUT less (or more) of a mess</title>
			<pubDate><![CDATA[Thu, 09 May 2024 16:16:53 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/06/10/nginx-doing-ip-geolocation-right-in-nginx/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/06/10/nginx-doing-ip-geolocation-right-in-nginx/]]></link>
			<title>nginx: doing ip geolocation right in nginx</title>
			<pubDate><![CDATA[Mon, 10 Jun 2024 14:19:46 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/05/21/php-write-php-8-4s-array_find-from-scratch/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/05/21/php-write-php-8-4s-array_find-from-scratch/]]></link>
			<title>php: write php 8.4&#8217;s array_find from scratch</title>
			<pubDate><![CDATA[Mon, 03 Jun 2024 15:28:09 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2024/05/06/mysql-using-the-slow-query-log/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2024/05/06/mysql-using-the-slow-query-log/]]></link>
			<title>mysql: using the slow query log</title>
			<pubDate><![CDATA[Thu, 09 May 2024 16:14:19 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/sample-page/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/sample-page/]]></link>
			<title>Sample Page</title>
			<pubDate><![CDATA[Wed, 17 Apr 2024 17:55:02 +0800]]></pubDate>
		</item>
					<item>
			<guid><![CDATA[https://gbh.fruitbat.io/2025/09/15/curl-getting-performance-data-with-curl/]]></guid>
			<link><![CDATA[https://gbh.fruitbat.io/2025/09/15/curl-getting-performance-data-with-curl/]]></link>
			<title>curl: getting performance data with curl</title>
			<pubDate><![CDATA[Mon, 15 Sep 2025 15:30:50 +0800]]></pubDate>
		</item>
				</channel>
</rss>
