<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Index on Michael Cullen</title><link>https://michaelcullen.name/</link><description>Recent content in Index on Michael Cullen</description><generator>Hugo</generator><language>en-gb</language><copyright>© Michael Cullen</copyright><lastBuildDate>Thu, 04 Dec 2025 11:37:00 +0100</lastBuildDate><atom:link href="https://michaelcullen.name/index.xml" rel="self" type="application/rss+xml"/><item><title>Looking at Transport Stream Captures: What Changed?</title><link>https://michaelcullen.name/post/analysing_transport_streams/</link><pubDate>Thu, 04 Dec 2025 22:15:00 +0100</pubDate><guid>https://michaelcullen.name/post/analysing_transport_streams/</guid><description>&lt;p&gt;I have a lot of transport stream captures. Over a terrabyte of them. Whenever I stay in a hotel, I pull out my USB DVB-T/C tuner and grab what I can. I have a custom-written capture tool I use for this, which first scans to find any streams it can pick up, then automatically captures each stream. Once I run this tool, I just need to wait for the results!&lt;/p&gt;</description></item><item><title>Live TS Input</title><link>https://michaelcullen.name/portfolio/live-ts-input/</link><pubDate>Sat, 18 Mar 2023 22:30:00 +0200</pubDate><guid>https://michaelcullen.name/portfolio/live-ts-input/</guid><description>&lt;p&gt;While working for a long-term client, I was asked to create a new live transport stream input module for their cloud-based playout platform, to replace an existing one which was not performing. Running in Kubernetes either on-site or in the cloud, this platform allows broadcasters and service providers to play out and assemble TV channels efficiently. The video processing engine I worked on for this project is written in C++.&lt;/p&gt;</description></item><item><title>RC2022/10: Weekend One</title><link>https://michaelcullen.name/post/rc2022-10/rc2022_10_firstday/</link><pubDate>Mon, 03 Oct 2022 05:39:00 +0200</pubDate><guid>https://michaelcullen.name/post/rc2022-10/rc2022_10_firstday/</guid><description>&lt;h2 id="taking-stock"&gt;Taking Stock&lt;/h2&gt;
&lt;p&gt;I started out by looking at what I had, and figuring out what to work on first. Immediately, I noticed memory usage was a little higher than I remembered. Looking closer, it seems the most likely culprit is simply the libraries being loaded - there&amp;rsquo;s a few:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;libjpeg&lt;/li&gt;
&lt;li&gt;libpng (statically linked into the core dll since the makefile built a static version)&lt;/li&gt;
&lt;li&gt;libcurl&lt;/li&gt;
&lt;li&gt;openssl (pulled in by libcurl, though I might use it directly later)&lt;/li&gt;
&lt;li&gt;cJSON&lt;/li&gt;
&lt;li&gt;zlib (needed by libpng)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of these, openssl is the largest. I&amp;rsquo;m not actually using most of these right now, and I am actually tempted to use a design which does not depend on libcurl, however I&amp;rsquo;ll still need openssl (or similar).&lt;/p&gt;</description></item><item><title>RC2022/10: Project Introduction</title><link>https://michaelcullen.name/post/rc2022-10/rc2022_10_intro/</link><pubDate>Sat, 01 Oct 2022 18:39:00 +0200</pubDate><guid>https://michaelcullen.name/post/rc2022-10/rc2022_10_intro/</guid><description>&lt;p&gt;This tweet says it all really:&lt;/p&gt;


&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;New RC2022/10 entry from &lt;a href="https://twitter.com/mich181189?ref_src=twsrc%5Etfw"&gt;@mich181189&lt;/a&gt; &lt;br&gt;Platform: Windows 2000/XP&lt;br&gt;Project : make a Twitter client for Windows 2000/XP (maybe also Win 98). Maybe Retro Challenge is enough of a motivation to revive this project?&lt;br&gt;It&amp;#39;s going to be an awful twitter client, but I think it should work!&lt;/p&gt;&amp;mdash; RetroChallenge (@retrochallenge) &lt;a href="https://twitter.com/retrochallenge/status/1574949816819363840?ref_src=twsrc%5Etfw"&gt;September 28, 2022&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt; 

&lt;p&gt;So yeah&amp;hellip; I signed up for the Retro Challenge 2022/10, my project is a Twitter client that&amp;rsquo;s compatible with Windows 2000/XP and maybe even Windows 98.&lt;/p&gt;</description></item><item><title>Micropython Christmas Card</title><link>https://michaelcullen.name/portfolio/christmascard-2020/</link><pubDate>Fri, 25 Dec 2020 00:00:00 +0000</pubDate><guid>https://michaelcullen.name/portfolio/christmascard-2020/</guid><description>&lt;p&gt;For many years, I have wanted to make a USB christmas tree. Not just a USB powered christmas tree, but a USB controlled christmas tree.&lt;/p&gt;
&lt;p&gt;This idea was floating around in my head for a long time, but this time, I decided to make it a reality, and as a christmas card.&lt;/p&gt;
&lt;p&gt;The board was designed around 28 WS2812B addressable RGB LEDs arranged in the shape of a christmas tree. The brains of the board was an STM32F401RET6 microcontroller, chosen mostly because JLCPCB had them available in their assembly service for a good price that also had support for Micropython.&lt;/p&gt;</description></item><item><title>ACNode Reader Board</title><link>https://michaelcullen.name/portfolio/acnode-reader-board/</link><pubDate>Mon, 21 Sep 2020 08:50:00 +0100</pubDate><guid>https://michaelcullen.name/portfolio/acnode-reader-board/</guid><description>&lt;p&gt;This is a project I am working on for &lt;a href="https://london.hackspace.org.uk/"&gt;London Hackspace&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Hackspace access control system uses microcontrollers and a webserver to allow members to access tools as well as the space itself. The nodes are based around &lt;a href="https://www.ti.com/tool/EK-TM4C1294XL"&gt;TI Connected Launchpad&lt;/a&gt; boards, and &lt;a href="https://www.elechouse.com/elechouse/index.php?main_page=product_info&amp;amp;cPath=90_93&amp;amp;products_id=2276"&gt;PN532-based RFID readers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This project is to improve the reliability of the system, by adding a microcontroller next to the RFID reader, then using RS-422 balanced signaling back to the main microcontroller board. This is to reduce interference.&lt;/p&gt;</description></item><item><title>Android Ad Detection</title><link>https://michaelcullen.name/portfolio/android-ad-detection/</link><pubDate>Mon, 21 Sep 2020 08:31:00 +0100</pubDate><guid>https://michaelcullen.name/portfolio/android-ad-detection/</guid><description>&lt;p&gt;I was contracted to develop a system to automatically navigate Android apps and find ads within them. There was an initial system in place, but it was human-driven. My task was to improve and automate it.&lt;/p&gt;
&lt;p&gt;I started out by using Appium and some relatively simple heuristics to move through the apps and detect ads. The ads, once detected, were fed into a database.&lt;/p&gt;
&lt;p&gt;The logic was implemented in Scala, and hosted on AWS. The Android apps were run in AWS cloud emulators.&lt;/p&gt;</description></item><item><title>Self Clearing Desk (an IoT Joke)</title><link>https://michaelcullen.name/portfolio/self-clearing-desk/</link><pubDate>Sun, 29 Mar 2020 08:00:00 +0000</pubDate><guid>https://michaelcullen.name/portfolio/self-clearing-desk/</guid><description>&lt;p&gt;This started as a late night idea at &lt;a href="https://london.hackspace.org.uk/"&gt;London Hackspace&lt;/a&gt; that I made the mistake of actually building just before everything closed (it was 2020&amp;hellip;)&lt;/p&gt;
&lt;p&gt;To create this, I welded some metal plates to the legs of a desk, then used these to attach a couple of linear actuators to lift the surface up. I then programmed an ESP32 module to turn the motors on when it got a message on a specific MQTT topic. I also built a website in Go to send the MQTT messages on command.&lt;/p&gt;</description></item><item><title>GB4LHS Special Event Station</title><link>https://michaelcullen.name/post/gb4lhs-special-event-station/</link><pubDate>Wed, 29 May 2019 02:21:40 +0000</pubDate><guid>https://michaelcullen.name/post/gb4lhs-special-event-station/</guid><description>&lt;p&gt;Over the weekend, I operated a special event station, GB4LHS to celebrate the London Hackspace reopening in Wembley, and also to demonstrate amateur radio to visitors at the open day. Some things worked really well, other parts of the setup could really have done with improvement. In this post I hope to describe the details of this.&lt;/p&gt;
&lt;h2 id="some-statistics"&gt;Some Statistics&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Total QSOs: 76&lt;/li&gt;
&lt;li&gt;FT8: 68&lt;/li&gt;
&lt;li&gt;SSB: 8&lt;/li&gt;
&lt;li&gt;By Band:&lt;/li&gt;
&lt;li&gt;17m: 20&lt;/li&gt;
&lt;li&gt;20m: 20&lt;/li&gt;
&lt;li&gt;40m: 36&lt;/li&gt;
&lt;li&gt;Countries Worked: 36&lt;/li&gt;
&lt;li&gt;Most Contacted: Federal Republic of Germany (13 QSOs)&lt;/li&gt;
&lt;li&gt;Time between first and last QSO: 23 hours&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have actually operated a special event station once before – I organised GB50SWN back in 2007 for JOTA. At the time I only had a foundation license, however with the (mostly quite distant) supervision by the full license holder, I made a total of about 4 contacts over two days. I comfortably beat that “record” at least! I’ll admit I actually set myself a slightly higher target for this event of 100 QSOs – but I’ll take 76 as close enough. Now I think about it, I might actually have got a few more if I had managed to get set up earlier and therefore got more sleep the night before, hence probably started again earlier.&lt;/p&gt;</description></item><item><title>Introducing: The Custard Antenna</title><link>https://michaelcullen.name/post/introducing-the-custard-antenna/</link><pubDate>Tue, 28 May 2019 01:04:40 +0000</pubDate><guid>https://michaelcullen.name/post/introducing-the-custard-antenna/</guid><description>&lt;p&gt;In a previous post, I loaded up a bowl of custard with an ATU. I called the post “Custard Antenna” however, really, it should probably have been titled “Custard dummy load” – with both antenna wires immersed in the bowl, the custard was no doubt mostly behaving as a resistor, with any pickup or radiation likely to be on the wires – though removing the wires did also prevent it from receiving, which does make me think it might be behaving as a somewhat lossy loop antenna. I chose this format not because I thought it would work as an antenna, but because the whole thing was inspired by the phrase “tune a bowl of custard” so I wanted to take it literally.&lt;/p&gt;</description></item><item><title>Custard Antenna</title><link>https://michaelcullen.name/post/custard-antenna/</link><pubDate>Sun, 28 Apr 2019 12:04:29 +0000</pubDate><guid>https://michaelcullen.name/post/custard-antenna/</guid><description>&lt;p&gt;Some time ago, someone said of their ex-military antenna tuner “it would tune a bowl of custard if you asked it to” – this got me thinking, could I make my MFJ-971 antenna tuner literally tune a bowl of custard?&lt;/p&gt;
&lt;p&gt;I’ve always been interested in strange antennas, having stumbled upon the K0S Strange Antenna Challenge many years ago. Sadly, the original website no longer seems to be around, however there are still references to it online, such as a post from the organiser, Erik Weaver N0EW, on eham: &lt;a href="https://www.eham.net/articles/10721"&gt;https://www.eham.net/articles/10721&lt;/a&gt;. Essentially, it’s a special event station that uses only non-standard items as antennas. The example given was that of a tent pole: if you just stick the tent pole in the air, that’s not really a strange antenna since it’s just a bit of metal. If, however, you put the whole tent up in a tree, that’s a strange antenna.&lt;/p&gt;</description></item><item><title>Raspberry Pi Clustering – Part 1</title><link>https://michaelcullen.name/post/raspberry-pi-clustering-part-1/</link><pubDate>Sat, 04 Nov 2017 12:00:00 +0000</pubDate><guid>https://michaelcullen.name/post/raspberry-pi-clustering-part-1/</guid><description>&lt;p&gt;&lt;!-- raw HTML omitted --&gt;Note: The Pi3 figures in this may be questionable since I have since discovered it was overheating and scaling its clock. A future post will address this. Since I’m interested in real-world performance though, I’m not going to completely discount these results since overheating is a factor to consider!&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;The other day I came up with a slightly daft idea: deploy the website I’m currently developing to a cluster of &lt;a href="https://www.raspberrypi.org/"&gt;raspberry pis&lt;/a&gt; rather than my usual Linode setup. Seems like a crazy idea? Yeah, probably! But I still want to try it!&lt;/p&gt;</description></item><item><title>Different Types of Film</title><link>https://michaelcullen.name/post/different-types-of-film/</link><pubDate>Wed, 24 Feb 2016 12:00:00 +0000</pubDate><guid>https://michaelcullen.name/post/different-types-of-film/</guid><description>&lt;p&gt;The cool thing about shooting film is the choices! There are so many films to choose from – some are fairly basic, day-to-day films, some not so much. I have tried quite a few films, so here are some notes on them. There is some overlap with the Amsterdam On Film&lt;/p&gt;
&lt;h2 id="cinestill-800t"&gt;Cinestill 800T&lt;/h2&gt;
&lt;p&gt;I’m going to start with the most interesting, at least for me. I’ve only actually shot one roll of this, but I enjoyed it enough that I have another couple of rolls ready to go for when I next get a decent opportunity to shoot it. It has a wide latitude (though I did find mine ended up being a little thin, there was still a very nice usable image on the film). I’ve mentioned it before in this series – it is based on Kodak Vision3 500T – they estimate it to be around 800T when processed in C41 (that’s “standard” colour negative processing) but I’ve seen tweets from them claiming it is usable in the range ISO 100-1600 or so without push/pull processing! (though they do say the optimal range is 500-1600)&lt;/p&gt;</description></item><item><title>Amsterdam On Film</title><link>https://michaelcullen.name/post/amsterdam-on-film/</link><pubDate>Wed, 17 Feb 2016 12:00:00 +0000</pubDate><guid>https://michaelcullen.name/post/amsterdam-on-film/</guid><description>&lt;p&gt;Every year, I leave the country for my birthday. I’ve done this for five years in row now, and I have no intention of stopping this trend. This year, I spent 5 days in Amsterdam.&lt;/p&gt;
&lt;p&gt;Every year, I take more camera gear than is sane and spend a fair amount of the trip taking photos. This year, I included a film camera in this. I haven’t counted, but there’s a strong possibility that I took more photos on film with a 50mm lens than I did with my 24-105mm lens on a DSLR (compare this to my week in Berlin last summer where I took ALL my photos with that lens on a DSLR).&lt;/p&gt;</description></item><item><title>Reasons Why I Shoot Film</title><link>https://michaelcullen.name/post/reasons-why-i-shoot-film/</link><pubDate>Wed, 10 Feb 2016 12:00:00 +0000</pubDate><guid>https://michaelcullen.name/post/reasons-why-i-shoot-film/</guid><description>&lt;p&gt;This post is the first in a hopefully regular series of posts about film photography.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Inspired by a combination of Boredom, YouTube videos, and that nagging feeling I should do something with those rolls of film I put through a Holga a couple of years ago, I’ve been shooting a fair bit of film recently. In fact, I have acquired more than one film camera from eBay recently. Mostly inexpensive, and most recently one not so inexpensive one.&lt;/p&gt;</description></item><item><title>Clean Start</title><link>https://michaelcullen.name/post/clean-start/</link><pubDate>Fri, 04 Dec 2015 16:00:00 +0000</pubDate><guid>https://michaelcullen.name/post/clean-start/</guid><description>&lt;p&gt;I figured it was time to clean up a bit. So I started a new blog site to replace my old one. I might move the posts over, maybe, one day…&lt;/p&gt;</description></item><item><title>Experience</title><link>https://michaelcullen.name/experience/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://michaelcullen.name/experience/</guid><description>&lt;h1 id="experience"&gt;Experience&lt;/h1&gt;</description></item></channel></rss>