Skip to content

A welcome drop in temperature

The heatwave dissipated briefly, although its still very warm weather with little respite overnight.

Movies this week

  • The Running Man was a well-made action movie, following the original story much more closely than the Arnold Schwarzenegger version. Apart from the visuals, there wasn't much new with the movie and lacked some of the humour that the first movie had. Worth a watch, but not something I would be eager watch again.

  • Sponge Bob: The search for SquarePants is the latest animated film from the franchise. There is something about the character that is enjoyable, I guess Spong Bob is just the right amount of silly. Very eclectic music choices, including "Holiday in Cambodia" by the Dead Kennedys (without the lyrics of course).

Debianλ︎

Updated the UV install script in practicalli/dotfiles to extract both uv and uvx executables.

The UV GitHub Release is packages as a .tar.gz file that includes uv and uvx executables. Both of these executables should be installed to use UV completely.

The DRA tool by default extracts a single file when installing from a tar or zip archive.

DRA can install multiple executables from a tar or zip archive using the -I/ --install-file option. The option should be specified for each file to be extracted

dra download --automatic --install-file uv --install-file uvx --output ~/.local/bin/ astral-sh/uv

Practicalliλ︎

Publishing Practicalli Cycling book failed at the GitHub pages stage of the workflow

Publish Zensical Docs - Deployment failed, try again later
> Run actions/deploy-pages@v5
(node:2381) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
Fetching artifact metadata for "github-pages" in this workflow run
Found 1 artifact(s)
Creating Pages deployment with payload:
{
    "artifact_id": 8070753547,
    "pages_build_version": "b502f71a9e7f5ea606beef32eb4daf21bb865275",
    "oidc_token": "***"
}
Created deployment for b502f71a9e7f5ea606beef32eb4daf21bb865275, ID: b502f71a9e7f5ea606beef32eb4daf21bb865275
Getting Pages deployment status...
Error: Deployment failed, try again later.

Visiting the repository Setting >GitHub Pages and changing the source of the "Build and deployment" from GitHub Actions to "Deploy from Branch" and back to "GitHub Actions" seems to have resolved the issue. It could just have been a blip, but others had reported a similar issue and hack to fix it.

GitHub had an Incident with Pages on July 02 (the day before), and although the issue was resolved it may have had lingering consequences.

Megalinterλ︎

I used gh repo create to host a custom Megalinter flavour, to be used to run quality checking tools relevant to Zensical Static Site Generator project.

❯ gh repo create
? What would you like to do? Create a new repository on github.com from scratch
? Repository name megalinter-custom-flavor-zensical
? Repository owner practicalli
? Description Lint tools to support static site development with Zensical
? Visibility Public
? Would you like to add a README file? Yes
? Would you like to add a .gitignore? No
? Would you like to add a license? Yes
? Choose a license Creative Commons Zero v1.0 Universal
? This will create "practicalli/megalinter-custom-flavor-zensical" as a public repository on github.com. Continue? Yes
✓ Created repository practicalli/megalinter-custom-flavor-zensical on github.com
  https://github.com/practicalli/megalinter-custom-flavor-zensical
? Clone the new repository locally? Yes
Cloning into 'megalinter-custom-flavor-zensical'...

The command taken from practicalli/cycling megalinter workflow, removing REPOSITORY_GITLEAKS for the newer REPOSITORY_BETTERLEAKS and removing MARKDOWN_MARKDOWLINT and using the self-described faster tool NMARKDOWN_RUMDL

npx mega-linter-runner@9.6.0 --custom-flavor-setup --custom-flavor-linters MARKDOWN_MARKDOWN_TABLE_FORMATTER,MARKDOWN_RUMDL,REPOSITORY_BETTERLEAKS,SPELL_LYCHEE,YAML_V8R
❯ npx mega-linter-runner@9.6.0 --custom-flavor-setup --custom-flavor-linters MARKDOWN_MARKDOWN_TABLE_FORMATTER,MARKDOWN_RUMDL,REPOSITORY_BETTERLEAKS,SPELL_LYCHEE,YAML_V8R
npm error code ETARGET
npm error notarget No matching version found for mega-linter-runner@9.6.0.
npm error notarget In most cases you or one of your dependencies are requesting
npm error notarget a package version that doesn't exist.
npm error A complete log of this run can be found in: /home/practicalli/.npm/_logs/2026-07-01T20_12_43_234Z-debug-0.log

Oh dear ! Lets look at the logs (although the output above is quite clear that mega-linter-runner@0.9.6 doesnt exist).

Using bat to view the log. Line 30 also reports that the npm package for mega-linter-runner does not exist.

   1 │ 0 verbose cli /home/practicalli/.local/share/fnm/node-versions/v24.13.1/installation/bin/node /home/practicalli/.local/share/fnm/node-versions/v24.13.1/installation/lib/node_modules/npm/
     │ bin/npm-cli.js
   2 │ 1 info using npm@11.8.0
   3 │ 2 info using node@v24.13.1
   4 │ 3 silly config load:file:/home/practicalli/.local/share/fnm/node-versions/v24.13.1/installation/lib/node_modules/npm/npmrc
   5 │ 4 silly config load:file:/home/practicalli/projects/practicalli/megalinter-custom-flavor-zensical/.npmrc
   6 │ 5 silly config load:file:/home/practicalli/.npmrc
   7 │ 6 silly config load:file:/home/practicalli/.local/share/fnm/node-versions/v24.13.1/installation/etc/npmrc
   8 │ 7 verbose title npm exec mega-linter-runner@9.6.0 --custom-flavor-setup --custom-flavor-linters MARKDOWN_MARKDOWN_TABLE_FORMATTER,MARKDOWN_RUMDL,REPOSITORY_BETTERLEAKS,SPELL_LYCHEE,YAML_
     │ V8R
   9 │ 8 verbose argv "exec" "--" "mega-linter-runner@9.6.0" "--custom-flavor-setup" "--custom-flavor-linters" "MARKDOWN_MARKDOWN_TABLE_FORMATTER,MARKDOWN_RUMDL,REPOSITORY_BETTERLEAKS,SPELL_LYC
     │ HEE,YAML_V8R"
  10 │ 9 verbose logfile logs-max:10 dir:/home/practicalli/.npm/_logs/2026-07-01T20_12_43_234Z-
  11 │ 10 verbose logfile /home/practicalli/.npm/_logs/2026-07-01T20_12_43_234Z-debug-0.log
  12 │ 11 silly logfile start cleaning logs, removing 1 files
  13 │ 12 silly logfile done cleaning log files
  14 │ 13 silly packumentCache heap:4496293888 maxSize:1124073472 maxEntrySize:562036736
  15 │ 14 http fetch GET 200 https://registry.npmjs.org/mega-linter-runner 167ms (cache revalidated)
  16 │ 15 verbose type version
  17 │ 16 verbose stack mega-linter-runner: No matching version found for mega-linter-runner@9.6.0.
  18 │ 16 verbose stack     at module.exports (/home/practicalli/.local/share/fnm/node-versions/v24.13.1/installation/lib/node_modules/npm/node_modules/npm-pick-manifest/lib/index.js:210:23)
  19 │ 16 verbose stack     at RegistryFetcher.manifest (/home/practicalli/.local/share/fnm/node-versions/v24.13.1/installation/lib/node_modules/npm/node_modules/pacote/lib/registry.js:130:54)
  20 │ 16 verbose stack     at async getManifest (/home/practicalli/.local/share/fnm/node-versions/v24.13.1/installation/lib/node_modules/npm/node_modules/libnpmexec/lib/index.js:29:22)
  21 │ 16 verbose stack     at async missingFromTree (/home/practicalli/.local/share/fnm/node-versions/v24.13.1/installation/lib/node_modules/npm/node_modules/libnpmexec/lib/index.js:64:22)
  22 │ 16 verbose stack     at async /home/practicalli/.local/share/fnm/node-versions/v24.13.1/installation/lib/node_modules/npm/node_modules/libnpmexec/lib/index.js:186:32
  23 │ 16 verbose stack     at async Promise.all (index 0)
  24 │ 16 verbose stack     at async exec (/home/practicalli/.local/share/fnm/node-versions/v24.13.1/installation/lib/node_modules/npm/node_modules/libnpmexec/lib/index.js:184:3)
  25 │ 16 verbose stack     at async Npm.exec (/home/practicalli/.local/share/fnm/node-versions/v24.13.1/installation/lib/node_modules/npm/lib/npm.js:208:9)
  26 │ 16 verbose stack     at async module.exports (/home/practicalli/.local/share/fnm/node-versions/v24.13.1/installation/lib/node_modules/npm/lib/cli/entry.js:67:5)
  27 │ 17 error code ETARGET
  28 │ 18 error notarget No matching version found for mega-linter-runner@9.6.0.
  29 │ 19 error notarget In most cases you or one of your dependencies are requesting
  30 │ 19 error notarget a package version that doesn't exist.
  31 │ 20 verbose cwd /home/practicalli/projects/practicalli/megalinter-custom-flavor-zensical
  32 │ 21 verbose os Linux 6.12.94+deb13-amd64
  33 │ 22 verbose node v24.13.1
  34 │ 23 verbose npm  v11.8.0
  35 │ 24 verbose exit 1
  36 │ 25 verbose code 1
  37 │ 26 error A complete log of this run can be found in: /home/practicalli/.npm/_logs/2026-07-01T20_12_43_234Z-debug-0.log

It seems mega-linter-runner package has not been published yet. The latest version is mega-linter-runner@9.5.0 according to npm website

Using @beta showed version 0.9.3 which I assume is too old.

Using npx mega-linter-runner --install in a separate directory showed it would use version 0.9.5

I tried the same command without specifying a specific number and not surprisingly it used mega-linter-runner version 0.9.5

npx mega-linter-runner --custom-flavor-setup --custom-flavor-linters MARKDOWN_MARKDOWN_TABLE_FORMATTER,MARKDOWN_RUMDL,REPOSITORY_BETTERLEAKS,SPELL_LYCHEE,YAML_V8R
❯ npx mega-linter-runner --custom-flavor-setup --custom-flavor-linters MARKDOWN_MARKDOWN_TABLE_FORMATTER,MARKDOWN_RUMDL,REPOSITORY_BETTERLEAKS,SPELL_LYCHEE,YAML_V8R
Need to install the following packages:
mega-linter-runner@9.5.0
Ok to proceed? (y) y
Yeoman generator used: /home/practicalli/.npm/_npx/614e542633a698fb/node_modules/mega-linter-runner/generators/mega-linter-custom-flavor

    .:oool'                                  ,looo;
    .xNXNXl                                 .dXNNXo.
     lXXXX0c.                              'oKXXN0;
     .oKNXNX0kxdddddddoc,.    .;lodddddddxk0XXXX0c
      .:kKXXXXXXXXXXXXNXX0dllx0XXXXXXXXXXXXXXXKd,
        .,cdkOOOOOOOO0KXXXXXXXXXXK0OOOOOOOkxo:'
                      'ckKXNNNXkc'
              ':::::;.  .c0XX0l.  .;::::;.
              'xXXXXXx'   :kx:   ;OXXXXKd.
               .dKNNXXO;   ..   :0XXXXKl.
                .lKXXXX0:     .lKXXXX0:
                  :0XXXXKl.  .dXXXXXk,
                   ;kXXXXKd:cxXXXXXx'
                    'xXNXXXXXXXXXKo.
                     .oKXXXXNXXX0l.
                      .lKNNXNNXO:
                        ,looool'

==========================================================
=============   MegaLinter, by OX Security   =============
=========  https://ox.security?ref=megalinter  ===========
==========================================================

Welcome to the MegaLinter Custom Flavor generator !
When you don't know what option to select, please use default values
Fetching MegaLinter configuration schema...
✔ What is the label of your custom flavor? PracticalliZensical
✔ Please select the linters you want to include in your custom flavor: MARKDOWN_MARKDOWN_TABLE_FORMATTER, MARKDOWN_RUMDL, REPOSITORY_BETTERLEAKS, SPELL_LYCHEE, YAML_V8R
   create megalinter-custom-flavor.yml
   create .github/workflows/megalinter-custom-flavor-builder.yml
   create .github/workflows/check-new-megalinter-version.yml
   create action.yml
 conflict README.md
✔ Overwrite README.md? overwrite
    force README.md

No change to package.json was detected. No package manager install will be executed.
You're all set !
Now commit, push then create a GitHub Release to generate your custom flavor !

To automate the building of the custom Megalinter image, add a Personal Access Token (using a fine grained access token).

Or simply run the Check for New MegaLinter version action workflow, which will create a new release and create a new release. The new release automatically triggers the Build & Push MegaLinter Custom Flavor image, making it available to use in Practicalli projects.

Using custom megalinter flavorλ︎

From the build action, an image is pushed to the GitHub Image repository using my GitHub account name and the default repository token.

The build action log shows the full path of the image as ghcr.io/practicalli/megalinter-custom-flavor-zensical/megalinter-custom-flavor:v9.6.0

Replace the : with the @ character to make the form needed for use in a github action: ghcr.io/practicalli/megalinter-custom-flavor-zensical/megalinter-custom-flavor@v9.6.0

As this is a custom action it must be added as one of the patterns the Practicalli Org is allowed to use (just like with setup-clojure, etc.)

Visit the Org (Practicalli) > Settings > Actions > General

Add the new action to the Allow or block specified actions and reusable workflows list, using a * wildcard to indicate any version is allowed to run.

practicalli/megalinter-custom-flavor-zensical@*

Press the Save button to update the list.

Cyclingλ︎

An early cycle down to East Peckham on Tuesday, although I dont thing I every really woke up fully.

A friend wanted to do a 100 mile route, so I modified the route to Dymchurch. The new route goes as far as Shadoxhurst, coming back in a bit more of a loop than the original Dymchurch route. Shadoxhurst turned out to be a little longer than 100 miles, so I shortened the route to circle back just before Bethernden.

My thigh muscles are feeling quite stiff as I havent been doing enough stretching or yoga since the Dragon Ride. I will aim to do yoga each morning and evening.

I may need to get a sports massage, e.g. Bromley Sports Massage

Video Overlayλ︎

There are many tools and services that can generate a video overlay with data from a cycling computer.

GPStitch seems to be the most relevant tool for me, as it can generate a transparent overlay that I can use in Blender when editing video taken from the camera mounted on my bicycle.

I have a Drift Ghost XL Action camera which has had a lot of punishment over the last 6 years. The LED screen to control the camera settings is no longer showing menus or other information, so its no longer possible to reset the date. So all the video taken is out of sync with time.

Healthλ︎

An order from Forest Whole Foods to top up the ingredients I most frequently cook with, plus a few items to add variety to my cooking.

  • Mung beans: cook as a protein source or sprout for salad
  • Butter beans: cooked to add variety to the legumes I have in a meal
  • Mixed seeds make excellent toppings for salads, curries, cereal and most kinds of dishes

My mental health has not been so good, driven by the challenges of surviving the recent heatwave. When I am unable to make progress with things, I can easily dwell on the bigger problems that I feel little or no ability to affect.

People of Britain have been led into the worst UK economic crisis by a handful of inept and greedy right-wing leaders, who only care about themselves.

The lies around Brexit have broken our society and pitted people against one another. It has become impossible to have rational discussions and for any government to address the underlying problems that are dragging down our country.

Until we start working together and with our geographically close partners, Britain will continue to descend economically and as a society.


Thank you.

🌐 Practical.li Website

Practical.li GitHub Org practicalli-johnny profile

@practicalli@clj.social