GTALUG Q&A Topics for October 2020

1.1 AGM: Chris’ Financial Report

1.2 AGM Candidates for Board

  • Note: 2 slots for 2 years + 1 slot for 1 year
  • Two incumbents finishing terms:
    • Chris Browne
    • Alex Volkov
  • Also, Stewart Russell has “thrown his hat in the ring”
  • Chris thought that he had email from another would-be candidate, but couldn’t find the email 🙁

1.2.1 Candidates Found:

  • Alex Volkov
  • Chris Browne
  • Stewart Russell

There being 3 slots, and 3 candidates, no vote turns out to be necessary for this.

1.3 PostgreSQL

1.4 Pi Stuff

  • Review of Gempro Pi4 Enclosure It’s made out of a whole lot of aluminium, so the whole case is a giant heatsink, and is apparently interestingly effective.
  • US vendors (Amazon, Newegg) carry it for about $30 USD

1.5 NVFS – Non Volatile Filesystem

nvfs Internals NOVA filesystem NOVA (NVSL) on GitHub

  • No particular discussion fell from this…

1.6 Game of Trees

OpenBSD Game of Trees

  • Uses Git repositories to store versioned data
  • Can use Git to perform functionality not (yet) in Got
  • Intended to be simpler than Git to fit with OpenBSD’s desire to have auditable components
  • Note that FreeBSD is moving from Subversion to Git, and has added Got to their set of packages

1.7 Apple Swift increasingly open source

Swift System is an interface for system calls and low level currency types, now adding Linux support. This means that accesses can have type safety, unlike C interfaces

Swift Playgrounds
An introduction to programming intended for children to teach about iteration and such

1.8 Hello Darling

darlinghq.org, darling @ Github Darling is a translation layer that lets you run macOS software on Linux. At present, it won’t quite so much run GUI applications, though… It’s thus not so much a way to run Photoshop on Linux, and more like a way of running server-ish apps. Maybe it’s a place to host the Swift apps?

1.9 Word Lists

SCOWL – wordlist.aspell.net

  • SCOWL (Spell Checker Oriented Word Lists) might be useful to “spice up” your /usr/share/dict word lists.
  • You can construct your own word lists, based on parameters:
    SCOWL Size
    Indicates the portion of the language covered. The balancing act is interesting; make the dictionary larger, and risk false-negatives, that is, typos being mistaken for extremely uncommon words.
    Dialect Choices
    USian, Canadian, 2 British variants, Aussie
    (no term)
    Spelling variant inclusions
    (no term)
    Handling of diacritics
    (no term)
    Special lists
    • Hacker words
    • Roman numerals
  • Lots of vigorous opinions!

1.10 A fun technical interview

Rewriting the Technical Interview

  • I find it really fun that the writer designed, in-interview, a compiler specifically to parse (and rewrite) a (somewhat awful) program that was pulled off of (I assume) StackOverflow.
  • Note that it’s from a series; each focuses on taking a different, um, “abuse” of programming techniques taking things well beyond any expected limits
    • Reversing the technical interview
    • Hexing the technical interview
    • Typing the technical interview
    • Rewriting the technical interview
  • No particular discussion fell from this…

1.11 Interactive Fiction Competition

ifcomp.org – An annual celebration of new, text-driven digital games and stories from independent creators. In its 26th year!

  • No particular discussion fell from this…

1.12 Object Storage Protocol: POSIX’s death imminent?

New Object Storage Protocol Could Mean the End for POSIX

  • Object storage now has an mmap function mmap_obj() similar to POSIX. That means the processing and scalability limitations of POSIX become the new bottleneck.
  • Of course, perhaps this is tilting at a windmill…
  • No particular discussion fell from this…

1.13 OnlyOffice

  • multiplatform distributed “office software”
  • AGPL licensed
  • No particular discussion fell from this…

1.14 Snek

  • https://github.com/keith-packard/snek
  • By Keith Packard of X11 fame
  • Microscopic Python-like language
  • Can run on tiny, tiny hardware
  • Apparently Lego is adopting it
  • Is this a pure interpreter? Or does it push bytecode or machine code to the runtime environment? see also: https://circuitpython.org/
    • Looks like it pushes the textual code to the runtime environment

1.15 ICANN

GTALUG September 8, 2020 Meeting Notes

1 GTALUG Q&A Suggested topics for September

1.1 AGM Preparations

Hear ye! Hear ye! This is a Call for Candidates for the GTALUG Board.

October 13th is GTALUG’s Annual General Meeting, our tiny piece of “political pageantry.”

There are two seats opening, for 2 year terms (2020-2022).

Please consider running for the board, and keep in mind the following.

There are two formal qualifications that candidates need to satisfy:

  • Must be a GTALUG member in good standing
  • Must not have any undischarged bankruptcy

It is also important to be able to be available most months for Board/Operations meetings where we plan GTALUG meetings and activities. These meetings normally take place on the Monday evening following the regular Tuesday meeting. These days, this takes place on-line, using Jitsi.

This is not an extraordinarily huge burden, but it does mean that there are 48 meetings (counting both “second Tuesday” and “the following Monday”) where we hope to see you, and we hope to see you most of the time.

Board members are involved in and support the following activities.

  • Finding speakers for our monthly presentations
  • Operating our internet infrastructure (website and mailing lists)
  • Organizing and running our annual Linux in the Park picnic (in less pandemic-stricken times)
  • Our involvement as a member organization of ICANN

If you are interested, we’d appreciate it very much if you can submit your intention to run to the email address: board at gtalug.org

The incumbents whose previous terms are expiring are:

  • Chris Browne
  • Alex Volkov

Potential Candidates are welcome to announce their intention all the way up to the day of the AGM itself.

1.2 GTALUG Membership In These COVID-19 Times

In most years, membership has been handled via comparatively informal in-person processes, and those that wish to support GTALUG via membership would (broadly) follow the following steps:

  • Grab a membership form (that Chris passed out)
  • Try to pass Chris a $20 bill, whereupon Chris would say “give it to me along with the filled-in form”
  • Fill in the form, and hand it to Chris along with payment
  • Chris returns a few minutes later with a membership card

As GTALUG is meeting virtually, these days, this process cannot occur as described.

For those wishing to support GTALUG via membership, two routes are suggested:

The Cheque is In The Mail
Send a payment via Canada Post.
Interac eTransfer
Send funds from your bank to ours

To ensure that membership has been addressed for voting at the 2020 AGM on October 13th, it is imperative to handle this earlier than that, as mail can take several days for delivery. Alas, either way, this imposes more bureaucracy and some more cost than we have been accustomed to.

Payment via check using Canada Post

In this case, please send a cheque, made out to “GTALUG”, in the amount of $20, along with the identification information indicated below, and please send to the following address:

GTALUG 914-10 Carabob Court Toronto, ON M1T 3N5

Interac eTransfer
In this case, three pieces of information are critical, and must be shared both with your bank as well as with GTALUG.
Recipient
The recipient email address is membership@gtalug.org
Security Question
The content of this is not too important; “Random Value” or “Sooper Sekrut Data” are fine values.
Security Answer
It is suggested that a random value be used. For instance, 215db45eb7f54e1e5907de3b50ac50ee is a value I got from passing 1K of data from /dev/random through md5sum, and that is a decent mechanism to get a relatively unguessable password. (Of course, since many people have seen that specific value, 215db45eb7f54e1e5907de3b50ac50ee, it would not be a good choice.) This security answer also needs to be emailed to the membership@gtalug.org address in order for us to receive the payment.
Common information
Whichever of the above mechanisms is used for payment, please email the following membership information to membership@gtalug.org. Note that by longstanding policy, we do not pass your information on to outside organizations.
Name
Your preferred name
Email
Your preferred email address (if using Interac eTransfer, it’s best to use the same address, so we know which email address to associate each security answer with)
Address
If you are comfortable providing such
Security Answer
If eTransfer is used, we need the Security Answer in order to actually receive funds

1.2.1 Generating a random value, the Linux way

Here is a script that repeatedly takes 1K of random data from /dev/random, and turns it into an md5 checksum to ensure that the value is human readable and not too long.

for i in 1 2 3 4 5; do dd if=/dev/random bs=1k count=2 status=none | md5sum; done
215db45eb7f54e1e5907de3b50ac50ee  -
4f8f0e3a2944c857ebc3a7a776659134  -
1a52010a29ef3b2446d532ba389f65cb  -
84e6b072e2661fc88b3a7b1ed1ce5873  -
ef3f10a8b634760691e2ae53a0952707  -

1.3 Debconf 2020 was last week

  • anyone make it to parts of that?
  • DebConf 2020 Talks
  • 1.4 Mozilla let some people go 🙁

  • anyone know the impact?
  • appeared to include the folk that had been redoing the browser in Rust (Servo)
  • risk of there being less diversity in the web browser marketplace
  • 1.5 Sharpening your tools: Editors

    Vim – Sharpening the Axe

    This talk/presentation speaks about how it is important to update your editor configuration on an ongoing basis, due to several things:

    • Make the editor serve you better by supporting your individual needs
    • Learn more features, over time, which feeds into the above…
    • Editor functionality is enhanced over time, and making use of those enhancements requires new configuration
    • What tools do you NEED to sharpen?
    • What new tools do you need to create from scratch?

    1.6 Upcoming Conferences

    VimConf 2020
    Apparently was to be held in Japan, but cancelled, for the obvious reasons
    EmacsConf 2020
    Being held November 28/29, on-line
    • Call for Proposals is active now, until September 30

    1.7 Everything rewritten in Rust

    Shell Commands Redone in Rust

    bat
    like cat
    exa
    like ls
    fd
    like find
    procs
    like ps
    sd
    like sed
    dust
    like du
    starship
    custom shell prompt
    ripgrep
    like grep
    tokei
    calculates statistics about a directory full of code
    hyperfine
    benchmarking wrapper
    ytop
    like top
    teeldir
    like tldr, displaying simplified man pages
    bandwhich
    displays network utilization
    grex
    generates a regex that matches test cases
    rmesg
    like dmesg
    zoxide
    autojumper, to replace cd
    nushell
    a shell with pipeline editing ala awk/SQL

    1.8 SSH Honeypot Credentials Analysis

    Lessons Learned from SSH Credential Honeypots

    1.8.1 Interesting passwords

    baikal
    a lake in Siberia
    prueba
    Spanish for test
    caonima
    a Mandarin profanity written in Pinyin
    meiyoumima
    Mandarin for “no password”
    woaini
    Mandarin for “I love you”
    poiuyt
    The name for an optical illusion also known as the “devil’s tuning fork” (A prank from Mad Magazine!) Edit: multiple redditors pointed out this is the beginning of the top row of the keyboard from right to left.

    1.9 Just pretty weird…

    Remember Mach? And VMS?
    I’ll bet you don’t remember that someone implemented a VMS multiserver atop Mach…
    (no term)
    BLISS from CMU…
    (no term)
    Microsoft starting to play games with GitHub

    1.10 Modern Linux desktop layers and performance

    • X11 or Wayland
    • DE; Gnome/KDE/XFCE
    • GTK / QT
    • Firefox / Chrome CODECs, DRM
    • can Gnome applications run under XFCE (with what limitations)
    • why is XFCE faster than GNOME / KDE (compositors using 3d operations?)
    • what CODECS should one install? Are they authorized?
    • how is it that Widevine can work on Linux?
    • interesting ArchLinux notes on Firefox

    2 Calls for proposals for LibrePlanet

    3 CAD software

    • Are there any good open-source tools to edit STEP files(CAD)?
    • FreeCAD? Rather complex…
    • GCAD-3D

    3.1 Anything interesting ongoing with RISC-V

    • Hugh had a recent conference
    • RISC-V is a design for an instruction set that is free to use
    • Many implementations ongoing, many “very free”
    • Aspires to a similar place in the “design space” as ARM, which has
      • Some cheap, nonsophisticated designs
      • Or expensive, sophisticated designs
      • Apple’s newest SOC is their own implementation of ARM instruction set
    • RISC-V has a “gold rush” of organizations rushing to stake out claims
      • Open source implementations of RISC-V are often toys, or academic projects
      • Some companies designing performant RISC-V chips
      • Western Digital is now deploying RISC-V chips embedded in their disk drives
      • Some of the implementations are basically like a 32 bit Arduino implementation
      • Lots of “sort of open source” implementations
      • Might be popular with Huawei because they can’t get at next versions of ARM due to US bans
      • RIOS (RISC International Open Source) moved out of the US to Switzerland to avoid US law
        • Collaboration between Shenzen university and Berkeley
        • initial plans involve a RPi-like design that is to be open source, provided by AliBaba
        • Some parts open source (CPU) others possibly not as much (USB)
        • Needed to add some custom instructions to accelerate their work load
        • Interesting to get something including MMU, perhaps even GPU

    GTALUG August 11th Notes

    Table of Contents

    1.1 Keybase Alternatives

    • Keybase has offered secured accesses to various sorts of data
      Key directory
      Associates social media identities to encryption keys
      • Twitter
      • Github
      • Reddit
      • Hacker News
      • Mastodon
      • Cryptocurrency wallet addresses
        • Bitcoin
        • Zcash
        • Stellar
      (no term)
      End-to-end encrypted chat
      • Quite a lot of us are using Telegram and Signal
      • Essentially amounts to encrypted chat; many parts are open source
      • Encrypted instant messaging and VOIP
        • Client is free software
        • Server is proprietary
      KBFS
      Encrypted filesystem
      • Public files
      • Private files
      • An end-to-end encrypted, peer-to-peer file storage, sharing and communication network
      • We used this for GTALUG a bit for exchanging server data across the executive
      Teams
      Encrypted chat, fileshare
      • For just key validation keyoxide, I’ve heard of it, have no experience yet. keyoxide.org
        • decentralized
        • MIT licensed

    1.1.1 Element

    1.1.2 The moderation problem

    1.2 Neat Monitoring observation

    Should put obvious information into monitoring alerts

    • The temperature alert that points to calling building managers should include contact information
    • When you create an alert, think through what those reading the alert will immediately want or need, and note that what is obvious today, when we’re reacting to the outage that caused us to set up the alert, may be less obvious in 18 months when a new sysadmin looks at it
    • Put those needed/wanted things in the alert, possibly as a link, tho in case your Wiki might go down, probably the phone number ought to actually be in the alert.
    • Make sure there aren’t any credentials in the alert text!
    • Motion-sensitive camera that gets activated when the sun comes up through the trees in the morning
      • what is the difference between burglars and squirrels and sunrise
      • hurray, flying burglars!
    • Useful to have some alerts suppress other ones

    1.3 Have you changed your ssh keys lately?

    SSH Keytypes Usage

    • There are new algorithms that are theoretically more secure than the old ones
    • Are you using your keys for too many services?
    • ssh config lets you specify per-host keys

    1.4 Have you labelled the disk drives in your desktop?

    Label Your Desktop Drives

    • Using a Dymo label maker or similar
    • Brother apparently makes much nicer label printers
    • Scott Sullivan was literally just preparing a label to attach to a recently scrubbed hard drive
      • need to know the serial number from the drive in a cheap RAID array
    • Howard pulled out a typewriter!
    • Drew generates a 4 digit number for each drive and keeps those as the “key”, sharpie is good enough
      • For personal use, this supports 9999 drives, which is enough; perhaps 3 digits (999) would suffice
      • For organizational use, a bigger serial number would be needful
    • Business cards attached with packing tape

    1.5 Raspberry Pi 4

    • There have been ongoing discussions about building a “Pi Desktop”
    • Evan suggested a notably better case (but that Scott had already posted!) but that was somewhat expensive
    • Budget was not especially clear
    • Initially, Pi4 was running extremely hot, but with modern software releases, way better/cooler

    1.6 IPv6 versus IPv4

    Interesting essay showing some of the inherent conflicts

    • Once you configure prefixes on the router, often Linux, Windows, MacOS often “just work” these days
    • Mozilla Addon ipvfoo-pmarks shows off IPv6 usage

    1.7 Latest grep reimplementation

    ugrep
    written in C++ 2011
    • can search inside compressed archives (numerous sorts, .jar, .zip, tar, .cpio, and compression such as .gz, .bzip2, .xz, …)
    • can search inside documents (.pdf, .xls, .docx, …)
    (no term)
    sift, written in go, parallelizing: https://sift-tool.org/
    (no term)
    ack, written in Perl, extended to do version control, graphics metadata https://metacpan.org/pod/distribution/ack/ack
    (no term)
    rg, written in Rust
    (no term)
    Full text search on Gnome desktop, locate was an olden days standard service
    • `mlocate` is a more user-friendly version of locate
    (no term)
    Tracker seems neat
    (no term)
    Find is still pretty useful
    (no term)
    FSELECT is a Rust-based command line tool that’s loosely find with SQL-like syntax

    1.8 Pinephone now available

    1.9 LibreOffice 7.0 released recently

    1.10 Perl 7 almost out

    1.11 MathML?

    I am using Octave and LaTeX to do calculations and write reports. Conceivably, I could output to HTML instead, but MathML does not seem to work on all browsers. Is this interesting to anyone?

    GTALUG EtherPad for Meeting of June 9, 2020

    1 GTALUG 2020-06-09

    1.1 Hugh on UEFI for ARM

    Is the raspberry pi sufficiently open so to allow a single distro to be adaptable for multiple different SBCs?

    • Raspbian is often used (forked to “armbian” for other systems)
    • Different devices often need what is termed a “device tree” that is unique to a board or family of related boards
    • Annoying thing about ARM is that many have GPUs, and unfortunately most of the GPUs have issues with NDAs so that it is troublesome to share low level code

    What are your thoughts on using Anaconda in Ubuntu or other Linux distro vs installing all Python packages and using Python virtual environments instead? I’m coming from Windows, so Anaconda was a straight answer, but now that I’m becoming a Linux user, is not that clear that I should use Anaconda, and could better learn to use the Python venv. Just wanted to get some thoughts.

    • pyenv
    • Should we use distribution-managed packages? Or build a virtual environment to pull fresh code?
    • These days, scripting languages have their own dependency systems which makes life difficult for distribution makers.
    • Awesome Alex, thanks for your thorough explanation, I’ll certainly look into pyenv…. my name is Nestor Sanchez btw…

    1.3 Python II – the Sunsetting of version2

    Note that Python 2 is officially sunsetted… https://www.python.org/doc/sunset-python-2/

    Some old Python code still lurks in distributions.

    1.4 Powershell

    Has anyone been playing with Powershell? What sorts of differences are there between that and our favorites?

    • It grew up with Windows so has lots of Windows bits
    • It operates on streams other than Unix “bags of bytes” which can be very different

    1.5 WFH Learning

    • I changed my commute time for walk/run around the neighbourhood time. To keep some routine.
    • Some tendency for longer days because we aren’t consuming any time on commute but maintain broadly similar hours
    • Daily “stand-up” meetings (common in SCRUM methodology) are useful to add a little bit of personal discipline
    • Audio bandwidth limitations are an issue
    • Microphones on laptops that are picking up fans and refrigerators are common problems
    • Microphones intended as speaking headsets provide improvement

    1.6 ROCm

    Any experience among this group with using ROCm for high performance computing?

    1.7 systemd, 10 years later: a historical and technical retrospective

    systemd, 10 years later: a historical and technical retrospective

    • everything needs to be decrudded once in a while

    1.8 JITSI results

    • mixture of opinions, for sure
    • a couple of people fell off the meeting, so not impressed
    • several reporting that sound is quite good
    • user interface is quite comparable to Google Meet and Zoom
    • Can use custom backgrounds similar to what are commonly done on Zoom

    1.8.1 Custom backgrounds for videoconferencing

    Get a green board to go behind, and then compile a virtual camera Using OBS Studio for Google Hangouts/Meet

    • implements a virtual camera that allows putting arbitrary backgrounds behind you
    • GitHub: CatxFish/obs-v4l2sink
    • I made a green screen for chroma key out of 4 pieces of green bristol board from Dollarama.
    • This can work with Jitsi, Zoom, Google Meet

    1.9 Upcoming events

    nnn – a terminal-based file manager

    nnn, findable at https://github.com/jarun/nnn, is a terminal-based file manager written in Go, which claims high performance and has a pretty flexible set of functionalities including:

    • Can spawn your favorite $VISUAL $EDITOR to edit files
    • Bookmarks (haven’t used)
    • Fuzzy searching for files
    • Pin frequently used files/directories
    • Mount and manage archives
    • Lots of plugins https://github.com/jarun/nnn/tree/master/plugins to extend its behaviour

    I have, several times, scheduled tasks (taskwarrior!) to poke some more at nnn. It seems inevitable to not go anywhere.

    Why that is finally occurred to me; the reason is that my workflow that would be most relevant to this takes place inside emacs, in the Dired mode.

    There are some neat things in nnn, notably the fuzzy searching, which would lend itself to somewhat more nondeterministic searches for Files Of Interest. However, the learning curve of switching to a dramatically different tool is not to my taste.

    If you’re one of the vi crowd, this may be to your taste; it seems interesting. (I was tempted enough to keep it lurking in my task list for a couple months.)

    My saga with tmux

    I have been a longstanding user of GNU screen, a terminal multiplexor, which is loosely a terminal-oriented equivalent to an X window manager. For a fair number of years now, I have been using tmux instead; it was written more recently, starting from scratch, with BSD license, and so is somewhat smaller, perhaps faster, and leaves behind features that weren’t of much interest.

    What I do with this

    I commonly set up tmux sessions when I first log onto a system, and set up some sub-terminals tied to useful tasks such as:

    • Command sessions – I’ll always have some terminals ready to run commands
    • Log tails – if I am debugging something, I will set up a tail -f command in a virtual terminal to watch the logs, so that I may quickly switch to that terminal and see what has recently happened
    • ssh sessions for command sessions running on remote hosts (on my laptop, these will be mosh sessions
    • kubernetes sessions – command sessions where the CLI environment is set up for one k8s environment or another

    Further tools

    The awesome-tmux Github site has a whole lot of useful links to “meta-tools” for use with tmux, various of which I have found useful:

    • tmuxinator allows setting up a whole tmux session complete with numerous virtual terminals connected to commands and environments
    • gitmux puts git status information into the tmux status bar, which is nicer than putting it (as I have done with zsh) onto the start or end of the command line
    • tmux-continuum will automatically save the state of a tmux session environment so that a complex environment may be automatically recreated. This is pretty cool as a “perhaps better than tmuxinator” thing; with tmuxinator, it’s easy to restart, but you need to add environment configuration manually to tmuxinator configuration, whereas continuum picks that up automatically. There are definitely advantages and disadvantages in both directions; tmuxinator will tend to have a “cleaner” environment, but you need to do more work to get that cleanliness.

    Also playing with 3mux

    3mux was inspired by tmux and by the i3 window manager; it makes more natural use of the mouse, has a claimed-more-sane set of keybindings, and claims a shorter learning curve.

    I have played with it a bit; in view that I had gotten through the GNU Screen learning curve many years ago, that’s not so much something I’d account as good, and the differences have proven demerits to me. Also note that there’s lots of third party projects improving on tmux that don’t naturally automatically apply to 3mux.

    Other References

    I did a talk in 2015 on Screen, Tmux, Byobu, the Secret Terminal Brains!!!

    See also my web page on GNU screen, which has further links about tmux and related tools.

    lm – list manual pages

    I have wanted this for… probably half of my life?

    lm (see https://woozle.org/papers/plan9.html) apparently existed in Plan 9 many years ago; it wraps apropos (and is similar to man -k) so that instead of just listing names and sections of manual pages, it sets up the line to have the man section whatever command at the start of the line, so that the gentle user may copy and paste this to a command line, because that’s almost certainly what the gentle user intends to do next.

    I reimplemented it as a zsh function, because, well, why not?

    (|N/A:default)cbbrowne@cbbrowne2 /tmp> lm ()
    {
      apropos -l "$@" | sed 's/(.) ((.)) * - /man \2 \1 # /'
    }

    So, how does this work?

    (|N/A:default)cbbrowne@cbbrowne2 /> lm dockerfile
    man 1 docker-build # Build an image from a Dockerfile
    man 1 docker-builder-build # Build an image from a Dockerfile
    man 1 docker-image-build # Build an image from a Dockerfile
    man 5 Dockerfile # automate the steps of creating a Docker image
    (|N/A:default)cbbrowne@cbbrowne2 />

    Awesome, no?

    fasd – a smarter cd

    Once upon a time I used to use https://github.com/wting/autojump as a way for my systems to help me quickly navigate to my favorite Directories Of Interest. Basically, it did (and similar tools also do) the following:

    • cd is instrumented to capture directory locations each time one visits a new directory, and store them in a wee sort of database
    • an alternative “cd” command is introduced that attempts to Do What I Mean. It takes the input, and sees what stored directory best matches, with a bias towards frequently used directories

    autojump was written in Python, which is no grand problem; I did some poking around, and discovered a newer tool, https://github.com/clvv/fasd, which has similar capabilities, perhaps more, and has a slightly smaller footprint, being implemented in “POSIX shell,” so it can happily run on common shells such as Bash (and my fave) zsh.

    So far, I have just been using the “zz” functionality that picks the seemingly-most-relevant directory. It does a fine job of this.

    It is doubtless a good idea to poke some more at this; running “fasd a b c” searches recent directories for highest-relevance files containing “a” “b” and “c”, fairly successfully. Throwing multiple strings pulls up an interesting list:

    cbbrowne@karush ~> fasd tmux conf
    1 /home/cbbrowne/.tmux.conf
    12 /home/cbbrowne/GitConfig/InitFiles/tmux/tmux-home.conf

    Without much effort, this locates tmux configuration files; that’s looking pretty attractive…

    Warring with My Tasks

    The local LUG had a talk recently about Task Warrior, which inspired me to give the tool a poke.

    I have had excessively fragmentary handlings of outstanding ToDo items, where I have assortedly used:

    • Index cards to note things, but this is really ephemeral; I tend to turf them quickly, and only the most immediate things would get captured here, and evaporate as quickly. These can get clever; I didn’t get enough into that, I’m not hipster enough for that!
    • For a while (and this has gotten to be pretty distant in the past) I used todo.txt to capture things to do. Unfortunately, there’s not much of a synchronization mechanism, so I at one point ran the iOS app on my (still around somewhere) iPod Touch, later on Android phones, with occasional copying onto Unix desktop. But because coordinating versions amounted to doing by-hand git patching, this was way less useful than wanted.
    • For quite some time, I used Org Mode files for my grocery list, syncing between desktop and mobile devices using SyncThing. This was decently viable, actually, allowing me to manage the document on desktop (with a lovely big keyboard and big screen for mass editing) and on mobile device (so the list is handy to mark off purchases). Once in a while, I would push completed items into a side file for posterity. I also copy this data to a Git repository (for arguably “more posterity”); it is not as automated as it ought to be, trying to automate Git checkins was more troublesome than it ought to be.

    But in November, at the above mentioned talk, I installed Task Warrior on my phone and decided to give it a try. FYI, I run it in a Termux session on my phone. There do exist a couple of TaskWarrior apps, but I have not yet been able to get them to sync to my taskd server. I am happy enough with the Termux-based CLI access. Perhaps I should set up a web server as an alternative interface? We’ll see…

    Overall Configuration

    I have the app (apt-get install taskwarrior) installed on a variety of hosts:

    • Work desktop, which syncs against central taskd
    • Chromebook laptop, syncs against central taskd
    • Home server Karush, which hosts taskd and has client syncing against taskd
    • OnePlus 5 (Android phone), where termux hosts the app, syncing against taskd

    I installed taskd on a server at home. This was a bit of a pain in the neck; setting up users and certificates is fairly fiddly as also is setup of each client. It took a few tries to get it all working, and I went through a couple of user UUIDs before I was done. It comes with a systemd unit file; I have not thus far had that work, so I have to browse through history (boo, hiss!) to find the right command to restart it properly upon system reboot it took some effort to get that working properly.

    One interesting thing I noticed; when syncing got “deranged” and I wound up on a new user UUID, I found that, in order to get things unstuck, I had to edit ~/.task/backlog.data. Note that this file contains the UUID of the user that it intends to sync against. (I’m not 100% sure; this may be the “local” idea of the UUID of the user…) The removal of the UUID at the top of that file led to the local instance of task generating a new UUID and proceeding.

    Usage

    I basically started out by tossing in all sorts of tasks that popped up, without too much intentionality, just making sure that knowledge about upcoming Things To Do got captured. I wasn’t sure what projects or tags to use; it is out of seeing a bunch of tasks that need to be classified that the patterns will emerge. I am basically just 3 months into this, so while some patterns have emerged, there are plenty more to come.

    • It turns out that tagging with +home and +work is mighty useful, for the simple reason that it allows en-masse deferral of tasks. At the end of the work day, I find it handy to simply defer items to another day thus:
      task +work status:pending wait:tomorrow
      It would probably be valuable to defer things further, so that my list of things to do immediately does not get randomly cluttered.
    • COVID-19 has changed the above a bit; work from home means that the separation is entirely less obvious
    • I have been adding in lots of periodic tasks as they pop up:
      • Paperwork tasks such as filing copies of pay stubs, bank statements, tax documents, and bills of importance
      • Preparations for annual events
      • Reminders for mailing list moderation
    • Some projects have been emerging, but not quickly or well. It is easier to think about adding tags, and occasionally a tag emerges as being important enough to call it a project.
    • I am (still!) not using dependencies nearly much as I probably ought to.
    • As “wishful thinking,” I’d like it if I could have grocery items dependent on a “go to grocery store” task, and have the children pop up as current the moment I arrive at the store and mark that first task done. That also means I’d like it if the children were being “masked” as not ready to proceed (ergo not listed) until I get there.
      • In reviewing Tomas’ presentation, I found A Better Way to deal with this, which is to use contexts. If my grocery items all have +metro as the locational tag (my nearby grocery store is called Metro), then I can define the relevant context:
        task context define metro +metro
        then
        task context metro
        More inclusions and exclusions could be done; in any case, it is clearly useful to use some contexts so when in a particular place, the set of tasks are restricted to those of relevance.
    • Projects (indicated by adding project:taxes.2019 or project:bugzilla.20721 or project:website) are evidently more useful than I had thought, once I start using the dotted notation to allow hierarchical subprojects. They had appeared to be way less useful than labels, but hierarchy changes that. Both are good things (in moderation!) and are good used together.

    Future Items

    • Another few months of patterns hopefully leads me to get a bit smarter about how I’m using this, particularly with regards to deferring items I can’t do immediately.
    • I need to get the “sorta graphical” Android client working; need to fight with the configuration to get that working.
      Update 2020-05-07, I finally found documentation that helped me on this… https://www.swalladge.net/archives/2018/03/17/taskwarrior-taskserver-syncing-tutorial/ had the crucial aspect that I needed to copy a trio of .pem files (certificate data for my user and for my taskd server) into /Internal Storage/Android/data/kvj.taskw/files/one-of-the-subdirectories
    • I find, regrettably, that I don’t very much like the Android client
    • There are some interesting analytical reports such as task burndown to get some longer term patterns out of it. For that to provide value requires more data collection.
    • I imagine I should be automating some task management, such as having things like the following:
      • TaskWarrior should draw a feed of tasks from bug reports. There’s an extension to pull from Github
      • We’re apparently getting into Scrum work; it would be neat to pull Jira tasks into TaskWarrior automatically
    • There’s an Emacs mode; wait, wait, that’s actually comparatively complete, despite being exceeding brief. It works, and is already useful.
      It probably would be worth extending this to allow operations other than ‘a’ (to add a task) and ‘g’ (to refresh the list), to have a set of interactions one might perform on visible items. The Kubernetes interaction mode for Emacs has some relevant examples.
    • I’m told hooks are interesting, and certainly grasp the broad concept from the way that Emacs uses hooks really really a lot…
      At first glance, it seems less interesting than I had expected…
      • One use case is to automatically commit changes to Git; that is broadly interesting, but I think I can live with that taking place pretty periodically rather than continuously. Especially in that I switch clients a lot, so that keeping consistency would require a lot of Git synchronization.
      • Another usage is to rewrite tasks.
        An interesting example was to change notations, so @projectname would be used to specify project, which is shorter than project:projectname. As above, this needs to run “everywhere” which seems less than convenient. (Again, needs Git repo synchronization, this time for the repo containing the hooks.)

    Conclusions

    I have been happy enough with my experiences with TaskWarrior, and will be continuing to use it. There are clearly plenty of features I am not using yet, some of which may make sense to poke at further.

    A wee jot about Mosh

    I have been using Mosh for quite a number of years now; it is a notionally “mobile” shell that nicely supports devices with intermittent connectivity. On occasion, I have used it as an alternative protocol to ssh when using my laptops/tablets/phones to connect to shell sessions.

    Its main merits (to me) are that:

    • Sessions can survive even fairly long connectivity outages. The more I use tmux to manage sessions on servers, the less that matters, but it is still a useful convenience particularly with connections from my phone.
    • Rather than replaying every keystroke (or every receipt of a character of a log file /bin/cat’ed to stdout), it maintains the state of the screen, so it can refresh the screen, skipping over long-irrelevant output, which is an extraordinary network performance improvement if one is browsing server logs…

    Curiously, every so often, and this is why I thought to blog about this, I periodically still get forwarded notifications that people continue to report on issue #98 which I helpt report on back in 2012. I was a bit nonplussed this week to notice another update to this that indicates that people are continue to use (or at least reference) my circa-2012 workaround to issues getting Mosh to connect across systems with slightly differing ideas of UTF-8. I suppose I should be proud that my workaround (which is to explicitly pass LANG and LC_ALL values to mosh client and server programs) continues to seem a relevant solution. I have shell scripts lurking around that are almost 8 years old for doing mosh connections in my local environments that use this. I am, however, a wee bit disappointed that nearly 8 years of further development hasn’t made it unnecessary to tweak these environment aspects.

    It is a somewhat happy thing that Mosh’s code base is stable enough (and I note it’s included in numerous Linux and BSD distributions, as well as having support in Android apps such as JuiceSSH) that it is, of late, seeing new commits only every few months.