British Summer Time GMT+1


i remember this man who worked in the hardware store who had a scar that some people said was a lobotomy scar he liked me, he was not very smart he sold pirated DVDs and he had a folded up list of them in his pocket his friend made them, and he sold them for his friend i had a fast internet connection at home, i didn’t need pirated DVDs i don’t think i even had a DVD player but i’d buy them sometimes he’d come up to the trade desk, where i worked, and he’d say “i have new movies” and i remember one time very vivid, he came and he said “there’s a new one called.. ‘no country few(???) old men’ or something” and he kept saying it: ’no country’ then he’d pause and say ’few?’ then he’d pause and say ’old men or something’ he took the list out of his chest pocket and pointed at it and said “few old men?” and i read it out loud, i said “no country for old men” and he said “it doesn’t even make sense… no country.. few old men??” and i said “i’ll have that one” and gave him £3.00 i’ve still never watched that film

i think that as you go through life, more and more things have memories attached to them and it becomes too exhausting to do anything, because of all the memories all dates are anniversaries every verb or noun is about someone or something and it becomes too much work to do anything, because of having to process all of the past and that’s what kills you

but then i guess people with no memories would never die

— chee ( 2020-04-15

Greenwich Mean Time GMT

Winter books

Over the winter holidays I read some novels. I don’t normally read fiction very often. Angus Croll says that life is too short to read anything but fiction, I’d like to agree with that but I have that thing where if I’m not actively working on something Death is in the room.

Over the winter holidays, though, I made an effort to read some fiction. I got a little pink-and-white ebook reader (a rakuten kobo) and I decided to read a book.

When I was 17 or 18 I got a job in B&Q. B&Q is just like Home Depot, except it’s in the United Kingdom of Great Britain and Northern Ireland. I was living in Northern Ireland at the time, in my parents house, and it was my first proper job. I saved up my pay and took a trip to America. I got a flight to Chicago and a flight home from San Francisco, and traveled on the Greyhound bus through Des Moines and Denver and Las Vegas (where I was on my 20th birthday).

The men at the Trade Desk had taken a liking to me and they asked the people at the front if I could be made the permanent checking staff at the Trade Desk. The front accepted, and I was moved to the back to the Trade Desk. It was good there, there was a little room and I had access to the Trade Door where I could escape at lunch and go to the local electronics store. It only got busy a few times a day when tradespeople would come in and buy concrete and bricks.

One day when I was at the electronics store I saw they had a netbook computer available for like £30 and I was really interested. A tiny little computer of my own. This was 2007.

The person in the store told me “you don’t want that, it’s not a real computer”, i said, “i do want it”, they said, “it doesn’t run windows”, i said, “i don’t mind.”

Soon I was meeting wpasupplicant and installing hundreds of tiny linux distributions on the netbook’s tiny flash disk and having a great time. The screen was bad, the keys sometimes snapped off the keyboard. It was the first computer I truly owned.

Up until then I’d been teaching myself to write HTML and CSS on my father’s old Dell desktop computer (he’d recently obtained an abandoned eMac from a friend who taught at a school), and also on a computer that was right there at the Trade Desk. The Trade Desk computer didn’t have an Internet connection (but I did find a lot of fun intranet pages). I’d save the web page I was making on a first generation iPod Shuffle that appeared to Windows as a removeable disk. They were all bright pages full of large block text, with different CSS on every page and quotes from books or intrusive thoughts.

A few months later, I’d settled on some tiny linux distribution or another for now and was browsing the web on the 1-degree of viewing angle the screen had. It was around this time Cory Doctorow released Little Brother under a Creative Commons license. I was hugely into Creative Commons and other licenses like it, and still to this day release nearly everything I write or make under an open license of its kind.

I downloaded the book, and I read it during the many hours when the B&Q trade desk traded nothing. I had it on my iPod shuffle too, so I could also bring it up on the computer beside the till and read it there.

I bought a DRM-free copy of Little Brother on the Kobo over winter, and I started reading it. I only got as far as the first dedication (every chapter is dedicated to a different book store) which mentions the book Little Fuzzy. I stopped and bought that.

Little Fuzzy

This is a good book about the nature of sentience. An influential book, in the public domain. There are little furry people in it, the word-to-word writing is pretty good and the story is good too. I read Little Fuzzy and its sequel, the only ones released in the author’s life.

I enjoyed them but they had so much gender, implicit and explicit society gender all over them as far as the eye could see and nose could smell.

Content warning

Some of the content is a little rough.

  • It’s pretty pro-colonialism, kind of nostalgic for the East India Company
  • The one time someone’s skin colour is mentioned, it’s pretty racist
  • lots of basic gender bullshit
  • lots of use of “males” and “females”
  • men writing women. women walking boobily down the stairs.

Tensorate Series

After reading Little Fuzzy, I wanted to try something with less basic gender bullshit. I started looking for some fiction where I, a smol enby, could finally relax.

I opened duckduckgo and I typed “books with non-binary characters” and “sci fi non-binary character” and opened up some tabs.

On one of the lists, at the top of the list, was a series of books called “The Tensorate” by JY Yang. the description included the word “SILKPUNK” and the author was a person with whom I share pronouns. I was excited.

JY Yang is a Singaporean non-binary person who writes very nice prose about a vivid world.

The first book was The Black Tides Of Heaven. In this world, gender is not assigned at birth but is chosen later. Some people choose not to choose.

Over the next 10 days I gobbled up all 4 books in the series. The Black Tides Of Heaven, The Red Threads of Fortune, The Descent of Monsters, and Ascent to Godhood. The magic in the world, the way it is described, is so tangible. I know what it feels like to perform slackcraft.

You catch the larger story in glimpses between the faster paced stories of humanity, and you can feel and smell and taste the world. Plus, it’s gay.

— chee ( 2020-01-02

Greenwich Mean Time GMT

secret hot dogs pt i

chiatown dog

  • chopped heirloom tomato
  • french’s mustard
  • brioche bun
  • frankfurter

british woofing dog

  • poppy seed bun
  • hp sauce
  • sweetcorn relish
  • bratwurst

dulwich open dog

  • sourdough bun
  • smashed avocado
  • flock & herd italian sausage
  • sprinkle of himalayan rock salt

basic friend dog

  • lemon and herb piri piri sauce
  • xx hot piri piri sauce
  • chicken sausage
  • mashed potato
  • papo secos

— chee ( 2019-12-03

British Summer Time GMT+1

I set up so i could have a place to throw up quick ideas, and also to provide my friends with places to host their ideas. The goal was that I’d be able to run a script and very quickly have a new domain with a folder i could put things in that would show on that domain.

The DNS records are set up with a wildcard A and a wildcard AAAA record pointing * to the linode. This way the moment a process starts listening on a given name (like, it is available on the net.

I’ve got a wildcard letsencrypt certificate set up on the site, so any subdomain of is covered by the same certificate. Those are a bit of a nightmare to maintain because you have to do deploy two more DNS records every three months, but it’s worth it for the convenience during the other parts of the months.

I’ve thought about automating the 30 minutes it takes me every 3 months, using dig(1) and the linode api but that only ever seems like a great idea during those 30 minutes.

The idea was that a person (let’s call them jimmy) would ask me for an account, i’d run a script (create_snoot jimmy) and that would set up a base configuration for them that would give them a place to put files they wanted to be on their site

do the easiest thing that could possibly work

Once I had the SSL certs and DNS sorted out, I wrote a collection of scrappy bash scripts to try out the idea.

The script generates them a user account on the linux server, and puts them into a group called undercommon. It makes a directory for them that contains only their ssh[1] public key (which will let them log in), and a folder called “website”.

There’s a section in’s sshdconfig[2] file that checks if people are in that group and then disallows them from using any program other than FTP software, and doesn’t let them view any files outside of their directory.

Match Group undercommon
	ChrootDirectory /snoots
	PermitTTY no
	ForceCommand internal-sftp

trust issues

I wanted people with more advanced needs to be able to do more advanced things, but I didn’t want them to have access the whole system.

After creating the unix account, and the ftp entry point for the snoot, the script also creates a docker container for them. That’s a kind of tiny machine of their own, that lives inside the machine. The docker container forwards two ports: ssh and web (80). The http server configuration that is built when jimmy is created points at the whatever the docker container has running on port 80 (the web port).

I provide jimmy with a port for them to use when they are sshing in, (so they’d do like ssh -p 33532) and then they ssh not into but into the docker container that is this way they get to do anything they want without having to have full access to the machine!

the default app in the docker contain is a static server pointing at the “website” directory, the same one the user can see when they ftp in.

fun doesn’t scale

this system works fine until there are more than like 30-40 people. that’s fine. if it ever got popular it could be rewritten. it’s so easy to lose momentum of your ideas if you’re trying to plan for what if it ever gets bigger. most of them won’t, and it doesn’t actually matter! build things you want to for you and your friends, and if you ever need to make it better then you can do it then!

while i’m on that subject: we don’t need to all pretend to be brands, we should be doing silly things like having a completely different style sheet on every page and the web is mostly people, not companies. and the companies are also made of people. be people.

the rewrite

over the christmas and new year period i was in a barn at the bottom of a some rich folks garden in putney, and i rewrote the shell scripts in javascript. the bed there was very cosy and i also made a christmas dinner (but i didn’t cook the chicken right and it got scary).

this one works pretty good! the things it does are the same. it offers to download a new snoot’s authorized keys from github (thanks jake for this idea), and it prints out coloured messages and has emoji and feels pretty good.

i created a special image for the docker container that contained perl6 rakudo, and started the script with pm2 on boot and would restart the server if there were any changes.


so this worked really well for 6 months! kj built the facepainting and rowan did a throwback and abe built a shop and chee built some stuff. but then I started wanting it to be simpler. some problems had started to occur. here’s some things that we’d run into:

  1. it was difficult to work together
  2. docker containers take up so much space and memory??
  3. it’s so complex
  4. there were lots of ports, two per user, it didn’t feel right
  5. i actually ran out of available docker network nodes or something? i dno

I started to look into other options. I created another chroot-based system that worked similar to how the ftp thing works but allowed more control. That still felt too heavy.


Reading the node.js documentation i noticed this in the http module docs: server.listen() Starts the HTTP server listening for connections. This method is identical to server.listen() from net.Server.

and in the net.server docs one of the signatures listed is a Unix Domain Socket. now, i love unix domain sockets. i built a window manager in javascript that used a unix domain socket as its main form of management. it was cool. everything was a command. i used it irl as my main window manager for 6 months. the use of sockets was inspired by my favourite window manager wmii which was in turn inspired by the plan9 operating system created at bell labs. the same place that invented unix, lasers and wifi (also transistors and nearly everything else). (though both wmii and plan9 use the 9P protocol, not Unix Domain Sockets).


Anyway, so, this is the solution. I’ve rebuilt again and i’ve decided just to trust everyone. All the snoots have access to the main machine, they have read permissions on eachother’s website files (by default). And instead of ports the contract is that every snoot’s server listens on a file called sock.


in order to get this to work i needed to run a command simultaneously in every subdirectory of the /snoots folder and restart only jimmy’s server if only jimmy changed. For this i built a new tool called subs. it’s built in rust and it’s on you can install it with cargo install subs.

Usage: subs [options] PROGRAM [root_dir]

	 -t, --type TYPE     set the management type [choices: watch, socket, none]
	 -s, --socket NAME set the socket path. sending the socket a message like
	 "restart xxx" will restart the process running in the directory
	 "xxx". [default: ./subsocket]
	 -i, --watch-ignore PATTERN pattern to ignore when watching (matches whole path)
	 -h, --help get help PROGRAM will be run in parallel in every subdirectory
   (SUB), as SUB's owner. A placeholder "{}" is available to PROGRAM, it will be
   replaced with SUB.

[default: none]


In a kind-of unrelated move I’ve been trying to pull back from using Google, Facebook, and Microsoft products.

Facebook I’m free from, the last thing was WhatsApp which i just straight up deleted and that’s been fine. email me

Google is off my phone and out of my search bar, but I still use their office suite at work.

Microsoft I had been fairly free of, but then they bought GitHub and I got unfree. So I’ve gone back to emacs from Atom (i’m enjoying it) and I’ve deleted or archived all the code that was on and set up a cgit server and put them all there.

If you’re a snoot you can add your own things to by making a bare git repo in ~/git/whatever.git and pushing to it.


the next thing i need to work on is some kind of documentation site for talking new snoots through how to log in, set up git repos, run their page locally, deploy etc. after all recent changes, the helpful getting started guide that was provided to all snoots is wrong and bad.

also a doc page for explaining that installing dependencies and building assets is their responsibility, but the start script will be run by the server.

also so many other things.


— chee ( 2019-08-17

  1. ssh is software that lets people securely log into one machine from another over the internet ↩︎

  2. sshd is the software that runs on the computer you are using ssh to log into ↩︎

British Summer Time GMT+1


so now my stance is:

  • fuck React
  • fuck GraphQL
  • fuck yarn(1)
  • fuck Facebook, Instagram, WhatsApp and anything else that makes that company seem like a cool place to work so they can continue hiring good developers to do terrible things

After deleting Instagram a few mornings ago, I thought I’d use my GDPR data request to build a page that contained all the photos that used to be there. I wanted to be able to post to it later, and I wanted an RSS feed. I recently learned you can include a CSS stylesheet from an XML file, and was excited that this was the time to use that.

I built an RSS feed that’s also the website for the feed 😊.

Before I send you the link, Disclaimer: * big page (30mb) * does not work on iOS * does not work on macOS Safari

Here’s a link that you can add to your newsreader or visit in your browser: 💔 telecam. Isn’t that cool? i think it’s cool

In case you’re on one of the unsupported platforms, here’s what it looks like:

a screenshot of telecam

There’s also a form for uploading new photos living at 💔 telecam/form which has filters (and the filters are written in Rust! it has Toast!)

a screenshot of the form

So why does it not work in Safari?

Apple really did some real shitty 90s Microsoft-level Embrace, Extend, Extinguish move on their platforms with RSS. when came out it was a generic newsreader, and they made it the handler for all RSS feeds (even if you had another RSS reader installed).

They stopped displaying RSS feeds in Safari or iOS Safari, and opened the News app automatically they came out with the Apple News Format and the Apple Publishing Platform

and then in (i think??) iOS 9.3 they stopped supporting RSS feeds from anything not in the publishing platform. but it’s still the default handler, and the Safaris still can’t display the feed, and News still hijacks it even if you have another newsreader installed hijacks your legit rss feed and then errors out with “Cannot display content from this site” instead of letting you view the file or send it to your actual reader


please subscribe to my feed. the code, as always, is available the repo

like, subscribe, rate 5 stars, it really makes a difference folks.