Saturday, 19 September 2026

Harry Winser.com

Musings on tech, photography, and culture

Quiz of the Year 2024

My quiz for 2024! Categories include; News from 2024, a nerd / tech round, as well as a chaos round

Below is the quiz I’ll be running for some friends at this year NYE party. It’s very British and quite nerdy, as I’ve tailored it towards who will be there.

You can find the answers to this quiz here: Quiz of the Year 2024 - answers.

Enjoy, and Happy New Year!

News from 2024

  1. In January, what scandal caught the publics attention after an ITV drama?
  2. In February, a Willy Wonka experience opened in Glasgow. It was a disaster but has since been recreated in LA, as well as spawning a musical. How much was a ticket?
  3. In March this year, which country became the first to make Abortion a Constitutional right?
  4. In April, what birthday did BBC 2 celebrate?
  5. On 22nd of May, Rishi Sunak announced that a general election will be held. What was happening, as he stood outside of number 10?
  6. On the 4th of June, a woman was arrested for throwing what at Nigel Farage?
  7. Who became British Prime Minister ?
  8. The Olympics were held in Paris, France. How many Medals did Britain get?
  9. In September what well known restaurant chain, which mostly concerned itself with Fridays and religion, went into administration?
  10. Name the two super hero movies released in October; both were sequels, and one was from DC and the other from Sony/Marvel.
  11. In November who became the leader of the Conservative Party?
  12. In December, what time of day does this person (from the previous answer) think sandwiches should be eaten?

Nerd + Tech round

  1. Name at least one of the top selling games in the UK this year
  2. What numerical version of the iPhone was released this year?
  3. Please write down what’s wrong with this statement: According to the rules of Quidditch, throwing the Quaffle though an opponent’s hoop earns 10 points, hitting an opponent with a bludger earns 0 points, and catching the golden snitch earns 50 points and ends the game.
  4. How Many sides does a d20 have?
  5. Fireball can be cast using what minimum level spell slot?
  6. What is the full name of the Grifindor ghost?
  7. Please write down what’s wrong with this statement: In Star Wars, in order to free young Anakin Skywalker from slavery, Qui-Gon Jinn first uses a Jedi Mind Trick to convince his master Watto, a Toydarian junk merchant, to allow him to pod race.
  8. What year was Windows 11 released?
  9. Dumbledore has a scar above his left knee. What does it resemble?
  10. Who invented the World Wide Web?

Chaos round

  1. Spell “Ore” - in a sentence: “you could use an oar or a shovel, to get at that ore”
  2. Spell “There” - in a sentence: “Their yours, and they’re all the way over there”
  3. How tall does insert friend here think the Eiffel tower is in meters?
    1. Actual answer is 330 m, but whatever they wrote is the answer
  4. What does A.B.C stand for? (A.B.C was shown on A.B.C and on A.B.C) - Airway Breathing Circulation, Australian Broadcasting Corporation, American Broadcasting Company.
    1. I’d accept Australian Broadcasting Corporation, but most inventive answer wins.
  5. What well known song has the chord progression C, G, A minor, F (Loads use this progression, and so pick your favourite - for example, “Let It Be” by The Beatles. You might also decide that the most interesting song wins).

Async Await Typescript Csv Parser

Example code for a TypeScript CSV parser with Async/Await

On far too many occasions I need to parse CSV files to extract the data. I’ve found over the years that also converting them to TypeScript objects is a big help.

I’ve written variations of this code over and over again, and I’m getting annoyed at myself for forgetting / losing previous versions of it. So today, I’m going to share my “janky” yet simple way of parsing a CSV to TypeScript objects.

As with all code on the internet; please make sure you read it and understand it before jamming it into your projects!

The code

import * as fs from "fs";
import * as path from "path";
import { parse } from "csv-parse";

interface ReadCSVOptions {
  columns: string[];
  delemiter: string;
}

const readCSV = async <T>(
  file: string,
  options: ReadCSVOptions,
): Promise<T[]> => {
  const csvFilePath = path.resolve(__dirname, file);
  const fileContent = fs.readFileSync(csvFilePath, { encoding: "utf-8" });
  const csvParser = parse(options);

  return new Promise<T[]>((resolve, reject) => {
    const results: T[] = [];

    csvParser.on("readable", function () {
      let record;
      while ((record = csvParser.read()) !== null) {
        // ignore the row if it equals the same as header
        if (record[options.columns[0]] === options.columns[0]) {
          continue;
        } else {
          results.push(record);
        }
      }
    });

    csvParser.on("error", function (err) {
      reject(err);
    });

    csvParser.on("end", function () {
      resolve(results);
    });

    csvParser.write(fileContent);
    csvParser.end();
  });
};

A few items of note

  1. While I’ve used it personally for little scripts, if you plan to use it for “production” code, PLEASE TEST IT!
  2. I’m aware there are probably npm libraries out there for this exact thing, but I couldn’t find a working one.
  3. It relies on csv-parse - which looks pretty well used and is well supported.
  4. This will load everything into memory. So maybe avoid using for very large CSV files.

Initial release: Thoughtstream.me

The initial release of ThoughtStream.me!

Finally, after far too long (and a whole lot of cryptic posts on Mastodon), I’ve finally released my little side project; ThoughtStream.me.

I started this back in September (and even got a new laptop so I could write it), and naively thought I’d be done by mid October. Little did i know how long it would take! But we’re here now, and I thought I’d write up a little blog about it, where the idea came from, and maybe what’s next.

Thought-stream desktop example
ThoughtStream.me on a desktop

What is ThoughtStream.me?

Earlier in the year, I found myself wishing I could just “stream” my thoughts onto something like Mastodon or Bluesky, but without worrying about other people reading them. So I asked around and to my surprise I couldn’t find anything like it. I tried using Obsidian, which I use for all of my notes, but found it just wasn’t quite right. The “conscience stream” style of writing just wasn’t quite the right fit. It felt awkward and messy.

So decided that if it didn’t exist, I should probably put those years of programming experience into building something for myself!

But what is it?

Essentially, ThoughtStream.me allows a user to create small notes, that are then displayed in a timeline.

But why would this be useful?

Well, for example, I have it open during meetings to add little comments about interesting things that come up. I also find it an excellent way to keep me present in the meeting, as it keeps my hands busy.

I also keep a daily “stream”, where I just stream thoughts as I have them into it. I find this incredibly useful when writing complex code or trying to debug something difficult. Essentially treating it a little like a rubber duck.

What’s Next?

I’ve got a load of ideas for the project, which include:

  • Ability to download thought streams as markdown files
  • Better searching and tagging
  • Linking between thought streams
  • “Enter key” submission which can be toggled via user settings

This is very much the first iteration of the idea. It’s been a very long time since I last wrote any amount of code “for fun”, and I’m somewhat proud of actually getting this out there and released!

So please sign up and take a look, then share whatever feedback you have with me!


Very Old Stuff

Very old content, purely for reference

Just a small post with a list lof links to very old talks. To put into perspective how old:

  1. Covid wasn’t a thing
  2. Brexit had just happened
  3. I was still at Rightmove (I left in 2019)
  4. I hadn’t moved onto a canal boat yet (that’s a post for another time)

Because of their age, they may no longer be fit for purpose, nor do they necessarily reflect my views and opinions today.

Writing

Talks

Consumer-driven contract testing with Pact and Docker - Harry Winser (Rightmove) - Velocity 2017

Link to the O’Reilly Resources - Pay Wall

Image of me on stage, with a slide about CDC’s
Image of me on stage, with a slide about CDC’s

Consumer Driven Contracts at London Continuous Delivery Meetup 2017

Link to London Continuous Delivery

Why Microservices Suck, JVM Roundabout 2018


Welcome

Welcome to my space

Welcome to my little corner of the internet! I hope you enjoy, and if you’d like to contact me, you can use the links above, or check out the about page.

See you around!

Harry