summaryrefslogtreecommitdiff
path: root/about
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-07-09 10:52:13 +0300
committerPaul Buetow <paul@buetow.org>2025-07-09 10:52:13 +0300
commitd6bfc66551382011ef1ca8364d49935094ecb32e (patch)
treeb3fdf895d0a6aa65ecd5496acfef27e204272535 /about
parenta45d7e5d0d28f50e51dd0e21442cda2bce391c08 (diff)
Update content for md
Diffstat (limited to 'about')
-rw-r--r--about/resources.md180
-rw-r--r--about/showcase.md847
-rw-r--r--about/showcase/debroid/image-1.png55
3 files changed, 666 insertions, 416 deletions
diff --git a/about/resources.md b/about/resources.md
index 0ce055c7..54eb2382 100644
--- a/about/resources.md
+++ b/about/resources.md
@@ -35,105 +35,105 @@ You won't find any links on this site because, over time, the links will break.
In random order:
+* Leanring eBPF; Liz Rice; O'Reilly
+* 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications
* Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly
-* Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press
-* Data Science at the Command Line; Jeroen Janssens; O'Reilly
-* Effective Java; Joshua Bloch; Addison-Wesley Professional
-* Kubernetes Cookbook; Sameer Naik, SΓ©bastien Goasguen, Jonathan Michaux; O'Reilly
-* Modern Perl; Chromatic ; Onyx Neon Press
* Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications
-* Higher Order Perl; Mark Dominus; Morgan Kaufmann
-* Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press
-* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner
-* Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson
-* Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt
-* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly
-* The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible
-* Developing Games in Java; David Brackeen and others...; New Riders
-* DNS and BIND; Cricket Liu; O'Reilly
* The Docker Book; James Turnbull; Kindle
-* Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers
+* Modern Perl; Chromatic ; Onyx Neon Press
+* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly
+* Raku Recipes; J.J. Merelo; Apress
+* Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly
* Terraform Cookbook; Mikael Krief; Packt Publishing
* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional
-* Funktionale Programmierung; Peter Pepper; Springer
-* 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications
-* Leanring eBPF; Liz Rice; O'Reilly
-* Pro Puppet; James Turnbull, Jeffrey McCune; Apress
-* Polished Ruby Programming; Jeremy Evans; Packt Publishing
-* Ultimate Go Notebook; Bill Kennedy
-* Perl New Features; Joshua McAdams, brian d foy; Perl School
-* Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf
-* Raku Recipes; J.J. Merelo; Apress
-* The Kubernetes Book; Nigel Poulton; Unabridged Audiobook
+* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly
+* Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press
* Effective awk programming; Arnold Robbins; O'Reilly
-* DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible
+* Polished Ruby Programming; Jeremy Evans; Packt Publishing
+* Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press
+* Concurrency in Go; Katherine Cox-Buday; O'Reilly
+* The Pragmatic Programmer; David Thomas; Addison-Wesley
+* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner
* Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers
-* Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly
+* Effective Java; Joshua Bloch; Addison-Wesley Professional
+* Perl New Features; Joshua McAdams, brian d foy; Perl School
+* The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible
* Java ist auch eine Insel; Christian Ullenboom;
-* Concurrency in Go; Katherine Cox-Buday; O'Reilly
-* Systemprogrammierung in Go; Frank MΓΌller; dpunkt
+* C++ Programming Language; Bjarne Stroustrup;
* The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton
-* Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly
* 97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly
-* The Pragmatic Programmer; David Thomas; Addison-Wesley
-* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly
+* Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly
+* Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson
+* Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt
+* Data Science at the Command Line; Jeroen Janssens; O'Reilly
* Site Reliability Engineering; How Google runs production systems; O'Reilly
-* C++ Programming Language; Bjarne Stroustrup;
+* Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers
+* The Kubernetes Book; Nigel Poulton; Unabridged Audiobook
+* Ultimate Go Notebook; Bill Kennedy
+* Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf
* The Practise of System and Network Administration; Thomas A. Limoncelli, Christina J. Hogan, Strata R. Chalup; Addison-Wesley Professional Pro Git; Scott Chacon, Ben Straub; Apress
+* Developing Games in Java; David Brackeen and others...; New Riders
* Raku Fundamentals; Moritz Lenz; Apress
+* Pro Puppet; James Turnbull, Jeffrey McCune; Apress
+* Systemprogrammierung in Go; Frank MΓΌller; dpunkt
+* DNS and BIND; Cricket Liu; O'Reilly
+* Funktionale Programmierung; Peter Pepper; Springer
+* DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible
+* Kubernetes Cookbook; Sameer Naik, SΓ©bastien Goasguen, Jonathan Michaux; O'Reilly
+* Higher Order Perl; Mark Dominus; Morgan Kaufmann
## Technical references
I didn't read them from the beginning to the end, but I am using them to look up things. The books are in random order:
-* Relayd and Httpd Mastery; Michael W Lucas
* Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly
-* Implementing Service Level Objectives; Alex Hidalgo; O'Reilly
-* Go: Design Patterns for Real-World Projects; Mat Ryer; Packt
* Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley
+* The Linux Programming Interface; Michael Kerrisk; No Starch Press
* BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley
+* Implementing Service Level Objectives; Alex Hidalgo; O'Reilly
* Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly
-* The Linux Programming Interface; Michael Kerrisk; No Starch Press
+* Go: Design Patterns for Real-World Projects; Mat Ryer; Packt
+* Relayd and Httpd Mastery; Michael W Lucas
## Self-development and soft-skills books
In random order:
-* Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne
-* Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press
-* Stop starting, start finishing; Arne Roock; Lean-Kanban University
-* Influence without Authority; A. Cohen, D. Bradford; Wiley
-* Eat That Frog!; Brian Tracy; Hodder Paperbacks
-* Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly
-* Slow Productivity; Cal Newport; Penguin Random House
+* Ultralearning; Anna Laurent; Self-published via Amazon
+* Never Split the Difference; Chris Voss, Tahl Raz; Random House Business
+* Deep Work; Cal Newport; Piatkus
* Psycho-Cybernetics; Maxwell Maltz; Perigee Books
-* Ultralearning; Scott Young; Thorsons
-* Digital Minimalism; Cal Newport; Portofolio Penguin
-* Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing
-* The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook
-* 101 Essays that change the way you think; Brianna Wiest; Audiobook
-* Soft Skills; John Sommez; Manning Publications
+* Getting Things Done; David Allen
* The Joy of Missing Out; Christina Crook; New Society Publishers
-* The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME)
-* Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion
-* Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook
-* Ultralearning; Anna Laurent; Self-published via Amazon
-* Atomic Habits; James Clear; Random House Business
-* The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd
* The Good Enough Job; Simone Stolzoff; Ebury Edge
-* The Bullet Journal Method; Ryder Carroll; Fourth Estate
+* Atomic Habits; James Clear; Random House Business
+* The Power of Now; Eckhard Tolle; Yellow Kite
* The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK
-* Eat That Frog; Brian Tracy
-* Getting Things Done; David Allen
+* 101 Essays that change the way you think; Brianna Wiest; Audiobook
+* Digital Minimalism; Cal Newport; Portofolio Penguin
+* Soft Skills; John Sommez; Manning Publications
+* Eat That Frog!; Brian Tracy; Hodder Paperbacks
* Meditation for Mortals, Oliver Burkeman, Audiobook
-* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select
-* Deep Work; Cal Newport; Piatkus
-* Never Split the Difference; Chris Voss, Tahl Raz; Random House Business
+* Influence without Authority; A. Cohen, D. Bradford; Wiley
+* Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion
+* The Bullet Journal Method; Ryder Carroll; Fourth Estate
+* Stop starting, start finishing; Arne Roock; Lean-Kanban University
+* Slow Productivity; Cal Newport; Penguin Random House
+* Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly
* So Good They Can't Ignore You; Cal Newport; Business Plus
-* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books
+* Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press
* Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook
-* The Power of Now; Eckhard Tolle; Yellow Kite
+* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books
* Solve for Happy; Mo Gawdat (RE-READ 1ST TIME)
+* The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME)
+* Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook
+* Eat That Frog; Brian Tracy
+* Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne
+* The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook
+* Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing
+* Ultralearning; Scott Young; Thorsons
+* The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd
+* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select
[Here are notes of mine for some of the books](../notes/index.md)
@@ -141,21 +141,21 @@ In random order:
Some of these were in-person with exams; others were online learning lectures only. In random order:
+* MySQL Deep Dive Workshop; 2-day on-site training
+* Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online
+* The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online
+* Scripting Vim; Damian Conway; O'Reilly Online
+* Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon
+* Red Hat Certified System Administrator; Course + certification (Although I had the option, I decided not to take the next course as it is more effective to self learn what I need)
* Apache Tomcat Best Practises; 3-day on-site training
+* Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training
+* Structure and Interpretation of Computer Programs; Harold Abelson and more...;
+* Developing IaC with Terraform (with Live Lessons); O'Reilly Online
* F5 Loadbalancers Training; 2-day on-site training; F5, Inc.
-* Red Hat Certified System Administrator; Course + certification (Although I had the option, I decided not to take the next course as it is more effective to self learn what I need)
* AWS Immersion Day; Amazon; 1-day interactive online training
* The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online
-* MySQL Deep Dive Workshop; 2-day on-site training
-* Developing IaC with Terraform (with Live Lessons); O'Reilly Online
-* The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online
* Protocol buffers; O'Reilly Online
-* Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon
-* Structure and Interpretation of Computer Programs; Harold Abelson and more...;
* Functional programming lecture; Remote University of Hagen
-* Scripting Vim; Damian Conway; O'Reilly Online
-* Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training
-* Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online
* Ultimate Go Programming; Bill Kennedy; O'Reilly Online
## Technical guides
@@ -163,8 +163,8 @@ Some of these were in-person with exams; others were online learning lectures on
These are not whole books, but guides (smaller or larger) which I found very useful. in random order:
* Advanced Bash-Scripting Guide
-* How CPUs work at https://cpu.land
* Raku Guide at https://raku.guide
+* How CPUs work at https://cpu.land
## Podcasts
@@ -172,19 +172,19 @@ These are not whole books, but guides (smaller or larger) which I found very use
In random order:
-* The Pragmatic Engineer Podcast
-* Fallthrough [Golang]
-* The Changelog Podcast(s)
-* Backend Banter
+* Pratical AI
+* The ProdCast (Google SRE Podcast)
* Maintainable
* Modern Mentor
* Dev Interrupted
-* BSD Now [BSD]
+* The Pragmatic Engineer Podcast
+* The Changelog Podcast(s)
* Hidden Brain
+* Fallthrough [Golang]
+* Backend Banter
* Deep Questions with Cal Newport
-* The ProdCast (Google SRE Podcast)
-* Pratical AI
* Cup o' Go [Golang]
+* BSD Now [BSD]
* Fork Around And Find Out
### Podcasts I liked
@@ -195,34 +195,34 @@ I liked them but am not listening to them anymore. The podcasts have either "fin
* CRE: Chaosradio Express [german]
* FLOSS weekly
* Java Pub House
-* Modern Mentor
* Ship It (predecessor of Fork Around And Find Out)
+* Modern Mentor
## Newsletters I like
This is a mix of tech and non-tech newsletters I am subscribed to. In random order:
-* The Valuable Dev
-* VK Newsletter
* Monospace Mentor
-* byteSizeGo
-* The Pragmatic Engineer
* The Imperfectionist
* Changelog News
-* Andreas Brandhorst Newsletter (Sci-Fi author)
+* VK Newsletter
+* The Pragmatic Engineer
+* byteSizeGo
* Register Spill
* Ruby Weekly
-* Applied Go Weekly Newsletter
* Golang Weekly
+* The Valuable Dev
+* Andreas Brandhorst Newsletter (Sci-Fi author)
+* Applied Go Weekly Newsletter
## Magazines I like(d)
This is a mix of tech I like(d). I may not be a current subscriber, but now and then, I buy an issue. In random order:
-* LWN (online only)
-* freeX (not published anymore)
* Linux Magazine
+* freeX (not published anymore)
* Linux User
+* LWN (online only)
# Formal education
diff --git a/about/showcase.md b/about/showcase.md
index 4a3ffa34..9c15acd6 100644
--- a/about/showcase.md
+++ b/about/showcase.md
@@ -86,7 +86,7 @@ This page showcases my side projects, providing an overview of what each project
* πŸ“ˆ Lines of Code: 6241
* πŸ“„ Lines of Documentation: 2306
* πŸ“… Development Period: 2025-06-23 to 2025-07-09
-* πŸ”₯ Recent Activity: 4.2 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 4.7 days (avg. age of last 42 commits)
* βš–οΈ License: BSD-2-Clause
* 🏷️ Latest Release: v0.4.0 (2025-07-09)
* πŸ€– AI-Assisted: This project was partially created with the help of generative AI
@@ -99,15 +99,45 @@ The tool is implemented in Go with a clean architecture that supports both indiv
[View on Codeberg](https://codeberg.org/snonux/gitsyncer)
[View on GitHub](https://github.com/snonux/gitsyncer)
-Go from `internal/version/version.go`:
+Go from `internal/github/github.go`:
```AUTO
-var (
- Version = "0.4.0"
+func (c *Client) RepoExists(repoName string) (bool, error) {
+ if c.token == "" {
+ return false, fmt.Errorf("GitHub token required")
+ }
+
+ url := fmt.Sprintf("https://api.github.com/repos/%s/%s", c.org, repoName)
+ fmt.Printf(" Checking URL: %s\n", url)
+ fmt.Printf(" Token present: %v (length: %d)\n", c.token != "", len(c.token))
+
+ req, err := http.NewRequest("GET", url, nil)
+ if err != nil {
+ return false, err
+ }
- GitCommit = "unknown"
+ req.Header.Set("Authorization", "Bearer "+c.token)
+ req.Header.Set("Accept", "application/vnd.github.v3+json")
+
+ resp, err := http.DefaultClient.Do(req)
+ if err != nil {
+ return false, err
+ }
+ defer resp.Body.Close()
+
+ if resp.StatusCode == 200 {
+ return true, nil
+ } else if resp.StatusCode == 404 {
+ return false, nil
+ } else if resp.StatusCode == 401 {
+ body, _ := io.ReadAll(resp.Body)
+ fmt.Printf(" 401 Unauthorized - Response: %s\n", string(body))
+ fmt.Printf(" Authorization header: %s\n", req.Header.Get("Authorization"))
+ return false, fmt.Errorf("authentication failed (401): %s", string(body))
+ }
- BuildDate = "unknown"
+ return false, fmt.Errorf("unexpected status code: %d", resp.StatusCode)
+}
```
---
@@ -120,7 +150,7 @@ var (
* πŸ“ˆ Lines of Code: 873
* πŸ“„ Lines of Documentation: 135
* πŸ“… Development Period: 2025-06-25 to 2025-06-29
-* πŸ”₯ Recent Activity: 12.3 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 12.7 days (avg. age of last 42 commits)
* βš–οΈ License: BSD-2-Clause
* πŸ§ͺ Status: Experimental (no releases yet)
* πŸ€– AI-Assisted: This project was partially created with the help of generative AI
@@ -133,22 +163,19 @@ The project is implemented using a clean modular architecture with the CLI entry
[View on Codeberg](https://codeberg.org/snonux/timr)
[View on GitHub](https://github.com/snonux/timr)
-Go from `internal/timer/operations.go`:
+Go from `cmd/timr/main.go`:
```AUTO
-func GetRawStatus() (string, error) {
- state, err := LoadState()
- if err != nil {
- return "", fmt.Errorf("error loading state: %w", err)
+func main() {
+ if len(os.Args) < 2 {
+ printUsage()
+ os.Exit(1)
}
- elapsed := state.ElapsedTime
- if state.Running {
- elapsed += time.Since(state.StartTime)
- }
+ var err error
+ var output string
- return fmt.Sprintf("%d", int(elapsed.Seconds())), nil
-}
+ switch os.Args[1] {
```
---
@@ -161,7 +188,7 @@ func GetRawStatus() (string, error) {
* πŸ“ˆ Lines of Code: 6160
* πŸ“„ Lines of Documentation: 162
* πŸ“… Development Period: 2025-06-19 to 2025-07-08
-* πŸ”₯ Recent Activity: 12.7 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 13.1 days (avg. age of last 42 commits)
* βš–οΈ License: BSD-2-Clause
* 🏷️ Latest Release: v0.9.2 (2025-07-02)
* πŸ€– AI-Assisted: This project was partially created with the help of generative AI
@@ -181,12 +208,36 @@ The implementation follows a clean architecture with clear separation of concern
Go from `internal/ui/handlers.go`:
```AUTO
-func (m *Model) getTaskAtCursor() *task.Task {
- cursor := m.tbl.Cursor()
- if cursor < 0 || cursor >= len(m.tasks) {
+func (m *Model) handleAnnotationMode(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
+ onEnter := func(value string) error {
+ if !m.replaceAnnotations && strings.TrimSpace(value) == "" {
+ return fmt.Errorf("annotation cannot be empty")
+ }
+
+ if m.replaceAnnotations {
+ if err := task.ReplaceAnnotations(m.annotateID, value); err != nil {
+ return err
+ }
+ m.replaceAnnotations = false
+ } else {
+ if err := task.Annotate(m.annotateID, value); err != nil {
+ return err
+ }
+ }
+ m.reload()
return nil
}
- return &m.tasks[cursor]
+
+ onExit := func() {
+ m.annotating = false
+ m.replaceAnnotations = false
+ }
+
+ model, cmd := m.handleTextInput(msg, &m.annotateInput, onEnter, onExit)
+ if msg.Type == tea.KeyEnter && m.annotateInput.Value() != "" {
+ return model, m.startBlink(m.annotateID, false)
+ }
+ return model, cmd
}
```
@@ -200,7 +251,7 @@ func (m *Model) getTaskAtCursor() *task.Task {
* πŸ“ˆ Lines of Code: 3947
* πŸ“„ Lines of Documentation: 854
* πŸ“… Development Period: 2021-12-28 to 2025-07-07
-* πŸ”₯ Recent Activity: 20.0 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 20.4 days (avg. age of last 42 commits)
* βš–οΈ License: No license found
* πŸ§ͺ Status: Experimental (no releases yet)
@@ -230,7 +281,7 @@ TOP=20
* πŸ“ˆ Lines of Code: 42772
* πŸ“„ Lines of Documentation: 159
* πŸ“… Development Period: 2021-04-29 to 2025-07-01
-* πŸ”₯ Recent Activity: 26.3 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 26.8 days (avg. age of last 42 commits)
* βš–οΈ License: No license found
* πŸ§ͺ Status: Experimental (no releases yet)
* πŸ€– AI-Assisted: This project was partially created with the help of generative AI
@@ -243,14 +294,15 @@ The site is built using **Gemtexter**, a static site generator that creates both
[View on Codeberg](https://codeberg.org/snonux/foo.zone)
[View on GitHub](https://github.com/snonux/foo.zone)
-HTML from `gemfeed/2022-01-23-welcome-to-the-foo.zone.html`:
+HTML from `notes/index.html`:
```AUTO
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>Welcome to the foo.zone</title>
+<title>Notes on foo.zone</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
@@ -268,7 +320,7 @@ HTML from `gemfeed/2022-01-23-welcome-to-the-foo.zone.html`:
* πŸ“ˆ Lines of Code: 20091
* πŸ“„ Lines of Documentation: 5674
* πŸ“… Development Period: 2020-01-09 to 2025-06-20
-* πŸ”₯ Recent Activity: 51.8 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 52.2 days (avg. age of last 42 commits)
* βš–οΈ License: Apache-2.0
* 🏷️ Latest Release: v4.2.0 (2023-06-21)
* πŸ€– AI-Assisted: This project was partially created with the help of generative AI
@@ -285,17 +337,18 @@ The system uses a client-server architecture where dtail servers run on target m
[View on Codeberg](https://codeberg.org/snonux/dtail)
[View on GitHub](https://github.com/snonux/dtail)
-Go from `internal/clients/baseclient.go`:
+Go from `internal/io/fs/directprocessor.go`:
```AUTO
-func (c *baseClient) makeConnection(server string, sshAuthMethods []gossh.AuthMethod,
- hostKeyCallback client.HostKeyCallback) connectors.Connector {
- if c.Args.Serverless {
- return connectors.NewServerless(c.UserName, c.maker.makeHandler(server),
- c.maker.makeCommands())
+func NewDirectProcessor(processor LineProcessor, output io.Writer, globID
+ string, ltx lcontext.LContext) *DirectProcessor {
+ return &DirectProcessor{
+ processor: processor,
+ output: output,
+ stats: &stats{},
+ ltx: ltx,
+ sourceID: globID,
}
- return connectors.NewServerConnection(server, c.UserName, sshAuthMethods,
- hostKeyCallback, c.maker.makeHandler(server), c.maker.makeCommands())
}
```
@@ -309,7 +362,7 @@ func (c *baseClient) makeConnection(server string, sshAuthMethods []gossh.AuthMe
* πŸ“ˆ Lines of Code: 396
* πŸ“„ Lines of Documentation: 24
* πŸ“… Development Period: 2025-04-18 to 2025-05-11
-* πŸ”₯ Recent Activity: 71.1 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 71.5 days (avg. age of last 42 commits)
* βš–οΈ License: Custom License
* 🏷️ Latest Release: v1.0.0 (2025-05-11)
@@ -324,10 +377,12 @@ The implementation uses a YAML configuration file to define the network topology
Ruby from `wireguardmeshgenerator.rb`:
```AUTO
-def priv = File.read(@privkey_path).strip
+def initialize(myself)
+ raise 'Wireguard tool not found' unless system('which wg > /dev/null 2>&1')
-def psk(peer)
- psk_path = "#{@psk_dir}/#{[@myself, peer].sort.join('_')}.key"
+ @myself = myself
+ @psk_dir = 'keys/psk'
+ mykeys_dir = "keys/#{myself}"
```
---
@@ -340,7 +395,7 @@ def psk(peer)
* πŸ“ˆ Lines of Code: 9835
* πŸ“„ Lines of Documentation: 559
* πŸ“… Development Period: 2024-01-18 to 2025-06-14
-* πŸ”₯ Recent Activity: 83.2 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 83.6 days (avg. age of last 42 commits)
* βš–οΈ License: No license found
* πŸ§ͺ Status: Experimental (no releases yet)
@@ -358,19 +413,13 @@ The architecture combines kernel-level tracing with user-space analysis: eBPF pr
[View on Codeberg](https://codeberg.org/snonux/ior)
[View on GitHub](https://github.com/snonux/ior)
-C from `internal/c/types.h`:
+C from `internal/c/maps.h`:
```AUTO
-struct open_event {
- __u32 event_type;
- __u32 trace_id;
- __u64 time;
- __u32 pid;
- __u32 tid;
- __s32 flags;
- char filename[MAX_FILENAME_LENGTH];
- char comm[MAX_PROGNAME_LENGTH];
-};
+struct {
+ __uint(type, BPF_MAP_TYPE_RINGBUF);
+ __uint(max_entries, 1 << 24);
+} event_map SEC(".maps");
```
---
@@ -383,7 +432,7 @@ struct open_event {
* πŸ“ˆ Lines of Code: 25762
* πŸ“„ Lines of Documentation: 3101
* πŸ“… Development Period: 2008-05-15 to 2025-06-27
-* πŸ”₯ Recent Activity: 84.4 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 84.9 days (avg. age of last 42 commits)
* βš–οΈ License: Custom License
* πŸ§ͺ Status: Experimental (no releases yet)
* πŸ€– AI-Assisted: This project was partially created with the help of generative AI
@@ -398,14 +447,24 @@ The project is built on an event-driven architecture with clear component separa
[View on Codeberg](https://codeberg.org/snonux/ds-sim)
[View on GitHub](https://github.com/snonux/ds-sim)
-Java from `src/main/java/events/VSAbstractEvent.java`:
+Java from `src/main/java/core/VSTaskManager.java`:
```AUTO
-public final void setClassname(String eventClassname) {
- if (eventClassname.startsWith(CLASS_PREFIX))
- eventClassname = eventClassname.substring(CLASS_PREFIX_LENGTH);
+private VSSimulatorVisualization simulatorVisualization;
- this.eventClassname = eventClassname;
+private PriorityQueue<VSTask> globalTasks;
+
+private LinkedList<VSTask> fullfilledProgrammedTasks;
+
+public final static boolean PROGRAMMED = true;
+
+public final static boolean ONLY_ONCE = false;
+
+private VSPrefs prefs;
+
+public VSTaskManager(VSPrefs prefs,
+ VSSimulatorVisualization simulatorVisualization) {
+ init(prefs, simulatorVisualization);
}
```
@@ -419,7 +478,7 @@ public final void setClassname(String eventClassname) {
* πŸ“ˆ Lines of Code: 33
* πŸ“„ Lines of Documentation: 3
* πŸ“… Development Period: 2025-04-03 to 2025-04-03
-* πŸ”₯ Recent Activity: 97.0 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 97.4 days (avg. age of last 42 commits)
* βš–οΈ License: No license found
* πŸ§ͺ Status: Experimental (no releases yet)
@@ -449,7 +508,7 @@ func main() {
* πŸ“ˆ Lines of Code: 3967
* πŸ“„ Lines of Documentation: 411
* πŸ“… Development Period: 2024-05-04 to 2025-06-12
-* πŸ”₯ Recent Activity: 113.9 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 114.4 days (avg. age of last 42 commits)
* βš–οΈ License: Custom License
* 🏷️ Latest Release: v1.0.0 (2025-03-04)
* πŸ€– AI-Assisted: This project was partially created with the help of generative AI
@@ -466,16 +525,29 @@ The tool is architected around a file-based queueing system where posts progress
[View on Codeberg](https://codeberg.org/snonux/gos)
[View on GitHub](https://github.com/snonux/gos)
-Go from `internal/summary/summary.go`:
+Go from `internal/config/args.go`:
```AUTO
-func prepare(content string) string {
- content = newlineRegex.ReplaceAllString(content, " ")
- content = urlRegex.ReplaceAllString(content, "")
- content = multiSpaceRegex.ReplaceAllString(content, " ")
- content = strings.TrimSpace(content)
- content = tagRegex.ReplaceAllString(content, "`$0`")
- return content
+func (a *Args) ParsePlatforms(platformStrs string) error {
+ a.Platforms = make(map[string]int)
+
+ for _, platformInfo := range strings.Split(platformStrs, ",") {
+ parts := strings.Split(platformInfo, ":")
+ platformStr := parts[0]
+
+ if len(parts) > 1 {
+ var err error
+ a.Platforms[platformStr], err = strconv.Atoi(parts[1])
+ if err != nil {
+ return err
+ }
+ } else {
+ colour.Infoln("No message length specified for", platformStr, "so assuming
+ 500")
+ a.Platforms[platformStr] = 500
+ }
+ }
+ return nil
}
```
@@ -489,7 +561,7 @@ func prepare(content string) string {
* πŸ“ˆ Lines of Code: 1299
* πŸ“„ Lines of Documentation: 154
* πŸ“… Development Period: 2023-01-02 to 2025-07-07
-* πŸ”₯ Recent Activity: 133.5 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 133.9 days (avg. age of last 42 commits)
* βš–οΈ License: Custom License
* πŸ§ͺ Status: Experimental (no releases yet)
@@ -504,10 +576,15 @@ The project implements a modular architecture with seven core components: FileHe
Perl from `foostats.pl`:
```AUTO
-my sub parse_date ( $year, @line ) {
- my $timestr = "$line[0] $line[1]";
- return Time::Piece->strptime( $timestr, '%b %d' )
- ->strftime("$year%m%d");
+sub write ( $path, $content ) {
+ open my $fh, '>', "$path.tmp"
+ or die "\nCannot open file: $!";
+ print $fh $content;
+ close $fh;
+
+ rename
+ "$path.tmp",
+ $path;
}
```
@@ -521,7 +598,7 @@ my sub parse_date ( $year, @line ) {
* πŸ“ˆ Lines of Code: 1373
* πŸ“„ Lines of Documentation: 48
* πŸ“… Development Period: 2024-12-05 to 2025-02-28
-* πŸ”₯ Recent Activity: 137.7 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 138.1 days (avg. age of last 42 commits)
* βš–οΈ License: Custom License
* πŸ§ͺ Status: Experimental (no releases yet)
@@ -533,14 +610,16 @@ The system is implemented with a modular architecture centered around a DSL clas
[View on Codeberg](https://codeberg.org/snonux/rcm)
[View on GitHub](https://github.com/snonux/rcm)
-Ruby from `lib/dsl.rb`:
+Ruby from `lib/dslkeywords/notify.rb`:
```AUTO
-def to_s = @id
-def evaluate! = @scheduled.each(&:evaluate!)
+def notify(message = nil, &block)
+ return unless @conds_met
-def <<(obj)
- raise DuplicateResource, "#{obj.id} already declared!" if @@objs.key?(obj.id)
+ n = Notify.new(message.nil? ? '' : message)
+ n.message(n.instance_eval(&block)) if block
+ self << n
+ n
```
---
@@ -553,7 +632,7 @@ def <<(obj)
* πŸ“ˆ Lines of Code: 2253
* πŸ“„ Lines of Documentation: 1170
* πŸ“… Development Period: 2021-05-21 to 2025-06-11
-* πŸ”₯ Recent Activity: 230.5 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 230.9 days (avg. age of last 42 commits)
* βš–οΈ License: GPL-3.0
* 🏷️ Latest Release: 3.0.0 (2024-10-01)
@@ -565,18 +644,17 @@ The implementation is built entirely in Bash (version 5.x+) using a modular libr
[View on Codeberg](https://codeberg.org/snonux/gemtexter)
[View on GitHub](https://github.com/snonux/gemtexter)
-Shell from `lib/md.source.sh`:
+Shell from `lib/log.source.sh`:
```AUTO
-md::make_img () {
- local link="$1"; shift
- local descr="$1"; shift
-
- if [ -z "$descr" ]; then
- echo "[![$link]($link)]($link) "
- else
- echo "[![$descr]($link \"$descr\")]($link) "
- fi
+log () {
+ local -r level="$1"; shift
+ local message
+
+ for message in "$@"; do
+ echo "$message"
+ done | log::_pipe "$level" $$
+}
```
---
@@ -589,7 +667,7 @@ md::make_img () {
* πŸ“ˆ Lines of Code: 917
* πŸ“„ Lines of Documentation: 33
* πŸ“… Development Period: 2024-01-20 to 2025-07-06
-* πŸ”₯ Recent Activity: 447.7 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 448.1 days (avg. age of last 42 commits)
* βš–οΈ License: MIT
* 🏷️ Latest Release: v0.0.3 (2025-07-06)
@@ -611,13 +689,16 @@ Go from `main.go`:
func createPreferenceWindow(a fyne.App) fyne.Window {
window := a.NewWindow("Preferences")
directoryPreference := widget.NewEntry()
- directoryPreference.SetText(a.Preferences().StringWithFallback("Directory", defaultDirectory))
+ directoryPreference.SetText(a.Preferences().StringWithFallback("Directory",
+ defaultDirectory))
tagDropdownPreference := widget.NewEntry()
- tagDropdownPreference.SetText(a.Preferences().StringWithFallback("Tags", strings.Join(defaultTagItems, ",")))
+ tagDropdownPreference.SetText(a.Preferences().StringWithFallback("Tags",
+ strings.Join(defaultTagItems, ",")))
whatDropdownPreference := widget.NewEntry()
- whatDropdownPreference.SetText(a.Preferences().StringWithFallback("Whats", strings.Join(defaultWhatItems, ",")))
+ whatDropdownPreference.SetText(a.Preferences().StringWithFallback("Whats",
+ strings.Join(defaultWhatItems, ",")))
window.SetContent(container.NewVBox(
container.NewVBox(
@@ -657,7 +738,7 @@ func createPreferenceWindow(a fyne.App) fyne.Window {
* πŸ“ˆ Lines of Code: 12
* πŸ“„ Lines of Documentation: 3
* πŸ“… Development Period: 2024-03-24 to 2024-03-24
-* πŸ”₯ Recent Activity: 471.5 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 471.9 days (avg. age of last 42 commits)
* βš–οΈ License: Custom License
* πŸ§ͺ Status: Experimental (no releases yet)
@@ -694,7 +775,7 @@ aws: build
* πŸ“ˆ Lines of Code: 2850
* πŸ“„ Lines of Documentation: 52
* πŸ“… Development Period: 2023-08-27 to 2025-04-05
-* πŸ”₯ Recent Activity: 501.5 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 502.0 days (avg. age of last 42 commits)
* βš–οΈ License: MIT
* πŸ§ͺ Status: Experimental (no releases yet)
@@ -706,17 +787,16 @@ The system is designed to host multiple personal services including Anki sync se
[View on Codeberg](https://codeberg.org/snonux/terraform)
[View on GitHub](https://github.com/snonux/terraform)
-HCL from `org-buetow-ecs/variables.tf`:
+HCL from `org-buetow-elb/remotestates.tf`:
```AUTO
- type = bool
- default = false
-}
-
-variable "deploy_audiobookshelf" {
- description = "Deploy Audio Bool Shelf Server?"
- type = bool
- default = true
+data "terraform_remote_state" "base" {
+ backend = "s3"
+ config = {
+ bucket = "org-buetow-tfstate"
+ key = "org-buetow-base/terraform.tfstate"
+ region = "eu-central-1"
+ }
}
```
@@ -730,7 +810,7 @@ variable "deploy_audiobookshelf" {
* πŸ“ˆ Lines of Code: 1096
* πŸ“„ Lines of Documentation: 287
* πŸ“… Development Period: 2023-04-17 to 2025-06-12
-* πŸ”₯ Recent Activity: 514.4 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 514.8 days (avg. age of last 42 commits)
* βš–οΈ License: Custom License
* 🏷️ Latest Release: v1.1.0 (2024-05-03)
* πŸ€– AI-Assisted: This project was partially created with the help of generative AI
@@ -745,26 +825,34 @@ The implementation follows a clean architecture with concurrent check execution,
[View on Codeberg](https://codeberg.org/snonux/gogios)
[View on GitHub](https://github.com/snonux/gogios)
-Go from `internal/run.go`:
+Go from `internal/notify.go`:
```AUTO
-func persistReport(subject, body string, conf config) error {
- reportFile := fmt.Sprintf("%s/report.txt", conf.StateDir)
- tmpFile := fmt.Sprintf("%s.tmp", reportFile)
-
- f, err := os.Create(tmpFile)
- if err != nil {
- return err
+func notify(conf config, subject, body string) error {
+ if conf.SMTPDisable {
+ log.Println("Notification disabled")
+ return nil
}
- defer f.Close()
+ log.Println("notify", subject, body)
- if _, err = f.WriteString(fmt.Sprintf("%s\n\n", subject)); err != nil {
- return err
+ headers := map[string]string{
+ "From": conf.EmailFrom,
+ "To": conf.EmailTo,
+ "Subject": subject,
+ "MIME-Version": "1.0",
+ "Content-Type": "text/plain; charset=\"utf-8\"",
}
- if _, err = f.WriteString(body); err != nil {
- return err
+
+ header := ""
+ for k, v := range headers {
+ header += fmt.Sprintf("%s: %s\r\n", k, v)
}
- return os.Rename(tmpFile, reportFile)
+
+ message := header + "\r\n" + body
+ log.Println("Using SMTP server", conf.SMTPServer)
+
+ return smtp.SendMail(conf.SMTPServer, nil, conf.EmailFrom,
+ []string{conf.EmailTo}, []byte(message))
}
```
@@ -778,7 +866,7 @@ func persistReport(subject, body string, conf config) error {
* πŸ“ˆ Lines of Code: 32
* πŸ“„ Lines of Documentation: 3
* πŸ“… Development Period: 2023-12-31 to 2023-12-31
-* πŸ”₯ Recent Activity: 555.1 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 555.5 days (avg. age of last 42 commits)
* βš–οΈ License: No license found
* πŸ§ͺ Status: Experimental (no releases yet)
@@ -815,7 +903,7 @@ run: build
* πŸ“ˆ Lines of Code: 29
* πŸ“„ Lines of Documentation: 3
* πŸ“… Development Period: 2023-08-13 to 2024-01-01
-* πŸ”₯ Recent Activity: 648.3 days (avg. age of last 42 commits)
+* πŸ”₯ Recent Activity: 648.7 days (avg. age of last 42 commits)
* βš–οΈ License: MIT
* πŸ§ͺ Status: Experimental (no releases yet)
@@ -839,7 +927,8 @@ all:
docker build -t anki-sync-server:latest .
aws:
docker build -t anki-sync-server:latest .
- docker tag anki-sync-server:latest 634617747016.dkr.ecr.eu-central-1.amazonaws.com/anki-sync-server:latest
+ docker tag anki-sync-server:latest
+ 634617747016.dkr.ecr.eu-central-1.amazonaws.com/anki-sync-server:latest
```
---
@@ -852,7 +941,7 @@ aws: