Published

Gogo Penguin + Koyaanisqatsi, and the memory of a tower in Bosnia and Herzegovina

Last night I went to a live screening of Koyaanisqatsi at EartH in Hackney with GC. I knew Gogo Penguin would be playing live, but I didn’t realise they’d be playing their own re-scoring! Pretty impressive, both the execution and to even take it on considering the epic proportions of Philip Glass’s original score. The synchronisation of the rhythm and the visual was maybe not quite as intricate as the original but it was expertly handled, particularly for a live performance. Most of the time the pace was frenetic, frantic. There weren’t quite as many despairing moments as in Glass’s score, but the overall vibe was very similar.

I need to listen to more Gogo Penguin and definitely need to watch the original film, before this I’d only seen small bits of it.

The derelict facade of the Ljubljanska Banka Tower, or “Sniper’s Tower”, in Mostar (Bosnia and Herzegovina)

Photo taken 15 April 2009

The second half of the film includes many clips of derelict housing projects and other buildings. Those clips unearthed a ten-year-old memory of a tower I’d seen when visiting a good friend in Mostar, Bosnia and Herzegovina. The angular concrete structure loomed over the playground in Park Zrinjevac. It was an inanimate casualty of the catastrophic conflicts that consumed the region in the early 1990s, abandoned but clinging to a few remnants of glass and insulation.

That much I knew from the pocked concrete, but I didn’t know the specific role it played in the war until today. Once called the Ljubljanska Banka Tower, it’s now known to some as the Sniper’s Tower. It was used by gunmen targeting people below during the 1993–1994 Siege of Mostar. The multiple sieges led to the widespread destruction of the city, and almost 100,000 people fled.

I searched everywhere online for pre-war photos of the tower but couldn’t find any, just this photo taken a few months after I was there. The photographer captured it in much better light than I, the photo hints at the building’s formerly mirrored, golden facade. It still stands from what I gather, but the exterior structure has been removed and the entries have been blocked off. Graffiti artists use it, and urban explorers try to have a poke around. It looks like a skeleton in the more recent images I’ve seen. I’m not sure I’d feel comfortable going in.

Published

A few days in Ceyreste 🇫🇷

Sunrise in October in Ceyreste, France

Spent a few days in Ceyreste (FR) recently with new and old friends to celebrate our dearest GC’s 30th. Lots of good food, time in the sun, swimming, etc, just what the doctor ordered. These are a few things I’d like to remember.


Calanques national park is beautiful. It can also involve some serious walking. I’m glad we brought a proper map, glad that we’d brought enough water between us, glad that we’d just missed peak tourist season, and really glad that GC bought some snacks!

We drove to Cassis and parked as close as we could to Calanque de Port Miou towards the west end of the town. This ended up being the metered parking on the corner where Avenue Révérend Père Jayne turns into Avenue des Calanques, the rest of the way down to Calanque de Port Miou was marked “sauf riverains” or residents entry only. After that we walked down Avenue des Calanques till we hit Port Miou, then we walked southwest on the main gravel path marked white/green/red running parallel to the calanque. We paused where the white path looped north and the green/red path continued southwest, and that’s where LM and DP peeled off with the littlest one in the buggy to head back in to town along a reasonably flat path.

The rest of us continued on the green/red path to Calanque de Port Pin which was slightly rougher going. The rocks got particularly slippery right before the beach. We paused at Port Pin for a swim and to wait for some later arrivals to join us. The water was beautiful, and chilly! It was sunny, but the heavy wind probably contributed to the chill.

Swimming in Calanque de Port Pin in France

After Calanque de Port Pin, KB, SC, and their little one headed back to Port Miou on the white path heading north. The rest of us headed uphill on the green/red/blue path just as some dude with a carbon fibre alphorn showed up… The going was slightly rough but not too bad. The top of the hill was a sort of crossroads with another path running flat along the ridge. It marked the beginning of our descent towards Calanque d’en Vau.

The sign at the crossroads indicated tough terrain, and the path was marked with “danger dots” 🔴🔴🔴🔴🔴🔴 on the map. It was rough, incredibly steep and involved a lot of shuffling around on your butt. It was also super windy. We eventually reached the bottom unbroken and joined a reasonably flat white path leading the rest of the way to Calanque d’en Vau. A 4×4 ambulance blasted past us on this stretch, apparently some hikers had tried to go up the steep cliffside of the calanque and got in to a sticky situation. Unfortunately we got to the beach too late in the day for any sun, but we took a chilly swim anyway. Tons of fish! I’d love to come back to go snorkelling, I’d probably take a different path in though or at least wear much sturdier shoes.

To get back to where we had parked, we had to head back up the danger dots path. It was daunting but way easier going up. We then took a left at the crossroads to head north on the level white/blue path. When we hit what I think was a church, we took a right on a descending white path heading east which merged with the brown/yellow path about halfway down. Eventually Port Miou came in to view, and then the path switchbacked down to where we started.


Learned about a few new cocktails from the masters themselves. Boulevardier = 1 oz bourbon + 1 oz Campari + 1 oz sweet vermouth w/ orange peel to garnish (basically a Negroni w/ bourbon instead of gin). Paper Plane = ¾ oz bourbon + ¾ oz amaro + ¾ oz Aperol + ¾ oz fresh lemon juice. No amaro to be found at the hypermarchet sadly, but they still gave it the old college try and it was pretty tasty.

The ultimate moderator also led us in Werewolf, a game that was new to me. We played a simplified version w/ just a werewolf and a doctor which was perfect for a big group of beginners. It’s pretty similar to Mafia w/o cards.


The plants and landscape in Provence reminded me so much of southern California, and the dry stone walls along many of the smaller roads reminded me of Yorkshire.

There was wild rocket along all the highways just outside of Marseille, but unfortunately not where we were staying. There were a bunch of strawberry trees around the house and a lot of thyme and rosemary which was super useful for cooking. In retrospect I think there might have been savory as well, but I’m not totally sure what that looks or tastes like.

Not sure if I encountered many mosquitos outside but we definitely had 2–3 trapped in our room. I have some gnarly bug bites.


There was so much good food. Definitely glad I remembered lactase pills because it would have been super sad to miss out on the cheese and NB’s excellent carrot cake. Will definitely be referring back to that recipe, particularly since it works well with GF flour as well. And pizza! The place had a pizza oven which was excellent, particularly since the two Italians in the group were kind enough to lend their brains to the operation. Dinner on the last night was a use-up-all-the-things meal, see recipes / descriptions.


It had been far too long since I’d seen so many of these people.

Published

Use-up-all-the-things meal for 16 people

I was away recently for a lovely weekend with a big group of 16 people. Dinner on the last night was a use-up-all-the-things meal that I tag-teamed with BW. This is a rough description of each thing, a bunch of them were new to me but I’d like to make them again. We were super low on olive oil so went heavy on the butter, and we omitted garlic + onions in most things due to some dietary restrictions within the group.

Cheese

Use a peeler to get thin slices off any nearly-finished firm cheese in the fridge. Pile the slices together on a plate, then throw the rind in to the fridge or freezer for use in future stews or pots of lentils / beans.

Arbutus (strawberry tree) jam

Good with cheese. This was sort of based on a variety of recipes online. I didn’t mind the texture but it was probably a bit too seedy for most TBH, so next time I’d probably strain part way through cooking while the mixture is still relatively liquid.

Remove stems and bad bits from about 2 cups of ripe Arbutus (strawberry tree) berries, then rinse and put in a small nonstick pot. Cut an orange in to chunks and squeeze in the juice, then throw in the rind. Cut a lemon in half and squeeze in the juice of a lemon half, then throw in the rind. Add about ¼ cup sugar and a small pinch of salt, and then simmer over medium-low heat until the berries are completely dissolved. Add water during the cooking process if needed, and taste while cooking to adjust the sweetness. Remove the citrus rinds before serving. The colour of the cooked jam should be a reddish ochre, and the consistency is similar to fig jam, very seedy.

Lamb’s lettuce salad

In an enormous bowl, combine a big pile of Lamb’s lettuce with soft, crumbled fresh cheese, a chopped avocado, a big handful of chopped black olives, the sliced green tops from 3–4 scallions, and a very big handful of toasted pine nuts.

For the dressing, combine olive oil, some red wine vinegar, lemon juice, honey, a mashed anchovy, salt, and fresh black pepper. Taste the dressing and adjust it to balance it out, then add it to the salad and toss to coat.

Croutons

This was probably the biggest experiment. I’ve done this with cubed bread of all sorts in the past, but never GF bread. Specifically, we used leftover GF focaccia which had been made from leftover pizza dough and topped with capers, olives, rosemary, and tomatoes. It was pretty firm due to the GF flour, sort of the consistency of cornbread crossed with polenta. The resulting croutons were maybe a bit too big / crunchy for a salad but still very tasty, kind of like baked polenta. It actually worked pretty well with this meal since most of the other things lacked crunch.

Preheat the oven to about 200C. Cube a bunch of leftover firm bread, then toss it in butter or oil and season to taste with salt and spices or herbs. Roast in the oven until golden and crispy.

Puy lentils with rosemary and thyme

I definitely over-salted these! Still good though. Every other time I’ve made Puy lentils they’ve come out way too bland, so I’ll probably make them like this in the future, probably with a bay leaf and maybe some other herbs. I’d be a great side to make instead of potatoes or rice, for example.

Pour a 500 g box of lentils de Puy in to a medium sized pot with enough water (see the instructions on the box), the rind of a hard cheese, a good pinch of salt, a knob of butter, fresh black pepper, and about 2 tablespoons each of chopped thyme and rosemary. Bring to a boil and simmer until the lentils are tender and the water is mostly gone. Note that you may need to top up the water during cooking. When nearing the end of cooking, taste the lentils and adjust the flavours. Add a little salt, lemon juice, and / or orange juice to adjust the flavour and acidity. Remove and discard the cheese rind before serving.

Caramelised onions

Ours weren’t quite caramelised, but still tasty! Apparently sodium bicarbonate is a useful secret ingredient if you’re light on time, need to remember that for next time.

Thinly slice 4 onions and place in wide, flat-ish pot. Stainless steel or aluminium is best if you have a lot of time, nonstick works well if you don’t. Add a pinch of salt and a knob of butter, then cook over medium-low heat until a deep golden brown.

Roasted aubergines

These are good lukewarm or cold as well. Do not be tempted to season with salt before sticking them in the oven, there will be plenty in the veg still from the initial step.

Preheat the oven to about 200C. Slice aubergines in to rounds that are roughly 1 cm thick, then salt on both sides and place in a shallow dish. Allow the salt to draw out the water for at least 15 minutes, pressing on them occasionally to encourage them. Once a lot of the water has been drawn out, put the aubergine slices in a big bowl of cold water and rinse thoroughly, removing all of the remaining salt. Squeeze the water out of the slices, then place in a baking dish. Top each slice with a little butter or olive oil, generously top with fresh black pepper, then sprinkle over about 1–2 tablespoons each of chopped thyme and rosemary. Roast in the oven for 30–40 minutes, turning halfway. Taste when done and add a squeeze of lemon juice if desired.

Pasta with tomato sauce, basil, and anchovies

BW tackled this mostly, so here’s hoping I’ve remembered this correctly! She said it was based on a Rachel Roddy recipe so I had a look online. Her recipe for pasta with tomatoes and anchovy sauce looks really similar and very good, though I don’t think it’s the same one. Worth a try!

Heat some butter or olive oil in a large flat-ish pan, then add halved baby tomatoes and cook until very soft. Add two finely chopped anchovies and cook a little longer, then add one chopped stove-roasted red pepper and a can of chopped tomatoes. Allow the sauce to simmer and reduce while you cook the pasta. Cook the pasta of your preference in heavily salted water until al dente and then drain, reserving a small amount of the pasta water in the pot. Tip the sauce in to the pasta and reserved pasta water and then cook a little longer, allowing the water to reduce slightly and the pasta to finish cooking. Stir in a whole bunch of torn basil and serve.

Spiced roasted carrots + broccoli

Kind of based on the honey roasted carrots from this Guardian article. Try to avoid crowding the pan or cooking too much at once in the oven because it will inhibit roasting and will cause the veg to steam. If you have to cook a lot at once, consider cranking up the heat.

Preheat the oven to about 200C. Put a bunch of oblique / roll cut carrots in to a big baking dish with the florets and peeled stem of a head of broccoli. Add a very generous sprinkling of brown sugar, a good pinch of salt, a squeeze of lemon juice, some lemon zest, a lot of cumin seed, about a thumb’s worth of minced ginger, and about 1–2 teaspoons of ground coriander. Roast until the edges are well browned, tossing occasionally to cook evenly.

Spiced chickpeas and greens

The vibe was espinacas con garbanzos, but with what we had on hand. I would definitely consider adding some cayenne, smoked paprika, garlic, etc. in other circumstances. For the greens we used rocket and spinach, but this would probably be good with kale as well though the cook time would take a little longer.

Heat a knob of butter in a large pan over medium-high heat, then pour in a can of chickpeas, drained. Add a very good pinch of salt, at least 2 tablespoons of cumin seed, 1–2 tablespoons of ground coriander, and a solid pinch of ground cinnamon. Cook for about 5 minutes to allow the flavours to come together, then your greens and the juice from at least a half an orange. Allow the greens to cook to the desired doneness, adding water if needed. Taste and adjust flavours as necessary (salt, lemon, etc.).

Roasted potatoes with a roasted pepper sauce

The idea was sort of patatas bravas, but again, with what we had on hand. Would probably consider smoked paprika, cayenne, garlic for this as well.

Preheat oven very hot, at least 200C. Cut 5–6 thin-skinned potatoes in to chunks and parboil, then toss in to a baking pan with oil and season with salt and pepper. Roast in the oven until brown and crispy. For the sauce, reduce a can of chopped tomatoes over medium heat, then add a knob of butter, some cumin seed, and one finely chopped stove-roasted red pepper.

Published

Where do you draw the line?

There’s a fine line between changing from within and being complicit.

Dr Kate Darling, MIT Media Lab researcher and expert in robot ethics, said this in her 27 August Guardian opinion piece on Jeffrey Epstein’s influence on the science world. This comment referred to her relationship with the MIT Media Lab and with literary agency Brockman. There was an all-hands Media Lab meeting on 4 September to internally address their part in all this, read more in the MIT Tech Review. Sounds like the meeting was something… hard to tell. Ended on a thoroughly rotten note.

That line from her article has stuck with me, it’s a succinct way of articulating an ever-present worry. If you’re doing good work at an organisation that is being questionably governed or is doing iffy things, you either A) stick with the org and live with that worry every day or B) step away from it entirely and be free from the worry. In scenario A, in order to feel ok with yourself you do everything you can to make a difference. This is exhausting, and you resent colleagues that aren’t working as hard to fix things. In scenario B, you’re free from this worry but you live in a fresh hell of new worries (missed opportunity, financial stability, unfulfilled potential, etc).

Don’t know where the line is, it shifts constantly and is probably different for every person. Just have to keep it on your mind and keep having the hard conversations. Don’t let it build up, talk little and often, with everyone.

Edit 10.09.19: Deleted a sentence mentioning Darling’s plans to drop Brockman and stay with the Media Lab, from her Guardian article. That may still be the case, but more has come to light so I wouldn’t assume anything. It must be incredibly tough thing to navigate.

Published

A foraging foray

Poplar mushrooms

This past Saturday, I went on a guided foraging walk with Daisy in east London. Got way too much sun!

It was so helpful to have a guide. I’ve considered just trying it with a book, but it’s hard to beat being able to ask questions and watch the way someone else watches. It reminds me of learning how to draw or paint, part of learning how it works is learning how to change your perspective. So it’s useful to observe the way someone else sees things. I’d still like to get a good book about it, but now I feel like I have a better idea of what I’d like to get out of that book.

The walk was from 10:30am to 2:30pm with one bathroom break but pretty much no other stops. Didn’t really need to stop for lunch since we were grazing anyway, but we did pause at the floating bakery. I had one of the best muffins I’ve ever had, felt like I needed to lie down afterward. He’s open Friday to Sunday, worth checking where he’s at online since he moves around a little.

Read list of what we saw and collected

Published

Me-proof boiled eggs

Boiled eggs 🥚

I’m decent in the kitchen yet always screw this up. Don’t wing it, follow instructions below.

  1. Place eggs in saucepan. They should fit comfortably.
  2. Fill saucepan with water, covering the eggs by the breadth of a finger or two.
  3. Turn heat on high and bring to a boil. Stick around, read a book or do some dishes or something. You need to be there when it starts actually boiling.
  4. Right when the water has come to a full boil – you can tell by listening, the eggs will probably be knocking around a little – take the pan off the heat and cover the eggs.
  5. Allow the eggs to sit covered in the hot water for 4-10 minutes. 4 = soft, 6 = jammy, 8 = firm, 10 = hard. If making soft boiled eggs for eggs and soldiers, let them sit for about two minutes, three max. The egg will continue to cook when you place it in the egg cup.
  6. When they’ve reached the desired done-ness, remove the eggs to an ice water bath. Allow to rest in the cold water at least 10 minutes.

In the fridge with the shell on, soft boiled eggs keep about two days and hard boiled eggs keep about 4 days.

Published

Setting up Laravel Valet + MySQL via Homebrew

After far too much delay, I’ve finally ditched MAMP Pro. 🎉

I’m now trying Laravel Valet + MySQL via Homebrew for local PHP development on my MacBook Pro. The notes below are an account of the steps I took for future reference. There were some fiddly points getting started and I expect there to be more, but I’m pretty pleased with the swap overall.


0. Back up databases

The pre-step is to back up any preexisting databases so that you can set them up later if needed. Personally, I use Sequel Pro for all local and some remote database management, so I pulled my necessary exports from there.

1. Install and configure Laravel Valet

The first step is to install Laravel Valet. Their installation docs are pretty much all that is needed. The only caveat is that I’d be a little careful about updating Homebrew or Composer willy nilly, just be wary if you already have it installed and need your preexisting version for any reason. While completing the installation steps, pay attention to the warnings! Complete any recommended steps if you can, they pop up for a reason.

If all went well, at this point you should have an Apache server so you’d be ready to work on a file-based website such as one that uses Kirby CMS or a static site generator (Hugo, Gatsby, Jekyll, etc).

2. Install and configure MySQL with Homebrew

To work on a database-driven site like a Craft CMS or WordPress build, the next step is to install MySQL via Homebrew.

The Laravel Valet docs mention this step, but for me it was nowhere *near* as simple as their two-command recommendation. I think there was likely a conflict with my preexisting MAMP-specific MySQL setup and possibly an old Homebrew installation. I ran the commands from the Valet docs to install MySQL v5.7 and run it, but I would get the error The server requested authentication method unknown to the client [caching_sha2_password] on the front-end. This error indicated that it was actually running MySQL v8 (read more). Sure enough, mysql --version returned mysql Ver 8.0.16 for osx10.14 on x86_64 (Homebrew). To sort it out, I had to reinstall and restart the MySQL service.

To remove MySQL, I followed these instructions. (Be careful with those commands, they remove a lot of stuff.)

After I’d gotten rid of MySQL, I ran the Homebrew commands below to install, link, and start the service.

brew install mysql@5.7
brew link --force mysql@5.7
brew services start mysql@5.7

Note that I tried doing this without the link but consistently ran in to the error Can't connect to local MySQL server through socket '/tmp/mysql.sock' when trying to connect in the next steps. Linking seemed to sort it.

The Homebrew installation command recommended a step involving mysql_secure_installation which sets the root user’s password. We need this for phpMyAdmin and Sequel Pro (coming up below), so I completed this step as well.

3. Set up and / import databases

Once MySQL is set up and running, it’s time to set up your databases. Check out this article for some useful instructions on how to create a user and database on the command line. To import one of your SQL exports from earlier, run mysql -u [username] -p [databasename] < [filename.sql] replacing the bits in brackets with your username, database, and filename. When prompted, enter the password you set up via mysql_secure_installation.

Otherwise, you can do add your database via a UI such as phpMyAdmin (see Laravel Valet-friendly steps) or Sequel Pro.

4. Adjust PHP settings (optional)

I usually adjust my PHP settings (e.g. memory_limit, max_execution_time, post_max_size, etc.) to something that is similar most of my sites’ production hosting environments. Ideally this would be less manual (Docker? Ansible?), but that’s exploration for another day.

I thought that changing the PHP settings would be as simple as adjusting the php.ini file that is specified in the “Loaded Configuration File” value returned by phpinfo(). I edited /usr/local/etc/php/7.2/php.ini and then ran valet restart to restart the server and… it didn’t work. One of my changes was respected according to phpinfo(), but the rest weren’t.

I checked the “Additional .ini files parsed” value and saw that the file /usr/local/etc/php/7.2/conf.d/php-memory-limits.ini was also in use. After I edited this file to include my preferred settings and restarted Valet, all was well.

5. Adjust Nginx config (optional)

Valet’s default Nginx config should normally be sufficient, but you might have to tweak it for certain edge cases.

My edge case was the British Earways site (read more). I was working with it locally and suddenly ran in to a 413 Request Entity Too Large error when attempting to upload a very large audio file. To get around this, I needed to raise the client_max_body_size Nginx directive.

To adjust the Nginx configuration, I first had a look at the main config file by running /usr/local/etc/nginx/nginx.conf. Scanning through that, I saw a few includes:

include "/Users/[username]/.config/valet/Nginx/*";
include servers/*;
include valet/valet.conf;

I had a look at /Users/[username]/.config/valet/Nginx/valet.conf, found client_max_body_size and changed that value to suit my requirements, and then restarted the server by running valet restart.

Other useful things

Run brew services list to find out which services are running. This is useful for troubleshooting if you’re having PHP or mySQL errors.

If you’re adjusting the PHP settings in a .ini file, run valet restart, and then suddenly start seeing only an “It works!” screen where your site should be, you probably have to stop Apache first before restarting Valet. Most guidance online recommends running apachectl stop, but I had trouble with this (see related StackOverflow thread). Instead, I ran valet stop, sudo killall httpd, then valet start. This worked smoothly.

Here’s a list of MySQL commands.

For more info about what $PATH is and why it’s important, see this Unix & Linux Stack Exchange thread or notes on the command line geared towards beginners.

I usually use redirect rules to use media from production when developing locally, for example when working on the WordPress theme that powers this site. Laravel Valet doesn’t seem to play nice with the normal .htaccess method, maybe because it’s actually an Nginx server. See “Proxying images to a remote host on Laravel Valet” for an effective alternative using a local driver.

On an image-heavy project using Craft CMS, I ran in to a 504 error brick wall at one point. Could not for the life of me figure out the problem, even after pouring over the error logs. Ultimately I uninstalled and then reinstalled valet, and that seemed to do the trick.


Edit 10 July 2019 – Added further notes based on working with Laravel Valet the past few days, including the PHP and Nginx config adjustments.

Edit 04 October 2019 – Various small wording adjustments and additional reference links. Used these notes for reference when working with SB to adjust his own setup, and it was clear that some bits could use clarification.

Edit 18 October 2019 – Added note regarding 504 errors.

Published

Mom’s dry-transfer lettering sheets

Sheet of white dry-transfer type in 36pt Futura Bold

How to use instant lettering

  1. Remove blue backing paper and position sheet on working surface. Shade lightly over the letter with a ballpoint pen.
  2. Gently peel away sheet – the letter is now transferred. Repeat until your lettering is complete.
  3. Re-burnish through backing paper over copy for firmer adhesion.

Finally sat down to take pics of Mom’s old dry-transfer lettering.

See more