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 warnings;
    +we: do { print 'love'
    +or warn and die 'slow'
    +unless not defined true #respect
    +} for reverse'd', qw/mind of you/
    +and map { 'me' } 'into', undef $mourning;
    +__END__ 
    +v2 Copyright (2005, 2006) by Paul C. Buetow, http://paul.buetow.org
     

    ---
    @@ -1720,7 +1868,7 @@ and m/ove /o;$n and study };
  • πŸ“Š Commits: 7
  • πŸ“ˆ Lines of Code: 80
  • πŸ“… Development Period: 2011-07-09 to 2015-01-13
  • -
  • πŸ”₯ Recent Activity: 4204.0 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 4204.4 days (avg. age of last 42 commits)
  • βš–οΈ License: Custom License
  • πŸ§ͺ Status: Experimental (no releases yet)

  • @@ -1736,15 +1884,28 @@ and m/ove /o;$n and study }; Perl from index.pl:

    -Congratulations, you have connected to a server that will display your method of connection, either IPv6 (preferred) or IPv4 (old and crusty). Well IPv6 is already ~15 years old either but not as old as IPv4 ;)
    +Congratulations, you have connected to a server that will display your method
    +  of connection, either IPv6 (preferred) or IPv4 (old and crusty). Well IPv6 is
    +  already ~15 years old either but not as old as IPv4 ;)
     <br /><br />
     Nevertheless, please choose your destiny:
     <ul>
    -	<li><a href="http://ipv6.buetow.org">ipv6.buetow.org</a> for IPv6 & IPv4 Test</li>
    -	<li><a href="http://test4.ipv6.buetow.org">test4.ipv6.buetow.org</a> for IPv4 Only Test</li>
    -	<li><a href="http://test6.ipv6.buetow.org">test6.ipv6.buetow.org</a> for IPv6 Only Test</li>
    +	<li><a href="http://ipv6.buetow.org">ipv6.buetow.org</a> for IPv6 & IPv4
    +	  Test</li>
    +	<li><a href="http://test4.ipv6.buetow.org">test4.ipv6.buetow.org</a> for IPv4
    +	  Only Test</li>
    +	<li><a href="http://test6.ipv6.buetow.org">test6.ipv6.buetow.org</a> for IPv6
    +	  Only Test</li>
     </ul>
    -If your browser times-out when trying to connect to this server then you do not have an IPv6 or IPv4 path (depends on which test you are running) to the server. If your browser returns an error that the host cannot be found then the DNS servers you are using are unable to resolve the AAAA or A DNS record (depends on which test you are running again) for the server. If your browser is able to connect to the "IPv6 Only Test", yet using the "IPv6 & IPv4 Test" returns a page stating you are using IPv4, then your browser and/or IP stack in your machine are preferring IPv4 over IPv6. It also might be that your operating system supports IPv6 but your web-browser doesn't.
    +If your browser times-out when trying to connect to this server then you do not
    +  have an IPv6 or IPv4 path (depends on which test you are running) to the
    +  server. If your browser returns an error that the host cannot be found then the
    +  DNS servers you are using are unable to resolve the AAAA or A DNS record (
    +  depends on which test you are running again) for the server. If your browser is
    +  able to connect to the "IPv6 Only Test", yet using the "IPv6 & IPv4 Test"
    +  returns a page stating you are using IPv4, then your browser and/or IP stack in
    +  your machine are preferring IPv4 over IPv6. It also might be that your
    +  operating system supports IPv6 but your web-browser doesn't.
     END
     
     if ($ENV{SERVER_NAME} eq 'ipv6.buetow.org') {
    @@ -1761,7 +1922,7 @@ if ($ENV{SERVER_NAME} eq 'ipv6.buetow.org') {
     
  • πŸ“ˆ Lines of Code: 124
  • πŸ“„ Lines of Documentation: 75
  • πŸ“… Development Period: 2010-11-05 to 2021-11-05
  • -
  • πŸ”₯ Recent Activity: 4244.7 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 4245.1 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: 1.0.2 (2014-06-22)

  • @@ -1785,7 +1946,7 @@ if ($ENV{SERVER_NAME} eq 'ipv6.buetow.org') {
  • πŸ“ˆ Lines of Code: 1828
  • πŸ“„ Lines of Documentation: 100
  • πŸ“… Development Period: 2010-11-05 to 2015-05-23
  • -
  • πŸ”₯ Recent Activity: 4274.8 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 4275.2 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: 0.7.5 (2014-06-22)

  • @@ -1822,7 +1983,7 @@ our @EXPORT = qw(
  • πŸ“Š Commits: 110
  • πŸ“ˆ Lines of Code: 614
  • πŸ“… Development Period: 2011-02-05 to 2022-04-21
  • -
  • πŸ”₯ Recent Activity: 4324.2 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 4324.7 days (avg. age of last 42 commits)
  • βš–οΈ License: Custom License
  • 🏷️ Latest Release: v1.4 (2022-04-29)

  • @@ -1835,16 +1996,20 @@ our @EXPORT = qw( View on Codeberg
    View on GitHub

    -Perl from lib/PerlDaemonModules/ExampleModule.pm:
    +Perl from lib/PerlDaemon/PerlDaemon.pl:

    -sub new ($$$) {
    -  my ($class, $conf) = @_;
    +sub trimstr (@) {
    +  my @str = 
    +  @_;
     
    -  my $self = bless { conf => $conf }, $class;
    -  $self->{counter} = 0;
    +  for (@str) {
    +    chomp;
    +    s/^[\t\s]+//;
    +    s/[\t\s]+$//;
    +  }
     
    -  return $self;
    +  return @str;
     }
     

    @@ -1859,7 +2024,7 @@ sub new ($$$) {
  • πŸ“ˆ Lines of Code: 122
  • πŸ“„ Lines of Documentation: 10
  • πŸ“… Development Period: 2011-01-27 to 2014-06-22
  • -
  • πŸ”₯ Recent Activity: 4655.3 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 4655.7 days (avg. age of last 42 commits)
  • βš–οΈ License: No license found
  • 🏷️ Latest Release: v0.2 (2011-01-27)

  • @@ -1875,10 +2040,22 @@ sub new ($$$) { AWK from index.cgi:

    -function process_line(line) {
    -  if (line ~ /%%.+%%/)
    -    return insert_template_value(line) 
    -  return line
    +function read_config_values(config_file) {
    +  while ((getline < config_file) > 0) {
    +    position = index($0,"=")
    +    if (position == 0 || /^#/)
    +      continue
    +
    +    key = substr($0, 0, position)
    +    val = substr($0, position+1, 100)
    +
    +    if (val ~ /^!/) 
    +       substr(val, 2, 100) | getline val	
    +
    +    values[key] = val
    +  }
    +
    +  close(config_file)
     }
     

    @@ -1893,7 +2070,7 @@ function process_line(line) {
  • πŸ“ˆ Lines of Code: 720
  • πŸ“„ Lines of Documentation: 6
  • πŸ“… Development Period: 2008-06-21 to 2021-11-03
  • -
  • πŸ”₯ Recent Activity: 4717.9 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 4718.3 days (avg. age of last 42 commits)
  • βš–οΈ License: Custom License
  • 🏷️ Latest Release: v0.3 (2009-02-08)

  • @@ -1908,18 +2085,41 @@ function process_line(line) { View on Codeberg
    View on GitHub

    -Java from sources/smstrade/SPrefs.java:
    +Java from sources/smstrade/SMain.java:

    -public SPrefs(Component parent, HashMap<String,String> options) {
    -    super("Preferences", parent);
    +public static final String SAVE_FILE = "jsmstrade.dat";
    +
    +public static final String DEFAULT_URL =
    +    "https://gateway.smstrade.de?key=KEY&to=TO&route=basic&message=";
    +
    +private HashMap<String,String> options = null;
    +
    +private JTextArea textArea = new JTextArea();
    +
    +private JButton sendButton = new JButton("Send it");
    +
    +private JButton clearButton = new JButton("Delete");
    +
    +private JLabel counterLabel = new JLabel(" 160");
    +
    +private JLabel counterTextLabel = new JLabel("Chars");
    +
    +private JPanel buttonPanel = new JPanel();
    +
    +private JMenuBar menuBar = new JMenuBar();
    +
    +private JMenu fileMenu = new JMenu("File");
    +
    +public SMain(HashMap<String,String> options) {
    +    super("JSMSTrade v" + VERSION);
         this.options = options;
     
    -    disposeWithParent();
         setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
         setSize(300, 150);
         setResizable(false);
     
    +    fillMenuBar();
         fillContentPane();
         setVisible(true);
     }
    @@ -1936,7 +2136,7 @@ public SPrefs(Component parent, HashMap<String,String> options) {
     
  • πŸ“ˆ Lines of Code: 17380
  • πŸ“„ Lines of Documentation: 947
  • πŸ“… Development Period: 2009-02-07 to 2021-05-01
  • -
  • πŸ”₯ Recent Activity: 5348.6 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 5349.0 days (avg. age of last 42 commits)
  • βš–οΈ License: GPL-2.0
  • 🏷️ Latest Release: v0.1 (2009-02-08)

  • @@ -1953,18 +2153,39 @@ public SPrefs(Component parent, HashMap<String,String> options) { View on Codeberg
    View on GitHub

    -Java from sources/client/helper/DateSpinner.java:
    +Java from sources/client/SplashScreen.java:

    -private void initComponents() {
    -    setLayout(new FlowLayout(FlowLayout.LEFT, 4, 4));
    +public class SplashScreen extends JWindow implements Runnable {
    +    private static final long serialVersionUID = 1L;
     
    -    spinnerDateModel = new SpinnerDateModel(date, null, null, Calendar.MONTH);
    -    JSpinner jSpinner = new JSpinner(spinnerDateModel);
    -    new JSpinner.DateEditor(jSpinner, "MM/yy");
    +    public void run() {
    +        JPanel jPanel = (JPanel)getContentPane();
    +        jPanel.setBackground(Color.BLACK);
    +        jPanel.setForeground(Color.WHITE);
     
    -    add(jSpinner);
    -}
    +        int iWidth = 411;
    +        int iHeight = 261;
    +        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
    +
    +        int x = (dimension.width-iWidth)/2;
    +        int y = (dimension.height-iHeight)/2;
    +        setBounds(x,y,iWidth,iHeight);
    +
    +        JLabel jLabel = new JLabel(new ImageIcon("images/netcal.png"));
    +        jPanel.add(jLabel, BorderLayout.CENTER);
    +        jPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 3));
    +        setVisible(true);
    +
    +        try {
    +            Thread.sleep(3000);
    +
    +        } catch (Exception e) {
    +            Main.infoMessage(e.getMessage());
    +        }
    +
    +        dispose();
    +    }
     

    ---
    @@ -1976,7 +2197,7 @@ private void initComponents() {
  • πŸ“Š Commits: 80
  • πŸ“ˆ Lines of Code: 601
  • πŸ“… Development Period: 2009-11-22 to 2011-10-17
  • -
  • πŸ”₯ Recent Activity: 5444.2 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 5444.7 days (avg. age of last 42 commits)
  • βš–οΈ License: Custom License
  • πŸ§ͺ Status: Experimental (no releases yet)

  • @@ -1989,19 +2210,19 @@ private void initComponents() { View on Codeberg
    View on GitHub

    -Haskell from HsBot/IRC.hs:
    +Haskell from HsBot/Base/State.hs:

    -module HsBot.IRC (ircStart) where
    +-- {-# LANGUAGE MultiParamTypeClasses #-}
    +-- {-# LANGUAGE FunctionalDependencies #-}
    +-- {-# LANGUAGE FlexibleInstances #-}
    +-- {-# LANGUAGE NoMonomorphismRestriction #-}
    +
    +module HsBot.Base.State where
     
    -import IO
    -import List
    -import Network
    -import System
    -import System.IO
    -import Text.Printf
    +import HsBot.Base.Database
     
    -import HsBot.Base.Conf
    +import qualified Data.Map as M
     

    ---
    @@ -2015,7 +2236,7 @@ import HsBot.Base.Conf
  • πŸ“ˆ Lines of Code: 45956
  • πŸ“„ Lines of Documentation: 101
  • πŸ“… Development Period: 2008-05-15 to 2014-06-30
  • -
  • πŸ”₯ Recent Activity: 5554.8 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 5555.2 days (avg. age of last 42 commits)
  • βš–οΈ License: GPL-2.0
  • 🏷️ Latest Release: yhttpd-0.7.2 (2013-04-06)

  • @@ -2030,17 +2251,19 @@ import HsBot.Base.Conf View on Codeberg
    View on GitHub

    -C++ from ycurses/src/curses/attributes.cpp:
    +C++ from ychat/src/mods/commands/yc_set.cpp:

    -#define ATTRIBUTES_CPP
    -
    -#include "attributes.h"
    -
    -attributes::attributes()
    +const char* c_newval = s_newval.c_str();
    +if ( isdigit( c_newval[0] ) )
     {
    -  init();
    -}
    +  int i_newval = c_newval[0] - '0';
    +
    +  s_msg = p_timr->get_time()
    +          + " "
    +          + p_user->get_colored_bold_name()
    +          + " "
    +          + p_conf->get_elem("chat.msgs.setcommandstatus")
     

    ---
    @@ -2054,7 +2277,7 @@ attributes::attributes()
  • πŸ“ˆ Lines of Code: 16303
  • πŸ“„ Lines of Documentation: 2903
  • πŸ“… Development Period: 2008-05-15 to 2021-05-01
  • -
  • πŸ”₯ Recent Activity: 5740.7 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 5741.1 days (avg. age of last 42 commits)
  • βš–οΈ License: Custom License
  • 🏷️ Latest Release: v1.0 (2008-08-24)

  • @@ -2069,13 +2292,25 @@ attributes::attributes() View on Codeberg
    View on GitHub

    -Java from sources/serialize/VSSerialize.java:
    +Java from sources/simulator/VSMenuItemStates.java:

    -public boolean accept(File file) {
    -    if (file.isDirectory())
    -        return true;
    -    return file.getName().toLowerCase().endsWith(".dat");
    +private static final long serialVersionUID = 1L;
    +
    +private volatile boolean pause;
    +
    +private volatile boolean replay;
    +
    +private volatile boolean reset;
    +
    +private volatile boolean start;
    +
    +public VSMenuItemStates(boolean pause, boolean replay, boolean reset,
    +                        boolean start) {
    +    this.pause = pause;
    +    this.replay = replay;
    +    this.reset = reset;
    +    this.start = start;
     }
     

    @@ -2090,7 +2325,7 @@ public boolean accept(File file) {
  • πŸ“ˆ Lines of Code: 8622
  • πŸ“„ Lines of Documentation: 1474
  • πŸ“… Development Period: 2008-05-15 to 2014-06-30
  • -
  • πŸ”₯ Recent Activity: 5768.3 days (avg. age of last 42 commits)
  • +
  • πŸ”₯ Recent Activity: 5768.7 days (avg. age of last 42 commits)
  • βš–οΈ License: Custom License
  • πŸ§ͺ Status: Experimental (no releases yet)

  • @@ -2102,6 +2337,20 @@ public boolean accept(File file) {
    View on Codeberg
    View on GitHub
    +
    +C from src/data/dat.c:
    +
    +
    +   p_elem->type = type;
    +
    +   return (p_elem);
    +}
    +
    +_Bool
    +dat_empty(Dat *p_dat) {
    +   if (p_dat == NULL)
    +      return (false);
    +