Organising Practicalli boards
The week started with a Bank Holiday Monday and I was still sleepy after the 100km ride on Sunday. As I was too low on energy for Practialli work, I did lots of chores instead. I had more energy later in the week.
I received a puncture on the Sunday ride which was the first in about 5 years. It was relatively quick to change even though it was rear tire. I brought the punctured inner tube back home and repaired it with a patch.
Examining the rear tire it had quite a lot of damage, several significant holes and the surface was starting to bubble slightly. Although it has some life left it is time to swap it over for a new(ish) tire, a Continential Duraskin that I have had for quite a while but looks like new. It should be very durable and hopefully puncture free for another 5 years.
I will use the worn tire for the indoor trainer machine.
A search showed me how to correctly create Markdown comments which are supported by todo comments. The todo comments help me track work that needs to be done within markdown files.
Started watching Star Wars The Bad Bad animated series from scratch as I hadn't seen it for a while and I hadn't seen season 3 at all yet. Season 3 is the final one for this show. I really like this show as it has some interesting characters and stories. The storyline starts where Star Wars The Clone Wars animated series finishes, from the issue of Oder 66 that brings the Jedi order to an end.
My Bose Quiet Comfort earbuds died last week. The left earbud is now flashing red and white which means it cant connect the right eadbud (the main controller). I've tried rebooting it several times but without success.
Bose support will offer me a small discount (189.99 instead of 219.99 on Amazon) on the Bose Quiet Elite earbuds if I send my faulty earbuds back. However this apparently takes about a month to confirm I've sent the faulty earbuds back before Bose would send the new earbuds. Not a nice experience having to wait that long.
I do have some smaller Bose earbuds that work pretty well. I may shop around and probably try the Sony earbuds next time to see if they last longer.
Practicalliλ︎
Reviewing Practicalli Classic Kanban board tickets to see which are still relevant and which tickets should be transferred to the Practicialli Kanban board to be worked on for 2025.
Reviewed Spacemacs books for content remaining to convert over to the MkDocs syntax. Also updating screenshots as required.
Added a Writing Documentation section to Practicalli Neovim. Included basic markdown syntax, LSP tooling support via Marksman and support for TODO-Comments.
Neovimλ︎
Learning some more folke/snacks keymaps to work with picker results. All these keymaps work in normal and insert mode.
C-m
to maximise the picker window to see more of the results
C-p
to toggle the preview on and off (if only the list of results is needed)
C-f
and C-b
to scroll the preview text forward and backward
C-d
and C-u
to scroll the results list down and up
M-w
to cycle through the window panes of the picker
C-q
opens the results in the quickfix buffer, e.g. if showing lsp diagnostics for a project, the quickfix buffer can be used to jump between each item to fix those issues.
C-s
edit current selection in a split
C-v
edit current selection in a vertical split
C-t
edit current selection in a tab page
Keep picker open and move to its own split, a convenient way to see more of the file rather than just the preview.
C-w H
or C-w H
move picker left or right, like a file explorer
C-w J
or C-w K
move picker to bottom or top
Selecting items in the results
Tab or Shift+Tab toggle item selection, moving to the next or previous item.
Markdownλ︎
I would like to use the TODO comments in Markdown, so I can easily mark places where further work is required.
The HTML comment works as a comment in Neovim, but is not considered a comment by todo-comments.
From a search on the Internet it seems the HTML comment but with three dashes is the markdown standard.
Is this recognised by TODO comments though? Yes it is, awesome.
Other options for markdown comments (single line only)
[]: # (This is a comment)
[]: # "And this is a comment"
[]: # 'Also this is a comment'
[//]: # (Yet another comment)
[comment]: # (Still another comment)
Each of these lines works the same way:
[...]:
identifies a reference link (not included in the resulting article)#
defines the destination,#
is shortest valid value for a URL(...)
,"..."
, and'...'
define the reference title, repurposed to make a comment
The Squirrel Squadronλ︎
This weeks topic from the squirrel squadron is "Fire Your Product Managers" which will convey why the product manager role should be retired.
My own thoughts shared before the meeting were that it was disappointing that engineers didnt talk to stakeholders as a central part of their role. Code has become king, but for my its a side effect of a lot of non-coding work.
When I was first looking at a role in software development, people were referred to as Systems Analysits or simply Analysts.
What is a product manager? A person that takes the needs of the software, defines what that should look like and checks at the end that the solution does what its supposed to do.
This is a role that engineers used to do as well.
Example: Joel was a T-shaped person (generalising specialist) who would do that product management but they would also build a prototype that explored the problem space and highlight technical challenges (performance, scalability, etc.)
Example: Markus was first a signal controller and then a manager for train signal controllers at National Rail. Self-taught how to create an app and created a very useful app for signal controllers. National Rail then asked Markus to be in charge of all apps and used there curiosity to ensure the apps did what the customers want them to do.
Challenge: take your existing product managers and teach them UI design skills and/or software engineering skills. Product Managers ++ (plus plus).
AI can be valuable for prototyping ideas, which can be used by exiting non-technical product management.
Summary: Squirrel is suggesting product owners / managers do more than create documents. Using prompt engineering they can create prototypes that should give more insight into what a feature or product should do and even highlight some of the technical challenges in building such a feature.
This kind of prototyping is what I encourage the engineers I work with to do (or occasionally do myself), before we all get overly invested into the feature and all its intricacies.
Clojureλ︎
I have been cleaning up my 'apps' on Replit and deleting anything outdated.
NOTE: I had created more apps in the past that the free plan of Replit, so the free plan is less generous than it used to be.
A nice functional example of fizzbuzz game in Clojure.
(ns main)
(defn fizzbuzz
[size]
(clojure.pprint/pprint
(map vector
(range size)
(cycle [:fizz :_ :_])
(cycle [:buzz :_ :_ :_ :_]))))
(fizzbuzz 15)
Palendrome example
;; Inspired by https://porkostomus.gitlab.io/posts-output/2018-08-16-Just-Juxt-2/
(ns justjuxt.palindromes)
;; Version from the original post.
;; Traverses the second half of palindromic strings unnecessarily (see my comments on the post).
;; Also misses that empty string is a palindrome.
(defn porkostomus-palindrome? [s]
(apply = ((juxt seq reverse) s)))
(prn (porkostomus-palindrome? "racecar")) ;; true
(prn (porkostomus-palindrome? "noon")) ;; true
(prn (porkostomus-palindrome? "I")) ;; true
(prn (porkostomus-palindrome? "")) ;; false - wrong! should be trivially true
(prn (porkostomus-palindrome? "foo bar")) ;; false
(prn)
;; More efficient version: Stops when it gets to the middle of a palindrome.
;; Also treats empty string correctly.
(defn my-palindrome? [s]
(let [midpoint (/ (count s) 2)
take-half #(take midpoint %)
take-half-rev (comp take-half reverse)]
(apply = ((juxt take-half take-half-rev) s))))
(prn (my-palindrome? "racecar")) ;; true
(prn (my-palindrome? "noon")) ;; true
(prn (my-palindrome? "I")) ;; true
(prn (my-palindrome? "")) ;; true
(prn (my-palindrome? "foo bar")) ;; false
(prn)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Version that ignores case, whitespace, punctuation, etc.
;; Based on my Python version here: https://repl.it/@jab/pypal
(defn- count-and-lower [s]
"Helper function"
(->> s
(map-indexed (fn [i v] (vector (inc i) v)))
(map (fn [[i c]] [i (if (Character/isLetter c) (Character/toLowerCase c) nil)]))
(filter (fn [[_ c]] (some? c)))))
(defn fuzzy-palindrome? [s]
(if (empty? s)
true
(let [fwd (count-and-lower s)
rev (count-and-lower (reverse s))
n (count s)]
(loop [fwd fwd rev rev]
(let [[i cfwd] (first fwd)
[j crev] (first rev)]
(cond
(not= cfwd crev) false
(>= (+ i j) n) true
:else (recur (rest fwd) (rest rev))))))))
(prn (fuzzy-palindrome? "A man, a plan, a canal: Panama!")) ;; true
(prn (fuzzy-palindrome? "Race car")) ;; true
(prn (fuzzy-palindrome? "I.")) ;; true
(prn (fuzzy-palindrome? "")) ;; true
(prn (fuzzy-palindrome? "Not a palindrome!")) ;; false
Choresλ︎
Hand washing some merino wool tops and alpaca wool socks (they would be damaged in the washing machine even inside a wash bag).
The morning was sunny so time for some gardening. I cut the longer parts of the grass lawn and covered the raised garden bed with compost from the hot box composter. Continuing to water the grass in the evenings to help with the grass growth.
After the cycle ride on Saturday, I took a wheely dustbin full of garden waste to the local recycling, helping my garden look even tidier. I nearly melted walking to the park and back with the dustbin as it was so hot.
Entertainmentλ︎
Cancelled Apple TV+ subscription and it ends on 10th June. There is not quite enough shows or movies to keep me subscribing at the moment, although I will subscribe again at the end of 2025 and catch up with some shows, i.e. Murderbot, Long Way Home, Slow Horses and Silo. There is a chance that season 3 of Severance is release this year, but I am not holding my breath
I am tempted to find time to read The Murderbot Diaries book series, as I have enjoyed the TV show Murderbot so far. The main character reminds me of a dystopian version of Marvin the Paranoid Android from Hitch Hikers Guide To The Galaxy (trillogy in 5 parts).
Mission Impossible: Dead Reckoning - part 1 movie is on Channel 4 at the moment. It was enjoyable although I was very sad to see what happened one of my favourite characters.
Another Marvel Universe film, Captain America Brave New world. It was okay, I find it hard to get excited about these moving now. There was a really good performance by Harrison Ford. There isnt anything particularly novel about the movie. It would be a treat for all die-hard Marvel fans as there are a lot of different characters in it from all over the universe. I enjoyed watching even though it was quite formulaic.
Gladiator II had some interesting moments but fairly predictable. Pedro Pascal was excellent and so was the mercurial Denzel Washington. The visual effects were superb but the story wasnt that engaging to me. If you like things being destroyed and people killing each other, then you would probably enjoy it. Its a bit of escapism, but for me it was something to keep my brain busy whist I finished of some cycle maintenance.
Careerλ︎
Started applying for jobs a little more proactively.
Contacted by a recruiter about an interesting DevRel role for Shuttle, a company that reminds me a little of Heroku in the early days.
Also discussed an engineer role as Obrizium which I am sure I interviewed at many years ago, but more as an engineering manager.
Thank you.