Skip to content

The Sound of Silence

Quite surroundings at the start of the week as children start to go back to school 🥳

Optomised the Zensical docs publishing GitHub workflow by using the UV package manager.

Captured some thoughts related to Engineering Manager approach.

My health seems to be improving, in part thanks to the "30 plants" supplement from Zoe.com. It seems relatively expensive but if it keeps making a significant improvement then it will be worth it.

Found more documents from merged pensions that are now shredded, continuing to free up more space in my house and making it simpler to move if I find a new place I like.

After switching to the default Firefox rather than Firefox ESR on Debian Linux, I am able to take the UserCrowd desktop based studies. I've also applied for some interview studies, which can earn between 35-45 USD.

Zensicalλ︎

The setup-python action is a great way to start running python tools within a GitHub workflow. It provides all the pip tools and options to control the python environment.

Practicalli uses the UV package manager locally to install Zensical as a tool. So a little time was spend to see if it possible to use UV in a GitHub workflow.

The setup-python action provided by GitHub does not include UV.

setup-uv action is provided by the maintainers of the Uv tool and is just as configurable as setup-python.

Zensical workflow with Setup-Uv action

# Workflow to conditionally publish a Zensical project
---
name: Publish Zensical Docs

on:
  workflow_dispatch:  # Manually trigger workflow

  # Run work flow conditional on linter workflow success
  workflow_run:
    workflows:
      - "MegaLinter"
    paths:
      - 'docs/**'
      - 'includes/**'
      - 'overrides/**'
      - 'mkdocs.yaml'
      - 'zensical.toml'
    branches:
      - main
    types:
      - completed

permissions:
  contents: read
  pages: write
  id-token: write
jobs:
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-slim
    steps:
      - run: echo "🚀 Job automatically triggered by ${{ github.event_name }}"
      - run: echo "🐧 Job running on ${{ runner.os }} server"
      - run: echo "🐙 Using ${{ github.ref }} branch from ${{ github.repository }} repository"

      - uses: actions/checkout@v7
      - run: echo "🐙 ${{ github.repository }} repository sparse-checkout to the CI runner."
      - uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
        with:
          version: "latest"
          activate-environment: "false"
          github-token: ${{ github.token }}
          enable-cache: "auto"
      - name: "Python version to the logs"
        run: echo "Version of Python available $(python --version)"
      - run: echo "Running Zensical Static Site Generator with Catppuccin theme"
      - run: uvx --with catppuccin-zensical zensical build
      - uses: actions/upload-pages-artifact@v5
        with:
          path: site
      - uses: actions/deploy-pages@v5

      # Summary
      - run: echo "🎨 built and published Zensical website"
      - run: echo "🍏 Job status is ${{ job.status }}."

The Ubuntu Slim GitHub runner image is used to save on resources used as only Python is required on top of a basic OS image.

Ubuntu Slim image is based on Ubuntu 24 LTS and includes Python 3.12.3. Only Uv python package manager is missing from this image (UV is not available in any GitHub runner image).

Megalinterλ︎

TODO: write an article about Megalinter, showing the benefits of creating your own custom image.

  • Megalinter flavors are a quick way to get started
  • Create Custom flavor once the relevant lint and format tools are assessed
  • Run a custom flavor to optimise time taken by the CI workflow

Add a note about setting packages as public when publishing to a GitHub Org (rather than a personal account).

Unanswered questions:

  • How to run a custom image with the mega-linter-runner ? Can we use practicalli/custom-megalinter-flavor-clojure syntax ?

Practicalli Engineering Managerλ︎

A goal is a destination, not the journey to get there.

When an engineering team interacts with product owners (or people representing some or all of the business) they need to understand what success looks like, the destination.

An engineering team can determine the most suitable design choices to get this destination, the journey that should be taken.

For destinations that are familiar, the journey should be simple. Features that are small and additive tend to be simpler.

For destinations that are complex, the journey will require experimentation and more feedback. Features that are exploring uncharted areas tend to be complex.

Teams that work on a specific business area, e.g. bank payments, may have the opportunity to build up significant knowledge in that area. The consistency of domain builds a stronger foundation on which to build new features upon.

Generalist teams, e.g. platform, often deal with a different domain area for each new project. The team starts with little or no knowledge of the domain.

Such teams may work on domains such as a billing platform, enhancing API security via HTTP signatures, optomising message processing (throughput balancing schemes)

Cyclingλ︎

I have heard good things about the Roval Alpinist SLX Disc aluminium wheels, from youtube and online reviews.

Whilst they are not as fancy as the Fulcrum Racing Zero aluminium wheelset (circa 1,200 GBP), they are an interesting alternative.

bike radar review of Roval Alpinist SLX Disc wheelset


Thank you.

🌐 Practical.li Website

Practical.li GitHub Org practicalli-johnny profile

@practicalli@clj.social