A week making something each day

As a challenge, last week I made five things, one each day. Each had to be finished in some sense, and preferably published. This is what I made and what I learnt!

Monday – Godot game

My goal was to learn Godot enough to write some kind of video game and publish it, all in one day. Incredibly this was fairly straightforward. Things I learnt:

  • This video tutorial and the text one in the main docs are both great starting places.
  • Physics engines are really good and easy to use compared to when I last coded games with them which was in 2002.
  • ⁠⁠Open source game engines are genuinely very mature
  • ⁠⁠It’s satisfying making something that just runs locally and is very visual

Itch.io is extremely generous with letting you just make a page for your game. It’s pretty liberating – no servers or DNS to think about like with a website, and no complicated signing mechanism like an iOS app. Although, I’m not confident the Windows build I made worked, only the Mac one…

I had to compromise quite a lot on the game, it isn’t great. But it has a character, and objects you manipulate, and a goal, and one level.

Tuesday – LLM solver

For a job interview, I wrote a program using an LLM to perform an algorithmic task, one with some aesthetic judgement. For obvious reasons I can’t say more about it! The new thing here was using OpenAI functions, which I haven’t done before. Things I learnt / remembered:

  • OpenAI function callbacks are clunky, as still not guaranteed in structure
  • Rate limits on a personal OpenAI account are quite low and easy to hit
  • It’s fun making things with LLMs – it feels powerful and surprising, and fresh

Wednesday – Browser extension

I started coding Instalamb last year, an extension to customise Instagram, for example by removing recommendations. Today my goal was to finish off a first version, package it, and submit it to the Mozilla addons site. Things I learnt:

  • When modifying the DOM of dynamic React applications, it is best to only alter the styling on individual elements. Removing elements creates strange crashes. I moved a few off the screen to an absolute position, or hid them behind other things, accordingly.
  • At least for Firefox, extension packaging is crazy simple. You just zip up the manifest and Javascript files and so on. That’s it. It makes publishing to other platforms a bit embarrassing. My first version was just 2219 bytes long.
  • It’s very hard to manipulate infinite scrolling. The main Instagram feed has a small number of post DOM entries which it rotates through. Breaking the whole page, or it endlessly loading invisible posts, were common failure cases of manipulating this.

Get in touch if you want to try it out – it isn’t quite at public release stage yet. A couple of users who want to customise Instagram in some way would be great.

Thursday – Mind sampler

I’m a big fan of Hurlburt’s Descriptive Experience Sampling, which involves randomly reminding someone to take note of how they were thinking just before a random alarm goes off. My goal was to write a mobile app to help me do this for myself. Things I learnt:

  • Local notification alarm APIs either don’t exist or are different for iOS and Android in both Flutter and React Native.
  • After spending many hours trying and failing to make a mobile app, I realised I could just use Tasker on Android to do it. See my previous post where I used Tasker to control my smart thermostat.
  • In Tasker, it’s not too hard to schedule a task every 2 hours in the day which generates a random variable from 0 to 119 minutes and waits for it – see someone’s post about this.
  • That can then trigger a notification, with a button to open a text file. The sound and icon can be customised. It’s important to put a mime type in the file open command so it finds the app without an extra prompt.

This looks like it is going to work, so hopefully I’ll now find out what percentage of my time I’m paying attention to my senses, what percentage I’m doing unsymbolised conceptual thinking and so on. I’ll report back somehow.

Friday – Vox pop video

My podcast “Imagine an apple“, about what it’s like to be in our different minds, has just got going. I’ve always wanted to interview a bunch of people about how they use their imagination and compare them, and also to use video so in the end can animate what they see too.

Today I did a prototype, filming people on the streets of London and editing it into a finished video. Lessons learnt:

  • It feels hard getting strangers to talk to you in London, but when you do it they love it.
  • Phone battery drains pretty quickly for a relatively short amount of video, so plan for that.
  • Editing in iMovie is good enough, but I’d look for something else next time. For example, it doesn’t really seem designed to do portrait video, which is a bizarre limit these days.
  • I could spend forever learning to get better at video filming and editing – it’s lovely getting a feel for why in practice.

I think with enough footage to cherrypick the good surprising bits, and careful editing, this format could work really well. Would need to be denser. Jump cuts contrasting people saying different things about the same aspect of their imaginations worked best.

You can watch the video over here, but it is just a prototype! Do give me feedback or ideas.

Overall lessons

  • Doing one thing every day is pretty tiring, like an endless loop of hackdays. However, the pressure and creative diversity of doing that made it worth it.
  • Practically the projects accumulate. You can end up with several things to follow up on – in my case fixing a couple of things in Instalamb, and analysing all the data I’m sampling about my own mind.
  • It’s pretty remarkable that the Internet, software and AI combined let me get all the above done in one week. Nothing would be surprising in amount if doing it all the time – but in each case I was doing something very new to me.

3 thoughts on “A week making something each day

Leave a Reply

Your email address will not be published. Required fields are marked *