<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Python on Charlie Howlett</title>
		<link>https://charliehowlett.co.uk/tags/python/</link>
		<description>Recent content in Python on Charlie Howlett</description>
		<generator>Hugo</generator>
		<language>en-gb</language>
		
		
		
		
			<lastBuildDate>Sat, 22 Aug 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://charliehowlett.co.uk/tags/python/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Automating Backing Tracks</title>
				<link>https://charliehowlett.co.uk/posts/2026-08-22-automating-backing-tracks/</link>
				<pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2026-08-22-automating-backing-tracks/</guid>
				<description>&lt;p&gt;When rehearsing, alone or with others, I sometimes like to play along to backing tracks with a few of the original instrument parts removed. My &lt;a href=&#34;https://charliehowlett.co.uk/posts/2025-05-03-building-compact-hybrid-drumming/&#34;&gt;hybrid drumming rig&lt;/a&gt; works well for this, but preparing the backing tracks can be a pain. Typically, I&amp;rsquo;d download an MP3 of the song, manually upload it to a stem-separation service, then re-export it in the TM-2’s expected format: stereo 44.1 kHz PCM WAV. This works, but preparing a couple of songs for a rehearsal can take quite a bit of time.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Automating LinkedIn Cross-Posting</title>
				<link>https://charliehowlett.co.uk/posts/2026-08-05-linkedin-cross-posting/</link>
				<pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2026-08-05-linkedin-cross-posting/</guid>
				<description>&lt;p&gt;I&amp;rsquo;ve been writing posts here for quite a while, and during that time the site has grown to cover a fairly wide mix of topics. I felt it would be nice to share that work with a larger audience, so I decided to implement a CI/CD pipeline for automatically cross-posting to LinkedIn.&lt;/p&gt;&#xA;&lt;h2 id=&#34;implementation&#34;&gt;Implementation&lt;/h2&gt;&#xA;&lt;p&gt;I originally considered using Zapier for this, but the free tier did not offer the functionality I needed, so I built a small publishing pipeline myself using GitHub Actions.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Monitoring Devices on My Home Network</title>
				<link>https://charliehowlett.co.uk/posts/2026-06-13-device-monitoring/</link>
				<pubDate>Sat, 13 Jun 2026 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2026-06-13-device-monitoring/</guid>
				<description>&lt;p&gt;My router gives me a basic view of the devices currently connected to my network, but it does not expose historical information. I started this project to fill that gap: a small Raspberry Pi service that scans the LAN, records which devices it sees, and shows that data in a dashboard.&lt;/p&gt;&#xA;&lt;h2 id=&#34;implementation&#34;&gt;Implementation&lt;/h2&gt;&#xA;&lt;p&gt;The service periodically runs &lt;code&gt;arp-scan&lt;/code&gt; to discover devices on the local network, then stores the results in a database with both the current device state and a history of online/offline events. That split lets the system track when a device first appeared, when it was last seen, and how its presence changed across a day or week.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Arduino LoRa Monitoring System</title>
				<link>https://charliehowlett.co.uk/posts/2022-01-11-arduino-monitoring/</link>
				<pubDate>Tue, 11 Jan 2022 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2022-01-11-arduino-monitoring/</guid>
				<description>&lt;p&gt;I rent a small drumming practice space that I share with several other musicians on a timetable basis. I built this monitoring system to understand how often people were using their booked time slots and how the room&amp;rsquo;s environmental conditions changed over time. Since the space has no Wi-Fi and unreliable mains power, the project became an interesting challenge involving low-power hardware, long-range radio communication, and remote data collection.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;picture&gt;&#xA;  &lt;source&#xA;    type=&#34;image/webp&#34;&#xA;    srcset=&#34;https://charliehowlett.co.uk/posts/2022-01-11-arduino-monitoring/ArduinoMonitoring_hu_febdf34626a4b6ed.webp 520w, https://charliehowlett.co.uk/posts/2022-01-11-arduino-monitoring/ArduinoMonitoring_hu_2626646897062a3e.webp 1040w&#34;&#xA;    sizes=&#34;(max-width: 700px) 90vw, 520px&#34;&gt;&#xA;  &lt;img&#xA;    class=&#34;image-medium&#34;&#xA;    src=&#34;https://charliehowlett.co.uk/fallback-images/posts/2022-01-11-arduino-monitoring/ArduinoMonitoring.jpg&#34;&#xA;    alt=&#34;The Arduino monitoring hardware with sensors and radio module&#34;&#xA;    width=&#34;1500&#34;&#xA;    height=&#34;1500&#34;&#xA;    decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&#xA;&#xA;&#xA;&lt;h2 id=&#34;sensor-node&#34;&gt;Sensor node&lt;/h2&gt;&#xA;&lt;p&gt;The sensing node is built around a 3.3V Arduino Pro Mini with sensors for PIR motion, humidity, temperature, and ambient light. Every ten minutes, it wakes up, collects readings, packs them into a small JSON payload, transmits the result by radio, and returns to sleep. I spent a significant amount of time reducing its power consumption so the device could run for roughly six months from three AA batteries. For this project, reliable long-term monitoring mattered more than collecting readings more frequently.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Automating Lights with a Raspberry Pi</title>
				<link>https://charliehowlett.co.uk/posts/2021-09-02-pi-lights/</link>
				<pubDate>Thu, 02 Sep 2021 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2021-09-02-pi-lights/</guid>
				<description>&lt;p&gt;Pi Lights was a fairly simple idea and my first exploration into DIY home automation: measure the ambient light level throughout the day using a Raspberry Pi, then switch Wi-Fi lights on or off automatically.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;video-frame teletext-box&#34;&gt;&#xA;  &lt;iframe&#xA;    class=&#34;video-frame__iframe&#34;&#xA;    src=&#34;https://www.youtube-nocookie.com/embed/ZpO6WK41Bb8&#34;&#xA;    title=&#34;Pi lights demo video&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34;&#xA;    referrerpolicy=&#34;strict-origin-when-cross-origin&#34;&#xA;    allowfullscreen&gt;&#xA;  &lt;/iframe&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;implementation&#34;&gt;Implementation&lt;/h2&gt;&#xA;&lt;p&gt;The system polls several light-dependent resistors and averages their readings before deciding whether to switch the lights. Using multiple sensors and rate-limiting changes made the automation less sensitive to brief shadows or sudden changes in brightness. A dedicated light-sensing Raspberry Pi HAT would have been more accurate, but I wanted to see if I could build a first pass using components I already had lying around. I ran the software as a Linux service so it would start automatically and continue working in the background without needing any attention.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Raspberry Pi Digital Lock</title>
				<link>https://charliehowlett.co.uk/posts/2018-11-02-prom-keypad/</link>
				<pubDate>Fri, 02 Nov 2018 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2018-11-02-prom-keypad/</guid>
				<description>&lt;picture&gt;&#xA;  &lt;source&#xA;    type=&#34;image/webp&#34;&#xA;    srcset=&#34;https://charliehowlett.co.uk/posts/2018-11-02-prom-keypad/clean_wiring_hu_9dcf58a94585cfa6.webp 720w, https://charliehowlett.co.uk/posts/2018-11-02-prom-keypad/clean_wiring_hu_ef0052c3d807e7e.webp 1440w&#34;&#xA;    sizes=&#34;(max-width: 700px) 90vw, 720px&#34;&gt;&#xA;  &lt;img&#xA;    class=&#34;image-large&#34;&#xA;    src=&#34;https://charliehowlett.co.uk/fallback-images/posts/2018-11-02-prom-keypad/clean_wiring.jpg&#34;&#xA;    alt=&#34;The final keypad lock wiring after we cleaned up the hardware&#34;&#xA;    width=&#34;1920&#34;&#xA;    height=&#34;1080&#34;&#xA;    decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&#xA;&#xA;&#xA;&lt;p&gt;This first-year group project started with a simple brief: build a keypad-controlled digital lock using a Raspberry Pi. It was a small project, but a very rewarding one, and it introduced me to some great people. Ultimately, our project was chosen by the lecturer to be demonstrated at subsequent university open days.&lt;/p&gt;&#xA;&lt;p&gt;The main constraint was that we were not allowed to rely on interrupt-driven input for the membrane keypad. Instead, we had to detect key presses by polling the Pi&amp;rsquo;s pins and working through the keypad matrix ourselves. On top of the basic four-digit passcode entry, we added status LEDs for correct and incorrect codes, a short delay after failed attempts to make brute forcing less practical, and a text-based interface for changing settings after the user had gained access. We also wrote software to attack our own system by generating electrical signals that mimicked key presses.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Decoding a Pen</title>
				<link>https://charliehowlett.co.uk/posts/2018-10-23-decoding-an-hmgcc-pen/</link>
				<pubDate>Tue, 23 Oct 2018 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2018-10-23-decoding-an-hmgcc-pen/</guid>
				<description>&lt;p&gt;I recently came across a HMGCC recruitment pen with a curious message printed along the side. It seemed to be a small hexadecimal puzzle, which piqued my curiosity enough to see if I could decode it.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;picture&gt;&#xA;  &lt;source&#xA;    type=&#34;image/webp&#34;&#xA;    srcset=&#34;https://charliehowlett.co.uk/posts/2018-10-23-decoding-an-hmgcc-pen/hmgcc-pen_hu_7aac2eff41ff146.webp 520w, https://charliehowlett.co.uk/posts/2018-10-23-decoding-an-hmgcc-pen/hmgcc-pen_hu_4b66f196bb066d02.webp 1040w&#34;&#xA;    sizes=&#34;(max-width: 700px) 90vw, 520px&#34;&gt;&#xA;  &lt;img&#xA;    class=&#34;image-medium&#34;&#xA;    src=&#34;https://charliehowlett.co.uk/fallback-images/posts/2018-10-23-decoding-an-hmgcc-pen/hmgcc-pen.jpg&#34;&#xA;    alt=&#34;An HMGCC pen with a hexadecimal code printed along the side&#34;&#xA;    width=&#34;1075&#34;&#xA;    height=&#34;1075&#34;&#xA;    decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&#xA;&#xA;&#xA;&lt;p&gt;After manually transcribing the hexadecimal values from the pen, I first played around in &lt;a href=&#34;https://gchq.github.io/CyberChef/&#34;&gt;CyberChef&lt;/a&gt; to get a feel for how the message might be encoded. Once I had a likely approach, I wrote a short Python script to put the decoding steps somewhere concrete:&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
