diff options
| author | Paul Buetow <paul@buetow.org> | 2025-07-09 10:52:13 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-07-09 10:52:13 +0300 |
| commit | d6bfc66551382011ef1ca8364d49935094ecb32e (patch) | |
| tree | b3fdf895d0a6aa65ecd5496acfef27e204272535 /about | |
| parent | a45d7e5d0d28f50e51dd0e21442cda2bce391c08 (diff) | |
Update content for md
Diffstat (limited to 'about')
| -rw-r--r-- | about/resources.md | 180 | ||||
| -rw-r--r-- | about/showcase.md | 847 | ||||
| -rw-r--r-- | about/showcase/debroid/image-1.png | 55 |
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) " - else - echo "[]($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: |
