Here's my five latest blog posts - or you can browse a complete archive of all my posts since 2008.

How I Write Timed Talks

This is one of those blog posts that started life as a tweet, and then a tweet thread, and quickly grew to a point where it actually makes more sense as a post. It started out with this:

So, here’s how I do it.

First: figure out how fast you talk. In my case, I took some videos of a couple of talks I’ve given that went well, and transcribed them - literally word for word, number for number. Every single word. Then I measured the word and character counts compared to the length of the videos. I talk at almost exactly 1,000 characters per minute - which works out around 178 words per minute, give or take.

That’s useful, because it means I can easily turn a time limit into a word limit. A 5-minute lightning talk needs about 5,000 characters worth of material - just under 1,000 words. A one-hour keynote talk needs roughly 60,000 characters.

Second: learn how to write the way you speak. This can take a while, but it’s a really useful skill to develop. When I write talks, I write them exactly the way I talk when I’m talking - jokes, contractions, I spell out numbers long form (262,144 is only six characters on a word count, but “two hundred and sixty two thousand, one hundred and forty four” takes about four seconds to say out loud).

I’m not writing a script - what I actually say on the day probably correlates about 50% with what I wrote - but they include all the important bits. The key statistics and figures, the important points (and how I want to phrase them), the punchlines to the jokes. Think of it like the score for a jazz standard - the intro, the melody, the refrain and the ending are all pretty clearly mapped out, but they leave structured spaces for improvisation.

Sometimes, at this point, I just start writing. Not necessarily at the beginning - I’ll often start writing in the middle, I’ll put in placeholders and headings, I’ll move things around. If I know I’m using prerecorded video clips during the talk, I’ll check the durations of these and adjust the word limit accordingly. Other times, I’ll map out the talk into chunks:

  • Intro: 5 minutes (5,000 characters / 950 words)
  • History of radio, signal processing: 15 minutes (15,000 characters / 2,880 words)
  • Digital cameras & JPEG compression: 15 minutes (15,000 characters / 2,880 words)
  • Unicode, text encoding: 10 minutes (10,000 characters / 1,920 words)
  • Conclusions and wrap up: 5 minutes (5,000 characters / 950 words)

I’ll keep writing and editing and tweaking until I have something that’s about the right length. Then I’ll record myself reading it out loud. This is normally where a bunch of things jump out that sounded good on paper… so I’ll tweak and edit some more.

Then I’ll go through the whole thing and identify the points where I need a slide. Sometimes I’ll talk for 2-3 minutes around a single image; sometimes I’ll literally have a slide or animation for each word in a sentence. Sometimes a line or two becomes the storyboard for a piece of animation I’ll create.

Then I’ll fire up an empty Powerpoint presentation, and for each chunk of prose that accompanies a slide, I’ll paste that chunk of text onto the Notes area on the slide and put in a one-line placeholder (“PICTURE OF ELEPHANT HERE”, “ANIMATION ABOUT 16QAM HERE”) as the slide heading. That’ll let me start using Powerpoint’s outline view to navigate around. Finally, I’ll go through each slide and add the relevant images, text, titles, video clips - whatever’s needed to support that part of the talk.

image-20200709180850917

For each slide, I’ll also add a few bullet points in the speaker notes summarizing what I need to say - and what I need to end with for the transition to the next slide to make sense.

Then I’ll do a “dress rehearsal” - run through the whole thing, check the timings, transitions, animations, make sure my own speaker notes make sense - and I’m good to go.

Untitled Project

Using <a href="https://agendadefender.app/>AgendaDefender.app</a> to keep track of time during a talk

When I’m actually giving a talk, I’ll use a tool I built called Agenda Defender to stay on track with timing - I’ll put in the actual start times for each section of the talk, and Agenda Defender draws live animated progress bars for each section of the talk so I can tell whether I need to speed up a bit, or have time for a bit of audience Q&A, maybe throw in a few jokes or stories that weren’t in the original talk outline.

That’s pretty much it. A couple of things to add:

  • The first time I deliver a new talk, I normally don’t refer to the notes at all - it’s all fresh in my mind. But the notes are invaluable if you’re invited to give the same talk again six months later and need to refresh your memory.
  • Breaking down the talk structure into timed sections makes it almost “modular” - if you need to adapt a 45-minute talk to fit a 30-minute time slot, sometimes there’s literally a chunk you can just cut out and tweak the rest a bit to make it flow across the gap.
  • When I first started out, I used the 2-minutes-per-slide approach - for a 60 minute talk, I need to make 30 slides, then for each slide, come up with 2 minutes of content for it. I worked like that for a year or two and absolutely hated it.
  • A one-hour talk is about 10,000 words. That’s the same length as an undergraduate dissertation at many UK universities. Preparing talks this way is a lot of work - I normally reckon on about 30-50 hours of prep time from the first rough outline to the having the talk “stage ready.”

And for the sake of comparison, this blog post is 1,156 words - it’d make a pretty good 5-minute lightning talk with a bit of trimming - and it’s taken me just over 45 minutes to write it. Maybe I should just have replied on Twitter after all… :)

"How I Write Timed Talks" was posted by Dylan Beattie on 09 July 2020 • permalink

Workshop: Introduction to Distributed Systems with .NET

Next Thursday, July 16th, I’m running a workshop with the folks from Fusion Workshops in Birmingham, all about building distributed systems using .NET Core. It’ll be completely online, hands-on, delivered using Zoom and various online tools - plus a lot of live coding, hooking our code into various cloud services and watching things running live over the internet. I’ve run this workshop with a couple of different groups and the online format actually works brilliantly - plus it’s way more impressive running a distributed application when you’re sending messages a few hundred miles between cities, instead of between two laptops in a classroom.

Tickets are on sale now: https://www.eventbrite.com/e/distributed-systems-net-with-dylan-beattie-tickets-107811475024

What’s a distributed system?

Good question. Fundamentally, it’s a software system where you have multiple components that communicate across a network. After that, it can get very complicated, very quickly… before long you’re reading about microservices and REST APIs, GraphQL, gRPC, message queues, pub-sub, “backends for frontends” - there’s a lot of good ideas, and some very powerful patterns out there, but it can all be a bit overwhelming if you’re not sure where to start.

What’s in the workshop?

This is very much a hands-on workshop - lots of code, lots of demos, and by the end of the day you’ll have working examples on your own PC of most of the things we’re looking at. Using a (very simplified!) used car sales platform as our example, we’ll kick off by building a simple REST API (and yes, it will actually be RESTful - with HATEOAS and everything!) that dealers can use to add new cars to our platform. Then we’ll plug that into a set of message queues, using EasyNetQ, and build some microservices that receive messages from those queues. We’ll plug in some gRPC endpoints to handle price calculation, and finally hook the whole lot into a SignalR hub to display live notifications in a web browser.

Along the way, we’ll discuss the pros and cons of each of these models, look at why and when you’d used them in production, and where you can go to find out more about running them on production systems.

The best part is that, because we’re all remote, the code we write during the day will be an actual real-world distributed system - we’ll be bouncing messages and HTTP requests around the country, triggering workflows on each other’s laptops, seeing messages from other participants being filtered through our own code, and get a chance to see how things like latency and bandwidth affect the reliability and performance of real-world distributed systems.

You’re not going to learn everything in a day. We’re not going to talk about security, monitoring, logging, deployment… the idea of this course is to give you an overview of how everything fits together, and a solid foundation to go away and learn more (or take another course!) before putting these ideas into production.

Who’s it aimed at?

Developers who have done at least some .NET, who want to understand more about the different patterns and architectural styles used to create distributed applications, and the frameworks that exist in .NET Core to help you build those kinds of applications.

The course assumes some familiarity with .NET - if you’ve built websites with ASP.NET MVC or done any kind of .NET development, you should be fine.

image-20200707170109366

"Workshop: Introduction to Distributed Systems with .NET" was posted by Dylan Beattie on 07 July 2020 • permalink

Using Canon DSLR Cameras as Webcams

I love Canon DSLR cameras; my main DSLR at the moment is an EOS 700D (which is sold as the Rebel T5i outside the UK, for reasons I will never, ever understand), which for me hits the perfect sweet spot between affordability and quality. And, with the whole lockdown thing going on, I’ve been spending a lot of time looking for ways to use gear I already own to produce better live streams and studio recordings.

If you’ve read Scott Hanselman’s post from August last year about remote working, you’ll know that the best webcams aren’t actually webcams at all - they’re proper cameras, running through some kind of HDMI > USB converter like the Elgato Camlink. I’ve been trying to pick up one of these for a while, but they’ve been out of stock everywhere since March, so instead I managed to track down an Elgato Game Capture HD60 S, which does kinda the same thing.

Well, turns out my beloved Canon EOS 700D doesn’t quite work as a webcam. Let’s clarify that. Out of the box, it doesn’t work at all - there’s no way to produce what’s called “clean HDMI” - i.e. a video stream with no overlays, menus, focus grids, or anything.

But, it turns out there’s an open source firmware upgrade for Canon DSLR cameras called Magic Lantern. Now, this is some seriously gnarly stuff - if you’re not happy downloading binaries from a website and then running them through the firmware upgrade routine on your DSLR camera, then it is probably not for you, and it is absolutely possible to brick your camera by fooling around with this kind of thing. But hey, nobody ever found fortune and glory by following the terms and conditions, right?

Magic Lantern actually worked really well for me. It allows me to switch off all the overlays and focus grids to get a clean HDMI signal out of the EOS 700D - and with a 50mm f1.8 lens, it looks fantastic. But it’s not perfect. I used it for a live streamed gig last night, and it worked beautifully for about the first 45 minutes… then the shutter cycled (no idea why), and when it came back after about a second, there were some weird letterboxing artefacts around the video frame. Finally, after about 75 minutes of streaming, it stopped autofocusing completely. All temporary - turning it all off and on again got it all back to normal - but not ideal for a live broadcast.

vlcsnap-2020-07-05-19h28m24s890

Working beautifully...

vlcsnap-2020-07-05-19h29m02s746

...then some weird letterboxing...

vlcsnap-2020-07-05-19h29m17s571

...and finally the focus grid appeared in shot, and wouldn't go away. (And then the autofocus stopped working.)

Of course, having seen just how good it looks when it’s working, I’m now in the market for something that looks that good but doesn’t suffer from the same reliability issues. Just so we’re perfectly clear: this is absolutely not any kind of problem with the EOS 700D. I’m trying to use it for things it was never, ever designed to do, and the fact it worked at all is pretty remarkable!

So, there’s two options. One is to get a DSLR that is known to produce good clean HDMI for indefinite periods - there’s a list of these over on Elgato’s website.

The other is that a few months ago, Canon’s engineers released a beta of a USB utility that would allow you to use certain Canon DSLR and compact cameras as webcams directly, via the camera’s onboard USB interface. This is officially only supported in the United States, which isn’t a big deal - except that, for some ridiculous reason, many Canon DSLR cameras are sold under different names in the UK than they are in the US, and the list of supported models refers only to the US model names.

So I’ve spent a couple of hours pulling together the list of supported cameras, adding the UK model names, cross-referencing it with the Elgato camera checklist, and, just for good measure, adding in the Canon recommended retail price and a link to Amazon for those cameras that are currently available.

Here’s what I found:

Camera Model (US) Camera Type UK Model Name RRP Amazon Elgato CamLink / clean HDMI?
EOS-1D X Mark II DSLR same as US £5,429 Yes
EOS-1D X Mark III DSLR same as US £6,499 Yes
EOS 5D Mark IV DSLR same as US £2,799 £2,799 Yes
EOS 5DS DSLR same as US £2,499 Not listed
EOS 5DS R DSLR same as US £2,699 Not listed
EOS 6D Mark II DSLR same as US £1,349 £1,349 No
EOS 7D Mark II DSLR same as US £1,429 Yes (manual focus only)
EOS 77D DSLR same as US discontinued Yes (manual focus only)
EOS 80D DSLR same as US discontinued Yes (manual focus only)
EOS 90D DSLR EOS 90D £1,209 Yes
EOS Rebel SL2 DSLR EOS 200D £369.99 Yes (manual focus only)
EOS Rebel SL3 DSLR EOS 250D £529.99 £539.00 Yes
EOS Rebel T6 DSLR EOS 1300D discontinued not listed
EOS Rebel T6i DSLR EOS 750D unknown Yes (community verified)
EOS Rebel T7 DSLR EOS 2000D £329.99 £299.00 not listed
EOS Rebel T7i DSLR EOS 800D £739.99 Yes
EOS Rebel T100 DSLR EOS 4000D £279.99
EOS M6 Mark II  Mirrorless same £869.99
EOS M50 Mirrorless same £539.99
EOS M200 Mirrorless EOS M200 £549.99
EOS R Mirrorless EOS R £1,879.99
EOS RP Mirrorless EOS RP £1,219.99 Yes
PowerShot G5X Mark II Compact PowerShot G5X Mark II £869.99 Yes
PowerShot G7X Mark III Compact PowerShot G7X Mark III £719.99 Yes
PowerShot SX70 HS Compact PowerShot SX70 HS £539.99

I was hoping to find a new camera body for around £300 that will work with my existing lenses, supports the new Canon EOS Utility software, and is verified for use with the Elgato HDMI capture devices; there’s no clear winner, but the EOS 2000D and EOS 4000D aren’t listed either way by Elgato so I will do some digging, see what I can find out. I’ll keep you posted. ;)

Oh, and if anybody has any idea at all why Canon decided to give their cameras different names in the UK and the US, I’d love to know…

"Using Canon DSLR Cameras as Webcams" was posted by Dylan Beattie on 05 July 2020 • permalink

Stay In, Rock Out: I'm Playing Live Online!

On Saturday, pubs in England are allowed to reopen. I love pubs. I love pubs more than you can imagine. But there is no way in a million years I am going anywhere near a pub on a Saturday in the middle of summer, when they’ve all been closed for three months, and they’re only opening now because the government think there’s probably enough hospital beds to deal with the aftermath.

So instead of going to the pub on Saturday, I’m going to play a live rock show, from my house, and stream the whole thing live online. An hour or so of classic rock covers - AC/DC, Bon Jovi, Queen, Muse, Pink Floyd, Guns n’ Roses, and maybe a few surprises. I’ll be using a whole bunch of technology to put together something a bit special - if it works, it’ll be awesome… if it doesn’t work, it’ll be probably be hilarious. Either way it’d be cool if you want to tune in.

Here’s the invitation so you can add it to your calendar:

It all kicks off at 19:00 UK time this Saturday, July 4th. I’ll be streaming live on https://twitch.tv/dylanbeattie, and on facebook.com/dylanbeattie and youtube.com/dylanbeattie as well - and then firing up a Zoom for the after-party.

Get some beers in, crank up the volume, and let’s have some fun. :)

"Stay In, Rock Out: I'm Playing Live Online!" was posted by Dylan Beattie on 02 July 2020 • permalink

Locking Down & Levelling Up, Part 1: New Computer Time

One of the nice things about this whole weird lockdown situation is that for the first time in a long, long while, I know exactly what my travel plans are going to be for the next few months: none. Zip. Zilch. Nada. The likelihood of being asked to throw some things in a bag and jump on a plane tomorrow is… zero. Which kinda sucks, because I love travelling, but, hey – here I am. I’m at home, it looks like I’m gonna be here for a long while, and that means I have time, and incentive, to turn my home office into an ideal workspace.

Now, I have a bit of a head start here, because I do actually have a dedicated room in my house for “work”. Which means it was already a combination of office, recording studio, library and very occasional spare room, but when the lockdown hit and so many conferences and events started going online, I really wanted a proper setup for livestreaming and recording video, complete with greenscreens, studio lightning, all that kind of stuff. (Yes, buying hardware is a coping strategy for me. This is OK.)

Plus, with everything going online, I kept getting invited to join Slack workspaces. Compiling the .NET Framework from source while running Adobe Premiere and Far Cry simultaneously and livestreaming the whole lot to Twitch in 1080p in real time is one thing, but being in 15 Slack workspaces at the same time requires some serious processing power…

It’s been a long while since I’ve had a proper workstation. Like most nerds of a certain age, I spent the 1990s and 2000s constantly tinkering with big PCs, adding RAM, upgrading CPUs and graphics cards - y’all remember 3Dfx and the Voodoo chipset? Some time back in 2015 the graphics card in my last one failed. I just copied everything across to my laptop and used that as my main machine until I got it fixed… and then never got it fixed. So step 1 of this process was to get a proper computer. I wanted to switch back to running Windows 10 as my main day-to-day operating system (and keep macOS on the laptop for music stuff); I wanted something that could drive a stupid number of external monitors and peripherals, and I wanted something that was blazing fast and whisper quiet.

(Did I mention the bit about how buying hardware is a coping strategy? Cool. Glad we’ve cleared that up.)

Enter the lovely people at QuietPC. A few hours poking around their website, and one very, very helpful phone call, and I had my ideal machine spec’ed out. After having a few too many recordings ruined by the sound of the fans on my Macbook firing up halfway through a take, I wanted something completely fanless. I got pretty close: the system I ended up with has a passive-cooled power supply and CPU cooler, I ended up adding a single 140mm BeQuiet case fan, and there’s a fan on the GPU that only starts up when you drive it hard. Most of the time it’s completely silent.

Here’s the spec I went with:

I need to take a moment here to mention how awesome the folks at QuietPC are, because when I first placed the order, I picked a different CPU cooler – and they actually rang me up, explained that the cooler I’d ordered wouldn’t fit in the case I’d ordered, offered an alternative, and sorted the whole thing out. That’s some absolutely first-class customer service. And sure enough, a few days later, a large pile of exciting cardboard boxes arrived.

IMG_3955

A large pile of exciting cardboard boxes.

Building computers is great fun. It’s like the best Lego ever, and this one was no exception. Getting everything to fit on this system was a tiny, tiny bit fiddly… the Streacom DA2 chassis is a wonderful piece of engineering, based around an open chassis with mounting rails you can move to wherever you need them, but there’s really not a whole lot of space inside. It all fit in the end – mainly thanks to the M.2 hard drives, which aren’t really drives at all, they’re SSD chips on their own circuit boards that mount directly onto the motherboard. I also had no idea just how big the fanless CPU cooler would actually be.

IMG_3977

The CR-80EH Copper IcePipe 80W Fanless CPU Cooler is... not small

I got it all put together, fired it up, installed Windows 10, everything ran beautifully - and absolutely silent. Like, ZERO MOVING PARTS silent. This worked great until I got Visual Studio and Adobe AfterEffects installed and starting putting it through its paces, at which point it crashed hard… turns out that a completely fanless PC is ever so slightly prone to overheating.

IMG_3983

Oops.

So I compromised, and ordered one very big, very quiet fan – it doesn’t take a whole lot of airflow to keep things cool, and there’s an ASUS utility called Fan Xpert that I used to create a fan profile, so it’ll monitor the CPU temperature and automatically spin up the fan when required.

image-20200519105650432

Creating a fan control profile using Asus Fan Xpert

That seems to have done the trick – it’s been running stable for 6 weeks now; I’ve been using the rather good Open Hardware Monitor (which, by the way, is written in C# and .NET!) to keep track of all the various temperatures and things, and haven’t had any more crashes or CPU temperature errors.

image-20200519112125667

Temperature readings over a typical 24 hour cycle. The CPU is the blue one.

In the next post, I’ll talk you through how – and why – I’m using it to drive six monitors, four cameras and four microphones, and how I ended up building a bespoke computer desk to put it all on.

"Locking Down & Levelling Up, Part 1: New Computer Time" was posted by Dylan Beattie on 28 May 2020 • permalink