I made this recently by searching for “hummus pasta salad” on google, taking inspiration for a recipe or two and then improvising with what I had. It’s surprisingly tasty! The flavours of each component stay relatively separated, so the better your olives/feta/tomatoes/hummus, the better your dish will be.

Pictured in tupperware because I was lazy

Ingredients:

• About 250g of pasta (e.g. Fusilli. Wholewheat is nice/optional)
• Three/four tablespoons of hummus. I make my own with this recipe.
• A bowl of cherry tomatoes
• Half a jar of olives (about 90g?)
• A single red pepper
• About 200g of feta, chopped (vegan option: omit!)
• A glove of garlic, chopped
• Spices (e.g. black pepper, paprika, basil)
• A bit of oil for frying

Instructions:

Add red pepper, half of the tomatoes and garlic to a frying pan, fry on a medium heat for a few minutes, then turn down to low and add the olives and spices.

Meanwhile, mix the hummus with water until it takes on the consistency of cheese sauce. If you didn’t add enough lemon juice before, now’s your chance!

When the tomatoes have just started to fall apart, add the pasta, the hummus and the rest of the tomatoes. Simmer for a few minutes (more if you made your sauce too thin), adding the feta halfway through.

Serve warm or cold!

# I hosted CollabPaint! And got annoyed at 4-years-ago-Joe.

### CollabPaint!

I put my old collaborative whiteboard project CollabPaint back up on the internet! Multiple people can log in to a room and paint at the same time, without having to register for an account or sign up.

You can set the size/colour/opacity for your brush and also draw lines, rectangles and ovals. There’s even a chat box and the option to save download the thing you draw.

I wrote CollabPaint about four years ago, and it was one of my first forays in to node.js and socket.io after CollabBox. Like all of my other projects, I never really polished it. It’s still missing a few things such as an undo button (and some overdue bugfixes…), but otherwise it gets the job done!

### On future-proofing Code and following best practice

Sadly I had trouble getting CollabBox to run, because I used old crusty versions of all the libraries and never made a package.json file to record which versions of what things I used, so everything is broken. But, here it is on github anyway.

If I could go back four years, I’d tell myself the following set of related things:

• Keep a record of which versions of everything you use, if you can
• When you start using a new language or ecosystem, make sure you actually look up the best practices for the things you’re using.
• For example, with node.js and npm, actually bother to write package.json files to track all your dependancies!

This kind of stuff should really go without saying, but it strikes me as interesting that – as a hobbyist coder four+ years ago – it didn’t really occur to me. So if you ever see your hobby-programmer kids writing code and they forget to make a package.json file, set them straight so they don’t make the same mistakes I did!

# Setting up shop, proximity mines and Dokku

I decided to bite the bullet and get myself an actual server on the internets to host my thingamabobs, and here I write about my experience.

I was pointed to Digital Ocean. $5/month/server for a 512MB an actual VPS on an SSD (actually,$0.007/hour since you can turn your server off and on), not bad!

Like other server providers, they let you create servers with pre-installed software like WordPress, and Dokku. Wait, Dokku? What’s that?

In the words of a friend:

I set one up at cloud.example.com. Then I git pushed a Go web app to cloud.example.com:goapp and it was up and running at goapp.cloud.example.com.

That sounds fun! So I decided to get my old WebMines game running with Dokku, and all it took was one change to the code (I had host the server on the port specified by the PORT environment variable), two files

requirements.txt (naming the versions of libraries I’ve used)

and Procfile (pointing to the name of the main file),

and two commands:

And done! My terrible, three year old long-polling-based Python-powered incomplete minesweepers game has a place on the internet, and when I want to update it, all I have to do is another git push. Be warned, it’s occasionally broken and doesn’t include a concept of points/success/failure.

Multiplayer Minesweeper!

As for hosting static pages like Plotter and Automa, all I had to do was make sure the main page was called index.php, and dokku figured out it was a php application and set up an ngnix server for me. This makes me very happy because it means I get to continue my run of never having have to learn how to actually set up a web server properly.
P.S: Once I get a bunch of my things up and running, I’ll probably do a post about it. Or just make a page for them and post about the page. Or maybe a post about how much I’m annoyed that NodeJS’s API has changed so much in three years that I basically have to rewrite half of everything I made back then, but how it’s really my fault for not keeping track of which versions of which modules and nodejs runtimes I was using for which app. *grumble*

# Removing dead files from iTunes

So, I made a blog. Mainly so I have a place to put my things. I used to have a website which I meticulously handcrafted and put all my stuff on, but it got wiped from the internet and now I’m significantly lazier, WordPress is a much more attractive option.

Without further ado, I begin the reverse chronological journey through the catalogue of Crap I Made with an underwhelming but still kind of useful entry: an AppleScript which goes through whatever songs you have selected in iTunes and removes any which don’t actually point to any files.

Here’s the gist. My first Applescript! Hacked together from various bits and pieces on The Internet. And because I feel it will make the blog post look nicer, I’ll put the code here too:

And here’s a python script to accompany it which goes through all your subfolders and deletes the newest of any two files which have the same name except for a different extension.

Can you guess what I’ve been doing today? That’s right, failing to import things in to iTunes properly and then writing code to patch up my mistakes. Could I have combined the two scripts in to a single applescript which actually does the job of hunting for duplicates and deleting the newest? Probably, yes.

Edit: want easy access to that AppleScript, or indeed any script for iTunes? /Library/iTunes/Scripts. Create the folder if it doesn’t exist already, then it’ll show up in a funky little scripts menu in the menubar.