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 ='', 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'{request_token}&redirect_uri={REDIRECT_URI}'

    return redirect(uri)

def callback():
    print("using request token", session['request_token'])
    resp =
            '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 =
            '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 =
            '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

Recently I have been reading Muriel Gardiner's The Wolf Man and Sigmund Freud. This book tells the story of Sergei Pankejeff in his own words. The "Wolf Man" is one of Freud's most famous case studies. Any student of psychoanalysis knows that there are remarkably few documented case studies in Freud's history. The Wolf Man is one of the most famous and perhaps the most important case study, in that it is among the richest, revealing a lot of the theoretical apparatus that psychoanalysis would depend on. I could not pass up the chance to read the Wolf Man in his own words. Knowing Freud's talent as a weaver and storyteller, would the story reveal fabrications and distortions in Freud's treatment (On the History of an Infantile Neurosis)?

Pankejeff's memoir largely corroborate the raw material of Freud's analysis. The real fascination, however, lies in the story of his tumultuous life, punctuated and buffetted by the geopolitical shocks of the early 20th century which still largely define today's worldview. This is a man born into immense privilege, who searched around the great cities of Europe in a desperate attempt to cure his neurosis. What was his illness? A tendency to melancholia? The actual content of his neurosis is strikingly absent in this memoir. It forms a type of absent centre that the whole document orbits around. In its name he would try every cure known to the fledgling science of psychology, and find them wanting, before encountering psychoanalysis.

The Wolf Man's adult life was immediately defined by tragedy. His sister and confidante, Anna, committed suicide at the age of 22, by consuming poison. The memoir positions her as being unable to come to terms with her feminine role. In her young womanhood, she eschewed all suitors and immersed herself in intellectualism. (This intellectualism calls to mind the type of sublimated pleasure that Freud remarks upon in the later chapters of Beyond the Pleasure Principle.) Later she became uncomfortable with her physical appearance and concerned that she would be unable to marry. A kind of role reversal plays out here: as a child, Sergei envies Anna her dolls, while Anna attempts to try on a masculine role, but is rebuffed by her peers. Her suicide comes out of a kind of suppressed despair, perhaps, and she repents her act on her deathbed, but cannot be saved.

Likewise Pankejeff's father is diagnosed adoitly as a manic depressive. He lives his public life his 'manic' phase, and simply withdraws to German sanatoria for months at a time when the 'depressive' phase comes. Pankejeff however does not find the same relief from his torments in these sanatoria. The relationship between father and son is uncomfortable, calling to mind Adler's notion of 'masculine protest'. His father dies at 49, at the peak of health. His death is not named as a suicide in this volume, but it's drily remarked that he probably took an overdose of his sleeping medicine. An Infantile Neurosis contains material on Pankejeff's "homosexual posture" and how it relates to his father. His father is never grieved for explicitly, rather, Pankejeff transfers his grief onto others and channels it into landscape painting.

Pankejeff eventually embarks on a love affair with Therese, a nurse in a German sanatorium: a "servant", falling into his familiar pattern of attraction which Freud remarks upon. Therese has a "Southern European aspect" which later turns out to be a complete phantasm. Their relationship is stormy, Therese being an archetype of the maddening woman who "drives some men to throw themselves at her feet, and others off the parapets of bridges" (de Maupassant -- who is himself referenced in this volume, along with Lermontov, whose figure looms over it.) Pankejeff eventually makes the "breakthrough to the woman", his greatest victory, in Freud's eyes; their courtship tale defies all modern logics.

After his analysis, seemingly cured, Pankejeff enjoys a life of petty-bourgeois domesticity with Therese for 20 years in the interwar period, working as a functionary at an insurance firm. Until one day he returns home and finds that Therese has gassed herself to death. Pankejeff is 52. Therese has been a troubled woman since their earliest encounter. Her suicide looks premeditated, "a decision made with forethought and reflection", the consequence of unbearable pain: "I am so sick in body and soul". The 20th century marches woefully on: Therese's act coincides with the Nazi occupation of Vienna and a wave of suicides among the Jewish population, though Therese was not herself Jewish. The memoir ends here.

As she was the only stable structure in my changeable life, how could I, now suddenly deprived of her, live on?

Freud's analysis works as a feat of psychic reverse engineering. It proceeds from a hypothesis about the dream's cause (the primal scene), and attempts to illustrate the process by which the manifest content is formed. In the case of the wolf dream, the process goes: Primal scene -> grandfather's story of the wolves -> the Seven Goats fairy tale.

What follows is a discussion of the reality of the primal scene. Freud invokes a set of imaginary critics who counterpose that the memories associated with the primal scene are in fact fabrications or phantasies. Freud claims that these critics retain the name of psychoanalysis while rejecting its profoundest and most disruptive insights. To Freud these critics (Jung and Adler) keep psychoanalysis "in name only", while Freud's theory itself already encompasses the aspects these critics choose to focus on. Specifically Freud visualizes strictly Freudian psychoanalysis as a bidirectional theory of psychic causation. That is, influence flows forward from childhood, rather than flowing exclusively backward as Jung and Adler would have it. Though Freud does not discount a backward causation. It's unclear on the exact meaning of the term primal scene and whether it always indicates an observation of coitus as in the case of the Wolf Man, or whether it simply indicates a childhood experience with the aforementioned power to cause neurosis.

Note that the primal scene is the Urszene, using the German 'ur-' prefix.

Later we encounter some of the Wolf Man's letters. This text gives some insights into Pankeyeff's own attitude to his memoirs, among other things. He has some poignant remarks on aging.

You see my work int he office gives me absolutely no inner satisfaction, not even when I have a great deal to do and when my ability there is appreciated. I inherited this restless spirit from my father, in contrast to my mother, who is more inclined to a contemplative life.

Later he expands further on this

I thinkt that the problem of aging depends very much on the individual. My mother, for instance, that she was happier in old age than in her youth, although she had lost her entire fortune and lived, as an older woman, in poor surroundings and among strangers. Her relatives, to whom she was deeply attached, either remained in Russia or had died. All very unfortunate circumstances. But in her youth she had suffered rather a lot with my father, and with many upleasant events in her family, whereas in age she could live a quiet and contemplative life to which she had always been inclined. So she worked out for herself a philosophy that suited her nature, and she was much more satisfied than in her youth or middle age. After all, in youth one asks more of life than in old age, and must therefore experience many disappointments.

Aside from this he makes several cogent points about his own senescence:

  • His libido begins to tail off, but at a very late age -- in his mid-seventies.
  • His "aggressive drives" such as they are seem amplified.
  • His conflicts remain unattenuated.
  • He becomes paranoid about his age-related weaknesses.
  • He finds his delights and recreations diminished.
  • He finds that psychic symptoms visit themself upon him accompanied by simultaneous physical symptoms (hysterical?)

For many years I have thought that I, through the many hard blows of fate which I have suffered, would at least in age become somewhat more mellow and would acquire some sort of philosophic outlook upon life. I thought that in old age I could at least spend my last years at a distance from the emotional struggles of which I had had so many in my life. But it seems that these are illusions also. I am still far way from the capacity for a contemplative life. Various inner problems pile up before me, which are completely disconcerting.

Gardiner's post script, Diagnostic Impressions, reveals several facts. The contested nature of the account is emphasized even within this volume. Some aspects of Pankejeff's personality come in for criticism.

Just as when a child at camp or boarding school writes home about the bad food or the rain, about this mean boy or that stupid teacher, rather than about all the fun and interesting things to do or to learn, so the Wolf Man ... naturally tresses the negative far more than the positive.

Gardiner disputes some of Brunswick's analysis. Brunswick was later a pioneer of the psychoanalytic treatment of psychotic disorders. Brunswick diagnosed Pankeyeff with paranoia, delusions of grandeur, etc, based on his delusion about his nose. However Brunswick even admitted that the Wolf Man's case was atypically susceptible to analysis. Gardiner seems to moot that Brunswick may have been attempting to fit a square peg into a round hole, because none of Pankeyeff's later behaviour admitted of a psychotic diagnosis. [It should be remembered in mitigation that Brunswick also stressed the extent to which Pankeyeff's behaviour was discontinuous with that described in Freud's paper so she was not unaware of this.]

Posted 2023-02-24

1998 exoticness...

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.