From bbbd384ff4315861837b8c0a2567b140135a6665 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 9 Jul 2025 10:52:12 +0300 Subject: Update content for html --- about/resources.html | 180 ++++---- about/showcase.html | 845 ++++++++++++++++++++++++------------- about/showcase/debroid/image-1.png | 55 +-- index.html | 2 +- uptime-stats.html | 2 +- 5 files changed, 667 insertions(+), 417 deletions(-) diff --git a/about/resources.html b/about/resources.html index 08df9872..c08cf8af 100644 --- a/about/resources.html +++ b/about/resources.html @@ -50,107 +50,107 @@ In random order:


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:


Self-development and soft-skills books



In random order:


Here are notes of mine for some of the books

@@ -159,21 +159,21 @@ Some of these were in-person with exams; others were online learning lectures only. In random order:


Technical guides


@@ -182,8 +182,8 @@

Podcasts



@@ -192,19 +192,19 @@ In random order:


Podcasts I liked


@@ -216,36 +216,36 @@
  • 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:


    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:


    Formal education



    diff --git a/about/showcase.html b/about/showcase.html index c9693f3f..97314213 100644 --- a/about/showcase.html +++ b/about/showcase.html @@ -102,7 +102,7 @@
  • πŸ“ˆ 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
  • @@ -115,15 +115,45 @@ View on Codeberg
    View on GitHub

    -Go from internal/version/version.go:
    +Go from internal/github/github.go:

    -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
    +	}
    +
    +	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()
     
    -	GitCommit = "unknown"
    +	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)
    +}
     

    ---
    @@ -137,7 +167,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
  • @@ -150,22 +180,19 @@ var ( View on Codeberg
    View on GitHub

    -Go from internal/timer/operations.go:
    +Go from cmd/timr/main.go:

    -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] {
     

    ---
    @@ -179,7 +206,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
  • @@ -199,12 +226,36 @@ func GetRawStatus() (string, error) { Go from internal/ui/handlers.go:

    -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
     }
     

    @@ -219,7 +270,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)

  • @@ -250,7 +301,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
  • @@ -263,14 +314,15 @@ TOP=20 View on Codeberg
    View on GitHub

    -HTML from gemfeed/2022-01-23-welcome-to-the-foo.zone.html:
    +HTML from notes/index.html:

    -<!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" />
    @@ -289,7 +341,7 @@ TOP=20
     
  • πŸ“ˆ 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
  • @@ -306,17 +358,18 @@ TOP=20 View on Codeberg
    View on GitHub

    -Go from internal/clients/baseclient.go:
    +Go from internal/io/fs/directprocessor.go:

    -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())
     }
     

    @@ -331,7 +384,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)

  • @@ -346,10 +399,12 @@ func (c *baseClient) makeConnection(server string, sshAuthMethods []gossh.AuthMe Ruby from wireguardmeshgenerator.rb:

    -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}"
     

    ---
    @@ -363,7 +418,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)

  • @@ -381,19 +436,13 @@ def psk(peer) View on Codeberg
    View on GitHub

    -C from internal/c/types.h:
    +C from internal/c/maps.h:

    -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");
     

    ---
    @@ -407,7 +456,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
  • @@ -422,14 +471,24 @@ struct open_event { View on Codeberg
    View on GitHub

    -Java from src/main/java/events/VSAbstractEvent.java:
    +Java from src/main/java/core/VSTaskManager.java:

    -public final void setClassname(String eventClassname) {
    -    if (eventClassname.startsWith(CLASS_PREFIX))
    -        eventClassname = eventClassname.substring(CLASS_PREFIX_LENGTH);
    +private VSSimulatorVisualization simulatorVisualization;
    +
    +private PriorityQueue<VSTask> globalTasks;
    +
    +private LinkedList<VSTask> fullfilledProgrammedTasks;
    +
    +public final static boolean PROGRAMMED = true;
    +
    +public final static boolean ONLY_ONCE = false;
     
    -    this.eventClassname = eventClassname;
    +private VSPrefs prefs;
    +
    +public VSTaskManager(VSPrefs prefs,
    +                     VSSimulatorVisualization simulatorVisualization) {
    +    init(prefs, simulatorVisualization);
     }
     

    @@ -444,7 +503,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)

  • @@ -475,7 +534,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
  • @@ -492,16 +551,29 @@ func main() { View on Codeberg
    View on GitHub

    -Go from internal/summary/summary.go:
    +Go from internal/config/args.go:

    -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
     }
     

    @@ -516,7 +588,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)

  • @@ -531,10 +603,15 @@ func prepare(content string) string { Perl from foostats.pl:

    -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;
     }
     

    @@ -549,7 +626,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)

  • @@ -561,14 +638,16 @@ my sub parse_date ( $year, @line ) { View on Codeberg
    View on GitHub

    -Ruby from lib/dsl.rb:
    +Ruby from lib/dslkeywords/notify.rb:

    -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
     

    ---
    @@ -582,7 +661,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)

  • @@ -594,18 +673,17 @@ def <<(obj) View on Codeberg
    View on GitHub

    -Shell from lib/md.source.sh:
    +Shell from lib/log.source.sh:

    -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" $$
    +}
     

    ---
    @@ -619,7 +697,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)

  • @@ -641,13 +719,16 @@ md::make_img () { 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( @@ -688,7 +769,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)

  • @@ -726,7 +807,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)

  • @@ -738,17 +819,16 @@ aws: build View on Codeberg
    View on GitHub

    -HCL from org-buetow-ecs/variables.tf:
    +HCL from org-buetow-elb/remotestates.tf:

    -  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"
    +  }
     }
     

    @@ -763,7 +843,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
  • @@ -778,26 +858,34 @@ variable "deploy_audiobookshelf" { View on Codeberg
    View on GitHub

    -Go from internal/run.go:
    +Go from internal/notify.go:

    -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))
     }
     

    @@ -812,7 +900,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)

  • @@ -850,7 +938,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)

  • @@ -874,7 +962,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

    ---
    @@ -888,7 +977,7 @@ aws:
  • πŸ“ˆ Lines of Code: 1525
  • πŸ“„ Lines of Documentation: 15
  • πŸ“… Development Period: 2023-04-17 to 2023-11-19
  • -
  • πŸ”₯ Recent Activity: 700.4 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 700.9 days (avg. age of last 42 commits)
  • βš–οΈ License: Custom License
  • πŸ§ͺ Status: Experimental (no releases yet)

  • @@ -900,33 +989,24 @@ aws: View on Codeberg
    View on GitHub

    -Go from internal/notifier/email.go:
    +Go from internal/server/server.go:

    -func (em email) send(conf config.Config) error {
    -	if !conf.EmailNotifycationEnabled() {
    -		return nil
    -	}
    -	log.Println("notify:", em.subject, em.body)
    -
    -	headers := map[string]string{
    -		"From":         conf.EmailFrom,
    -		"To":           conf.EmailTo,
    -		"Subject":      em.subject,
    -		"MIME-Version": "1.0",
    -		"Content-Type": "text/plain; charset=\"utf-8\"",
    -	}
    +func Start(ctx context.Context, conf config.Config, quo quorum.Quorum) {
    +	go func() {
    +		for {
    +			log.Println("server: starting")
    +			if err := runServer(ctx, conf, quo); err != nil {
    +				log.Println("server:", err)
    +			}
     
    -	header := ""
    -	for k, v := range headers {
    -		header += fmt.Sprintf("%s: %s\r\n", k, v)
    -	}
    -
    -	message := header + "\r\n" + em.body
    -	log.Println("Using SMTP server", conf.SMTPServer)
    -
    -	return smtp.SendMail(conf.SMTPServer, nil, conf.EmailFrom,
    -		[]string{conf.EmailTo}, []byte(message))
    +			select {
    +			case <-time.After(time.Second):
    +			case <-ctx.Done():
    +				return
    +			}
    +		}
    +	}()
     }
     

    @@ -941,7 +1021,7 @@ func (em email) send(conf config.Config) error {
  • πŸ“ˆ Lines of Code: 51
  • πŸ“„ Lines of Documentation: 26
  • πŸ“… Development Period: 2022-06-02 to 2024-04-20
  • -
  • πŸ”₯ Recent Activity: 765.2 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 765.6 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • πŸ§ͺ Status: Experimental (no releases yet)

  • @@ -975,7 +1055,7 @@ declare -i NUM_PAGES_TO_EXTRACT=42 # This is the answear!
  • πŸ“ˆ Lines of Code: 41
  • πŸ“„ Lines of Documentation: 17
  • πŸ“… Development Period: 2020-01-30 to 2025-04-30
  • -
  • πŸ”₯ Recent Activity: 1058.7 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 1059.1 days (avg. age of last 42 commits)
  • βš–οΈ License: GPL-3.0
  • πŸ§ͺ Status: Experimental (no releases yet)

  • @@ -1010,7 +1090,7 @@ declare -r SCREEN=eDP-1
  • πŸ“ˆ Lines of Code: 342
  • πŸ“„ Lines of Documentation: 39
  • πŸ“… Development Period: 2011-11-19 to 2022-04-02
  • -
  • πŸ”₯ Recent Activity: 1278.3 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 1278.7 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: 0.5.0 (2022-02-21)

  • @@ -1053,7 +1133,7 @@ scalephotos () {
  • πŸ“ˆ Lines of Code: 1728
  • πŸ“„ Lines of Documentation: 18
  • πŸ“… Development Period: 2020-07-12 to 2023-04-09
  • -
  • πŸ”₯ Recent Activity: 1429.5 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 1429.9 days (avg. age of last 42 commits)
  • βš–οΈ License: Custom License
  • πŸ§ͺ Status: Experimental (no releases yet)

  • @@ -1066,12 +1146,21 @@ scalephotos () { View on Codeberg
    View on GitHub

    -Go from sort/parallelquick.go:
    +Go from queue/elementarypriority.go:

    -func ParallelQuick[V ds.Number](a ds.ArrayList[V]) ds.ArrayList[V] {
    -	parallelQuick(a)
    -	return a
    +func (q *ElementaryPriority[T]) DeleteMax() T {
    +	if q.Empty() {
    +		return 0
    +	}
    +
    +	ind, max := q.max()
    +	for i := ind + 1; i < q.Size(); i++ {
    +		q.a[i-1] = q.a[i]
    +	}
    +	q.a = q.a[0 : len(q.a)-1]
    +
    +	return max
     }
     

    @@ -1086,7 +1175,7 @@ func ParallelQuick[V ds.Number](a ds.ArrayList[V]) ds.ArrayList[V] {
  • πŸ“ˆ Lines of Code: 671
  • πŸ“„ Lines of Documentation: 19
  • πŸ“… Development Period: 2018-05-26 to 2025-01-21
  • -
  • πŸ”₯ Recent Activity: 1431.2 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 1431.7 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • πŸ§ͺ Status: Experimental (no releases yet)

  • @@ -1121,7 +1210,7 @@ def out(message, prefix, flag = :none)
  • πŸ“ˆ Lines of Code: 51
  • πŸ“„ Lines of Documentation: 69
  • πŸ“… Development Period: 2014-03-24 to 2022-04-23
  • -
  • πŸ”₯ Recent Activity: 1910.4 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 1910.8 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • πŸ§ͺ Status: Experimental (no releases yet)

  • @@ -1154,7 +1243,7 @@ sub hello() {
  • πŸ“Š Commits: 95
  • πŸ“ˆ Lines of Code: 195
  • πŸ“… Development Period: 2013-03-22 to 2023-03-09
  • -
  • πŸ”₯ Recent Activity: 2125.5 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 2125.9 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: v1.0.0 (2023-04-29)

  • @@ -1170,11 +1259,14 @@ sub hello() { Raku from guprecords.raku:

    -sub do-it(Str:D \stats-dir, Reporter:D \reporter) {
    -  my Aggregator \aggregator .= new;
    -  aggregator.add-file($_) for dir(stats-dir, test => { /.records$/ });
    -  reporter.aggregates = aggregator.aggregates;
    -  reporter.report;
    +method add-file(IO::Path:D $file is readonly) {
    +  my Str $host = $file.IO.basename.split('.').first;
    +
    +  die "Record file for {$host} already processed - duplicate inputs?"
    +    if %!aggregates<host>{$host}:exists;
    +  %!aggregates<host>{$host} = HostAggregate.new($host);
    +
    +  for $file.IO.lines -> Str $line { self!add-line(:$line, :$host) }
     }
     

    @@ -1189,7 +1281,7 @@ sub do-it(Str:D \stats-dir, Reporter:D \reporter) {
  • πŸ“ˆ Lines of Code: 12420
  • πŸ“„ Lines of Documentation: 610
  • πŸ“… Development Period: 2018-03-01 to 2020-01-22
  • -
  • πŸ”₯ Recent Activity: 2451.9 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 2452.3 days (avg. age of last 42 commits)
  • βš–οΈ License: Apache-2.0
  • 🏷️ Latest Release: 0.5.1 (2019-01-04)

  • @@ -1204,6 +1296,20 @@ sub do-it(Str:D \stats-dir, Reporter:D \reporter) { View on Codeberg
    View on GitHub

    +C from ioriot/src/opcodes.h:
    +
    +
    +typedef enum {
    +    FSTAT = 0,
    +    FSTAT_AT,
    +    FSTATFS,
    +    FSTATFS64,
    +    LSTAT,
    +    STAT,
    +    STATFS,
    +    STATFS64,
    +
    +
    ---

    staticfarm-apache-handlers


    @@ -1215,7 +1321,7 @@ sub do-it(Str:D \stats-dir, Reporter:D \reporter) {
  • πŸ“ˆ Lines of Code: 919
  • πŸ“„ Lines of Documentation: 12
  • πŸ“… Development Period: 2015-01-02 to 2021-11-04
  • -
  • πŸ”₯ Recent Activity: 2960.6 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 2961.1 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: 1.1.3 (2015-01-02)

  • @@ -1228,13 +1334,13 @@ sub do-it(Str:D \stats-dir, Reporter:D \reporter) { View on Codeberg
    View on GitHub

    -Perl from src/StaticFarm/API.pm:
    +Perl from debian/staticfarm-apache-handlers/usr/share/staticfarm/apache/handlers/StaticFarm/CacheControl.pm:

    -sub path_ls {
    -  my $f = shift;
    +sub my_warn {
    +  my $msg = shift;
     
    -  return [ map { s#.*/##; $_ } glob("$f/*") ];
    +  Apache2::ServerRec::warn("CacheControl: $msg");
     }
     

    @@ -1249,7 +1355,7 @@ sub path_ls {
  • πŸ“ˆ Lines of Code: 18
  • πŸ“„ Lines of Documentation: 49
  • πŸ“… Development Period: 2014-03-24 to 2021-11-05
  • -
  • πŸ”₯ Recent Activity: 3196.5 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 3196.9 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • πŸ§ͺ Status: Experimental (no releases yet)

  • @@ -1273,7 +1379,7 @@ sub path_ls {
  • πŸ“ˆ Lines of Code: 5360
  • πŸ“„ Lines of Documentation: 789
  • πŸ“… Development Period: 2015-01-02 to 2021-11-05
  • -
  • πŸ”₯ Recent Activity: 3463.2 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 3463.6 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: 1.0.1 (2015-01-02)

  • @@ -1286,13 +1392,17 @@ sub path_ls { View on Codeberg
    View on GitHub

    -Perl from lib/MON/JSON.pm:
    +Perl from debian/mon/usr/share/mon/lib/MAPI/Query.pm:

    -sub init {
    -  my ($self) = @_;
    +sub new {
    +  my ( $class, %opts ) = @_;
     
    -  return undef;
    +  my $self = bless \%opts, $class;
    +
    +  $self->init();
    +
    +  return $self;
     }
     

    @@ -1307,7 +1417,7 @@ sub init {
  • πŸ“ˆ Lines of Code: 273
  • πŸ“„ Lines of Documentation: 32
  • πŸ“… Development Period: 2015-09-29 to 2021-11-05
  • -
  • πŸ”₯ Recent Activity: 3467.4 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 3467.8 days (avg. age of last 42 commits)
  • βš–οΈ License: Apache-2.0
  • 🏷️ Latest Release: 0 (2015-10-26)

  • @@ -1323,11 +1433,14 @@ sub init { Ruby from rubyfy.rb:

    -def log(severity, message)
    -  return if severity == :VERBOSE and not $opts["verbose"]
    -  return if severity == :DEBUG and not $opts["debug"]
    +def initialize
    +  @log_mutex = Mutex.new
    +  @outfile = nil
    +  @outfile_mode = "w"
    +
    +  $opts["verbose"] = true if $opts["debug"]
     
    -  timestamp = $opts["timestamp"] ? "#{Time.now}|" : ""
    +  ["#{ENV["HOME"]}/.rubyfy.json", "rubyfy.json"].each do |conf_path|
     

    ---
    @@ -1341,7 +1454,7 @@ def log(severity, message)
  • πŸ“ˆ Lines of Code: 1839
  • πŸ“„ Lines of Documentation: 412
  • πŸ“… Development Period: 2015-01-02 to 2021-11-05
  • -
  • πŸ”₯ Recent Activity: 3547.0 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 3547.4 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: 1.0.2 (2015-01-02)

  • @@ -1354,22 +1467,15 @@ def log(severity, message) View on Codeberg
    View on GitHub

    -Perl from lib/PINGDOMFETCH/Pingdom.pm:
    +Perl from lib/PINGDOMFETCH/Display.pm:

    -sub fetch_all_checks_json {
    +sub init {
         my ($self) = @_;
     
    -    my $config = $self->{config};
    -
    -    my $url_base = $self->{url_base};
    -    my $action   = $config->get('pingdom.api.all.checks.action');
    +    $VERBOSE = $self->{'arg.verbose'} == 1;
     
    -    my $url = "$url_base/$action";
    -
    -    $self->verbose("Fetching all checks from Pingdom");
    -
    -    return $self->fetch($url);
    +    return undef;
     }
     

    @@ -1384,7 +1490,7 @@ sub fetch_all_checks_json {
  • πŸ“ˆ Lines of Code: 499
  • πŸ“„ Lines of Documentation: 8
  • πŸ“… Development Period: 2015-05-24 to 2021-11-03
  • -
  • πŸ”₯ Recent Activity: 3557.7 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 3558.1 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: 0.1 (2015-06-01)

  • @@ -1397,15 +1503,21 @@ sub fetch_all_checks_json { View on Codeberg
    View on GitHub

    -Go from process/process.go:
    +Go from utils/utils.go:

    -func (self *Process) gatherRaw(what *string, pathf string) error {
    -	bytes, err := ioutil.ReadFile(fmt.Sprintf(pathf, self.Pid))
    +func Slurp(what *string, path string) error {
    +	bytes, err := ioutil.ReadFile(path)
     	if err != nil {
     		return err
     	} else {
    -		*what = string(bytes)
    +		for _, byte := range bytes {
    +			if byte == 0 {
    +				*what += " "
    +			} else {
    +				*what += string(byte)
    +			}
    +		}
     	}
     	return nil
     }
    @@ -1420,7 +1532,7 @@ func (self *Process) gatherRaw(what *string, pathf string) error {
     
  • πŸ“Š Commits: 670
  • πŸ“ˆ Lines of Code: 1675
  • πŸ“… Development Period: 2011-03-06 to 2018-12-22
  • -
  • πŸ”₯ Recent Activity: 3613.4 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 3613.8 days (avg. age of last 42 commits)
  • βš–οΈ License: Custom License
  • 🏷️ Latest Release: v1.0.0 (2018-12-22)

  • @@ -1435,16 +1547,33 @@ func (self *Process) gatherRaw(what *string, pathf string) error { View on Codeberg
    View on GitHub

    -Perl from Xerl.pm:
    +Perl from Xerl/Page/Content.pm:

    -return undef if $config->finish_request_exists();
    +sub parse {
    +  my $self   = $_[0];
    +  my $config = $self->get_config();
    +
    +  my $xmlcontent = Xerl::XML::Reader->new(
    +    path   => $config->get_templatepath(),
    +    config => $config
    +  );
    +
    +  if ( -1 == $xmlcontent->open() ) {
    +    $config->set_finish_request(1);
    +    return undef;
    +  }
    +
    +  $xmlcontent->parse();
     
    -if ( $config->document_exists() ) {
    -  my $document = Xerl::Page::Document->new( config => $config );
    -  $document->parse();
    -  return undef if $config->finish_request_exists();
    +  my $rules = Xerl::Page::Rules->new( config => $config );
    +  $rules->parse( $config->get_xmlconfigrootobj() )
    +    unless $config->exists('noparse');
     
    +  $config->insertxmlvars( $config->get_xmlconfigrootobj() );
    +  $self->insertrules( $rules, $xmlcontent->get_root() );
    +
    +  return undef;
     }
     

    @@ -1459,7 +1588,7 @@ if ( $config->document_exists() ) {
  • πŸ“ˆ Lines of Code: 88
  • πŸ“„ Lines of Documentation: 148
  • πŸ“… Development Period: 2015-06-18 to 2015-12-05
  • -
  • πŸ”₯ Recent Activity: 3661.5 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 3661.9 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • πŸ§ͺ Status: Experimental (no releases yet)

  • @@ -1477,13 +1606,22 @@ if ( $config->document_exists() ) { Shell from storage/sdcard1/Linux/jessie.sh:

    -function umount_chroot {
    -  busybox umount -f $ROOT/storage/sdcard1
    -  for mountpoint in dev/pts proc dev sys; do
    -    busybox umount -f $ROOT/$mountpoint
    +function mount_chroot {
    +  mountpoint $ROOT
    +  if [ $? -ne 0 ]; then 
    +    losetup $LOOP_DEVICE $ROOT.img
    +    busybox mount -t ext4 $LOOP_DEVICE $ROOT
    +  fi
    +  for mountpoint in proc dev sys dev/pts; do
    +    mountpoint $ROOT/$mountpoint
    +    if [ $? -ne 0 ]; then
    +      busybox mount --bind /$mountpoint $ROOT/$mountpoint
    +    fi
       done
    -  busybox umount -f $ROOT
    -  losetup -d $LOOP_DEVICE
    +  mountpoint $ROOT/storage/sdcard1
    +  if [ $? -ne 0 ]; then
    +    busybox mount --bind /storage/sdcard1 $ROOT/storage/sdcard1
    +  fi
     }
     

    @@ -1498,7 +1636,7 @@ function umount_chroot {
  • πŸ“ˆ Lines of Code: 1681
  • πŸ“„ Lines of Documentation: 539
  • πŸ“… Development Period: 2014-03-10 to 2021-11-03
  • -
  • πŸ”₯ Recent Activity: 3939.5 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 3939.9 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: 1.0.2 (2014-11-17)

  • @@ -1511,12 +1649,15 @@ function umount_chroot { View on Codeberg
    View on GitHub

    -Python from contrib/bigsuds-1.0/bigsuds.py:
    +Python from contrib/bigsuds-1.0/setup.py:

    -def _create_client_wrapper(self, client, wsdl_name):
    -    client.set_options(headers=self._headers)
    -    return super(_BIGIPSession, self)._create_client_wrapper(client, wsdl_name)
    +def extract_version(filename):
    +    contents = open(filename).read()
    +    match = re.search('^__version__\s+=\s+[\'"](.*)[\'"]\s*$', contents,
    +      re.MULTILINE)
    +    if match is not None:
    +        return match.group(1)
     

    ---
    @@ -1530,7 +1671,7 @@ def _create_client_wrapper(self, client, wsdl_name):
  • πŸ“ˆ Lines of Code: 65
  • πŸ“„ Lines of Documentation: 228
  • πŸ“… Development Period: 2013-03-22 to 2021-11-04
  • -
  • πŸ”₯ Recent Activity: 3993.9 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 3994.3 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: 0.0.0.0 (2013-03-22)

  • @@ -1566,7 +1707,7 @@ build:
  • πŸ“ˆ Lines of Code: 136
  • πŸ“„ Lines of Documentation: 96
  • πŸ“… Development Period: 2013-03-22 to 2021-11-05
  • -
  • πŸ”₯ Recent Activity: 4006.9 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 4007.3 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: 0.2.0 (2014-07-05)

  • @@ -1602,7 +1743,7 @@ build:
  • πŸ“ˆ Lines of Code: 134
  • πŸ“„ Lines of Documentation: 106
  • πŸ“… Development Period: 2013-03-22 to 2021-11-05
  • -
  • πŸ”₯ Recent Activity: 4014.4 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 4014.8 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: 0.1.5 (2014-06-22)

  • @@ -1626,7 +1767,7 @@ build:
  • πŸ“ˆ Lines of Code: 493
  • πŸ“„ Lines of Documentation: 26
  • πŸ“… Development Period: 2009-09-27 to 2021-11-02
  • -
  • πŸ”₯ Recent Activity: 4057.7 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 4058.1 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: 0.9.3 (2014-06-14)

  • @@ -1642,10 +1783,17 @@ build: Shell from bin/pwgrep.sh:

    -function pwdbls () {
    -  echo Available Databases:
    -  _pwdbls
    -  echo Current database: $DB
    +function findbin () {
    +  local -r trylist=$1
    +  found=""
    +  for bin in $trylist; do
    +    if [ -z $found ]; then
    +      which=$(which $bin)
    +      [ ! -z $which ] && found=$bin  
    +    fi
    +  done
    +
    +  echo $found
     }
     

    @@ -1660,7 +1808,7 @@ function pwdbls () {
  • πŸ“ˆ Lines of Code: 286
  • πŸ“„ Lines of Documentation: 144
  • πŸ“… Development Period: 2013-03-22 to 2021-11-05
  • -
  • πŸ”₯ Recent Activity: 4062.7 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 4063.1 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: 0.4.3 (2014-06-16)

  • @@ -1684,7 +1832,7 @@ function pwdbls () {
  • πŸ“ˆ Lines of Code: 191
  • πŸ“„ Lines of Documentation: 8
  • πŸ“… Development Period: 2014-03-24 to 2014-03-24
  • -
  • πŸ”₯ Recent Activity: 4124.0 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 4124.4 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • πŸ§ͺ Status: Experimental (no releases yet)

  • @@ -1697,18 +1845,18 @@ function pwdbls () { View on Codeberg
    View on GitHub

    -Perl from math.pl:
    +Perl from perllove.pl:

    -do { int'egrate'; sub trade; };
    -do { exp'onentize' and abs'olutize' };
    -study and study and study and study;
    -
    -foreach $topic ({of, math}) {
    -you, m/ay /go, to, limits }
    -
    -do { not qw/erk / unless $success 
    -and m/ove /o;$n and study };
    +no strict;
    +no warn