<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Simon Butler</title><link>https://simon-butler.com/blog/</link><description>Recent content in Posts on Simon Butler</description><generator>Hugo</generator><language>en-gb</language><lastBuildDate>Sat, 26 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://simon-butler.com/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Mealie, a local LLM, and a meal plan that writes the shopping list</title><link>https://simon-butler.com/blog/2026/09/mealie-toolkit/</link><pubDate>Sat, 26 Sep 2026 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2026/09/mealie-toolkit/</guid><description>&lt;p&gt;In August I put &lt;a href="https://mealie.io"&gt;Mealie&lt;/a&gt;, a self-hosted recipe manager, on the homelab box. It has a meal planner and a shopping list, and it can import a recipe from almost any website with one click. Today I published a companion service for it, &lt;a href="https://github.com/pthimon/mealie-toolkit"&gt;mealie-toolkit&lt;/a&gt;, which tidies up every imported recipe using the local LLM, and turns the week&amp;rsquo;s meal plan into a shopping list at the sizes we&amp;rsquo;ll actually cook.&lt;/p&gt;&#10;&lt;h2 id="seeding-it"&gt;Seeding it&lt;/h2&gt;&#10;&lt;p&gt;An empty recipe manager isn&amp;rsquo;t much use, so I started with two sets of 45 recipes from BBC Good Food. The first was mains, filtered on low saturated fat and chosen to widen a rota built around salmon, sea bass, chicken breast, black beans and tortillas, with some winter soups and slow-cooker dishes. The second was cakes, desserts and snacks, with a ceiling of 10 g of saturated fat per portion, though most sit far below that.&lt;/p&gt;</description></item><item><title>Replacing my endless news feed with a twice-daily LLM digest</title><link>https://simon-butler.com/blog/2026/09/news-digest/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2026/09/news-digest/</guid><description>&lt;p&gt;In May I built a news app that had a local LLM triage every headline and file it under a topic. Four months and 44,000 triaged articles later, I&amp;rsquo;ve replaced it. It was still an endless feed, only a sorted one, and it was mostly noise. What I&amp;rsquo;d actually like is something closer to &lt;a href="https://kagi.com/news"&gt;Kagi News&lt;/a&gt;: a fixed digest I can &lt;em&gt;finish&lt;/em&gt;, where each card is one story, written up from all the outlets that covered it, with highlights, perspectives, angles and a timeline, but with sections that suit me.&lt;/p&gt;</description></item><item><title>Designing a parcel box in Blender, one Python script at a time</title><link>https://simon-butler.com/blog/2026/09/parcel-box/</link><pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2026/09/parcel-box/</guid><description>&lt;p&gt;We need somewhere by the front door for couriers to leave parcels, mainly so they don&amp;rsquo;t get soaked when it rains. I also have a pile of reclaimed decking boards (25 × 145 mm) and some 45 × 45 mm framing timber. So the brief wrote itself: a wooden chest, out of what I&amp;rsquo;ve already got, sized for boxes rather than bottoms. Its cut list says it in so many words: &amp;ldquo;Not a seat: a parcel box.&amp;rdquo;&lt;/p&gt;</description></item><item><title>Branch Line: designing a railway puzzle game before writing it</title><link>https://simon-butler.com/blog/2026/08/branch-line/</link><pubDate>Sat, 08 Aug 2026 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2026/08/branch-line/</guid><description>&lt;p&gt;Rail Route, Mini Metro, Transport Fever and Cities: Skylines all have the same puzzle at their heart, and it&amp;rsquo;s the bit I enjoy. You connect a few places, they grow, and the junction that was perfectly fine last week starts backing up. So you rebuild it to untangle the flows, and then the next one goes.&lt;/p&gt;&#10;&lt;p&gt;So I&amp;rsquo;ve been sketching a game of my own, working title &lt;strong&gt;Branch Line&lt;/strong&gt;: a casual, browser-based railway game about keeping automated trains flowing through a growing network. There&amp;rsquo;s no code yet, only design notes and four throwaway HTML mock-ups from one evening. This post is me thinking out loud.&lt;/p&gt;</description></item><item><title>Making a local Home Assistant voice assistant answer in under three seconds</title><link>https://simon-butler.com/blog/2026/07/ha-voice-latency/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2026/07/ha-voice-latency/</guid><description>&lt;p&gt;Home Assistant&amp;rsquo;s voice pipeline has three stages: speech-to-text (STT) turns what I said into words, a conversation agent (here an LLM) works out what to do and what to say back, and text-to-speech (TTS) says it. I wanted all three running on the new Strix Halo box, with nothing leaving the house.&lt;/p&gt;&#10;&lt;p&gt;By Saturday morning it all worked end to end. Asking &amp;ldquo;what&amp;rsquo;s the weather tomorrow?&amp;rdquo; took about 2 seconds to transcribe and about 5 to think, which is long enough to wonder whether it heard you. Two days of fiddling later, STT takes a quarter of a second, and the LLM takes about three.&lt;/p&gt;</description></item><item><title>with-env: keeping .env files encrypted</title><link>https://simon-butler.com/blog/2026/05/with-env/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2026/05/with-env/</guid><description>&lt;p&gt;Most of my projects have a &lt;code&gt;.env&lt;/code&gt; file: API keys, database URLs, the odd password. They&amp;rsquo;re wonderfully convenient and slightly alarming in the same breath. They sit on disk in plain text, they&amp;rsquo;re one bad &lt;code&gt;.gitignore&lt;/code&gt; away from being committed, and anything running as me can read them. That last one is what bothers me most. With Claude Code poking around in my project directories all day, I don&amp;rsquo;t want it slurping up a &lt;code&gt;.env&lt;/code&gt; file by mistake.&lt;/p&gt;</description></item><item><title>metermon goes Zigbee: an electricity meter on a nice!nano</title><link>https://simon-butler.com/blog/2026/04/zigbee-electricity-meter/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2026/04/zigbee-electricity-meter/</guid><description>&lt;p&gt;Four years ago I built &lt;a href="https://simon-butler.com/blog/2022/02/metermon/"&gt;metermon&lt;/a&gt;, a battery-powered ESP32 that counts the flashes of our electricity meter&amp;rsquo;s LED. It has one big compromise. Wi-Fi is so power-hungry that the ESP32 sleeps through ten flashes at a time before waking up to report them, so Home Assistant sees the meter in 10 Wh lumps and never knows what the house is drawing &lt;em&gt;right now&lt;/em&gt;.&lt;/p&gt;&#10;&lt;p&gt;Zigbee was designed for exactly this kind of gadget. A Zigbee &lt;strong&gt;sleepy end device&lt;/strong&gt; spends nearly all its time asleep and only wakes briefly to talk to its parent, at a tiny fraction of Wi-Fi&amp;rsquo;s cost. So this is metermon&amp;rsquo;s sequel: the same trick with the LED, on a radio that can afford to speak up.&lt;/p&gt;</description></item><item><title>Getting Thames Water's smart meter into Home Assistant properly</title><link>https://simon-butler.com/blog/2026/02/thames-water-ha/</link><pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2026/02/thames-water-ha/</guid><description>&lt;p&gt;We&amp;rsquo;ve just had a Thames Water smart meter installed. It knows exactly how much water we use each hour, and the only way to see that is to log in to Thames Water&amp;rsquo;s website and squint at a bar chart. Electricity and gas have been on Home Assistant&amp;rsquo;s energy dashboard since &lt;a href="https://simon-butler.com/blog/2022/02/metermon/"&gt;metermon&lt;/a&gt;, so water was the obvious gap.&lt;/p&gt;&#10;&lt;p&gt;Happily, someone had already done the hard part. &lt;a href="https://github.com/AyrtonB/HA-Thames-Water"&gt;AyrtonB&amp;rsquo;s HA-Thames-Water&lt;/a&gt; is a Home Assistant integration that logs in to your Thames Water account and pulls the hourly readings, using his &lt;a href="https://github.com/AyrtonB/Thames-Water"&gt;Thames-Water&lt;/a&gt; client library. The login alone is a small epic: a dance through Azure AD B2C with PKCE, CSRF tokens, a token refresh and a couple of redirects, all to end up with the right cookies to call one JSON endpoint. That was all done already.&lt;/p&gt;</description></item><item><title>Bedroom lights over Thread, on an ESP32-C6</title><link>https://simon-butler.com/blog/2025/08/thread-bedroom-lights/</link><pubDate>Sun, 10 Aug 2025 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2025/08/thread-bedroom-lights/</guid><description>&lt;p&gt;All my ESPHome lights so far have been on Wi-Fi. That works, but it means every light depends on the Wi-Fi router. &lt;strong&gt;Thread&lt;/strong&gt; is the alternative that has been creeping into smart-home kit. It&amp;rsquo;s a low-power mesh network built on the same 802.15.4 radio as Zigbee, except that it speaks IPv6. Each device gets a proper IP address, and mains-powered devices relay traffic for their neighbours.&lt;/p&gt;&#10;&lt;p&gt;The &lt;strong&gt;ESP32-C6&lt;/strong&gt; has an 802.15.4 radio built in, and ESPHome 2025.6 added an &lt;code&gt;openthread&lt;/code&gt; component. So in June it became possible to build an ESPHome light that never touches the Wi-Fi at all, and I wanted to see how it did.&lt;/p&gt;</description></item><item><title>A mmWave presence sensor for the kitchen</title><link>https://simon-butler.com/blog/2024/11/ld2410-kitchen-presence/</link><pubDate>Sat, 09 Nov 2024 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2024/11/ld2410-kitchen-presence/</guid><description>&lt;p&gt;Ordinary motion sensors have one big weakness in a kitchen. They use passive infrared (PIR), which only notices you when you &lt;em&gt;move&lt;/em&gt;. Stand still at the counter chopping an onion and, as far as a PIR is concerned, you&amp;rsquo;ve left the room. Off go the lights, and you wave your knife at the ceiling to bring them back.&lt;/p&gt;&#10;&lt;p&gt;A &lt;strong&gt;mmWave radar&lt;/strong&gt; sensor fixes that. It sends out a signal at around 24 GHz and watches the reflections, and it&amp;rsquo;s sensitive enough to pick up the tiny movements of someone breathing. So it can tell &amp;ldquo;nobody here&amp;rdquo; apart from &amp;ldquo;somebody here, keeping very still&amp;rdquo;. The HLK-LD2410 is the cheap, popular one, and ESPHome has a proper component for it.&lt;/p&gt;</description></item><item><title>An ESP32-S3-Box as a little desk dashboard</title><link>https://simon-butler.com/blog/2023/11/s3-box-dashboard/</link><pubDate>Sun, 05 Nov 2023 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2023/11/s3-box-dashboard/</guid><description>&lt;p&gt;The ESP32-S3-Box is Espressif&amp;rsquo;s showcase dev kit. It&amp;rsquo;s a small plastic box with a 320×240 touchscreen, two microphones, a speaker and an S3 chip inside. It&amp;rsquo;s really meant to show off voice assistants. Mine has ended up on my desk showing the air quality instead.&lt;/p&gt;&#10;&lt;h2 id="whats-on-the-screen"&gt;What&amp;rsquo;s on the screen&lt;/h2&gt;&#10;&lt;p&gt;It runs ESPHome, and the whole screen is drawn in one C++ lambda, a few lines per item:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;the date on the left and the time on the right, across the top;&lt;/li&gt;&#10;&lt;li&gt;a one-line rain summary from AccuWeather&amp;rsquo;s &lt;a href="https://simon-butler.com/blog/2021/10/minutecast-scraper/"&gt;&lt;strong&gt;MinuteCast&lt;/strong&gt;&lt;/a&gt; (something like &amp;ldquo;rain starting soon&amp;rdquo;), via a sensor in Home Assistant;&lt;/li&gt;&#10;&lt;li&gt;the &lt;strong&gt;CO₂&lt;/strong&gt; reading from my study&amp;rsquo;s &lt;a href="https://simon-butler.com/blog/2021/12/air-quality-monitor/"&gt;air-quality sensor&lt;/a&gt;, in ppm, next to a graph of the last hour;&lt;/li&gt;&#10;&lt;li&gt;the &lt;strong&gt;study temperature&lt;/strong&gt;, with its own hour-long graph.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ESPHome&amp;rsquo;s &lt;code&gt;graph&lt;/code&gt; component does the charts. You give it a sensor, a duration and a size, and it keeps the history in memory itself. The CO₂ graph runs from 400 to 2,000 ppm with a gridline every 500. The temperature one runs from 0 to 25 °C. Both are drawn in red on a black background.&lt;/p&gt;</description></item><item><title>Putting an ESP32 between my thermostat and the boiler</title><link>https://simon-butler.com/blog/2023/01/opentherm-gateway/</link><pubDate>Thu, 26 Jan 2023 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2023/01/opentherm-gateway/</guid><description>&lt;p&gt;Our boiler and its thermostat talk to each other using &lt;strong&gt;OpenTherm&lt;/strong&gt;, an open protocol for heating controls. Rather than just switching the boiler on and off, the thermostat can ask for a particular flow temperature (how hot the water going round the radiators should be), and the boiler reports back its own temperatures, pressure and flame state. It&amp;rsquo;s a surprisingly chatty relationship, and until now Home Assistant hasn&amp;rsquo;t been invited.&lt;/p&gt;</description></item><item><title>A battery-powered monitor for dumb gas and electricity meters</title><link>https://simon-butler.com/blog/2022/02/metermon/</link><pubDate>Mon, 07 Feb 2022 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2022/02/metermon/</guid><description>&lt;p&gt;Home Assistant&amp;rsquo;s energy dashboard is lovely, but it can&amp;rsquo;t do much without data, and our meters are firmly old school.&lt;/p&gt;&#10;&lt;p&gt;Luckily both meters have some automation potential. The electricity meter has an LED that winks once for every watt-hour you use. The gas meter has a magnet in its last dial, which a reed switch can pick up as it goes round. So all I need is something that counts.&lt;/p&gt;</description></item><item><title>A browser viewer for an MLX90640 thermal camera</title><link>https://simon-butler.com/blog/2022/01/thermal-camera-viewer/</link><pubDate>Sun, 23 Jan 2022 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2022/01/thermal-camera-viewer/</guid><description>&lt;p&gt;The MLX90640 is a thermal camera on a chip: a grid of 32 × 24 infrared sensors, 768 pixels in all, that reads the temperature of whatever it&amp;rsquo;s pointed at over I²C. That&amp;rsquo;s not many pixels. It&amp;rsquo;s enough to pick out a warm mug, a radiator or a person, though.&lt;/p&gt;&#10;&lt;p&gt;I had one on Pimoroni&amp;rsquo;s breakout board, wired to a Raspberry Pi, and wanted to see its picture live in a browser, on whatever device was to hand. This was a one-day job: the files all date from a single Sunday in January, from early afternoon to about half past nine at night.&lt;/p&gt;</description></item><item><title>An ESP32 air-quality monitor with five sensors</title><link>https://simon-butler.com/blog/2021/12/air-quality-monitor/</link><pubDate>Mon, 20 Dec 2021 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2021/12/air-quality-monitor/</guid><description>&lt;p&gt;I wanted to know what the air in the house was actually like: how stuffy it gets, how much dust is floating about, and whether cooking fills the place with anything nasty.&lt;/p&gt;&#10;&lt;p&gt;The answer was an ESP32 running ESPHome, with as many sensors hung off it as it would take. It&amp;rsquo;s my first ESPHome project on an ESP32, and I built it in October 2021.&lt;/p&gt;&#10;&lt;h2 id="the-sensors"&gt;The sensors&lt;/h2&gt;&#10;&lt;p&gt;It&amp;rsquo;s built on a Wemos D1 mini32, the ESP32 version of the little D1 mini board, and it has five sensors:&lt;/p&gt;</description></item><item><title>Teaching a wired burglar alarm to talk to Home Assistant</title><link>https://simon-butler.com/blog/2021/12/alarm-mqtt-bridge/</link><pubDate>Sat, 11 Dec 2021 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2021/12/alarm-mqtt-bridge/</guid><description>&lt;p&gt;When we moved in last year, the house came with a proper old-fashioned wired burglar alarm: a control panel and five zones, each with a PIR motion sensor staring out of a corner. It does its job. It just has no idea the rest of the house exists, and Home Assistant has no idea it exists either.&lt;/p&gt;&#10;&lt;p&gt;I had two reasons to change that. The first is the keypad. I don&amp;rsquo;t want to fuss with a code every time we go out or come home. My idea is to scan an RFID tag from outside instead: the Home Assistant app on my Android phone picks it up, and Home Assistant takes care of arming and disarming securely, so neither of us has to deal with codes at all.&lt;/p&gt;</description></item><item><title>Scraping AccuWeather's minute-by-minute rain forecast</title><link>https://simon-butler.com/blog/2021/10/minutecast-scraper/</link><pubDate>Sun, 17 Oct 2021 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2021/10/minutecast-scraper/</guid><description>&lt;p&gt;AccuWeather has a page called MinuteCast that tries to tell you, a minute at a time, whether it&amp;rsquo;s about to rain on you in the next couple of hours. That&amp;rsquo;s exactly what I want: something glanceable that tells me whether to grab an umbrella before I head out for a walk. AccuWeather does sell an API, but the cheapest plan is $25 a month, and I&amp;rsquo;m not even sure that includes MinuteCast. That was out of the question for an umbrella reminder, so one Sunday evening I opened a notebook and went scraping.&lt;/p&gt;</description></item><item><title>Light switches on my wrist: a Garmin Connect IQ app</title><link>https://simon-butler.com/blog/2019/08/garmin-lights/</link><pubDate>Sun, 04 Aug 2019 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2019/08/garmin-lights/</guid><description>&lt;p&gt;The sockets that the &lt;a href="https://simon-butler.com/blog/2019/01/alexa-spotify-rf/"&gt;Pi and Alexa&lt;/a&gt; look after now have a third way in: my watch, a Garmin Vivoactive 3. Imagine you&amp;rsquo;re in bed and want to turn the light off, but don&amp;rsquo;t fancy shouting at Alexa. Now it&amp;rsquo;s a tap on my wrist.&lt;/p&gt;&#10;&lt;p&gt;Garmin watches run little apps written for &lt;strong&gt;Connect IQ&lt;/strong&gt;, Garmin&amp;rsquo;s app platform, in its own language, Monkey C. It&amp;rsquo;s a bit like Java crossed with JavaScript, with a monkey for a mascot. Connect IQ apps don&amp;rsquo;t get the internet to themselves: their web requests go over Bluetooth to the Garmin app on the phone, which passes them on. That&amp;rsquo;s fine for flicking a light on, since it&amp;rsquo;s only one small request.&lt;/p&gt;</description></item><item><title>"Alexa, turn on the stereo": Spotify, AWS IoT and a 433 MHz socket</title><link>https://simon-butler.com/blog/2019/01/alexa-spotify-rf/</link><pubDate>Sun, 06 Jan 2019 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2019/01/alexa-spotify-rf/</guid><description>&lt;p&gt;We have an Echo now, and a stereo that&amp;rsquo;s plugged into one of my &lt;a href="https://simon-butler.com/blog/2014/03/raspberry-pi-remote/"&gt;Pi-controlled 433 MHz sockets&lt;/a&gt;. I could have plugged the Echo&amp;rsquo;s aux output into the amp, but the Echo&amp;rsquo;s aux out is all or nothing: once it&amp;rsquo;s plugged in, Alexa goes quiet whenever the amp is off. So the music comes from the &lt;a href="https://simon-butler.com/blog/2012/04/n900-tinkering/"&gt;Squeezebox&lt;/a&gt; that&amp;rsquo;s already connected to the amp, and Alexa just tells Spotify to play on it. What Alexa can&amp;rsquo;t do is switch the stereo on first. What I wanted was one sentence, &amp;ldquo;Alexa, turn on the stereo&amp;rdquo;, that powers up the amp &lt;em&gt;and&lt;/em&gt; starts the music playing through it. &amp;ldquo;Alexa, stop&amp;rdquo; should do the reverse.&lt;/p&gt;</description></item><item><title>A Raspberry Pi that wakes the media PC and switches the sockets</title><link>https://simon-butler.com/blog/2014/03/raspberry-pi-remote/</link><pubDate>Sun, 23 Mar 2014 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2014/03/raspberry-pi-remote/</guid><description>&lt;p&gt;The media PC is now an Intel NUC, and the trouble with a PC that goes to sleep is waking it up again. An IR receiver on the NUC itself isn&amp;rsquo;t much use when the NUC is off and you want to turn it on! So I&amp;rsquo;ve given it a doorman: a Raspberry Pi that listens for the remote, and can switch the mains sockets too.&lt;/p&gt;&#10;&lt;h2 id="teaching-the-pi-the-remote"&gt;Teaching the Pi the remote&lt;/h2&gt;&#10;&lt;p&gt;The Pi runs LIRC, which I last wrestled with for the &lt;a href="https://simon-butler.com/blog/2013/01/libcec-lirc-bridge/"&gt;HDMI-CEC remote bridge&lt;/a&gt;. Before LIRC can understand a remote, you have to teach it the codes with &lt;code&gt;irrecord&lt;/code&gt;, which has you press every button in turn. My config dates back to 19 December 2013. It&amp;rsquo;s an RC5 remote, the old Philips protocol, with 45 buttons.&lt;/p&gt;</description></item><item><title>A spectral clustering library, rescued from my PhD</title><link>https://simon-butler.com/blog/2013/02/spectral-clustering/</link><pubDate>Sun, 10 Feb 2013 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2013/02/spectral-clustering/</guid><description>&lt;p&gt;One of the tricks in &lt;a href="https://simon-butler.com/blog/2010/11/phd-intent-prediction/"&gt;my PhD&lt;/a&gt; was to stop simulating every possible plan the other team might have. Instead, the system generated lots of candidate paths, grouped the similar ones together, and only simulated one from each group. The grouping was done by spectral clustering, and I&amp;rsquo;ve now pulled that code out into a small C++ library of its own: &lt;a href="https://github.com/pthimon/clustering"&gt;pthimon/clustering&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;&#10;&lt;p&gt;Most clustering methods want to know how many clusters you&amp;rsquo;re after. That&amp;rsquo;s a problem when the whole point is to find out. How many genuinely different routes are there across this map? You don&amp;rsquo;t know until you look.&lt;/p&gt;</description></item><item><title>One remote for the TV, the amp, MythTV and the PS3, over HDMI-CEC</title><link>https://simon-butler.com/blog/2013/01/libcec-lirc-bridge/</link><pubDate>Fri, 25 Jan 2013 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2013/01/libcec-lirc-bridge/</guid><description>&lt;p&gt;Under the telly there&amp;rsquo;s a MythTV box, a PS3, an amp and, of course, the TV itself. That makes three remotes for one sofa: the TV&amp;rsquo;s, just to turn it on and off; the amp&amp;rsquo;s, for the volume; and the TV tuner card&amp;rsquo;s, for getting around MythTV.&lt;/p&gt;&#10;&lt;p&gt;The tuner card&amp;rsquo;s remote is the one that does the real work. The card lives in the MythTV PC, with an infrared receiver dangling from it on the end of a cable. My LIRC config for it started life as the stock one for the Hauppauge Nova-T-500&amp;rsquo;s silver-and-black &amp;ldquo;snowboard&amp;rdquo; remote. LIRC, the Linux infrared remote daemon, turns its button presses into MythTV key presses. What it can&amp;rsquo;t do is reach any of the other boxes.&lt;/p&gt;</description></item><item><title>Drawing convincing curtains on an Android tablet</title><link>https://simon-butler.com/blog/2012/09/android-curtains/</link><pubDate>Wed, 26 Sep 2012 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2012/09/android-curtains/</guid><description>&lt;p&gt;This summer I&amp;rsquo;ve been teaching an Android tablet to draw curtains. Not a still picture of a curtain, but one you can open and close, which bunches up into folds as it goes and hangs back down again. There&amp;rsquo;s a Roman blind as well, which pulls up into pleats.&lt;/p&gt;&#10;&lt;p&gt;It&amp;rsquo;s for my side project: I run the website for Kurtinz.com, a soft-furnishings shop. The site already shows off its curtains in a Flash player, and this is the start of a prototype that goes a step further. You stick a fiducial marker (a printed pattern that software can easily spot and measure) on your window, and tell it the window&amp;rsquo;s dimensions. Then the tablet draws the curtains over the live camera view, so you can see them hanging in your own room before you buy.&lt;/p&gt;</description></item><item><title>Two small fixes for the Nokia N900</title><link>https://simon-butler.com/blog/2012/04/n900-tinkering/</link><pubDate>Sat, 28 Apr 2012 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2012/04/n900-tinkering/</guid><description>&lt;p&gt;The Nokia N900 is a proper little Linux computer that happens to make phone calls. It has a root shell, &lt;code&gt;apt-get&lt;/code&gt;, and Qt, so when it annoys me I can usually do something about it. Here are two things I did something about, which I&amp;rsquo;ve finally put on GitHub.&lt;/p&gt;&#10;&lt;h2 id="autoconnect-wi-fi-that-remembers"&gt;Autoconnect: Wi-Fi that remembers&lt;/h2&gt;&#10;&lt;p&gt;The N900 happily remembers WPA Enterprise networks, the kind with a username and password rather than one shared key, as used at universities and offices. What it won&amp;rsquo;t do is connect to them automatically. Every time, you have to open the menu and pick the network by hand. It&amp;rsquo;s a known problem, &lt;a href="https://bugs.maemo.org/show_bug.cgi?id=3399"&gt;Maemo bug 3399&lt;/a&gt;, and a daily irritation when you spend your days on Imperial&amp;rsquo;s Wi-Fi.&lt;/p&gt;</description></item><item><title>Predicting what the other team will do, by pretending to be them</title><link>https://simon-butler.com/blog/2010/11/phd-intent-prediction/</link><pubDate>Tue, 30 Nov 2010 00:00:00 +0000</pubDate><guid>https://simon-butler.com/blog/2010/11/phd-intent-prediction/</guid><description>&lt;p&gt;My PhD viva is done: passed, with minor corrections. It all goes back to my undergraduate days, when Yiannis Demiris&amp;rsquo;s lectures got me interested in robotics. In October 2006 I started a PhD in his research group, BioART (the Biologically inspired Autonomous Robots Team), and it was there that we came up with the idea for this thesis. Four years on, it&amp;rsquo;s a strange feeling to have nothing hanging over me.&lt;/p&gt;</description></item></channel></rss>