I have a short gap in my reading; here are some options:

  • Kafka diaries
  • Kristeva - Revolution in Poetic Language
  • The Politics of Time
  • Richard Norris book (re The Grid)
  • Simon Reynolds latest
  • Care Crisis
  • Shell & the Kernel
  • Milan Kundera
  • david graeber - debt
  • tomorrow and tomorrow
  • E. Rashkin book on Abraham and torok
  • L'ecorce et le noyau
Posted 2024-04-11

I am reading (well, have now finished) L'etranger by Albert Camus. It's made significantly easier by the fact that I can look words up on my ereader. However, the ereader doesn't allow looking up verb conjugations, meaning that automatic lookups are mostly limited to the infinitive form. As the infinitive doesn't occur very often, this means that lots of manual lookups happen.

Most of the sentences seem to be written in the 'passé composé' with the verb 'avoir'. eg j'ai mangé = I ate. I initially mentally translate this as the English present perfect -- "I have eaten". I then need to mentally reshape it into the English simple past "I ate".

Some of the hardest parts:

Words meaning when -- alors, quand, lorsque. I don't have a clue what the rule is for these if there is any, and they all seem to have a bunch of different other meanings.

Words meaning 'still' -- toujours, encore, quand meme. I don't get the rule for this.

The word plus -- Such a simple word and seemingly with only one concrete meaning yet it's deployed in thousands of different shades of meaning, and a surprising number of the usages are not particularly obvious. I think I basically never recognize the negative variation ne...plus, "not any more".

Irregular past participles -- I basically have to remember all of these because I don't write them down. Luckily there aren't that many of them, but some of them are a pain -- particularly the irregular verbs with voir endings have past participles that often seem bizarre.

Conjugations of être -- The fact that être conjugates into forms that start with s- and forms that start with e- is a never-ending source of bewilderment. It helps to remember that the verb is formed from mashing together the Latin verbs forms esse and stare. The future tense of être is particularly confusing.

Various meanings for sentence with on as the subject -- I haven't quite grasped how to deal with this because it seems like there are maybe 3 different forms of this? One is the "us" meaning, one is an impersonal pronoun (like English 'one'), and I feel like there's one other form. Having reread about this now, the confusion makes sense, as we don't have quite such an ambiguous pronoun in English.

The ne...que construction meaning only -- this normally causes a big double take, if I can even recognize it at all, and I misread all of these sentences until I learned about it.

Multi-word phrases (idioms) are very difficult. These are used all over the place and they can't be looked up in the dictionary. There's really no choice other than rote memorization of these.

I created an Anki deck from all of the vocabulary that I wrote down, this has every card tagged with parts of speech, and with limited English translations based on the usage in L'etranger.

Posted 2024-04-06

Stepan Tesar, Czech Republic - "Robot" 2.4x1x1 meters, iron, welded scrap. Robot machine is presented as human friend - helper or visitor, who wanders through the Wenceslas Square. The sculpture tries to bridge the barriers between people and artificial intelligence and integrate such 'modern slaves' in the society.

Photo by Courtney Powell

Posted 2024-01-22

[!meta title="Obholzer"]]

Obholzer's book has some interesting aspects to it.

Posted 2023-12-11
  • Debian's grub package now invents the new flag GRUB_DISABLE_OS_PROBER which is defaulted to true if not present in /etc/default/grub. I needed to explicitly set it to false to get my dual-boot setup to work. This is apparently an upstream change e346414725a70e5c74ee87ca14e580c66f517666.
  • Puppet was upgraded to puppetserver which is Clojure-based. This actually worked fairly easily; fair play to Puppetlabs for seemingly being pretty serious about their compatibility story. There were only two things to care about really. The puppetlabs-apache module had a bug which I needed to backport, and the path where agent reports were stored had changed from /var/cache/puppet/reports to /var/lib/puppetserver/reports.

When upgrading, there was an issue with PHP. I was required to remove existing PHP extensions that had been installed for 7.4, and replace them with the 8.2 versions.

Encountered bug 1000263. I solved most of these issues by installing the explicitly versioned PHP extension package from the archive. e.g., in my Puppet manifests, I previously had the following:

package { "php-xml": status => installed }

I changed this to:

package { "php${version}-xml": status => installed }

where $version is the version parameter. I am not totally sure why this succeeds. The exception is gettext for which I had to use php-php-gettext.

Conky issue 1443 -- this caused conky to die completely until I added a config workaround.

After the upgrade I suggest completely removing all emacs packages (use apt-get, not aptitude) and clear out the contents of /usr/share/emacs/site-lisp/elpa. My theory is that Debian packages ship elisp source which then gets compiled into this directory by maintainer scripts, but it can go stale and should be removed. This is true but you actually need to reinstall all packages you use that touch emacs which is rather hard. debian byte-compiles elisp in the maintainer scripts.

Posted 2023-08-13

Silver is a fun game that's slightly hamstrung by its awkward control system. It's marketed as an RPG but is actually a strange cross-genre mix. Its kindred spirits is hack-n-slash games like Diablo, plus a bit of real-time strategy (yes, really). The mouse control is cool, but awkward. It's very cool to be able to use the mouse gestures to adjust to situational combat, but in reality this is hardly necessary: you can easily get by just button-mashing, and the game doesn't reward using the mouse mechanics enough. Moreover, it's impossible to focus on fancy mouse techniques because your party is constantly being bombarded by group attacks. It's way too easy to select the wrong character and accidentally cancel your strategy. I frequently ended up with the wrong stuff equipped; switching between magic and melee strategies is similarly difficult.

Overall the game is solid, there's nothing wrong with it (except for a few bugs in the port), but it lacks any really spectacular moments. The voice acting is excellent. The story and worldbuilding are OK. The difficulty level is easy to medium; it would benefit from some more challenge in places, but you can't make it significantly harder without fixing the control system. e.g. I didn't block the entire game, until the very final fight which requires blocking.

The game is also hamstrung by the fact that the charcter models are actually rather nice, if blocky and FF7-ish, but you can barely see them most of the time because the view is so zoomed out. Your character is always extremely tiny.


  • Switch all your magic to L2/L1 because L3 drains MP reserves too fast.
  • All characters have reserves of all special moves, when they have melee weapons equipped.
  • Once you have heal magic, you can heal using this instead of using food. Food becomes nearly useless about half way through the game.
  • There are some bugs in the Steam version with using potions. Your character ends up with the potion equipped and you can't change weapons or attack.
Posted 2023-07-27

It's no secret to anyone that knows me: I bloody hate OAuth2. (I specifically say 2 because OAuth was a radically different beast.) I recently had occasion to use the Pocket API. I have very mixed feelings about this service, but I have paid for it before (for quite some time). Now I am trying to use the Kobo integration which syncs articles from Pocket. This seems a much better solution than Send to Kindle which I was previously using. However, to use it in practicality I had to somehow archive 5000+ links which I had imported into it, my ~10 year browser bookmark history.

I tried to use ChatGPT to generate this code, and it got something that looked very close but was in practicality useless. It was faster for me to write the code from scratch than to debug the famous LLM's attempt. So maybe don't retire your keyboard hands just yet, console jockeys.

import requests
from flask import Flask, redirect, session
import pdb

app = Flask(__name__)
app.secret_key = 'nonesuch'

REDIRECT_URI = 'http://localhost:5000/callback'
BATCH_SIZE = 1000    # max 5000

def test():

    resp = requests.post('https://getpocket.com/v3/oauth/request', json={
        'consumer_key': CONSUMER_KEY,
        'redirect_uri': REDIRECT_URI,
        'state': 'nonesuch',
    }, headers={'X-Accept': 'application/json'})
    data = resp.json()
    request_token = data['code']
    session['request_token'] = request_token

    uri = f'https://getpocket.com/auth/authorize?request_token={request_token}&redirect_uri={REDIRECT_URI}'

    return redirect(uri)

def callback():
    print("using request token", session['request_token'])
    resp = requests.post(
            'consumer_key': CONSUMER_KEY,
            'code': session['request_token']
        headers={'X-Accept': 'application/json'}

    print("Status code for authorize was", resp.status_code)

    result = resp.json()
    access_token = result['access_token']
    print("Access token is", access_token)

    resp = requests.post(
            'consumer_key': CONSUMER_KEY,
            'access_token': access_token,
            'state': 'unread',
            'sort': 'oldest',
            'detailType': 'simple',
            'count': BATCH_SIZE,
    x = resp.json()
    actions = []
    for y in x['list'].keys():
        actions.append({'action': 'archive', 'item_id': y})

    print("Sending", len(actions), "actions")

    resp = requests.post(
            'actions': actions,
            'access_token': access_token,
            'consumer_key': CONSUMER_KEY

    return f"<p>Access token is {access_token}</p>"

I believe it's mandatory to make this an actual web app, hence the use of Flask. I hate OAuth2. The Pocket implementation of OAuth2 is subtly quirky (what a freakin' surprise). Also, this API is pretty strange, it doesn't even make any attempt at being RESTful, though the operation batching is rather nifty. It's rather pleasant that you can work in batches of 1000 items at a time, though. I expected a lower limit. If I cranked the batch size up to 5000 I effectively KO'd the API and started getting 500s.

This script doesn't actually archive everything because it doesn't loop. That's left as an exercise for the reader for now.

Posted 2023-05-27

[!meta title="Abraham & Torok"]]

I've reformatted this post as LaTeX, as it was getting too long. FIXME link the PDF.

Posted 2023-05-15

I've recently finished watching series 2 of "Tunna blå linjen", The Thin Blue Line (not the classic British sitcom). It's fair to say I loved this show. It's a show that bristles with modernity. The pulsating electropop score brings to mind the "sad-boi" scene that we associate with contemporary Swedish music. It's fundamentally a cop show, but not in the same way as something like The Wire is. It's not a searing social critique, but rather it's a focused look into the characters themselves and how they're affected by social issues. Indeed, the first scene has new cop Sara attempting to help a young addict by allowing her to stay at her house, only to have her idealism burst; after that, she's significantly more guarded in her behaviour. The show is full of emotional gut-punches. It steers just clear of being manipulative due to the tasteful filming involved.

From a social perspective, as a "elder millenial", the traditional life-markers of our generation sometimes seem infinitely deferred. It's absolutely fascinating to see the absolutely unresolved nature of the characters. Sara is confused, frantic, wildly drifting and utterly unmoored from any centre of meaning. Magnus is deeply repressed, bitter and moody. Leah is a "broken person" due to utter neglect from her psychotherapist mother, and directly experiences burnout and actual psychosis. Jesse is the most authoritative figure but still we see his struggle with the demands of fatherhood and his own lack of self-control when confronted with temptation during his affair with young recruit Fanny. Khalid is shown in series 2 as a neglectful partner, preoccupied with his social media persona and lacking any real ethical centre. Faye and Danijela's blossoming relationship is tastefully sketched out (lesbian representation is not quite foregrounded but is certainly prominent in the show).

I have to give a special call out to the relationship between Magnus and Sara here. It's rare to see what seems like a realistic portrayal of a workplace relationship here. Though perhaps I misspeak, because it's not so much a workplace relationship as a crush -- and frankly it harms both of them, but at the same time the counterfactual situation is not possible -- it's an unavoidable unfolding. One could imagine a kind of harsh critique of this type of relationship, but that's not what's employed here, nor is it romanticised. Rather, Magnus's love for Sara is unrequited, or more specifically half-requited. Sara cannot make up her mind about Magnus, while Magnus' mind is firmly made up. As a result they relentlessly damage each other. In the workplace, they cannot simply avoid each other, although each one tries, and they're drawn back together over and over again.

Posted 2023-05-04

We visited Malta 25th March - 4th April. These are a few notes.

We tried to find a good place to go clubbing. From the research I did, a good club if you like the more noncommercial techno is 'Tigullio Club', along with 'Liquid'. But the problem is that the club scene only functions on Fridays and Saturdays, meaning we couldn't experience it directly.

Gozo is insanely gorgeous. Regarding getting to Gozo, the fast ferry from Valetta is now a much better choice than bus to Cirkewwa and means travelling there becomes frankly ridiculously easy. We stayed one night on the island and if I was going back I might choose to stay there for longer.

We visited in the shoulder season. There are a few quirks to this. Off-season means that opening times are often flat wrong. Also, temperature was all over the place. When it rains, the entire country closes down because none of the infrastructure expects it (exaggeration, but from a tourist perspective it seems to be the case.) If you bring a t-shirt and a jumper everywhere you'll likely be fine, you don't need a coat. You don't need gloves anywhere but you might need a hat on overcast days. On the other hand, some days are flat-out sunny and getting down to t-shirt weather for a UK resident.

For the rest of the post I'll restrict myself to giving a few reviews on restaurants and food.

Tipping's expected in restaurants but not in cafes.

Cafe Du Brazil in Birgu. I ate here twice, both times the food was fantastic. The price is good for what you get. An astonishing chicken & parma ham wrap, and a Maltese ftira (Tomato paste, tuna, olives, Maltese broad beans, Maltese peppered cheese, lettuce, tomato. Served with crisps & salad) -- great lunch snack. This is the best place in Birgu in my view, which is why it's crowded nearly all the time.

D'Orsini restaurant in Birgu is good for very cheap food with table service, don't expect anything amazing though.

D-Centre is a restaurant that also rents out rooms, we rented from them and tried the restaurant. Sadly I wasn't too impressed with the food here.

Avoid any of the restaurants on Birgu's waterfront, they are price-gouging tourist traps.

Taste of Vietnam -- As the name suggests, this is a Vietnamese restaurant in Birgu. It's rather mid-tier food-wise but is decent given that it's the only Asian restaurant in the area. Great service but avoid the beer (Bia Saigon) which is overpriced. I had a beef pho-style dish (Bún bò Huế) and it was expensive but justified the price.

Cisk is beer with such a thin body, it tastes like a shandy already. I found the Cisk Chill to be quite acceptable on a hot day; you treat it like a soft drink and not like a beer. Hopleaf is a much better beer which is less widely available.

Sesame Dim Sum, Valetta -- Very overpriced but the vegan noodles were OK. The dim sum is good and I'd recommend it, although they don't have har gow. The portion sizes are quite good.

DATE art cafe, Cospicua -- Great location, a bit pricy. One of the few places with an explicit vegan option. Vegan platter seemed delicious (but not that substantial). I had tuna foccaccia, which was amazing. Great flavours all round and the location makes you feel cool and cosmopolitan.

"Black Eagle" anisette liqueur is available in the airport duty-free lounge on the way back, this is a full-strength liqueur that is not amazing tasting but is remarkably cheap -- it was about €9 for a 70cl bottle. You can drink it like French pastis or ouzo by diluting it.

One great thing about the food in Malta is that everything gets seasoned properly, unlike in the UK where flavourless & bland is the rule.

Posted 2023-04-11
The Wolf Man & Sigmund Freud
Posted 2023-02-24
A rarity
Posted 2023-02-23
The Page You Made
Posted 2022-12-27
Posted 2022-12-26
Borgen: Power and Glory
Posted 2022-11-04
Posted 2022-09-18
WSGI deployment
Posted 2022-09-03
Slack Dynamics
Posted 2022-07-20
Download Management
Posted 2022-07-08
Network Setup
Posted 2022-05-11
Hot Sauces
Posted 2022-05-10
Chesterton's Fence Posts
Posted 2022-04-21
On the Copernican Principle
Posted 2022-04-10
Schubert's Winterreise
Posted 2022-02-14
Buster to Bullseye
Posted 2021-09-01
React Pain Points
Posted 2021-04-08
Neo4j rearrangeable list
Posted 2020-10-14
OOB redirect_uri values
Posted 2020-10-07
Quick HTTP server
Posted 2020-10-07
The Lowest UUIDv4
Posted 2020-09-24
Ad-hoc Patreon audio scraping
Posted 2020-05-17
SSH key setup
Posted 2019-09-11
Stretch to Buster
Posted 2019-08-05
Subprocess Pipe Comparison
Posted 2019-07-02
The X3 Wiki Archive
Posted 2019-06-16
Fabric 2 cheat sheet
Posted 2019-03-05
Using comboboxes in Qt5
Posted 2019-02-27
System Puppet, CentOS 7 Client
Posted 2019-02-25
X3 savegames
Posted 2019-02-02
Shadow Tween technique in Vue
Posted 2019-01-06
Width list transition in Vue
Posted 2018-12-18
Emoji Representations
Posted 2018-09-14
Thoughts on Cheesesteak & More
Posted 2018-08-29
Vue + GraphQL + PostgreSQL
Posted 2018-07-20
Neo4j Cypher query to NetworkX
Posted 2018-05-09
FP & the 'Context Problem'
Posted 2018-02-27
Cloake Vegetable Biryani
Posted 2018-02-25
FFXII Builds
Posted 2018-02-02
Custom deployments solution
Posted 2017-12-09
SCons and Google Mock
Posted 2017-11-30
Sunday Lamb Aloo
Posted 2017-11-19
centos 6 debian lxc host
Posted 2017-11-03
Srichacha Noodle Soup
Posted 2017-10-17
Kaeng Kari
Posted 2017-10-13
Ayam Bakar (Sri Owen)
Posted 2017-10-12
Pangek Ikan (Sri Owen)
Posted 2017-10-12
Chicken Tikka Balti Masala
Posted 2017-10-06
Clojure Log Configuration
Posted 2017-09-28
Clojure Idioms: strict-get
Posted 2017-09-28
Posted 2017-09-18
Philly Cheesesteak
Posted 2017-09-14
Posted 2017-09-13
Srichacha Kaeng Pa
Posted 2017-08-31
Malaidar Aloo
Posted 2017-08-10
BBQ Balti Chicken
Posted 2017-07-19
Sabzi Korma
Posted 2017-07-18
Vegetable Tikka Masala
Posted 2017-07-02
Soto Ayam
Posted 2017-06-08
Bombay Aloo w/Bunjarra
Posted 2017-06-03
Chicken Dopiaza
Posted 2017-06-01
LJ Bunjarra
Posted 2017-05-31
Glasgow Lamb Shoulder Tikka
Posted 2017-05-24
Tofu Char Kway Teow
Posted 2017-05-12
King Prawn Balti
Posted 2017-04-24
Ad-hoc Quorn Rogan Josh
Posted 2017-04-15
Glasgow Vindaloo
Posted 2017-03-28
Posted 2017-03-26
Toombs Saag Balti
Posted 2017-02-25
Glasgow Bombay Rogan Josh
Posted 2017-02-21
Glasgow Chicken Balti
Posted 2017-02-16
Quorn Balti & Cloake Naan
Posted 2017-02-03
Two Spice Marinades
Posted 2017-01-18

This blog is powered by coffee and ikiwiki.