Search Results: "fish"

30 April 2025

Russell Coker: Links April 2025

Asianometry has an interesting YouTube video about elecrolytic capacitors degrading and how they affect computers [1]. Keep your computers cool people! Biella Coleman (famous for studying the Anthropology of Debian) and Eric Reinhart wrote an interesting article about MAHA (Make America Healthy Again) and how it ended up doing exactly the opposite of what was intended [2]. SciShow has an informative video about lung cancer cases among non-smokers, the risk factors are genetics, Radon, and cooking [3]. Ian Jackson wrote an insightful blog post about whether Rust is woke [4]. Bruce Schneier write an interesting blog post about research into making AIs Trusted Third Parties [5]. This has the potential to solve some cryptology problems. CHERIoT is an interesting project for controlling all jump statements in RISC-V among other related security features [6]. We need this sort of thing for IoT devices that will run for years without change. Brian Krebs wrote an informative post about how Trump is attacking the 1st Amendment of the US Constitution [7]. The Register has an interesting summary of the kernel enclave and exclave functionality in recent Apple OSs [8]. Dr Gabor Mate wrote an interesting psychological analysis of Hillary Clinton and Donald Trump [9]. ChoiceJacking is an interesting variant of the JuiceJacking attack on mobile phones by hostile chargers [10]. They should require input for security sensitive events to come from the local hardware not USB or Bluetooth.

1 April 2025

Colin Watson: Free software activity in March 2025

Most of my Debian contributions this month were sponsored by Freexian. You can also support my work directly via Liberapay. OpenSSH Changes in dropbear 2025.87 broke OpenSSH s regression tests. I cherry-picked the fix. I reviewed and merged patches from Luca Boccassi to send and accept the COLORTERM and NO_COLOR environment variables. Python team Following up on last month, I fixed some more uscan errors: I upgraded these packages to new upstream versions: In bookworm-backports, I updated python-django to 3:4.2.19-1. Although Debian s upgrade to python-click 8.2.0 was reverted for the time being, I fixed a number of related problems anyway since we re going to have to deal with it eventually: dh-python dropped its dependency on python3-setuptools in 6.20250306, which was long overdue, but it had quite a bit of fallout; in most cases this was simply a question of adding build-dependencies on python3-setuptools, but in a few cases there was a missing build-dependency on python3-typing-extensions which had previously been pulled in as a dependency of python3-setuptools. I fixed these bugs resulting from this: We agreed to remove python-pytest-flake8. In support of this, I removed unnecessary build-dependencies from pytest-pylint, python-proton-core, python-pyzipper, python-tatsu, python-tatsu-lts, and python-tinycss, and filed #1101178 on eccodes-python and #1101179 on rpmlint. There was a dnspython autopkgtest regression on s390x. I independently tracked that down to a pylsqpack bug and came up with a reduced test case before realizing that Pranav P had already been working on it; we then worked together on it and I uploaded their patch to Debian. I fixed various other build/test failures: I enabled more tests in python-moto and contributed a supporting fix upstream. I sponsored Maximilian Engelhardt to reintroduce zope.sqlalchemy. I fixed various odds and ends of bugs: I contributed a small documentation improvement to pybuild-autopkgtest(1). Rust team I upgraded rust-asn1 to 0.20.0. Science team I finally gave in and joined the Debian Science Team this month, since it often has a lot of overlap with the Python team, and Freexian maintains several packages under it. I fixed a uscan error in hdf5-blosc (maintained by Freexian), and upgraded it to a new upstream version. I fixed python-vispy: missing dependency on numpy abi. Other bits and pieces I fixed debconf should automatically be noninteractive if input is /dev/null. I fixed a build failure with GCC 15 in yubihsm-shell (maintained by Freexian). Prompted by a CI failure in debusine, I submitted a large batch of spelling fixes and some improved static analysis to incus (#1777, #1778) and distrobuilder. After regaining access to the repository, I fixed telegnome: missing app icon in About dialogue and made a new 0.3.7 release.

31 March 2025

Russell Coker: Links March 2025

Anarcat s review of Fish is interesting and shows some benefits I hadn t previously realised, I ll have to try it out [1]. Longnow has an insightful article about religion and magic mushrooms [2]. Brian Krebs wrote an informative artivle about DOGE and the many security problems that it has caused to the US government [3]. Techdirt has an insightful article about why they are forced to become a democracy blog after the attacks by Trump et al [4]. Antoine wrote an insightful blog post about the war for the Internet and how in many ways we are losing to fascists [5]. Interesting story about people working for free at Apple to develop a graphing calculator [6]. We need ways for FOSS people to associate to do such projects. Interesting YouTube video about a wiki for building a cheap road legal car [7]. Interesting video about powering spacecraft with Plutonion 238 and how they are running out [8]. Interesting information about the search for mh370 [9]. I previously hadn t been convinced that it was hijacked but I am now. The EFF has an interesting article about the Rayhunter, a tool to detect cellular spying that can run with cheap hardware [10].
  • [1] https://anarc.at/blog/2025-02-28-fish/
  • [2] https://longnow.org/ideas/is-god-a-mushroom/
  • [3] https://tinyurl.com/27wbb5ec
  • [4] https://tinyurl.com/2cvo42ro
  • [5] https://anarc.at/blog/2025-03-21-losing-war-internet/
  • [6] https://www.pacifict.com/story/
  • [7] https://www.youtube.com/watch?v=x8jdx-lf2Dw
  • [8] https://www.youtube.com/watch?v=geIhl_VE0IA
  • [9] https://www.youtube.com/watch?v=HIuXEU4H-XE
  • [10] https://tinyurl.com/28psvpx7
  • 8 March 2025

    Vincent Bernat: Auto-expanding aliases in Zsh

    To avoid needless typing, the fish shell features command abbreviations to expand some words after pressing space. We can emulate such a feature with Zsh:
    # Definition of abbrev-alias for auto-expanding aliases
    typeset -ga _vbe_abbrevations
    abbrev-alias()  
        alias $1
        _vbe_abbrevations+=($ 1%%\=* )
     
    _vbe_zle-autoexpand()  
        local -a words; words=($ (z)LBUFFER )
        if (( $  #_vbe_abbrevations[(r)$ words[-1] ]  )); then
            zle _expand_alias
        fi
        zle magic-space
     
    zle -N _vbe_zle-autoexpand
    bindkey -M emacs " " _vbe_zle-autoexpand
    bindkey -M isearch " " magic-space
    # Correct common typos
    (( $+commands[git] )) && abbrev-alias gti=git
    (( $+commands[grep] )) && abbrev-alias grpe=grep
    (( $+commands[sudo] )) && abbrev-alias suod=sudo
    (( $+commands[ssh] )) && abbrev-alias shs=ssh
    # Save a few keystrokes
    (( $+commands[git] )) && abbrev-alias gls="git ls-files"
    (( $+commands[ip] )) &&  
      abbrev-alias ip6='ip -6'
      abbrev-alias ipb='ip -brief'
     
    # Hard to remember options
    (( $+commands[mtr] )) && abbrev-alias mtrr='mtr -wzbe'
    
    Here is a demo where gls is expanded to git ls-files after pressing space:
    Auto-expanding gls to git ls-files
    I don t auto-expand all aliases. I keep using regular aliases when slightly modifying the behavior of a command or for well-known abbreviations:
    alias df='df -h'
    alias du='du -h'
    alias rm='rm -i'
    alias mv='mv -i'
    alias ll='ls -ltrhA'
    

    28 February 2025

    Petter Reinholdtsen: Brushing up on old packages in Xiph and Debian

    Since my motivation boost in the beginning of the month caused me to wrap up a new release of liboggz, I have used the same boost to wrap up new editions of libfishsound, liboggplay and libkate too. These have been tagged in upstream git, but not yet published on the Xiph download location. I am waiting for someone with access to have time to move the tarballs there, I hope it will happen in a few days. The same is the case for a minor update of liboggz too. As I was looking at Xiph packages lacking updates, it occurred to me that there are packages in Debian that have not received a new upload in a long time. Looking for a way to identify them, I came across the ltnu script from the devscripts package. It can sort by last update, packages maintained by a single user/group, and is useful to figure out which packages a single maintainer should have a look at. But I wanted a archive wide summary. Based on the UDD SQL query used by ltnu, I ended up with the following command:
    #!/bin/sh
    env PGPASSWORD=udd-mirror psql --host=udd-mirror.debian.net --user=udd-mirror udd --command="
    select source,
           max(version) as ver,
           max(date) as uploaded
    from upload_history
    where distribution='unstable' and
          source in (select source
                     from sources
                     where release='sid')
    group by source
    order by max(date) asc
    limit 50;"
    
    This will sort all source packages in Debian by upload date, and list the 50 oldest ones. The end result is a list of packages I suspect could use some attention:
               source                        ver                    uploaded        
    -----------------------------+-------------------------+------------------------
     xserver-xorg-video-ivtvdev    1.1.2-1                   2011-02-09 22:26:27+00
     dynamite                      0.1.1-2                   2011-04-30 16:47:20+00
     xkbind                        2010.05.20-1              2011-05-02 22:48:05+00
     libspctag                     0.2-1                     2011-09-22 18:47:07+00
     gromit                        20041213-9                2011-11-13 21:02:56+00
     s3switch                      0.1-1                     2011-11-22 15:47:40+00
     cd5                           0.1-3                     2011-12-07 21:19:05+00
     xserver-xorg-video-glide      1.2.0-1                   2011-12-30 16:50:48+00
     blahtexml                     0.9-1.1                   2012-04-25 11:32:11+00
     aggregate                     1.6-7                     2012-05-01 00:47:11+00
     rtfilter                      1.1-4                     2012-05-11 12:50:00+00
     sic                           1.1-5                     2012-05-11 19:10:31+00
     kbdd                          0.6-4                     2012-05-12 07:33:32+00
     logtop                        0.4.3-1                   2012-06-05 23:04:20+00
     gbemol                        0.3.2-2                   2012-06-26 17:03:11+00
     pidgin-mra                    20100304-1                2012-06-29 23:07:41+00
     mumudvb                       1.7.1-1                   2012-06-30 09:12:14+00
     libdr-sundown-perl            0.02-1                    2012-08-18 10:00:07+00
     ztex-bmp                      20120314-2                2012-08-18 19:47:55+00
     display-dhammapada            1.0-0.1                   2012-12-19 12:02:32+00
     eot-utils                     1.1-1                     2013-02-19 17:02:28+00
     multiwatch                    1.0.0-rc1+really1.0.0-1   2013-02-19 17:02:35+00
     pidgin-latex                  1.5.0-1                   2013-04-04 15:03:43+00
     libkeepalive                  0.2-1                     2013-04-08 22:00:07+00
     dfu-programmer                0.6.1-1                   2013-04-23 13:32:32+00
     libb64                        1.2-3                     2013-05-05 21:04:51+00
     i810switch                    0.6.5-7.1                 2013-05-10 13:03:18+00
     premake4                      4.3+repack1-2             2013-05-31 12:48:51+00
     unagi                         0.3.4-1                   2013-06-05 11:19:32+00
     mod-vhost-ldap                2.4.0-1                   2013-07-12 07:19:00+00
     libapache2-mod-ldap-userdir   1.1.19-2.1                2013-07-12 21:22:48+00
     w9wm                          0.4.2-8                   2013-07-18 11:49:10+00
     vish                          0.0.20130812-1            2013-08-12 21:10:37+00
     xfishtank                     2.5-1                     2013-08-20 17:34:06+00
     wap-wml-tools                 0.0.4-7                   2013-08-21 16:19:10+00
     ttysnoop                      0.12d-6                   2013-08-24 17:33:09+00
     libkaz                        1.21-2                    2013-09-02 16:00:10+00
     rarpd                         0.981107-9                2013-09-02 19:48:24+00
     libimager-qrcode-perl         0.033-1.2                 2013-09-04 21:06:31+00
     dov4l                         0.9+repack-1              2013-09-22 19:33:25+00
     textdraw                      0.2+ds-0+nmu1             2013-10-07 21:25:03+00
     gzrt                          0.8-1                     2013-10-08 06:33:13+00
     away                          0.9.5+ds-0+nmu2           2013-10-25 01:18:18+00
     jshon                         20131010-1                2013-11-30 00:00:11+00
     libstar-parser-perl           0.59-4                    2013-12-23 21:50:43+00
     gcal                          3.6.3-3                   2013-12-29 18:33:29+00
     fonts-larabie                 1:20011216-5              2014-01-02 21:20:49+00
     ccd2iso                       0.3-4                     2014-01-28 06:33:35+00
     kerneltop                     0.91-1                    2014-02-04 12:03:30+00
     vera++                        1.2.1-2                   2014-02-04 21:21:37+00
    (50 rows)
    
    So there are 8 packages last uploaded to unstable in 2011, 12 packages in 2012 and 26 packages in 2013. I suspect their maintainers need help and we should all offer our assistance. I already contacted two of them and hope the rest of the Debian community will chip in to help too. We should ensure any Debian specific patches are passed upstream if they still exist, that the package is brought up to speed with the latest Debian policy, as well as ensure the source can built with the current compiler set in Debian. As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

    Antoine Beaupr : testing the fish shell

    I have been testing fish for a couple months now (this file started on 2025-01-03T23:52:15-0500 according to stat(1)), and those are my notes. I suspect people will have Opinions about my comments here. Do not comment unless you have some Constructive feedback to provide: I don't want to know if you think I am holding it Wrong. Consider that I might have used UNIX shells for longer that you have lived. I'm not sure I'll keep using fish, but so far it's the first shell that survived heavy use outside of zsh(1) (unless you count tcsh(1), but that was in another millenia). My normal shell is bash(1), and it's still the shell I used everywhere else than my laptop, as I haven't switched on all the servers I managed, although it is available since August 2022 on torproject.org servers. I first got interested in fish because they ported to Rust, making it one of the rare shells out there written in a "safe" and modern programming language, released after an impressive ~2 year of work with Fish 4.0.

    Cool things Current directory gets shortened, ~/wikis/anarc.at/software/desktop/wayland shows up as ~/w/a/s/d/wayland Autocompletion rocks. Default prompt rocks. Doesn't seem vulnerable to command injection assaults, at least it doesn't trip on the git-landmine. It even includes pipe status output, which was a huge pain to implement in bash. Made me realized that if the last command succeeds, we don't see other failures, which is the case of my current prompt anyways! Signal reporting is better than my bash implementation too. So far the only modification I have made to the prompt is to add a printf '\a' to output a bell. By default, fish keeps a directory history (but separate from the pushd stack), that can be navigated with cdh, prevd, and nextd, dirh shows the history.

    Less cool I feel there's visible latency in the prompt creation. POSIX-style functions (foo() true ) are unsupported. Instead, fish uses whitespace-sensitive definitions like this:
    function foo
        true
    end
    
    This means my (modest) collection of POSIX functions need to be ported to fish. Workaround: simple functions can be turned into aliases, which fish supports (but implements using functions). EOF heredocs are considered to be "minor syntactic sugar". I find them frigging useful. Process substitution is split on newlines, not whitespace. you need to pipe through string split -n " " to get the equivalent. <(cmd) doesn't exist: they claim you can use cmd foo - as a replacement, but that's not correct: I used <(cmd) mostly where foo does not support - as a magic character to say 'read from stdin'. Documentation is... limited. It seems mostly geared the web docs which are... okay (but I couldn't find out about ~/.config/fish/conf.d there!), but this is really inconvenient when you're trying to browse the manual pages. For example, fish thinks there's a fish_prompt manual page, according to its own completion mechanism, but man(1) cannot find that manual page. I can't find the manual for the time command (which is actually a keyword!) Fish renders multi-line commands with newlines. So if your terminal looks like this, say:
    anarcat@angela:~> sq keyring merge torproject-keyring/lavamind-
    95F341D746CF1FC8B05A0ED5D3F900749268E55E.gpg torproject-keyrin
    g/weasel-E3ED482E44A53F5BBE585032D50F9EBC09E69937.gpg   wl-copy
    
    ... but it's actually one line, when you copy-paste the above, in foot(1), it will show up exactly like this, newlines and all:
    sq keyring merge torproject-keyring/lavamind-
    95F341D746CF1FC8B05A0ED5D3F900749268E55E.gpg torproject-keyrin
    g/weasel-E3ED482E44A53F5BBE585032D50F9EBC09E69937.gpg   wl-copy
    
    Whereas it should show up like this:
    sq keyring merge torproject-keyring/lavamind-95F341D746CF1FC8B05A0ED5D3F900749268E55E.gpg torproject-keyring/weasel-E3ED482E44A53F5BBE585032D50F9EBC09E69937.gpg   wl-copy
    
    Note that this is an issue specific to foot(1), alacritty(1) and gnome-terminal(1) don't suffer from that issue. I have already filed it upstream in foot and it is apparently fixed already. Globbing is driving me nuts. You can't pass a * to a command unless fish agrees it's going to match something. You need to escape it if it doesn't immediately match, and then you need the called command to actually support globbing. 202[345] doesn't match folders named 2023, 2024, 2025, it will send the string 202[345] to the command.

    Blockers () is like $(): it's process substitution, and not a subshell. This is really impractical: I use ( cd foo ; do_something) all the time to avoid losing the current directory... I guess I'm supposed to use pushd for this, but ouch. This wouldn't be so bad if it was just for cd though. Clean constructs like this:
    ( git grep -l '^#!/.*bin/python' ; fdfind .py )   sort -u
    
    Turn into what i find rather horrible:
    begin; git grep -l '^#!/.*bin/python' ; fdfind .py ; end   sort -ub
    
    It... works, but it goes back to "oh dear, now there's a new langage again". I only found out about this construct while trying:
      git grep -l '^#!/.*bin/python' ; fdfind .py     sort -u 
    
    ... which fails and suggests using begin/end, at which point: why not just support the curly braces? FOO=bar is not allowed. It's actually recognized syntax, but creates a warning. We're supposed to use set foo bar instead. This really feels like a needless divergence from standard. Aliases are... peculiar. Typical constructs like alias mv="\mv -i" don't work because fish treats aliases as a function definition, and \ is not magical there. This can be worked around by specifying the full path to the command, with e.g. alias mv="/bin/mv -i". Another problem is trying to override a built-in, which seems completely impossible. In my case, I like the time(1) command the way it is, thank you very much, and fish provides no way to bypass that builtin. It is possible to call time(1) with command time, but it's not possible to replace the command keyword so that means a lot of typing. Again: you can't use \ to bypass aliases. This is a huge annoyance for me. I would need to learn to type command in long form, and I use that stuff pretty regularly. I guess I could alias command to c or something, but this is one of those huge muscle memory challenges. alt . doesn't always work the way i expect.

    9 February 2025

    Antoine Beaupr : A slow blogging year

    Well, 2024 will be remembered, won't it? I guess 2025 already wants to make its mark too, but let's not worry about that right now, and instead let's talk about me. A little over a year ago, I was gloating over how I had such a great blogging year in 2022, and was considering 2023 to be average, then went on to gather more stats and traffic analysis... Then I said, and I quote:
    I hope to write more next year. I've been thinking about a few posts I could write for work, about how things work behind the scenes at Tor, that could be informative for many people. We run a rather old setup, but things hold up pretty well for what we throw at it, and it's worth sharing that with the world...
    What a load of bollocks.

    A bad year for this blog 2024 was the second worst year ever in my blogging history, tied with 2009 at a measly 6 posts for the year:
    anarcat@angela:anarc.at$ curl -sSL https://anarc.at/blog/   grep 'href="\./'   grep -o 20[0-9][0-9]   sort   uniq -c   sort -nr   grep -v 2025   tail -3
          6 2024
          6 2009
          3 2014
    
    I did write about my work though, detailing the migration from Gitolite to GitLab we completed that year. But after August, total radio silence until now.

    Loads of drafts It's not that I have nothing to say: I have no less than five drafts in my working tree here, not counting three actual drafts recorded in the Git repository here:
    anarcat@angela:anarc.at$ git s blog
    ## main...origin/main
    ?? blog/bell-bot.md
    ?? blog/fish.md
    ?? blog/kensington.md
    ?? blog/nixos.md
    ?? blog/tmux.md
    anarcat@angela:anarc.at$ git grep -l '\!tag draft'
    blog/mobile-massive-gallery.md
    blog/on-dying.mdwn
    blog/secrets-recovery.md
    
    I just don't have time to wrap those things up. I think part of me is disgusted by seeing my work stolen by large corporations to build proprietary large language models while my idols have been pushed to suicide for trying to share science with the world. Another part of me wants to make those things just right. The "tagged drafts" above are nothing more than a huge pile of chaotic links, far from being useful for anyone else than me, and even then. The on-dying article, in particular, is becoming my nemesis. I've been wanting to write that article for over 6 years now, I think. It's just too hard.

    Writing elsewhere There's also the fact that I write for work already. A lot. Here are the top-10 contributors to our team's wiki:
    anarcat@angela:help.torproject.org$ git shortlog --numbered --summary --group="format:%al"   head -10
      4272  anarcat
       423  jerome
       117  zen
       116  lelutin
       104  peter
        58  kez
        45  irl
        43  hiro
        18  gaba
        17  groente
    
    ... but that's a bit unfair, since I've been there half a decade. Here's the last year:
    anarcat@angela:help.torproject.org$ git shortlog --since=2024-01-01 --numbered --summary --group="format:%al"   head -10
       827  anarcat
       117  zen
       116  lelutin
        91  jerome
        17  groente
        10  gaba
         8  micah
         7  kez
         5  jnewsome
         4  stephen.swift
    
    So I still write the most commits! But to truly get a sense of the amount I wrote in there, we should count actual changes. Here it is by number of lines (from commandlinefu.com):
    anarcat@angela:help.torproject.org$ git ls-files   xargs -n1 git blame --line-porcelain   sed -n 's/^author //p'   sort -f   uniq -ic   sort -nr   head -10
      99046 Antoine Beaupr 
       6900 Zen Fu
       4784 J r me Charaoui
       1446 Gabriel Filion
       1146 Jerome Charaoui
        837 groente
        705 kez
        569 Gaba
        381 Matt Traudt
        237 Stephen Swift
    
    That, of course, is the entire history of the git repo, again. We should take only the last year into account, and probably ignore the tails directory, as sneaky Zen Fu imported the entire docs from another wiki there...
    anarcat@angela:help.torproject.org$ find [d-s]* -type f -mtime -365   xargs -n1 git blame --line-porcelain 2>/dev/null   sed -n 's/^author //p'   sort -f   uniq -ic   sort -nr   head -10
      75037 Antoine Beaupr 
       2932 J r me Charaoui
       1442 Gabriel Filion
       1400 Zen Fu
        929 Jerome Charaoui
        837 groente
        702 kez
        569 Gaba
        381 Matt Traudt
        237 Stephen Swift
    
    Pretty good! 75k lines. But those are the files that were modified in the last year. If we go a little more nuts, we find that:
    anarcat@angela:help.torproject.org$ $ git-count-words-range.py    sort -k6 -nr   head -10
    parsing commits for words changes from command: git log '--since=1 year ago' '--format=%H %al'
    anarcat 126116 - 36932 = 89184
    zen 31774 - 5749 = 26025
    groente 9732 - 607 = 9125
    lelutin 10768 - 2578 = 8190
    jerome 6236 - 2586 = 3650
    gaba 3164 - 491 = 2673
    stephen.swift 2443 - 673 = 1770
    kez 1034 - 74 = 960
    micah 772 - 250 = 522
    weasel 410 - 0 = 410
    
    I wrote 126,116 words in that wiki, only in the last year. I also deleted 37k words, so the final total is more like 89k words, but still: that's about forty (40!) articles of the average size (~2k) I wrote in 2022. (And yes, I did go nuts and write a new log parser, essentially from scratch, to figure out those word diffs. I did get the courage only after asking GPT-4o for an example first, I must admit.) Let's celebrate that again: I wrote 90 thousand words in that wiki in 2024. According to Wikipedia, a "novella" is 17,500 to 40,000 words, which would mean I wrote about a novella and a novel, in the past year. But interestingly, if I look at the repository analytics. I certainly didn't write that much more in the past year. So that alone cannot explain the lull in my production here.

    Arguments Another part of me is just tired of the bickering and arguing on the internet. I have at least two articles in there that I suspect is going to get me a lot of push-back (NixOS and Fish). I know how to deal with this: you need to write well, consider the controversy, spell it out, and defuse things before they happen. But that's hard work and, frankly, I don't really care that much about what people think anymore. I'm not writing here to convince people. I have stop evangelizing a long time ago. Now, I'm more into documenting, and teaching. And, while teaching, there's a two-way interaction: when you give out a speech or workshop, people can ask questions, or respond, and you all learn something. When you document, you quickly get told "where is this? I couldn't find it" or "I don't understand this" or "I tried that and it didn't work" or "wait, really? shouldn't we do X instead", and you learn. Here, it's static. It's my little soapbox where I scream in the void. The only thing people can do is scream back.

    Collaboration So. Let's see if we can work together here. If you don't like something I say, disagree, or find something wrong or to be improved, instead of screaming on social media or ignoring me, try contributing back. This site here is backed by a git repository and I promise to read everything you send there, whether it is an issue or a merge request. I will, of course, still read comments sent by email or IRC or social media, but please, be kind. You can also, of course, follow the latest changes on the TPA wiki. If you want to catch up with the last year, some of the "novellas" I wrote include: (Well, no, you can't actually follow changes on a GitLab wiki. But we have a wiki-replica git repository where you can see the latest commits, and subscribe to the RSS feed.) See you there!

    29 December 2024

    Russ Allbery: Review: The Last Hour Between Worlds

    Review: The Last Hour Between Worlds, by Melissa Caruso
    Series: The Echo Archives #1
    Publisher: Orbit
    Copyright: November 2024
    ISBN: 0-316-30364-X
    Format: Kindle
    Pages: 388
    The Last Hour Between Worlds is urban, somewhat political high fantasy with strong fae vibes. It is the first book of a series, but it stands alone quite well. Kembral Thorne is a Hound, a member of the guild that serves as guards, investigators, and protectors. Kembral's specialty is Echo retrieval: rescues of people and animals who have fallen through a weak spot in reality into one of the strange, dangerous, and malleable layers called Echoes. Kem once rescued a dog from six layers down, an almost unheard-of feat. Kem is also a new single mother, which means her past two months have been spent in a sleep-deprived haze revolving exclusively around her much-beloved infant. Dona Marjorie Swift's year-turning party is the first time she's been out without Emmi since she gave birth, and she's only there because her sister took the child and practically shoved her out the door. Now, she's desperately trying to remember how to be social and normal, which is not made easier by the unexpected presence of Rika at the party. Rika Nonesuch is not a Hound. She's a Cat, a member of the guild of thieves and occasional assassins. They are the nemesis of the Hounds, but in a stylized and formalized way in which certain courtesies are expected. (The politics of this don't really make sense; you just have to go with it.) Kem has complicated feelings about Rika's grace, banter, and intoxicating perfume, feelings that she thought might be reciprocated until Rika drugged her during an apparent date and left her buried under a pile of garbage. She was not expecting Rika to be at this party and is definitely not ready to have a conversation with her. This emotional turmoil is rudely interrupted by the death of nearly everyone at the party via an Echo poison, the appearance of a dark figure driving a black sword into someone, and the descent of the entire party into an Echo. This was one of those books that kept getting better the farther into the book I read. I was a bit leery at first because the publisher's blurb made it sound more like horror than I prefer, but this is more the disturbing strangeness of fae creatures than the sort of gruesomeness, disgust, or body horror that I find off-putting. Most importantly, the point of this book is not to torture the characters or scare the reader. It's instead structured a bit like a murder mystery, but one whose resolution requires working out obscure fantasy rules and hidden political agendas. One of the currencies in the world of Echos is blood, but another is emotion, revelation, and the stories that bring both, and Caruso focuses the story more on that aspect than on horrifying imagery.
    Rika frowned. "Resolve it? How?" "I have no idea." I couldn't keep my frustration from leaking through. "Might be that we have to delve deep into our own hearts to confront the unhealed wounds we've carried with us in secret. Might be that we have to say their names backward, or just close our eyes and they'll go away. Echoes never make any damned sense." Rika made a face. "We'd better not have to confront our unhealed wounds, or I'm leaving you to die."
    All of The Last Hour Between Worlds is told in the first person from Kem's perspective, but Rika is the best character in this book. Kem is a rather straightforward, dogged, stubborn protector; Rika is complicated, selfish, conflicted, and considerably more dynamic. The first obvious twist in her background I spotted so long before Kem found out that it was a bit frustrating, but there were multiple satisfying twists after that. As advertised in the blurb, there's a sapphic romance angle here, but it's the sort that comes from a complicated friendship and a lot of mutual respect rather than love at first sight. Some of their relationship conflict is driven by misunderstanding, but the misunderstanding happens before the novel begins, which means the reader doesn't have to sit through the bit where one yells at the characters for being stupid. It helps that the characters have something concrete to do, and that driving plot problem is multi-layered and satisfying. Each time the party falls through a layer of reality, it's mostly reset to the start of the book, but the word "mostly" is hiding a lot of subtlety. Given the clock at the start of each chapter and the blurb (if one read it), the reader can make a good guess that the plot problem will not be fully resolved until the characters fall quite deep into the Echoes, but the story never felt repetitive the way that some time loop stories can. As the characters gain more understanding, the problems change, the players change, and they have to make several excursions into the surrounding world. This is the sort of fantasy that feels a bit like science fiction. You're thrown into a world with a different culture and different rules that are foreign to the reader and natural to the characters. Part of the fun of reading is figuring out the rules, history, and backstory while watching the characters try to solve the puzzles they're faced with. The writing is good but not great. Characterization was good enough for a story primarily focused on action and puzzle-solving, but it was a bit lacking in subtlety. I think Caruso's strengths showed most in the world design, particularly the magic system and the rules followed by the Echo creatures. The excursions outside of the somewhat-protected house struck a balance between eeriness and comprehensibility that reminded me of T. Kingfisher or Sandman. The human politics were unfortunately less successful and rested on some tired centrist cliches. Thankfully, this was not the main point of the story. I should also warn that there is a lot of talk about babies. Kem's entire identity at the start of the novel, to the point of incessant monologue, is "new mother." This is not a perspective we get very often in fantasy, and Kem eventually finds a steadier balance between her bond with her daughter and the other parts of her life. I think some readers will feel very seen. But Caruso leans hard into maternal bonding. So hard. If you don't want to read about someone who is deliriously obsessed with their new child, you may want to skip this one. Right after I finished this book, I thought it was amazing. Now that I've had a few days to think about it, the lack of subtlety and the facile human politics brought it down a notch. I'm a science fiction reader at heart, so I loved the slow revelation of mechanics; the reader starts the story by knowing that Kem can "blink step" but not knowing what that means, and by the end of the story one not only knows but has opinions about its limitations, political implications, and interactions with other forms of magic. The Echo worlds are treated similarly, and this type of world-building is my jam. But the cost is that the human characters, particularly the supporting cast, don't get the same focus and therefore are a bit straightforward and obvious. The subplot with Dona Vandelle was particularly annoying. Ah well. Kem and Rika's relationship did work, and it's the center of the book. If you like fantasy mechanics but are a bit leery of fae stories because they feel too symbolic or arbitrary, give this a try. It's the most satisfyingly constructed fae story that I've read in a long time. It's not great literary fiction, but it's also not trying to be; it's a puzzle adventure, and a well-executed one. Recommended, and I will definitely be reading the sequel. Content notes: Lots of violent death and other physical damage, creepy dream worlds with implied but not explicit horror, and rather a lot of blood. Followed by The Last Soul Among Wolves, not yet published at the time I wrote this review. Rating: 8 out of 10

    10 December 2024

    Russ Allbery: 2024 book haul

    I haven't made one of these posts since... last year? Good lord. I've therefore already read and reviewed a lot of these books. Kemi Ashing-Giwa The Splinter in the Sky (sff)
    Moniquill Blackgoose To Shape a Dragon's Breath (sff)
    Ashley Herring Blake Delilah Green Doesn't Care (romance)
    Ashley Herring Blake Astrid Parker Doesn't Fail (romance)
    Ashley Herring Blake Iris Kelly Doesn't Date (romance)
    Molly J. Bragg Scatter (sff)
    Sarah Rees Breenan Long Live Evil (sff)
    Michelle Browne And the Stars Will Sing (sff)
    Steven Brust Lyorn (sff)
    Miles Cameron Beyond the Fringe (sff)
    Miles Cameron Deep Black (sff)
    Haley Cass Those Who Wait (romance)
    Sylvie Cathrall A Letter to the Luminous Deep (sff)
    Ta-Nehisi Coates The Message (non-fiction)
    Julie E. Czerneda To Each This World (sff)
    Brigid Delaney Reasons Not to Worry (non-fiction)
    Mar Delaney Moose Madness (sff)
    Jerusalem Demsas On the Housing Crisis (non-fiction)
    Michelle Diener Dark Horse (sff)
    Michelle Diener Dark Deeds (sff)
    Michelle Diener Dark Minds (sff)
    Michelle Diener Dark Matters (sff)
    Elaine Gallagher Unexploded Remnants (sff)
    Bethany Jacobs These Burning Stars (sff)
    Bethany Jacobs On Vicious Worlds (sff)
    Micaiah Johnson Those Beyond the Wall (sff)
    T. Kingfisher Paladin's Faith (sff)
    T.J. Klune Somewhere Beyond the Sea (sff)
    Mark Lawrence The Book That Wouldn't Burn (sff)
    Mark Lawrence The Book That Broke the World (sff)
    Mark Lawrence Overdue (sff)
    Mark Lawrence Returns (sff collection)
    Malinda Lo Last Night at the Telegraph Club (historical)
    Jessie Mihalik Hunt the Stars (sff)
    Samantha Mills The Wings Upon Her Back (sff)
    Lyda Morehouse Welcome to Boy.net (sff)
    Cal Newport Slow Productivity (non-fiction)
    Naomi Novik Buried Deep and Other Stories (sff collection)
    Claire O'Dell The Hound of Justice (sff)
    Keanu Reeves & China Mi ville The Book of Elsewhere (sff)
    Kit Rocha Beyond Temptation (sff)
    Kit Rocha Beyond Jealousy (sff)
    Kit Rocha Beyond Solitude (sff)
    Kit Rocha Beyond Addiction (sff)
    Kit Rocha Beyond Possession (sff)
    Kit Rocha Beyond Innocence (sff)
    Kit Rocha Beyond Ruin (sff)
    Kit Rocha Beyond Ecstasy (sff)
    Kit Rocha Beyond Surrender (sff)
    Kit Rocha Consort of Fire (sff)
    Geoff Ryman HIM (sff)
    Melissa Scott Finders (sff)
    Rob Wilkins Terry Pratchett: A Life with Footnotes (non-fiction)
    Gabrielle Zevin Tomorrow, and Tomorrow, and Tomorrow (mainstream)
    That's a lot of books, although I think I've already read maybe a third of them? Which is better than I usually do.

    5 December 2024

    Russ Allbery: Review: Paladin's Hope

    Review: Paladin's Hope, by T. Kingfisher
    Series: The Saint of Steel #3
    Publisher: Red Wombat Studio
    Copyright: 2021
    ISBN: 1-61450-613-2
    Format: Kindle
    Pages: 303
    Paladin's Hope is a fantasy romance novel and the third book of The Saint of Steel series. Each book of that series features different protagonists in closer to the romance series style than the fantasy series style and stands alone reasonably well. There are a few spoilers for the previous books here, so you probably want to read the series in order. Galen is one of the former paladins of the Saint of Steel, left bereft and then adopted by the Temple of the Rat after their god dies. Even more than the paladin protagonists of the previous two books, he reacted very badly to that death and has ongoing problems with nightmares and going into berserker rages when awakened. As the book opens, he's the escort for a lich-doctor named Piper who is examining a corpse found in the river.
    The last of the five was the only one who did not share a certain martial quality. He was slim and well-groomed and would be considered handsome, but he was also extraordinarily pale, as if he lived his life underground. It was this fifth man who nudged the corpse with the toe of his boot and said, "Well, if you want my professional opinion, this great goddamn hole in his chest is probably what killed him."
    As it turns out, slim and well-groomed and exceedingly pale is Galen's type. This is another paladin romance, this time between two men. It's almost all romance; the plot is barely worth mentioning. About half of the book is an exploration of a puzzle dungeon of the sort that might be fun in a video game or tabletop RPG, but that I found rather boring and monotonous in a novel. This creates a lot more room for the yearning and angst. Kingfisher tends towards slow-burn romances. This romance is a somewhat faster burn than some of her other books, but instead implodes into one of the most egregiously stupid third-act breakups that I've read in a romance plot. Of all the Kingfisher paladin books, I think this one was hurt the most by my basic difference in taste from the author. Kingfisher finds constant worrying and despair over being good enough for the romantic partner to be an enjoyable element, and I find it incredibly annoying. I think your enjoyment of this book will heavily depend on where you fall on that taste divide. The saving grace of this book are the gnoles, who are by far the best part of this world. Earstripe, a gnole constable, is the one who found the body that the book opens with and he drives most of the plot, such that it is. He's also the source of the best banter in the book, which is full of pointed and amused gnole observations about humans and their various stupidities. Given that I was also grumbling about human stupidities for most of the book, the gnole viewpoint and I got along rather well.
    "God's stripes." Earstripe shook his head in disbelief. "Bone-doctor would save some gnole, yes? If some gnole was hurt." "Of course," said Piper. "If I could." "And tomato-man would save some gnole?" He swung his muzzle toward Galen. "If some gnome needed big human with sword?" "Yes, of course." Earstripe spread his hands, claws gleaming. "A gnole saves some human. Same thing." He took a deep breath, clearly choosing his words carefully. "A gnole's compassion does not require fur."
    We learn a great deal more about gnole culture, all of which I found fascinating, and we get a rather satisfying amount of gnole acerbic commentary. Kingfisher is very good at banter, and dialogue in general, which also smoothes over the paucity of detailed plot. There was no salvaging the romance, at least for me, but I did at least like Piper, and Galen wasn't too bad when he wasn't being annoyingly self-destructive. I had been wondering a little if gay romance would, like sapphic romance, avoid my dislike of heterosexual gender roles. I think the jury is still out, but it did not work in this book because Galen is so committed to being the self-sacrificing protector who is unable to talk about his feelings that he single-handedly introduced a bunch of annoying pieces of the male gender role anyway. I will have to try that experiment with a book that doesn't involve hard-headed paladins. I have yet to read a bad T. Kingfisher novel, but I thought this one was on the weaker side. The gnoles are great and kept me reading, but I wish there had been a more robust plot, a lot less of the romance, and no third-act breakup. As is, I recommend the other Saint of Steel books over this one. Ah well. Followed by Paladin's Faith. Rating: 6 out of 10

    8 October 2024

    Thorsten Alteholz: My Debian Activities in September 2024

    FTP master This month I accepted 441 and rejected 29 packages. The overall number of packages that got accepted was 448. I couldn t believe my eyes, but this month I really accepted the same number of packages as last month. Debian LTS This was my hundred-twenty-third month that I did some work for the Debian LTS initiative, started by Raphael Hertzog at Freexian. During my allocated time I uploaded or worked on: Despite the announcement the package libppd in Debian is not affected by the CVEs related to CUPS. By pure chance there is an unrelated package with the same name in Debian. I also answered some question about the CUPS related uploads. Due to the CUPS issues, I postponed my work on other packages to October. Last but not least I did a week of FD this month and attended the monthly LTS/ELTS meeting. Debian ELTS This month was the seventy-fourth ELTS month. During my allocated time I uploaded or worked on: I also started to work on updates for cups in Buster, Stretch and Jessie, but their uploads will happen only in October. I also did a week of FD and attended the monthly LTS/ELTS meeting. Debian Printing This month I uploaded Last but not least I tried to prepare an update for hplip. Unfortunately this is a nerve-stretching task and I need some more time. This work is generously funded by Freexian! Debian Matomo This month I even found some time to upload packages that are dependencies of Matomo This work is generously funded by Freexian! Debian Astro This month I uploaded a new upstream or bugfix version of: Most of the uploads were related to package migration to testing. As some of them are in non-free or contrib, one has to build all binary versions. From my point of view handling packages in non-free or contrib could be very much improved, but well, they are not part of Debian Anyway, starting in December there is an Outreachy project that takes care of automatic updates of these packages. So hopefully it will be much easier to keep those package up to date. I will keep you informed. Debian IoT This month I uploaded new upstream or bugfix versions of: Debian Mobcom This month I did source uploads of all the packages that were prepared last month by Nathan and started the transition. It went rather smooth except for a few packages where the new version did not propagate to the tracker and they got stuck in old failing autopkgtest. Anyway, in the end all packages migrated to testing. I also uploaded new upstream releases or fixed bugs in: misc This month I uploaded new upstream or bugfix versions of: Most of those uploads were needed to help packages to migrate to testing.

    15 September 2024

    Raju Devidas: Setting a local test deployment of moinmoin wiki

    ~$ mkdir moin-test
    ~$ cd moin-test
    ~/d/moin-test python3 -m venv .                                00:04
    ~/d/moin-test ls                                        2.119s 00:04
    bin/  include/  lib/  lib64@  pyvenv.cfg
    ~/d/moin-test source bin/activate.fish                         00:04
    ~/d/moin-test pip install --pre moin                 moin-test 00:04
    Collecting moin
      Using cached moin-2.0.0b1-py3-none-any.whl.metadata (4.7 kB)
    Collecting Babel>=2.10.0 (from moin)
      Using cached babel-2.16.0-py3-none-any.whl.metadata (1.5 kB)
    Collecting blinker>=1.6.2 (from moin)
      Using cached blinker-1.8.2-py3-none-any.whl.metadata (1.6 kB)
    Collecting docutils>=0.18.1 (from moin)
      Using cached docutils-0.21.2-py3-none-any.whl.metadata (2.8 kB)
    Collecting Markdown>=3.4.1 (from moin)
      Using cached Markdown-3.7-py3-none-any.whl.metadata (7.0 kB)
    Collecting mdx-wikilink-plus>=1.4.1 (from moin)
      Using cached mdx_wikilink_plus-1.4.1-py3-none-any.whl.metadata (6.6 kB)
    Collecting Flask>=3.0.0 (from moin)
      Using cached flask-3.0.3-py3-none-any.whl.metadata (3.2 kB)
    Collecting Flask-Babel>=3.0.0 (from moin)
      Using cached flask_babel-4.0.0-py3-none-any.whl.metadata (1.9 kB)
    Collecting Flask-Caching>=1.2.0 (from moin)
      Using cached Flask_Caching-2.3.0-py3-none-any.whl.metadata (2.2 kB)
    Collecting Flask-Theme>=0.3.6 (from moin)
      Using cached flask_theme-0.3.6-py3-none-any.whl
    Collecting emeraldtree>=0.10.0 (from moin)
      Using cached emeraldtree-0.11.0-py3-none-any.whl
    Collecting feedgen>=0.9.0 (from moin)
      Using cached feedgen-1.0.0-py2.py3-none-any.whl
    Collecting flatland>=0.8 (from moin)
      Using cached flatland-0.9.1-py3-none-any.whl
    Collecting Jinja2>=3.1.0 (from moin)
      Using cached jinja2-3.1.4-py3-none-any.whl.metadata (2.6 kB)
    Collecting markupsafe<=2.2.0 (from moin)
      Using cached MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.0 kB)
    Collecting pygments>=1.4 (from moin)
      Using cached pygments-2.18.0-py3-none-any.whl.metadata (2.5 kB)
    Collecting Werkzeug>=3.0.0 (from moin)
      Using cached werkzeug-3.0.4-py3-none-any.whl.metadata (3.7 kB)
    Collecting whoosh>=2.7.0 (from moin)
      Using cached Whoosh-2.7.4-py2.py3-none-any.whl.metadata (3.1 kB)
    Collecting pdfminer.six (from moin)
      Using cached pdfminer.six-20240706-py3-none-any.whl.metadata (4.1 kB)
    Collecting passlib>=1.6.0 (from moin)
      Using cached passlib-1.7.4-py2.py3-none-any.whl.metadata (1.7 kB)
    Collecting sqlalchemy>=2.0 (from moin)
      Using cached SQLAlchemy-2.0.34-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.6 kB)
    Collecting XStatic>=0.0.2 (from moin)
      Using cached XStatic-1.0.3-py3-none-any.whl.metadata (1.4 kB)
    Collecting XStatic-Bootstrap==3.1.1.2 (from moin)
      Using cached XStatic_Bootstrap-3.1.1.2-py3-none-any.whl
    Collecting XStatic-Font-Awesome>=6.2.1.0 (from moin)
      Using cached XStatic_Font_Awesome-6.2.1.1-py3-none-any.whl.metadata (851 bytes)
    Collecting XStatic-CKEditor>=3.6.1.2 (from moin)
      Using cached XStatic_CKEditor-3.6.4.0-py3-none-any.whl
    Collecting XStatic-autosize (from moin)
      Using cached XStatic_autosize-1.17.2.1-py3-none-any.whl
    Collecting XStatic-jQuery>=1.8.2 (from moin)
      Using cached XStatic_jQuery-3.5.1.1-py3-none-any.whl
    Collecting XStatic-jQuery-File-Upload>=10.31.0 (from moin)
      Using cached XStatic_jQuery_File_Upload-10.31.0.1-py3-none-any.whl
    Collecting XStatic-svg-edit-moin>=2012.11.15.1 (from moin)
      Using cached XStatic_svg_edit_moin-2012.11.27.1-py3-none-any.whl
    Collecting XStatic-JQuery.TableSorter>=2.14.5.1 (from moin)
      Using cached XStatic_JQuery.TableSorter-2.14.5.2-py3-none-any.whl.metadata (846 bytes)
    Collecting XStatic-Pygments>=1.6.0.1 (from moin)
      Using cached XStatic_Pygments-2.9.0.1-py3-none-any.whl
    Collecting lxml (from feedgen>=0.9.0->moin)
      Using cached lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl.metadata (3.8 kB)
    Collecting python-dateutil (from feedgen>=0.9.0->moin)
      Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
    Collecting itsdangerous>=2.1.2 (from Flask>=3.0.0->moin)
      Using cached itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)
    Collecting click>=8.1.3 (from Flask>=3.0.0->moin)
      Using cached click-8.1.7-py3-none-any.whl.metadata (3.0 kB)
    Collecting pytz>=2022.7 (from Flask-Babel>=3.0.0->moin)
      Using cached pytz-2024.2-py2.py3-none-any.whl.metadata (22 kB)
    Collecting cachelib<0.10.0,>=0.9.0 (from Flask-Caching>=1.2.0->moin)
      Using cached cachelib-0.9.0-py3-none-any.whl.metadata (1.9 kB)
    Collecting typing-extensions>=4.6.0 (from sqlalchemy>=2.0->moin)
      Using cached typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)
    Collecting greenlet!=0.4.17 (from sqlalchemy>=2.0->moin)
      Using cached greenlet-3.1.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (3.8 kB)
    Collecting charset-normalizer>=2.0.0 (from pdfminer.six->moin)
      Using cached charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (33 kB)
    Collecting cryptography>=36.0.0 (from pdfminer.six->moin)
      Using cached cryptography-43.0.1-cp39-abi3-manylinux_2_28_x86_64.whl.metadata (5.4 kB)
    Collecting cffi>=1.12 (from cryptography>=36.0.0->pdfminer.six->moin)
      Using cached cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.5 kB)
    Collecting six>=1.5 (from python-dateutil->feedgen>=0.9.0->moin)
      Using cached six-1.16.0-py2.py3-none-any.whl.metadata (1.8 kB)
    Collecting pycparser (from cffi>=1.12->cryptography>=36.0.0->pdfminer.six->moin)
      Using cached pycparser-2.22-py3-none-any.whl.metadata (943 bytes)
    Using cached moin-2.0.0b1-py3-none-any.whl (1.7 MB)
    Using cached babel-2.16.0-py3-none-any.whl (9.6 MB)
    Using cached blinker-1.8.2-py3-none-any.whl (9.5 kB)
    Using cached docutils-0.21.2-py3-none-any.whl (587 kB)
    Using cached flask-3.0.3-py3-none-any.whl (101 kB)
    Using cached flask_babel-4.0.0-py3-none-any.whl (9.6 kB)
    Using cached Flask_Caching-2.3.0-py3-none-any.whl (28 kB)
    Using cached jinja2-3.1.4-py3-none-any.whl (133 kB)
    Using cached Markdown-3.7-py3-none-any.whl (106 kB)
    Using cached MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (28 kB)
    Using cached mdx_wikilink_plus-1.4.1-py3-none-any.whl (8.9 kB)
    Using cached passlib-1.7.4-py2.py3-none-any.whl (525 kB)
    Using cached pygments-2.18.0-py3-none-any.whl (1.2 MB)
    Using cached SQLAlchemy-2.0.34-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB)
    Using cached werkzeug-3.0.4-py3-none-any.whl (227 kB)
    Using cached Whoosh-2.7.4-py2.py3-none-any.whl (468 kB)
    Using cached XStatic-1.0.3-py3-none-any.whl (4.4 kB)
    Using cached XStatic_Font_Awesome-6.2.1.1-py3-none-any.whl (6.5 MB)
    Using cached XStatic_JQuery.TableSorter-2.14.5.2-py3-none-any.whl (20 kB)
    Using cached pdfminer.six-20240706-py3-none-any.whl (5.6 MB)
    Using cached cachelib-0.9.0-py3-none-any.whl (15 kB)
    Using cached charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (141 kB)
    Using cached click-8.1.7-py3-none-any.whl (97 kB)
    Using cached cryptography-43.0.1-cp39-abi3-manylinux_2_28_x86_64.whl (4.0 MB)
    Using cached greenlet-3.1.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (626 kB)
    Using cached itsdangerous-2.2.0-py3-none-any.whl (16 kB)
    Using cached pytz-2024.2-py2.py3-none-any.whl (508 kB)
    Using cached typing_extensions-4.12.2-py3-none-any.whl (37 kB)
    Using cached lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl (4.9 MB)
    Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
    Using cached cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (479 kB)
    Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
    Using cached pycparser-2.22-py3-none-any.whl (117 kB)
    Installing collected packages: XStatic-svg-edit-moin, XStatic-Pygments, XStatic-JQuery.TableSorter, XStatic-jQuery-File-Upload, XStatic-jQuery, XStatic-Font-Awesome, XStatic-CKEditor, XStatic-Bootstrap, XStatic-autosize, XStatic, whoosh, pytz, passlib, typing-extensions, six, pygments, pycparser, markupsafe, Markdown, lxml, itsdangerous, greenlet, emeraldtree, docutils, click, charset-normalizer, cachelib, blinker, Babel, Werkzeug, sqlalchemy, python-dateutil, mdx-wikilink-plus, Jinja2, flatland, cffi, Flask, feedgen, cryptography, pdfminer.six, Flask-Theme, Flask-Caching, Flask-Babel, moin
    Successfully installed Babel-2.16.0 Flask-3.0.3 Flask-Babel-4.0.0 Flask-Caching-2.3.0 Flask-Theme-0.3.6 Jinja2-3.1.4 Markdown-3.7 Werkzeug-3.0.4 XStatic-1.0.3 XStatic-Bootstrap-3.1.1.2 XStatic-CKEditor-3.6.4.0 XStatic-Font-Awesome-6.2.1.1 XStatic-JQuery.TableSorter-2.14.5.2 XStatic-Pygments-2.9.0.1 XStatic-autosize-1.17.2.1 XStatic-jQuery-3.5.1.1 XStatic-jQuery-File-Upload-10.31.0.1 XStatic-svg-edit-moin-2012.11.27.1 blinker-1.8.2 cachelib-0.9.0 cffi-1.17.1 charset-normalizer-3.3.2 click-8.1.7 cryptography-43.0.1 docutils-0.21.2 emeraldtree-0.11.0 feedgen-1.0.0 flatland-0.9.1 greenlet-3.1.0 itsdangerous-2.2.0 lxml-5.3.0 markupsafe-2.1.5 mdx-wikilink-plus-1.4.1 moin-2.0.0b1 passlib-1.7.4 pdfminer.six-20240706 pycparser-2.22 pygments-2.18.0 python-dateutil-2.9.0.post0 pytz-2024.2 six-1.16.0 sqlalchemy-2.0.34 typing-extensions-4.12.2 whoosh-2.7.4
    ~/d/moin-test[1] pip install setuptools       moin-test 0.241s 00:06
    Collecting setuptools
      Using cached setuptools-75.0.0-py3-none-any.whl.metadata (6.9 kB)
    Using cached setuptools-75.0.0-py3-none-any.whl (1.2 MB)
    Installing collected packages: setuptools
    Successfully installed setuptools-75.0.0
    ~/d/moin-test moin create-instance --full     moin-test 1.457s 00:06
    2024-09-16 00:06:36,812 INFO moin.cli.maint.create_instance:76 Directory /home/raj/dev/moin-test already exists, using as wikiconfig dir.
    2024-09-16 00:06:36,813 INFO moin.cli.maint.create_instance:93 Instance creation finished.
    2024-09-16 00:06:37,303 INFO moin.cli.maint.create_instance:107 Build Instance started.
    2024-09-16 00:06:37,304 INFO moin.cli.maint.index:51 Index creation started
    2024-09-16 00:06:37,308 INFO moin.cli.maint.index:55 Index creation finished
    2024-09-16 00:06:37,308 INFO moin.cli.maint.modify_item:166 Load help started
    Item loaded: Home
    Item loaded: docbook
    Item loaded: mediawiki
    Item loaded: OtherTextItems/Diff
    Item loaded: WikiDict
    Item loaded: moin
    Item loaded: moin/subitem
    Item loaded: html/SubItem
    Item loaded: moin/HighlighterList
    Item loaded: MoinWikiMacros/Icons
    Item loaded: InclusionForMoinWikiMacros
    Item loaded: TemplateSample
    Item loaded: MoinWikiMacros
    Item loaded: rst/subitem
    Item loaded: OtherTextItems/IRC
    Item loaded: rst
    Item loaded: creole/subitem
    Item loaded: Home/subitem
    Item loaded: OtherTextItems/CSV
    Item loaded: images
    Item loaded: Sibling
    Item loaded: html
    Item loaded: markdown
    Item loaded: creole
    Item loaded: OtherTextItems
    Item loaded: OtherTextItems/Python
    Item loaded: docbook/SubItem
    Item loaded: OtherTextItems/PlainText
    Item loaded: MoinWikiMacros/MonthCalendar
    Item loaded: markdown/Subitem
    Success: help namespace help-en loaded successfully with 30 items
    2024-09-16 00:06:46,258 INFO moin.cli.maint.modify_item:166 Load help started
    Item loaded: video.mp4
    Item loaded: archive.tar.gz
    Item loaded: audio.mp3
    Item loaded: archive.zip
    Item loaded: logo.png
    Item loaded: cat.jpg
    Item loaded: logo.svg
    Success: help namespace help-common loaded successfully with 7 items
    2024-09-16 00:06:49,685 INFO moin.cli.maint.modify_item:338 Load welcome page started
    2024-09-16 00:06:49,801 INFO moin.cli.maint.modify_item:347 Load welcome finished
    2024-09-16 00:06:49,801 INFO moin.cli.maint.index:124 Index optimization started
    2024-09-16 00:06:51,383 INFO moin.cli.maint.index:126 Index optimization finished
    2024-09-16 00:06:51,383 INFO moin.cli.maint.create_instance:114 Full instance setup finished.
    2024-09-16 00:06:51,383 INFO moin.cli.maint.create_instance:115 You can now use "moin run" to start the builtin server.
    ~/d/moin-test ls                             moin-test 15.295s 00:06
    bin/      intermap.txt  lib64@      wiki/        wikiconfig.py
    include/  lib/          pyvenv.cfg  wiki_local/
    ~/d/moin-test MOINCFG=wikiconfig.py                  moin-test 00:07
    fish: Unsupported use of &apos=&apos. In fish, please use &aposset MOINCFG wikiconfig.py&apos.
    ~/d/moin-test[123] set MOINCFG wikiconfig.py         moin-test 00:07
    ~/d/moin-test[123] moin account-create --name test --email test@test.tld --password test123
    Password not acceptable: For a password a minimum length of 8 characters is required.
    2024-09-16 00:08:19,106 WARNING moin.utils.clock:53 These timers have not been stopped: total
    ~/d/moin-test moin account-create --name test --email test@test.tld --password this-is-a-password
    2024-09-16 00:08:43,798 INFO moin.cli.account.create:49 User c3608cafec184bd6a7a1d69d83109ad0 [&apostest&apos] test@test.tld - created.
    2024-09-16 00:08:43,798 WARNING moin.utils.clock:53 These timers have not been stopped: total
    ~/d/moin-test moin run --host 0.0.0.0 --port 5000 --no-debugger --no-reload
     * Debug mode: off
    2024-09-16 00:09:26,146 INFO werkzeug:97 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
     * Running on all addresses (0.0.0.0)
     * Running on http://127.0.0.1:5000
     * Running on http://192.168.1.2:5000
    2024-09-16 00:09:26,146 INFO werkzeug:97 Press CTRL+C to quit
    

    30 August 2024

    Russ Allbery: Review: Thornhedge

    Review: Thornhedge, by T. Kingfisher
    Publisher: Tor
    Copyright: 2023
    ISBN: 1-250-24410-2
    Format: Kindle
    Pages: 116
    Thornhedge is a fantasy novella by T. Kingfisher, the pen name that Ursula Vernon uses for her adult writing. It won the 2024 Hugo Award for best novella. No matter how much my brain wants to misspell the title, it is a story about a hedge, not a Neolithic earthwork.
    The fairy was the greenish-tan color of mushroom stems and her skin bruised blue-black, like mushroom flesh. She had a broad, frog-like face and waterweed hair. She was neither beautiful nor made of malice, as many of the Fair Folk are said to be.
    There is a princess asleep in a tower, surrounded by a wall of thorns. Toadling's job is to keep anyone from foolishly breaking in. At first, it was a constant struggle and all that she could manage, but with time, the flood of princes slowed to a trickle. A road was built and abandoned. People fled. There was a plague. With any luck, the tower was finally forgotten. Then a knight shows up. Not a very rich knight, nor a very successful knight. Just a polite and very persistent knight who wants to get into the tower that Toadling does not want him to get into. As you might have guessed, this is a Sleeping Beauty retelling. As you may have also guessed from the author, or from the cover text that says "not all curses should be broken," this version is a bit different. How and why it departs from the original is a surprise that slowly unfolds over the course of the story, in parallel to a delicate, cautious, and delightfully kind-hearted conversation between the knight and the fairy. If you have read a T. Kingfisher story before, particularly one of her fractured fairy tales, you know what to expect. Toadling is one of her typical well-meaning, earnest, slightly awkward protagonists who is just trying to do the right thing in a confusing world full of problems and dangers. She's constantly overwhelmed and yet she keeps going, because what else is there to do. Like a lot of Kingfisher's writing, it's a story about quiet courage from someone who doesn't consider herself courageous. One of the twists this time is that the knight is a character from a similar vein: doggedly unwilling to leave any problem alone, but equally determined to try to be kind. The two of them together make for a story with a gentle and rather melancholy tone. We do, eventually, learn the whole backstory of the tower, the wall of thorns, and Toadling. There is a god, a rather memorable one, who is frustratingly cryptic in the way that gods are. There are monsters who are more loving than most humans. There are humans who turn out to be surprisingly decent when it matters. And, like most of Kingfisher's writing, there is a constant awareness of how complicated the world is, how full it is of people who are just trying to get through each day, and how heavy of burdens people can shoulder when they don't see another way. This story pulled me right in. It is not horror, although there are a few odd bits like there always are in Kingfisher stories. Your largest risk as a reader is that it might make you cry if stories about earnest people doing their best in overwhelming situations hit you that way. My primary complaint is that there was nowhere near enough ending for me. After everything I learned about the characters, I wanted to spend some time with them outside of the bounds of the story. Kingfisher points the reader in a direction and then leaves the rest to your imagination, and I can see why she chose that story construction, but I wanted more catharsis than I got. That complaint aside, this is quintessential T. Kingfisher, and I am unsurprised that it won a Hugo. If you've read any of her other fractured fairy tales, or the 2023 Hugo winner for best novel, you know the sort of stories she tells, and you probably know whether you will like this. I am one of the people who like this. Rating: 8 out of 10

    12 August 2024

    Scarlett Gately Moore: KDE, Kubuntu, Debian Qt6 updates plus Kubuntu Noble .1 updates.

    Another loss last week of a friend. I am staying strong and working through it. A big thank you to all of you that have donated to my car fund, I still have a long way to go. I am not above getting a cheap old car, but we live in sand dunes so it must be a cheap old car with 4 4 to get to my property. A vehicle is necessary as we are 50 miles away from staples such as food and water. We also have 2 funerals to attend. Please consider a donation if my work is useful to you. https://gofund.me/1e784e74 All of my work is currently unpaid work, as I am between contracts. Thank you for your consideration. Now onto the good stuff, last weeks work. It was another very busy week with Qt6 packaging in Debian/Kubuntu and KDE snaps. I also have many SRUs for Kubuntu Noble .1 release that needs their verification done. Kubuntu: Debian: Starting the salvage process for kdsoap which is blocking a long line of packages, notably kio-extras. KDE Snaps: Please note: Please help test the edge snaps so I can promote them to stable. WIP Snaps or MR s made Thanks for stopping by.

    10 August 2024

    Thorsten Alteholz: My Debian Activities in July 2024

    FTP master This month I accepted 502 and rejected 40 packages. The overall number of packages that got accepted was 515. In case you want to upload dozens of packages, it would be nice to give some heads-up before. It is kind of a shock to see a full NEW queue in the morning, though it was much shorter in the evening before. Debian LTS This was my hundred-twenty-first month that I did some work for the Debian LTS initiative, started by Raphael Hertzog at Freexian. This month I finished the new version of tiff for Bullseye (and Bookworm). The upload will follow, when Bullseye has been handed over to the LTS team in August. Last but not least I attended the monthly LTS/ELTS meeting. Debian ELTS This month was the seventy-second ELTS month. During my allocated time I uploaded or worked on: For whatever reason, I had trouble with the CI again. The new tiff package wanted to run the autopkgtest of cups but never did it. So the corresponding ELA will appear only in August. I also continued to work on an update for libvirt. There really is a reason why some packages don t get much attention. Nevertheless someone has to take care of them. I also did a week of FD and attended the LTS/ELTS meeting. Debian Printing This month I uploaded This work is generously funded by Freexian! Debian Astro This month I uploaded a new upstream or bugfix version of: Debian IoT This month I uploaded new upstream or bugfix versions of: Debian Mobcom This month I uploaded The following packages have been prepared by the GSoC student Nathan: misc This month I uploaded new upstream or bugfix versions of:

    9 August 2024

    Kalyani Kenekar: One Backpack, One Passport: My First Solo Trip

    Planing A Self Organized Solo Trip You know the movie Queen? The actor Kangana Ranaut plays in that movie the role of Rani Mehra, a 24-year-old Punjabi woman, who was a simple, homely girl that was always reliant on her family. Similar to Rani I too rarely ventured out without my parents and often needed my younger sibling by my side. Inspired by her transformation, I decided it was time to take control of my own story and discover who I truly am. Queen movie picture Of Kangana

    Trip Requirements

    My First Passport The journey began with a significant first step: Obtaining my first passport Never having had one before, I scheduled the nearest available interview date on June 29 2022. This meant traveling to Solapur, a city 309 km from my hometown, accompanied by my father. After successfully completing the interview, I received my passport on July 14 2022.

    Select A Country, Booking Flights And Accommodation Excited and ready to embark on my adventure, I planed trip to Albania and booked the flight tickets. Why? I had heard from friends that it was a beautiful European country with beaches and other attractions, and importantly, it didn t require a visa for Indian citizens and was more affordable than other European destinations. Before heading to Albania, I planned a overnight stop in Abu Dhabi with a transit visa, thanks to friend who knew the process for obtaining it. Some of my friends did travel also to Europe at the same time and quite close to my plannings, but that I realized just later the trip.

    Day 1, Starting The Experience On July 20, 2022, I started my journey by traveling from Pune, Maharashtra, to Delhi, where my brother lives. He came to see me off at the airport, adding a touch of warmth and support to the beginning of my solo adventure. Upon arriving in Delhi, with my next flight scheduled for July 21, I stayed at a backpacker hostel named Zostel, Paharganj, Delhi to rest. During my stay, I noticed that many travelers at the hostel carried rucksacks, which sparked a desire in me to get one for my own trip to Europe. Up until then, I had always shopped with my mom and had never bought anything on my own. Inspired by the travelers, I set out to find a suitable rucksack. I traveled alone by metro from Paharganj to Rohini to visit a Decathlon store, where I purchased a 50-liter rucksack. This was a significant step in preparing for my European adventure and marked a milestone in my journey of self reliance. Rucksack description tag Kalyani s packpacker

    Day 2, Flying To Abu Dhabi The following day, July 21 2024, I had a flight to Abu Dhabi. I spent the night at the hostel to rest before my journey. On the day of the flight, I needed to reach the airport by 3 PM, and a friend kindly came to drop me off. With my rucksack packed and excitement building, I was ready for the next leg of my adventure. When we arrived at the airport, my friend saw me off, marking the start of my international journey. With mom made spices, chutneys, and chilly flakes packed for comfort, I completed my immigration process in about two and a half hours. I then settled at the gate for my flight, feeling a mix of excitement and anxiety as thoughts raced through my mind. mom-made spices Passport and boarding pass To ease my nerves, I struck up a conversation with a man seated nearby who was also traveling to Abu Dhabi for work. He provided helpful information about safety and transportation in Abu Dhabi, which reassured me. With the boarding process complete and my anxiety somewhat eased. I found my window seat on the flight and settled in, excited for the journey ahead. Next to me was a young man from Ranchi(Zarkhand, India), heading to Abu Dhabi for work at a mining factory. We had an engaging conversation about work culture in Abu Dhabi and recruitment from India. Upon arriving in Abu Dhabi, I completed my transit, collected my luggage, and began finding my way to the hotel Premier Inn AbuDhabi, which was in the airport area. To my surprise, I ran into the same man from the flight, now in a cab. He kindly offered to drop me at my hotel, which I gladly accepted since navigating an unfamiliar city with a short acquaintance felt safer. At the hotel gate, he asked if I had local currency (Dirhams) for payment, as sometimes online transactions can fail. That hadn t crossed my mind, and I realized I might be left stranded if a transaction failed. Recognizing his help as a godsend, I asked if he could lend me some Dirhams, promising to transfer the amount later. He kindly assured me to pay him back once I reached the hotel room. With that relief, I checked into the hotel, feeling deeply grateful for the unexpected assistance and transferred the money to him after getting to my room. dhiramm money hotel room Kalyani in hotel room

    Day 3, Flying And Arrive In Tirana Once in the hotel room, I found it hard to sleep, anxious about waking up on time for my flight. I set an alarm to wake up early, but my subconscious mind kept me alert, and I woke up before the alarm went off. I got freshened up and went down for breakfast, where I found some vegetarian options like Idli-Sambar and bread with butter, along with some morning tea. After breakfast, I headed back to the airport, ready to catch my flight to my final destination: Tirana, Albania. Breakfast at hotel Airport area I reached Tirana, Albania after a six hours flight, feeling exhausted and I was suffering from a headache. The air pressure had blocked my ears, and jet lag added to my fatigue. After collecting my checked luggage, I headed to the first ATM machine at the airport. Struggling to insert my card, I asked a nearby gentleman for help. He tried his best, but my card got stuck inside the machine. Panic set in as I worried about how I would survive without money. Taking a deep breath, I found an airport employee and explained the situation. The gentleman stayed with me, offering support and repeatedly apologizing for his mistake. However, it wasn t his fault, the ATM was out of order, which I hadn t noticed. My focus was solely on retrieving my ATM card. The airport employee worked diligently, using a hairpin to carefully extract my card. Finally, the card was freed, and I felt an immense sense of relief, grateful for the help of these kind strangers. I used another ATM, successfully withdrew money, and then went to an airport mobile SIM shop to buy a new SIM card for local internet and connectivity. sim plans

    Day 4, Arriving In Tirana, Facing Challenges In A Foreign Country I had booked a stay at a backpacker hostel near the city center of Tirana. After sorting out the ATM and SIM card issues, I searched for a bus or any transport to get there. It was quite late, around 8:30 PM, and being in a new city, I was in a hurry. I saw a bus nearly leaving the airport, stopped it, and asked if it went to the city center. They gave me the green flag, so I boarded the airport service bus and reached the city center. Feeling very tired, I discovered that the hostel was about an hour and a half away by walking. Deciding to take a cab, I faced a challenge as the driver couldn t understand my English or accent. Using a mobile translator to convert my address from English to Albanian, I finally communicated my destination to him. With that sorted out, I headed to the Blue Door Backpacker Hostel and arrived around 9 PM, relieved to have finally reached my destination and I checked in. Hostel gate Street in Tirana I found my top bunk bed, only to realize I had booked a mixed-gender dormitory. This detail had completely escaped my notice during the booking process. I felt unsure about how to handle the situation. Coincidentally, my experience mirrored what Kangana faced in the movie Queen . Feeling acidic due to an empty stomach and the exhaustion of heavy traveling, I wasn t up to cooking in the hostel s kitchen. I asked the front desk about the nearest restaurant. It was nearly 9:30 PM, and the streets were deserted. To avoid any mishaps like in the movie Queen, I kept my passport securely locked in my bag, ensuring it wouldn t be a victim of theft. Venturing out for dinner, I felt uneasy on the quiet streets. I eventually found a restaurant recommended by the hostel, but the menu was almost entirely non-vegetarian. I struggled to ask about vegetarian options and was uncertain if any dishes contained eggs, as some people consider eggs to be vegetarian. Feeling frustrated and unsure, I left the restaurant without eating. I noticed a nearby grocery store that was about to close and managed to get a few extra minutes to shop. I bought some snacks, wafers, milk, and tea bags (though I couldn t find tea powder to make Indian-style tea). Returning to the hostel, I made do with wafers, cookies, and milk for dinner. That day was incredibly tough for me, I filled with exhaustion and struggle in a new country, I was on the verge of tears . I made a video call home before sleeping on the top bunk bed. It was a new experience for me, sharing a room with both unknown men and women. I kept my passport safe inside my purse and under my pillow while sleeping, staying very conscious about its security.

    Day 5, Exploring Nearby Places I woke up the next day at noon. After having some coffee, the hostel management girl asked if I wanted breakfast. She offered curd with cornflakes, which I refused because I don t like curd. Instead, I ordered a pizza from a vegetarian pizza place with her help, and I started feeling better. I met some people in the hostel, some from Syria and others from Italy. I struggled to understand their accents but kept pushing myself to get involved in their discussions. Despite the challenges, I felt more at ease and was slowly adapting to my new environment. I went out from the hostel in the evening to buy some vegetables to cook something. I searched for shops and found some potatoes, tomatoes, and rice. I decided to cook Khichdi, an Indian dish made with rice, and added some chili flakes I brought from home. After preparing my dinner, I ate and then went to sleep again. vegetable shop cooking in kitchen Food

    Day 6, Tiranas Recent History The next day, I planned to explore the city and visited Bunkart-1, a fascinating museum in a massive underground bunker from the communist era. Originally built as a shelter for Albania s political and military elite, it now offers a unique glimpse into the country s history under Enver Hoxha s oppressive regime. The museum s exhibits include historical artifacts, photographs, and multimedia displays that detail the lives of Albanians during that time. Walking through the dimly lit corridors, I felt the weight of history and gained a deeper understanding of Albania s past. Bunkart Bunkart Bunkart Bunkart Bunkart Bunkart Bunkar Bunkart Bunkart Bunkart Bunkart

    Day 7-8, Meeting Friends From India The next day, I accidentally met with Chirag, who was returning from the Debian Conference 2022 held in Prizren, Kosovo, and staying at the same hostel. When I encountered him, he was talking on the phone, and I recognized he was Indian by his accent. I introduced myself, and we discovered we had some mutual friends. Chirag told me that our common friend, Raju, was also coming to stay at the hostel the next day. This news made me feel relaxed and happy to have known people around. When Raju arrived, the three of us, Chirag, Raju, and I planned to have dinner at an Indian restaurant and explore Tirana city. I had a great time talking and enjoying their company. Friends on street

    Day 9-10, Meeting More Friends Raju had a ticket to leave soon, so Chirag and I made a plan to visit Shkod r and the nearby Komani Lake for kayaking. We started our journey early in the morning by bus and reached Shkod r. There, we met new friends from the conference, Pavit and Abraham, who were already there. We had dinner together and enjoyed an ice cream treat from Chirag. Friends on dinner

    Day 12, Kayaking And Say Good Bye To Friends The next day, Pavit and Abraham had a flight back to India, so Chirag and I went to Komani Lake. We had an adventurous time kayaking, even though neither of us knew how to swim. We took a ferry through the backwaters to the island on Komani Lake and enjoyed a fantastic adventure together. After our trip, Chirag returned to Tirana for his flight back to India, leaving me to continue my journey alone. Lake with mountain Kayak

    Day 13, Climbing Rozafa Castel By stopping at Shkod r, I visited Rozafa Castle. Despite the language barrier, as most locals only spoke Albanian, people around me guided me correctly on how to get there. At times, I used applications like Google Translate to communicate. To read signs or hotel menus, I used Google Photos' language converter. I even used the audio converter to understand and speak some basic Albanian phrases. View from top of Castel Rozafa castel I took a bus from Shkod r to the southern part of Albania, heading to Sarand . The journey lasted about five to six hours, and I had booked a stay at Mona s Hostel. Upon arrival, I met Eliza from America, and we went together to Ksamil Beach, spending a wonderful day there.

    Day 14, Vlora Beach: Beach Side Cycling Next, I traveled to Vlor , where I stayed for one day. During my time there, I enjoyed beach side cycling with a cycle provided by the hostel owner and spent some time feeding fish. I also met a fellow traveler from Delhi who had brought along some preserved Indian curry. He kindly shared it with me, which was a welcome change after nearly 15 days without authentic Indian cuisine, except for what I had cooked myself in various hostels. Sunset on BeachKalyani on Beach Beach with streetBeach side cycling

    Day 15-16 Visiting Durress, Travelling Back To Tirana I then visited Durr s, exploring its beautiful beaches, before heading back to Tirana one day before my flight home. On the day of my flight, my alarm didn t go off, and I woke up late at the hostel. In a frantic rush, I packed everything in just five minutes and dashed toward the city center to catch the bus to the airport. If I had been just five minutes later, I would have missed the bus. Thankfully, I managed to stop it just in time and began my journey back home, reflecting on the incredible adventure I had experienced. Fortunately, I wasn t late; I arrived at the airport just in time. After clearing immigration, I boarded my flight, which had a layover in Warsaw, Poland. The journey from Tirana to Warsaw took about two and a half hours, followed by a seven to eight-hour flight from Poland back to India. Once I arrived in Delhi, I returned to Zostel and booked a train ticket to Aurangabad for the next three days.

    Backview This trip was an incredible adventure for me. I never imagined I could accomplish something like this, but I did. Meeting diverse people, experiencing different cultures, and learning so much made this journey truly unforgettable. Looking back, I realize how much I ve grown from this experience. Although I may have more opportunities to travel abroad in the future, this trip will always hold a special place in my heart. The memories I made and the incredible people I met along the way are irreplaceable. This experience goes beyond what I can express through this blog or words; it was incredibly precious to me. Every moment of this journey is etched in my memory, and I am grateful for every part of it.

    4 August 2024

    Scarlett Gately Moore: KDE, Kubuntu, Debian: Weekly progress report Qt6 updates.

    Thankfully no tragedies to report this week! I thank each and everyone of you that has donated to my car fund. I still have a ways to go and could use some more help so that we can go to the funeral. https://gofund.me/033eb25d I am between contracts and work packages, so all of my work is currently for free. Thanks for your consideration. Another very busy week getting qt6 updates in Debian, Kubuntu, and KDE snaps. Kubuntu: Debian: KDE Snaps: Updated QT to 6.7.2 which required a rebuild of all our snaps. Also found an issue with mismatched ffmpeg libraries, we have to bundle them for now until versioning issues are resolved. Made new theme snaps for KDE breeze: gtk-theme-breeze, icon-theme-breeze so if you use the plasma theme breeze please install these and run
    for PLUG in $(snap connections   grep gtk-common-themes:icon-themes   awk ' print $2 '); do sudo snap connect $ PLUG  icon-theme-breeze:icon-themes; done
    for PLUG in $(snap connections   grep gtk-common-themes:gtk-3-themes   awk ' print $2 '); do sudo snap connect $ PLUG  gtk-theme-breeze:gtk-3-themes; done
    for PLUG in $(snap connections   grep gtk-common-themes:gtk-2-themes   awk ' print $2 '); do sudo snap connect $ PLUG  gtk-theme-breeze:gtk-2-themes; done
    This should resolve most theming issues. We are still waiting for kdeglobals to be merged in snapd to fix colorscheme issues, it is set for next release. I am still working on qt6 themes and working out how to implement them in snaps as they are more complex than gtk themes with shared libraries and file structures. Please note: Please help test the edge snaps so I can promote them to stable. WIP Snaps or MR s made

    9 July 2024

    Russ Allbery: Review: Raising Steam

    Review: Raising Steam, by Terry Pratchett
    Series: Discworld #40
    Publisher: Anchor Books
    Copyright: 2013
    Printing: October 2014
    ISBN: 0-8041-6920-9
    Format: Trade paperback
    Pages: 365
    Raising Steam is the 40th Discworld novel and the third Moist von Lipwig novel, following Making Money. This is not a good place to start reading the series. Dick Simnel is a tinkerer from a line of tinkerers. He has been obsessed with mastering the power of steam since the age of ten, when his father died in a steam accident. That pursuit took him deeper into mathematics and precision, calculations and experiments, until he built Iron Girder: Discworld's first steam-powered locomotive. His early funding came from some convenient family pirate treasure, but turning his prototype into something more will require significantly more resources. That is how he ends up in the office of Harry King, Ankh-Morpork's sanitation magnate. Simnel's steam locomotive has the potential to solve some obvious logistical problems, such as getting fish from the docks of Quirm to the streets of Ankh-Morpork before it stops being vaguely edible. That's not what makes railways catch fire, however. As soon as Iron Girder is huffing and puffing its way around King's compound, it becomes the most popular attraction in the city. People stand in line for hours to ride it over and over again for reasons that they cannot entirely explain. There is something wild and uncontrollable going on. Vetinari is not sure he likes wild and uncontrollable, but he knows the lap into which such problems can be dumped: Moist von Lipwig, who is already getting bored with being a figurehead for the city's banking system. The setup for Raising Steam reminds me more of Moving Pictures than the other Moist von Lipwig novels. Simnel himself is a relentlessly practical engineer, but the trains themselves have tapped some sort of primal magic. Unlike Moving Pictures, Pratchett doesn't provide an explicit fantasy explanation involving intruding powers from another world. It might have been a more interesting book if he had. Instead, this book expects the reader to believe there is something inherently appealing and fascinating about trains, without providing much logic or underlying justification. I think some readers will be willing to go along with this, and others (myself included) will be left wishing the story had more world-building and fewer exclamation points. That's not the real problem with this book, though. Sadly, its true downfall is that Pratchett's writing ability had almost completely collapsed by the time he wrote it. As mentioned in my review of Snuff, we're now well into the period where Pratchett was suffering the effects of early-onset Alzheimer's. In that book, his health issues mostly affected the dialogue near the end of the novel. In this book, published two years later, it's pervasive and much worse. Here's a typical passage from early in the book:
    It is said that a soft answer turneth away wrath, but this assertion has a lot to do with hope and was now turning out to be patently inaccurate, since even a well-spoken and thoughtful soft answer could actually drive the wrong kind of person into a state of fury if wrath was what they had in mind, and that was the state the elderly dwarf was now enjoying.
    One of the best things about Discworld is Pratchett's ability to drop unexpected bits of wisdom in a sentence or two, or twist a verbal knife in an unexpected and surprising direction. Raising Steam still shows flashes of that ability, but it's buried in run-on sentences, drowned in cliches and repetition, and often left behind as the containing sentence meanders off into the weeds and sputters to a confused halt. The idea is still there; the delivery, sadly, is not. This is the first Discworld novel that I found mentally taxing to read. Sentences are often so overpacked that they require real effort to untangle, and the untangled meaning rarely feels worth the effort. The individual voice of the characters is almost gone. Vetinari's monologues, rather than being a rare event with dangerous layers, are frequent, rambling, and indecisive, often sounding like an entirely different character than the Vetinari we know. The constant repetition of the name any given character is speaking to was impossible for me to ignore. And the momentum of the story feels wrong; rather than constructing the events of the story in a way that sweeps the reader along, it felt like Pratchett was constantly pushing, trying to convince the reader that trains were the most exciting thing to ever happen to Discworld. The bones of a good story are here, including further development of dwarf politics from The Fifth Elephant and Thud! and the further fallout of the events of Snuff. There are also glimmers of Pratchett's typically sharp observations and turns of phrase that could have been unearthed and polished. But at the very least this book needed way more editing and a lot of rewriting. I suspect it could have dropped thirty pages just by tightening the dialogue and removing some of the repetition. I'm afraid I did not enjoy this. I am a bit of a hard sell for the magic fascination of trains I love trains, but my model railroad days are behind me and I'm now more interested in them as part of urban transportation policy. Previous Discworld books on technology and social systems did more of the work of drawing the reader in, providing character hooks and additional complexity, and building a firmer foundation than "trains are awesome." The main problem, though, was the quality of the writing, particularly when compared to the previous novels with the same characters. I dragged myself through this book out of a sense of completionism and obligation, and was relieved when I finished it. This is the first Discworld novel that I don't recommend. I think the only reason to read it is if you want to have read all of Discworld. Otherwise, consider stopping with Snuff and letting it be the send-off for the Ankh-Morpork characters. Followed by The Shepherd's Crown, a Tiffany Aching story and the last Discworld novel. Rating: 3 out of 10

    8 July 2024

    Thorsten Alteholz: My Debian Activities in June 2024

    FTP master This month I accepted 270 and rejected 23 packages. The overall number of packages that got accepted was 279.

    Debian LTS This was my hundred-twentieth month that I did some work for the Debian LTS initiative, started by Raphael Hertzog at Freexian. During my allocated time I uploaded or worked on: This month handling of the CVE of cups was a bit messy. After lifting the embargo of the CVE, a published patch did not work with all possible combinations of the configuration. In other words, in cases of having only one local domain socket configured, the cupsd did not start and failed with a strange error. Anyway, upstream published a new set of patches, which made cups work again. Unfortunately this happended just before the latest point release for Bullseye and Bookworm, so that the new packages did not make it into the release, but stopped in the corresponding p-u-queues: stable-p-u and old-p-u. I also continued to work on tiff and last but not least did a week of FD and attended the monthly LTS/ELTS meeting. Debian ELTS This month was the seventy-first ELTS month. During my allocated time I tried to upload a new version of cups for Jessie and Stretch. Unfortunately this was stopped due to an autopkgtest error, which I could not reproduce yet. I also wanted to finally upload a fixed version of exim4. Unfortunately this was stopped due to lots of CI-jobs for Buster. Updates for Buster are now also availble from ELTS, so some stuff had to prepared before the actual switch end of June. Additionally everything was delayed due to a crash of the CI worker. All in all this month was rather ill-fated. At least the exim4 upload will happen/already happened in July. I also continued to work on an update for libvirt, did a week of FD and attended the LTS/ELTS meeting. Debian Printing This month I uploaded new upstream or bugfix versions of: This work is generously funded by Freexian! Debian Astro This month I uploaded a new upstream or bugfix version of: All of those uploads are somehow related to /usr-move. Debian IoT This month I uploaded new upstream or bugfix versions of: Debian Mobcom The following packages have been prepared by the GSoC student Nathan: misc This month I uploaded new upstream or bugfix versions of: Here as well all uploads are somehow related to /usr-move

    2 July 2024

    Colin Watson: Free software activity in June 2024

    My Debian contributions this month were all sponsored by Freexian. You can support my work directly via Liberapay.

    Next.