hello subscriber

this feed may get more noisy in the future; I’ll be posting sounds and pictures here.

if you’d like to opt out and stay on the ~1 post a week tier, you can update the URL in your feed reader to https://chee.snoot.club/weblog/feed?kind=article

thank you

– chee rabbits, the largest rabbit in the world


  • This is a great read: https://github.com/dekuNukem/bob_cassette_rewinder
    • epic v apple is exciting
      • google v oracle went quite well
        • it’s annoying to have to wait around until some rich prick decides to pick a fight
  • it’s strange that the mac app “Preview” is called “Preview” and not “View”
    • pre- what?
    • what happens next
  • we spent all day yesterday playing Detroit: Become Human
    • one of the branch nodes is named KARA BECOMES DEVIANT
    • my ps4 controller’s sticks were drifting so i poured alcohol into them and squeezed them and spinned them around
    • so many problems can be solved by pouring alcohol on them
  • working on an album of ufo music
  • keep starting and stopping projects over the last few weeks. can’t seem to keep to one thing
    • think it would be helpful to know when i’m going to die
  • we’re in the park today. it’s cloudy and nineteen degrees.
  • im sleepy
  • it feels like things could get better, doesn’t it? feels weird


  • i attended a book launch for joanne mcneil’s Lurking.
    • it was hosted by archive.org.
    • brewster kahle was in the chat telling joanne to get her publisher to sell archive.org the book so they could lend it
    • i haven’t read the book yet because i’m still reading the deficit myth
  • i listened to the song wounded by the cookies a lot. it’s on our morning sunshine pop playlist. it’s really good
  • when the first gulf war began the bbc banned 69 songs including Blondie’s Atomic and Boom Bang-a-Bang by Lulu
  • we went to Westfield on Saturday. it was really busy, but we had a good time.
  • we bought a pretty mancala set from flying tiger and after lunch we played a few rounds on a grassy knoll

I spent some time this week reading about twitter’s bluesky project trying to understand why jack wants Twitter to be a client of a decentralized social media protocol.

At first I thought: Jack doesn’t want to be responsible for speech, he wants to surf. He’s banking on Twitter remaining the primary interface for most people and hoping the network will take care of moderation and he won’t be phoned by senators anymore saying “why haven’t u blocked alex jones yet”

But after reading one of the articles bluesky links to,

I think Jack wants the new protocol to be based on the blockchain. He likes bitcoin. So does Square, Inc. (https://twitter.com/jack/status/1108487911802966017).

This would help with his moderation problem, and his monetization problem. Interfaces earn bitcoin for having users, users earn bitcoin for retweets, that drives up the price of bitcoin and jack gets rich while he surfs.

Maybe it would be something less rainforest-burny like FileCoin or whatever. I’ll bet Bitcoin is jack’s preference, but it doesn’t even matter if it’s a brand new currency. jack would instantly have a huge amount of it, and its value would skyrocket.

 I hope I don’t think about it anymore this week.

  • We went Geocaching® yesterday. Drank some cider in the park. Good dogs out. Smoky Bacon Cow, Horace, Margaret the Carpet, Little Sausage.
  • I’ve forked this notetaking app, it’s great but i want more.
  • Cuba has created at least two potentially viable vaccines, because they knew they wouldn’t be able to afford to compete with richer countries to buy them.
    Cuba needs syringes. It can’t trade easily because of USA, and it is currently not making much money from tourism.
    Donate here to help: https://www.support-vaccination.org/
  • We found a lovely online café nearby that does gluten free brunches delivered in lovely boxes

I’ve been sick all week, and now Abe seems to have got whatever I’ve had. It’s a really annoying fever-y thing.

Last night I had a dream where I was working on a garden with somebody from work. We were laying bricks and digging holes at the bottom of a residential hill. There were other people from work beside us working on different gardens. I looked up, there was an aeroplane flying overhead. It seemed to be hanging heavily to one side, and I saw steam or smoke escaping from areas other than the exhausts.
“is that okay?” i asked
“yeah, i think that’s normal” said my colleage
“i really don’t think that’s OK,” i thought (and didn’t say)
Then the aeroplane swung dramatically to the right, up to the top of the hill. It was coming down at us very fast now, parts of it breaking off and nearly hitting folks who jumped out of the way at the last moment.
I looked over at my colleague, who was looking but didn’t seem to have registered that we were going to die. Then I looked back at the aeroplane and woke up.

no reason to read into it


Last year me and Abe started working on some art together. 

It’s called today

the today logo and favicon, made by abe. 
it's a black and white plant pot and plant on a pixelated rainbow gradient.


Each page has a picture made by Abe with Word ’97 in a Windows 98 Virtual Machine, and a looping sound.

office ’97 logo
old windows logo

I make the sounds with a Nintendo Game Boy, a handheld compact cassette recorder and a teenage engineering op-1.

a game boy with a cat face on the screen
teenage engineering op-1 cow fx.
a black cow silhouette with flashing
neon pipes

You can view the next sound/picture pair by clicking the picture, eventually you’ll loop around.

The most recent one is on the homepage/.

There’s an RSS feed you can subscribe to, and you can append .json to any page (including the root!) to get a JSON representation of that page. Feel free to do whatever you want with that. The sounds and pictures are all creative commons share-alike.

day manager

Originally it was just a few HTML files, but when it started to take shape I wrote some scrappy JavaScript to generate the pages from a JSON file.

But that meant it was a manual process to put something live, or even preview a pairing.

So then I put together an app to manage the page. It takes uploaded media and puts it in Linode Object Storage (which is like S3 but without giving money to jeff).

There are three concepts. sounds, pictures and days.


The page for sounds shows a grid of every sound that isn’t part of a day.

screenshot of the sounds page, showing three un-dayed sounds.

you can click one to preview it, and you can drag a .flac file onto the window to upload a new one. It’ll get a random name like spooky ocean. (adjectiveish noun).


The pictures page is a grid of all the pictures, paired or not.


screenshot of the pictures page.
two used and one unused

This is where you add the alt text, and also where you can select the Make a day of it button.

make a day of it

The make a day of it page is where you can preview how a particular picture will work with each available sound.

the “make a day of it” page

When you fine something that works, you can give it a name and it will be the new homepage the very next moment.


The days page shows a grid of every day there’s ever been.

the homepage of today manager showing days

danger mode

It’s scary to have delete buttons lying around, so those are hidden behind DANGER MODE, which can only be activated by manually adding ?danger=danger to the URL. 

After deleting anything, you’re redirected back to the non-danger page.


ok, that’s all. thanks.

password entry screen. it’s the bad ending from bubble bobble.



DISCLAIMER: Sorry, this post is about boring code shit i just don’t want to learnt to do again later. It’s only a few things but it took me days to get a handle on.

Using cmake instead of the arduino ide is really nice, it works well in both text editors (emacs and vscode) and you get context-aware completion, hover docs, etc.

1. Get Arduino-CMake-Toolchain:

$ cd ~/projects
$ git clone <https://github.com/a9183756-gh/Arduino-CMake-Toolchain>

2. Start your project:


$ mkdir cool_project
$ cd cool_project
$ touch main.cc
$ $EDITOR CMakeLists.txt


cmake_minimum_required(VERSION 3.19.0)
project(cool_project CXX)
add_executable(cool_project main.cc)

# `AUTO_PUBLIC` will automatically find and link the right libraries
# from your installed arduino libraries, just like the arduino IDE!
target_link_arduino_libraries(bleepbloopmachine AUTO_PUBLIC)

# this will add an `upload` target that you can use to build &
# upload to the microcontroller

3. Use cmake!

$ mkdir build
$ cd build
$ cmake -D CMAKE_TOOLCHAIN_FILE=$HOME/projects/Arduino-CMake-Toolchain/Arduino-toolchain.cmake -D CMAKE_EXPORT_COMPILE_COMMANDS=1 .. 

This will generate a compile_commands.json file that your editor can use to give you completion hints and docs.

4. Setup vscode!

If you’re using Code:

  1. install the cmake tools extension.
  2. Run the command CMake: Edit User-Local CMake Kits
  3. add this kit to the array:
     "name": "Arduino toolchain",
     "toolchainFile": "/home/chee/projects/Arduino-CMake-Toolchain/Arduino-toolchain.cmake" 
    (change the toolchainFile path to the correct path for wherever you cloned the cmake arduino toolchain to in the very first step)
  4. Run the command CMake: Select A Kit and select Arduino toolchain from the drop-down
  5. Now you can use CMake: Build (F7) and CMake: Build Target upload to build and upload things to the microcontroller!

getting the upload target working

Set the environment variable SERIAL_PORT_FILE to ttyACM0 (or whatever the microcontroller’s serial port is on your computer) in the workspace’s cmake.buildEnvironment setting:


I’m working on a clone of Oliver Wittchow’s nanoloop for the Adafruit PyGamer.

The prototype was written in CircuitPython, which is a lovely language, but it doesn’t (yet) have support for the kinds of audio things I want to do.

It was helpful to use it to lay out the shape of the state object, and the controls and the UI.

The audio was unuseable, so I’ve rewritten it in C++.

It’s coming along very well.

There are 4 sound channels available for use, using the fab Teensy Audio Library:

  • square
  • pulse
  • sawtooth
  • noise

The envelope menu item let’s you change the attack, decay, sustain volume, amplitude and panning of your note block with cute visual indicators of each property.

There is a filter and a delay feature, and each channel can play at full speed, half speed or quarter speed. You can alter the bpm in the second menu.

It’s a lot of fun.

The plans for the next session (this evening?) are:

  • add a pitchbend envelope (for the mod menu item)
  • add UI for delay and filter
  • use the neopixel array on the base of the PyGamer to indicate the current bar (the loop plays for 4 bars, things on /2 or /4 speed play twice or once during that time)

Future plans are to introduce pattern chaining, pattern-length (per-channel), using square curves for attack and decay and chords (positive integer intervals).

The code is very bad and available here:


It’s already starting to diverge from nanoloop, and I hope it will continue to forge its own identity until it can stand strong as its own independent interesting instrument.

an overnight recipe


  • handful brown sugar
  • handful white sugar
  • 1 lemon, sliced
  • ~120g yerba mate
  • ~litre still water
  • ~litre sparkling water


  1. squeeze the lemon slices into the bottom of a litre jar with a tight lid, i’ve used a kilner
  2. add the handfuls of sugar, and stir until dissolved
  3. drop the lemon slices and yerba maté in
  4. fill the jar with the still water, (you might need to put the lid on and shake it to soak the tea, so you can fill it to the top)
  5. put it in the fridge for 8-12 hours or overnight
  6. strain the liquid through a cheesecloth (or a sieve will do, the pieces are quite big) and mix 50/50 with sparkling water
  7. serve in large glasses with ice

— chee (chee@snoot.club)

imagine you have a raspberry pi running archlinux arm, and you want to use the python library RPi.GPIO.

that requires a /dev/gpiomem device, which is a hacky /dev/mem derivative that allows you to access the gpio pins without being root. which is important if you want to also be able to access a normal user’s dbus session, or anything else where you’d like to not be root while running the python.

arch linux arm uses raspberrypi’s kernel fork, but doesn’t set up the gpiomem device the way it’s needed for RPi.GPIO to work.

Add a gpio user

as root, create a gpio user

groupadd gpio
usermod -aG gpio alarm # alarm is the name of the default archlinuxarm user

setup udev

Make a file called /etc/udev/rules.d/pins.rules and put this in it:

SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="gpio", MODE="0660"
SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'"
SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value ; chmod 660 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'"

you may also wish to append this line, if you’re going to need spi access too:

SUBSYSTEM=="spidev", GROUP="spi", MODE="0660"


reboot, run the python, no root,

I got a broken gameboy printer off ebay for a few pounds. i resoldered all its joints and cleaned it with vinegar and alcohol.

that made the light come on, but the link port was badly damaged too. i managed to fix it by prying all the pins into the right shape with a pair of pliers and squeezing them around a folded up piece of a ripped up Something For You card.

we were in a pawn shop just before new lockdown, and they had a gameboy camera for sale

photos of abe and chee coming out of the gameboy printer

— chee (chee@snoot.club) 2020-11-18

can i tell you about this thing i wrote? it involves ssh and cookies and the setuid and setgid bits.

it’s called snootauth.

what is it?

it’s a way for sites on snootclub to verify a snootclub user.

how does it work?

it is hosted at /auth on any snoot site that wants auth.

abe.snoot.club/auth/chee showing link labeled “listen”, and an ssh command to run

when you, a user, click the listen in the browser, it starts a GET request which makes the server open a unix socket that’s owned by your user in /snoot/auth/socks/{your-uid}.sock.

there is an ssh server running on port 2424, which has ForceCommand set to a program called succeed.

the ssh command being run in a terminal. “Thank-you, you can return to your browser now.”

when you run the ssh command, succeed(1) writes the word "success" to the socket belonging to your user then exits.

Web browser saying “Thank-you! Enjoy your cookie”

In the http server, listen’s GET request handler receives the "success" in the socket and returns, setting a cookie for you on the snoot subdomain you are on.

Devtools showing the cookie set for this subdomain.

and now on the server, there is a file that belongs to the snoot user whose site you are on that contains your token:

ls -l showing file permission abe:snootauth

it’s also read-writeable by the snootauth program, so it can delete or replace tokens when the user logs out or reauthenticates.

so now the server code for the snoot whose site you are on can check any cookies it receives against the token in /snoots/auth/sessions/{their-name}.{my-name} — chee (chee@snoot.club) 2020-11-17

i made a website yesterday


i call it the public dump

if you register as a Copyright Holder, you can create Collections and add Pieces to those Collections

here is an example Collection: https://cc0.snoot.club/chee/parts-of-songs/

it contains some parts of songs i’ve started making but don’t know how to finish. and so they’ve been released to public domain.

you can upload any kind of file, and it will be added to the Collection and displayed with a CC0 license, dedicating it to the public domain.

if it’s a sound or a picture or a video it will be displayed with a little preview. registrations are open.

e-mail me with your legal name (for the dedication mark) and desired username, and i’ll send you a password. — chee (chee@snoot.club) 2020-11-17


today i went to the dental hygenist. they really name that in such a way that if you don’t know what it is, well, i don’t think i would have gone if it had been called “dental scraping”. my mouth bled a lot, there was lots of blood, and flakes. shards flying around the room!

“calcified yuck” they said, is what the shards were.

the train home

on the train home i made this: https://chee.snoot.club/music/song/teeth-scrape-tapemp3

using a cassette recorder, the op-1 and the wired heart which i got with a voucher for doing a marketing interview with bitwig.

op-1 split drum

the drum kit on “teeth scrape teeth” is the op1’s built-in AWA Beef kit, which i fed through the tape recorder and back into the op-1 and chopped it up.

i wanted to share the kit with kara, but the op-1 stores kits as a single AIF instead of separate samples for each drum. luckily people have reverse engineered the drum format plenty. it has some embedded json in it, a bit of (standards compliant!) trickiness with the AIFC spec. the json has the start and end points for each sample (as a frame. like, you take the start value (big number) and divide it by 44100 (for the sample rate) and divide that by 4096 (for the block size) and that’s the start time in seconds).

so i threw together a scrappy script to parse the json and extract the segments with ffmpeg.

if you want it, here it is:

— chee (chee@snoot.club) 2020-11-04

raspberry pi foundation have announced a new computer that is built into a keyboard.


the raspberry pi 400 pictured with the mouse, memory card, power supply and guidebook that come as part of its pack

this is so good!! it’s like a little amiga!

it has exposed GPIO pins, a micro SD slot, two micro HDMI, 3 usb-a ports and an ethernet port. usb-c charging. bluetooth 5.0, ble.

i want this as my work computer.

they’re £67.50 alone, or about £95 with a mouse, microsd, power supply and beginners guide.

they’ve added a heatsink and overclocked the CPU so it’s a quad-core 1.8ghz, rather than 1.5ghz.

the raspberry pi 400 pictured from behind showing its ports and pins

if the office still existed, this would be perfect for it. little 2020 zx spectrum. love that for me.

they would be so good for school too, everyone gets a keyboard with their name on it at the start of the year. you can keep it in a cupboard, or in your bag if you have a screen at home. the IT room is just a room of monitors.

i should get one and make it boot straight to a repl. maybe the python repl, and leave some glossy magazine printouts of pygame source code. or a lisp repl. or emacs.

install emacs as /sbin/init – http://www.informatimago.com/linux/emacs-on-user-mode-linux.html

— chee (chee@snoot.club) 2020-11-02

One of the exceptions to the tier 3 lockdown is for protests. Protests Organised, with precautions, by a business, charity, public body or political body after a risk assessment

laughing for a moment at “protests organised by a business”, let’s look at “risk assessment”.

the The Health Protection (Coronavirus, Local COVID-19 Alert Level) (Very High) (England) Regulations 2020 has this to say baout risk assessment

  1. The first requirement is that the organiser or manager has carried out a risk assessment that would satisfy the requirements of regulation 3 of the Management of Health and Safety at Work Regulations 1999(35) (whether or not the organiser or manager is subject to those Regulations).

so that’s defined here and essentially means filling out one of these forms: https://www.hse.gov.uk/simple-health-safety/risk/risk-assessment-template-and-examples.htm

and what is a “political body”?

Well, The Health Protection (Coronavirus, Local COVID-19 Alert Level) (Very High) (England) Regulations 2020 says:

(13) “A political body” means—

(a)a political party registered under Part 2 of the Political Parties, Elections and Referendums Act 2000(44), or

(b)a political campaigning organisation within the meaning of regulation 2 of the Health and Social Care (Financial Assistance) Regulations 2009(45)

okay, so let’s have a look at the Health and Social Care regulations 2009:

“political campaigning organisation” means any person carrying on, or proposing to carry on activities— (a)

to promote, or oppose, changes in any law applicable in the United Kingdom or elsewhere, or any policy of a governmental or public authority (unless such activities are incidental to other activities carried on by that person), or (b)

which could reasonably be regarded as intended to affect public support for a political party, or to influence voters in relation to any election or referendum (unless such activities are incidental to other activities carried on by that person);

so by protesting, you become a political body. and as long as you have, or somebody has, filled out a risk assessment form you can protest.

so let’s go. i have an EFF sticker on my laptop, which i have on there to promote policy changes. so as long as i fill out a risk assessment form, i have free reign. i can hunt all the grouse i want.

i am not a lawyer. this web log entry does not constitute legal advice

I’m going to charge my ipod nano, and fill it with mp3s and audiobooks. then i’m going to buy a digital camera and a feature phone with a hardware keyboard for texting.

Drawing room

we went to a small art gallery for the last time this year. it was full of automatic drawing and ghosts. https://drawingroom.org.uk/exhibitions/not-without-my-ghosts-the-artist-as-medium

There was a William Blake drawing of the ghost of Voltaire he probably saw in Peckham. always seeing ghosts, wasn’t he, blake. in peckham. on the rye.

Anna Mary Howitt


anna mary howitt burnt all her paintings and started drawing these complex pencil drawings that often centered a lady Christ. i’m trying to read more about her in a public domain biography that’s been digitized by a computer, but:

The desire being generally expressed for these brief “ Reminiscences” to be expanded and amplified, my mother commenced grarlmllv making the neorlfnl preparations.

  • PORTBAIT OF ALuiY HowiTT [from a photograph) . Frontispiece
  • PAOR
  • The Home at Uttoxeter . . . . . . .12
  • The Eey. /\JS’^3 CL0rES 36
  • Mes. Clowes attended by two Gextlemex of the Towx . 37
  • AxNA Bothvm at Croydox . . . . . . .45
  • Home of William Howitt at Hkanor 73
  • AcKWORTH School 76
  • Thomas Howitx of Heaxor (William Howitt’s Father) . 89
  • Jubilee of George III.
  • Birds and Flowers “ — Failure of the Conslitutional—ThaceTeLj and Dickens

Ithell Colquohoun

how come i never heard of this british surrealist occultist author? really excellent surrealist art and automatic drawing stuff with watercolours. and MAGICK. she was expelled from the british surrealist society, just because she wouldn’t renounce the occult, even though she had all this wheat:

ithell colquohoun with wheat

is that wheat?

plenty of tasty grass of some kind anyway. they’ll be embarrassed when the Æon of Ma’at comes and they have no grass.

a ithell colquohoun painting with watercolour and pen
ithell colquohon — pine family (1941)

that one was painted in cornwall. i’ll ask glynn about it.

Ann Churchill


morris interview

Chris Morris is very good in this interview. the interviewer keeps trying to get him to say “you can’t do satire these days mate what with trump and all” but he won’t, and he’s very elegant about it https://www.youtube.com/watch?v=liV5wKAihh8

time for bed

tomorrow is the last day before the nightmare begins. remember to enable 2fa then log out of twitter, then log in as an account that only follows natalie imbruglia, then block api.twitter.com in your hosts file and delete the app from your phone. remember that you can read books instead of the news. remember that takes won’t help, only eggy bread will.

We are watching movies and eating spooky snacks

Coffee and breakfast

<2020-10-31 Sat 09:00>

Coffee and breakfast weren’t spokoy. A couple glasses of cold brew with milk, and something that was very nearly an omelette. Eggs, yoghurt, soy sauce, sugar, bacon, mushroom, and spinach.

Vampyr (1932)

<2020-10-31 Sat 11:30>



  • First up: Vampyr, a restoration from scraps of german and french prints, with a new(1998) german sound print.
  • they’re really whipping out the imagery.
  • a man with a scythe(death) has gone down by the river(death) and rung a bell(death)
  • the first section of the movie is a lot of hanging around staring at things and being spooked. it’s good they hired an actor with big eyes.

there are no kind or hund here

  • really good spooky face movements by Leone when she’s getting damned.
Sybille Schmitz having a vamp

“Why does the doctor come so late at night?”

  • Dr. Acula, I presume???
  • it’s a good slow movie. Full of literary tropes, and Christian scolding. there’s a whole section about how “sure, eating people is bad but suicide will send you to hell”.
  • There are a lot of slow scans of a printed german text about the vampyr, and if you lose your concentration for a moment the next scene is going to be very confusing. I spent a lot of the movie confused. “Are they going to dig einstein up and stake hiM??”
  • there’s a great community of shadow people who live on the walls and sometimes are captured digging up pits in reverse. they seem friendly and i’d have like to get to know them better.

ashes to ashes

<2020-10-31 Sat 11:52>

if men came from ash and return to ash when they die, does that mean when women die they become ribs?


<2020-10-31 Sat 12:20>

there are a few scenes where it is foggy, where it is too foggy, and i thought about how now we’d probably shoot it in clarity and add the fog as an after effect.

i prefer when things are a bit scrappy, and it captures what the artist wanted but as a compromise with life and luck and time.


<2020-10-31 Sat 13:00>

okay, now it’s time to drink some water and go for a walk to get some bell peppers to make into a spooky lunch. cut little jack-o-lantern eyes in them and fill them with creole jambalaya. creole jambalaya because it has tomatoes and hopefully the tomato juice will leak out their little eyes.


<2020-10-31 Sat 14:45>

the jambalaya is on the stove. the last time i ordered andouille from the only london butcher i could find who stocks it, i miscalculated the order and we ended up with 30 logs each of andouille and black pudding. the andouille they sell had too much thyme and rosemary in it for me (those both taste like mildew) so we ended up with a fridge shelf dedicated to almost inedible sausage.

since then i haven’t ordered any sausage online, and so in this jambalaya we are using chorizo and peperami. there is also chicken and bacon. and tomato and easy cook rice. i’ll be up every 15 minutes to stir it for a while, but we’re going to start watching Scream.

Scream (1996)

<2020-10-31 Sat 15:20>

Scream. I don’t really watch horror movies because i’m what they call a scaredy-cat. I’m not looking forward to this one, despite its meta narrative. I have avhard time telling the difference between reality and fiction and I think this weekend of scary movies followed by the U.S. presidential election on Tuesday and Wednesday will shake me up for anywhere between 4 weeks and 4 ever.

oh there’s the timer. stir the jambalaya and then settle in for a spook

<2020-10-31 Sat 17:33>

okay that wasn’t so bad. i’m interested in getting some of those stove-top popcorn things? like an inflating tinfoil? very nice. and someone should do a pair of r/relationships posts in character as Sid and Billy on the bed when billy is like “sorry, i was selfish for telling you to hurry up and get over your mother being raped and killed so i could havve sex with you sooner” and she’s like “no actually i’m the selfish one for having post traumatic stress about my mother being raped and killed one year ago tomorrow”


<2020-10-31 Sat 17:38>

We have carved our peppers and put them in the oven.

raw spoopy peppers

The Evil Dead (1981)

<2020-10-31 Sat 17:40>

i’m excited to see the evil dead because it has bruce campbell and bruce campbell’s face in it.

update: it was very good.

the cooked peppers

they were very good

cooked spoopy peppers

emergency milkshake

<2020-10-31 Sat 19:56>

we take a break for abe to do some work and me to write this. maybe after we will watch Alien, and then The Shining. i’ve never seen Alien, but i’ve seen The Shining.

Jennifer Juniper Stratford

<2020-10-31 Sat 20:16>

We just watched this interview with this strange person. https://www.youtube.com/watch?v=etiMbvc9454

it’s about video synthesizers. they have very weird energy. intense

popcorn time?

<2020-10-31 Sat 20:20>

i think it’s time for me to make some kettle corn for the next movies. i will be following this instructable if you would like to follow along at home: How to Make Kettle Corn

the instructions in brief are:


  • 1 oil
  • 1 corn
  • ½ a sugar
  • pinch of salt


  1. heat corn in oil until it starts to pop
  2. add sugar and lid
  3. spin the pot around as the popping ramps up and back down
  4. put popcorn in bowl
  5. wait 5 mins
  6. add salt and stir it around


i’m going to use a butter/oil blend this time and leave the salt out, getting all my salt from irish butter.

Alien (1979)

<2020-11-01 Sun 21:00>

Every time i type “alien” i type “alient”. every time.

the important thing about alien is that none of this would have happened if those boys on the lower deck had been able to unionize. contractually obliged to accept the call to adventure, at half the pay.

Going into it, I thought that Alien isn’t really the same kind of Halloweeny horror as the other movies we’ve watched today, that it fit mainly as a part of a set of films i was aware of the shape of from references only, like that quantum physics experiment with the glass tube. but it’s turned out to be the same kind of trapped in a bottle being picked off one by one spooker as the evil dead.

the subtitles broke at the end and it said Come on, cat. at the bottom of the screen the whole credit roll.

alien was good, the kettlecorn was really good

The Shining (1980)

<2020-11-01 Sun 22:50>

We took a break for a while and then started watching The Shining. The Shining understands better than any other movie we’ve watched today that the most terrifying thing imaginable is a normal man.

Come on, cat.

happy hallowe’en 🎃

one time, at the end of a dorky halloween episode of Sabrina the Teenage Witch, Melissa Joan Hart did a sombre direct-to-camera where she was like “look i know we all had a good time during this episode, but don’t forget what halloween is really about: family”.

i think about that sometimes and wonder if she was meant to be in character, because it’s about family if you’re a witch in a family of witches? or if they were really trying to make halloween into a second christmas. halloween’s about spooky snacks and old horror movies, right?

did you know Melissa Joan Hart’s mother was executive producer on Sabrina for its entire run? but not for Clarissa, which explains a lot.

anyway we got gifted a SCOBY this afternoon and now it’s on the mantle with a bunch of sugar and some Yorkshire tea, secured under cheesecloth with a teenage engineering brand elastic band. so.

i’m only even awake right now because at 6pm i sampled some of the cold brew i put in the fridge yesterday.

i guess i should start making nut milk.

it’s all cheesecloth these days isn’t it

i’ve got something to write about

https://today.snoot.club and the manager app for it.

it’s so cool but i’m so tired, and i’m sick now too

but, anyway, today i wrote a bit of code for emacs so it displays emoji correctly using the Apple Color Emoji.ttf font on linux. it looks great. big dingbat energy.

it falls back to iosevka because that’s the only font i know to have characters for the legacy computing block which has some indispensable symbols like this large hand:


pointing to the right image-3.png

this hand is three separate characters,


and also the wonderful LEFT HALF RUNNING MAN:


cropped off around the sockets image-4.png

where is he going? why is he so long? the rest of his body is in another codepoint. RIGHT HALF RUNNING MAN 🮲🮳

big dingbat energy on our left and right half running man — chee (chee@snoot.club) 2020-08-28

Sakoku. (鎖国, “closed country”) was the isolationist foreign policy of the Japanese Tokugawa shogunate (aka Bakufu)[1] under which, for a period of 214 years, relations and trade between Japan and other countries were severely limited, nearly all foreign nationals were barred from entering Japan and common Japanese people were kept from leaving the country


In the mid-16th century, Portuguese traders introduced Spanish-style 48-card decks to Japan. Almost immediately, the Japanese started making their own decks, called karuta (derived from “carta”, card).

During sakoku, the western-style playing cards were banned, and so were the karuta. People liked playing cards, though. They’re portable and extremely versatile. A small item that can fit in your pocket and go with you anywhere, and holds within it the potential of any number of games.

Japanese manufacturers created new card types that concealed their Portuguese origins.

mekuri karuta. the Komatsufuda set.

These were banned too.

They gave it a few more tries: https://en.wikipedia.org/wiki/Karuta

The 19th century saw the creation of hanafuda (“flower card”) decks. Instead of 4 suits each with 12 cards (the spanish decks had no 10s!), hanafuda decks have 12 suits (12 months!) each with 4 cards. Once they got popular for gambling they were banned too, in 1816.

some hanafua cards

aren’t they beautiful?

Sakoku ended in 1853 when the American kurofune (Black Ships) commanded by Matthew Perry forced the Shogun to sign the “Treaty of Peace and Amity”. The UK signed the Anglo-Japanese Friendship Treaty at the end of 1854.

Five years later, Fusajirō Yamauchi (山内 房治郎, Yamauchi Fusajirō) was born! Fusajiro would grow up to be an artist and entrepreneur.

On 23 September 1889, Fusajiro opened a shop called Nintendo Koppai, selling hand-painted hanafuda cards crafted from the bark of mulberry and mitsu-mata trees. They were among the only cards it was legal to sell, and they got very popular very fast. Fusajiro had to hire some more artists to help keep up with demand.

When the cards became the favoured brand of the Yakuza, Fusajiro had to create a system for mass producing them. The gamblers opened a new deck for every game.

Once Western cards were legal again, Nintendo started making those too. Nintendo landed a deal with the tobacco monopoly JT to sell Nintendo cards in JT’s cigarette stores, and that’s money.

— chee (chee@snoot.club) 2020-06-15

the tremendous pain and emotional exhaustion is one thing. tight, pulsing pain at the base of my skull; crying because half of a cherry tomato fell out of the toasted sandwich i was making for my partner; a curdling feeling in my plasma; not knowing if i’m upsetting people because my sense of their feelings has been cut off. those are, like, intense and present.

ever-surprising though is the complete and utter lack of ümph. like, do you ever… you know when you… it’s like inside you you have a match hanging, bobbing against a spinning disk of coarse sandpaper and at some point it bobs enough that the match lights…. like, you have an idea like “i’d like to make a cup of coffee” and you put it in layaway until you have a spark of energy and you grab that and jump up and go do. a small spike in your fluctuating will power that’s enough to ignite you. and your inertia is no longer such that you can’t start, but such that you keep going.

well that’s missing.

i have been, since 8am, trying to take my half a hormone (none yesterday) and make coffee and gashouse eggs. or even just any one of those things. but i can’t get up. i can’t actually move. and if i put things on layaway they never get picked up. i’m going to have to synthesise willpower from something else. maybe i can imagine that a large rodent has been dropped on me, or that the house is burning down. i think if the house was burning down i might still just lie here. maybe if i just,,, lean to the left and roll off the sofa onto the floor then the jolt will shake something loose

maybe i could order some coffee to be delivered, then hopefully my pathological desire to never be an inconvenience to anyone will mean i get up to get the coffee from the hallway so none of the neighbours have to be reminded that i exist

if only abe was awake asking for eggs, then i could use that as fuel. okay, i’m going to try again. i’ll close the laptop and i’ll synthesize willpower out of something. maybe if i throw my vape onto the laundry basket then eventually the power of nicotine addiction will overcome the frozen executive function

— chee (chee@snoot.club) 2020-06-11

i’m having a really hard time atm

hormones postage has been delayed and i’m running out, down from 6mg a day to 1mg every 2 days, and will soon (3 days) be on 0mg a day

it’s better to have a little every couple days to suddenly have 0 for a week

i learnt that in the winter we stayed near the ice skating rink

my skin feels like it’s being scraped off from the inside with tiny forks

and i’m tired and exhausted and can’t think straight or do anything right

they were ordered in April, and they left Vanuatu on 11th May on a fiji airlines cargo plane

apparently Royal Mail is taking a long time to process international orders

i tried to make a gluten free hollandaise sauce for breakfast, but instead i made a pot of yellow brains. that was about 100 times fancier a breakfast than i should have tried. i tipped the pot into the trash and somehow missed the bag and had to pick it all out of the sink with a wooden spoon

the pharmacy made an agreement with Vanuatu Post to pay an extra fee so they can ship via a fiji airlines cargo aeroplane, it’s some of the only mail going out of Vanuatu

they aren’t passing these extra shipping costs onto the customer, which is great of them

but they’ve said that if you’re in the United Kingdom (i’m in the United Kingdom) an order might take 4-8 weeks to arrive.

some people started receiving their May 11th orders on 28th May

but it’s up to luck really, about how good the route is for the package through Royal Mail to your home

and you don’t get shipping updates, because it’s on these cargo aeroplanes, not ordinary mail

i had a shower today

i’m going to shower every day, get smooth and clean, and accomplish 1 (ONE) thing every day, and eat 3 meals a day, and sleep before midnight

and when i wake up i’ll drink a glass of water, fizzied up with 2 alka-seltzer and a berocca

i will be strong girl

— chee (chee@snoot.club) 2020-06-08

a bought a compact cassette recorder.


the little box for the Sanyo TRC-1148 Compact Cassette Recorder

it’s a Sanyo TRC-1148.


  • built-in speaker
  • built-in mic
  • mic port (jack)
  • ear port (jack)
  • voice-activated recording (you can arm the tape to record and have it not start rolling until it hears a loud enough sound)
  • a 3-digit tape counter

tape is warm


a tape of circus music “MUSIC FROM UNDER THE BIG TOP – The Circus All-Stars”. there is washi tape over the write-protect holes.

the seller didn’t mention there was circus music inside


the 3-digit tape counter reads 978

it’s a great album. if you wind to the end of the first side and reset the tape counter, then rewind until the counter reads 978, there is about 54 seconds of blank tape.

i’ve made this with the tape recorder and the OP-1: chee.snoot.club/music/song/pop-rocksmp3


the tape recorder and the op-1 (and the pocket operator k.o. and the a notebook and a pen and some gay headphones)

it’s good https://chee.snoot.club/music/song/pop-rocksmp3

— chee (chee@snoot.club) 2020-05-10

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

i don’t really think that because then people with amnesia would never die — chee (chee@snoot.club) 2020-04-15

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 (chee@snoot.club) 2020-01-02

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 (chee@snoot.club) 2019-12-03

I set up snoot.club 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 *.snoot.club to the snoot.club linode. This way the moment a process starts listening on a given name (like chee.snoot.club), it is available on the net.

I’ve got a wildcard letsencrypt certificate set up on the site, so any subdomain of snoot.club 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 jimmy.snoot.club.

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 snoot.club linux server, and puts them into a group called undercommon. It makes a directory for them that contains only their ssh1 public key (which will let them log in), and a folder called “website”.

There’s a section in snoot.club’s sshdconfig2 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 snoot.club machine. The docker container forwards two ports: ssh and web (80). The http server configuration that is built when jimmy is created points jimmy.snoot.club 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 root@snoot.club -p 33532) and then they ssh not into snoot.club but into the docker container that is jimmy.snoot.club. this way they get to do anything they want without having to have full access to the snoot.club 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 snoot.club 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 crates.io. 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. Catch me on matrix.org. Or mastodon. Or email.

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 github.com and set up a cgit server and put them all there.

If you’re a snoot you can add your own things to git.snoot.club 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.


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

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


— chee (chee@snoot.club) 2019-08-17

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: https://chee.snoot.club/telecam/index.xml. 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 https://chee.snoot.club/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 News.app 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 https://developer.apple.com/news-publisher/

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

News.app 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 chee.snoot.club repo

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

— chee (chee@snoot.club) 2019-08-03


serves 1 abe 👦 and 1 chee 👧


the banana 🍌

  • a banana 🍌

the ice cream 🍨

  • 3 scoops 🥄 Neapolitan ice cream 🍨 (1 scoop 🥄 each flavour)

the toppings

sweet nut 🥜

  • a handful of peanuts 🥜
  • a stick of Kerrygold™©® butter
  • 50ml honey 🍯 (preferably w/ a hint of cinnamon)

chocolate 🍫 sauce

  • 20g chocolate 🍫
  • 15ml milk 🥛
  • 15ml cream


  1. Slice the banana 🍌 a single longways cute with the blade of a handleless knife and put it in the bowl 🥣. You only own one bowl 🥣, so use that one.
  2. Scoop a scoop 🥄 of choco 🍫, a scoop 🥄 of vanillum and a scoop 🥄 of strawberring 🍓 into the split of banana 🍌
  3. To a hot pot add the butter, the honey 🍯 and the peanuts 🥜 and cook them til the honey 🍯 cronch
  4. Sprinkle the nuts 🥜 atop the ice cream 🍨 and banana 🍌
  5. Melt the chocolate 🍫 and milk 🥛 and cream together, then pour over the nuts 🥜
  6. Yim yim yim, zip zip zip: eat.

— chee (chee@snoot.club) 2019-01-29

did you know that you can add commands to git by naming them right and placing them in your path?

if you put this:

git branch | awk '/\*/ {print $2}'

into a file called git-current-branch, make it executable and put it somewhere in $PATH (i use ~/bin which i’ve added to $PATH), you will be able to use it like this:

$ git current-branch

and bash/zsh completions will tab complete them too

that example would probably make more sense to be an alias, but what about something like this:


if [ -z "$branch" ]; then
  branch=$(git current-branch)

git branch -u origin/${branch}

ooh! or this, to show changes to a specific function:



if [ -z "$function" ] || [ -z "$file" ]; then
  echo 'usage: git log-function <function> <file>'
  exit 1

git log -L ":$function:$file"

i’m sure you can come up with something more useful

— chee (chee@snoot.club) 2017-01-12

firefox OS, huh?

firefox OS looks cool, doesn’t it? For a while you were a bit embarrassed for Mozilla, seemed like they felt left out as nearly(?) the only major browser manufacturer who hadn’t built an operating system based on JavaScript.

but now you see we live in a defiant new world where CSS3 or 4 never existed and Internet Explorer is actually pretty rad. And in this world, Firefox OS (or Boot2Gecko) is possibly going to be what we all need and it will do what it promised and bring freedom to the world of mobile the way “firefox did to desktop browsing”.

today I saw a screenshot of Mozilla Phoenix and nearly cried my eyes out. Those were the days, huh?

horse’s mouth

read this, the canonical source for building b2g. I’m only here because I ran into a couple prollems you might like to avoid.

the issues I’m going to go into here may well be specific to the Galaxy Nexus build of Firefox OS, and building for the Galaxy Nexus on Mountain Lion. Also, I do a couple of naughty things when I’m working around the bugs. Forgive me.

the stumbling blocks are few, but they tied my shoelaces together when I was trying to build it, so here you go.

i’m assuming you’ve got XCode installed here. There are instructions on how to get that available via the link above and the link below.

first thing, install homebrew if you haven’t already because of some kind of illness you have.

once you’ve installed homebrew and added its bin directory to the the front of ur path, be all like:

curl -fsSL https://raw.github.com/mozilla-b2g/B2G/master/scripts/bootstrap-mac.sh | bash

okay, so that’s boss. that’s installed a whole fireworks display of stuff you’ll need to build B2G. but, if you’re building for an android you’re going to need a couple more packages from homebrew too.

I think this should cover it:

brew install git coreutils findutils gnu-sed gnupg pngcrush repo

you’ll need a few gnu utilities available under their normal names too, so:

ln -s /usr/local/bin/gfind /usr/local/bin/find && ln -s /usr/local/bin/gsed /usr/local/bin/sed

this will prevent you from getting:

sed: RE error: illegal byte sequence
sed: 1: "/^INSERT$/ { :l; n; p;  ...": unexpected EOF (pending }'s)
target thumb C: dbus-daemon <= external/dbus/bus/desktop-file.c
sed: RE error: illegal byte sequence
sed: 1: "/^INSERT$/ { :l; n; p;  ...": unexpected EOF (pending }'s)
sed: 1: "/^INSERT$/ { :l; n; p;  ...": unexpected EOF (pending }'s)

when you try to build later with a sed that doesn’t work the way seds are meant to work in the modern world.

i like to

export PATH=$(brew --prefix coreutils)/libexec/gnubin:$PATH

too because then I get the GNU coreutils instead of the BSD coreutils. The BSD coreutils are simpler in a cat-v sort of way, but I am lazy and this way when mkdir is all “lol can’t make directory because directory doesn’t exist” i can be all C-p -p RET and it’s all “lol ok” and I’m out of there. because the gnu tools let you put the options after the arguments.

now you’ve got all that, install the Android SDK starter package. once mine was unzipped I put it in ~/Android and added ~/Android/sdk/platform-tools to my $PATH and I felt pretty good about it too.

give ccache a little more room to work with, I gave it 5GB

ccache --max-size 5GB

now, you’re working on OS X and you’ve probably got a case-insensitive file system. That’s gonna cause you some nightmares when it gets to building the android stuff. You’re going to want to create a sparse image and do the rest of the work in there.

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/omgFirefox.dmg
open ~/omgFirefox.dmg
cd /Volumes/untitled

next, clone the git repo and configure

git clone git://github.com/mozilla-b2g/B2G.git`
cd B2G
./config.sh galaxy-nexus

that worked fine, right? good. and it only took 72 hours! HEre is where the first naughty thing happens.

if you try to build on Mountain Lion it will tell you “nuh-uh, you don’t got 10.6 or 10.5 sdk”, except it’ll pronounce it like this:

build/core/combo/HOST_darwin-x86.mk:42: ***********************************************************
build/core/combo/HOST_darwin-x86.mk:43: * No 10.6 or 10.5 SDK found, do you have Xcode installed? *
build/core/combo/HOST_darwin-x86.mk:44: ***********************************************

i did a naughty thing here. i was all:

mkdir -p /Developers/SDKs
ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk /Developer/SDKs/MacOSX10.6.sdk

don’t tell anyone I did this.

okay, ready? let’s build!


please wait for the next half of your life until you reach an error that looks A LITTLE SOMETHING LIKE THIS:

/Volumes/untitled/external/busybox/scripts/kconfig/mconf.c: In function ‘exec_conf’:
/Volumes/untitled/external/busybox/scripts/kconfig/mconf.c:469: error: ‘SIGWINCH’ undeclared (first use in this function)
/Volumes/untitled/external/busybox/scripts/kconfig/mconf.c:469: error: (Each undeclared identifier is reported only once
/Volumes/untitled/external/busybox/scripts/kconfig/mconf.c:469: error: for each function it appears in.)
/Volumes/untitled/external/busybox/scripts/kconfig/mconf.c: In function ‘main’:
/Volumes/untitled/external/busybox/scripts/kconfig/mconf.c:1051: warning: statement with no effect
/Volumes/untitled/external/busybox/scripts/kconfig/mconf.c:1052: warning: statement with no effect

crying your eyes out? I would be. well it turns out that this busybox is pretty out of date. the new version has been updated to build on Mountain Lion. It turns out that nowadays SIGWINCH isn’t declared unless _DARWIN_C_SOURCE is set.

here’s the second naughty bit. i opened up external/busybox/scripts/kconfig/mconf.c in a text editor and changed

#define _XOPEN_SOURCE 700
#include <sys/ioctl.h>


#define _XOPEN_SOURCE 700
#define _DARWIN_C_SOURCE 1
#include <sys/ioctl.h>

around line 12. This will help us get past that error.

now you can try building again.


did you make a sparse image? are you doing the work in there? why not?

there’s a problem here if you’re using a case-insensitive file system (why do you do that, OS X? y o y?)

i told you to do that for a very good reason.

a reason that looks like this:

hardware/ti/omap4xxx/camera/../libtiutils/semaphore.h:30: error: previous definition of 'class android::Semaphore'
In file included from hardware/ti/omap4xxx/camera/inc/CameraHal.h:41,
		from hardware/ti/omap4xxx/camera/CameraHal_Module.cpp:28:
hardware/ti/omap4xxx/camera/../libtiutils/Semaphore.h:29: error: redefinition of 'class android::Semaphore'
hardware/ti/omap4xxx/camera/../libtiutils/semaphore.h:30: error: previous definition of 'class android::Semaphore'
make: *** [out/target/product/maguro/obj/SHARED_LIBRARIES/camera.omap4_intermediates/CameraHal_Module.o] Error 1

if you’re getting that error, MAKE A SPARSE IMAGE AND DO THE WORK IN THERE. now,


and we’ll hope and pray that nothing else goes wrong.

if you followed my advice about gnubin:

okay. was that seriously another error? omg. %z what.

it turns out, like a dick, android actually expects to get the old BSD stat; the homebrew version of status is no longer acceptable. you’ll want to take the homebrew stat out of the way for a moment, so you can get the mac version of stat. I did it like this:

export PATH=/usr/bin:$PATH



I hope that was a fair enough guide to building boot2gecko on mac.

quick recap:

  • read the mozilla wiki on the subject
  • install the necessary packages
  • get gnu sed and gnu find in your path
  • make a sensitive sparse image and get inside
  • clone the repo
  • fix external/busybox/scripts/kconfig/mconf.c
  • celebrate.

i’ll tell you this:

./flash.sh gaia

you need to flash gaia separately on the Nexus.

i love you, goodbye.

— chee (chee@snoot.club) 2012-12-08

bad connection, worse VCS

At work we use svn. They say there’s nothing we can do about it. I thought perhaps we could burn everything. Subversion is a terrible piece of software. I would really rather merge two branches with a magnet than with subversion.

I’m on holiday in Portugal right now. The hotel advertised free wi-fi available in “all rooms”. I think the router is perhaps closer to Australia than to this room.

The gombuter the central subversion repo lives on is set up only to accept connections from a few whitelisted IP addresses. I forgot about this before I came here. I did say holiday up there, but that’s not quite accurate. I’m just in Portugal for kicks. When you work remotely, why work in any place in particular? Might as well be in a country full of nightmareish howling midnight jackal-dogs, hundreds upon thousands of hungry wild cats, upturned noses, sand and cheap wine. No need to be in a warm comfy bed at home when you can come halfway across the world to live in a shoebox for a thousand dollars a night.

So, first problem:

Subversion hates your guts.

% git svn dcommit
URL access forbidden for unknown reason: access to 'http:///dev.peoplebrowsr.com/svn/projects/site/trunk' forbidden at /usr/local/Cellar/git/1.8.0/lib/Git/SVN.pm line 148
URL access forbidden for unknown reason: access to 'http:///dev.peoplebrowsr.com/svn/projects/site/trunk' forbidden at /usr/local/Cellar/git/1.8.0/lib/Git/SVN.pm line 717


Luckily when I was getting my IP address whitelisted, I also got them to whitelist the IP address of my Linode.

I have a copy of the repo on the Linode, but it is out of date and I’ve made local changes and commited them and the connection is terrible and I keep losing connectivity and nothing about this seems tasty.

then I recall that I can use SSH to create some kind of a sexy TUNNEL and push through that!

Wear your lucky socks.

☀  chee@stickers ~ % ssh -CD2000 snaek
You have mail.
★  chee@zomg ~ %

I used -C for ssh compression, to halp deal with the bad network. -D 2000 to set the local port for the dynamic forwarding.

Then I open up my network settings over on the local side and tell gombuter to use SOCKS proxy on localhost:2000.

Then I look into how to get git to push over a socks proxy.

Chain my proxy to the bedposts

Things don’t go well for me in this hunt. So I decide to use a chaining proxy that presents as an HTTP proxy, and can pass off to a SOCKS. I chose Privoxy for my own private and mysterious reasons. They are none of your concern.

brew install privoxy
# or
apt-get install privoxy
# or
pacman -S privoxy # like a boss.

in my privoxy config, I set:

forward-socks4 / localhost:2000 .

to forward all traffic that uses the http proxy to pass off through the SSH tunnel.

Getting closer!

% export http_proxy='http://localhost:8118'

annnnnd…! nothing.


It’s still not working. So I spend some time reading about getting git to use an http proxy, and try a bunch of things until I realise I’m a moron.

open ~/.subversion/servers in your favourite politically neutral editor.

% $EDITOR ~/.subversion/servers

Talk dirty in subversion

now, I don’t have any other SVN things going on, so I was happy enough to set it globally:

http-proxy-host = localhost
http-proxy-port = 8118
http-compression = yes

stuck http-compression on too, because what the hell.

Now a git svn fetch and a dcommit and we’re flying~! hooray!

So, to recap

  • Set up an ssh tunnel on the whitelisted remote server
  • Start your local Privoxy, telling it to pass its traffic to the tunnel
  • Tell SVN to route its traffic through privoxy

On a side note, I no longer ever use a public wi-fi hotspot without setting up a tunnel and letting all my traffic go through that. I’m starting to realise I’m not the only person who ever found out how to install Wireshark.

— chee (chee@snoot.club) 2012-11-25