diff options
Diffstat (limited to 'about')
| -rw-r--r-- | about/showcase.html | 383 | ||||
| -rw-r--r-- | about/showcase/debroid/image-1.png | 82 | ||||
| -rw-r--r-- | about/showcase/totalrecall/image-2.png | bin | 0 -> 628880 bytes |
3 files changed, 236 insertions, 229 deletions
diff --git a/about/showcase.html b/about/showcase.html index 0e4c1cfe..ce305acb 100644 --- a/about/showcase.html +++ b/about/showcase.html @@ -13,7 +13,7 @@ </p> <h1 style='display: inline' id='project-showcase'>Project Showcase</h1><br /> <br /> -<span>Generated on: 2025-07-20</span><br /> +<span>Generated on: 2025-07-21</span><br /> <br /> <span>This page showcases my side projects, providing an overview of what each project does, its technical implementation, and key metrics. Each project summary includes information about the programming languages used, development activity, and licensing. The projects are ordered by recent activity, with the most actively maintained projects listed first.</span><br /> <br /> @@ -28,7 +28,6 @@ <li>⇢ ⇢ <a href='#timr'>timr</a></li> <li>⇢ ⇢ <a href='#rexfiles'>rexfiles</a></li> <li>⇢ ⇢ <a href='#tasksamurai'>tasksamurai</a></li> -<li>⇢ ⇢ <a href='#foozone'>foo.zone</a></li> <li>⇢ ⇢ <a href='#ior'>ior</a></li> <li>⇢ ⇢ <a href='#dtail'>dtail</a></li> <li>⇢ ⇢ <a href='#wireguardmeshgenerator'>wireguardmeshgenerator</a></li> @@ -37,7 +36,6 @@ <li>⇢ ⇢ <a href='#gos'>gos</a></li> <li>⇢ ⇢ <a href='#foostats'>foostats</a></li> <li>⇢ ⇢ <a href='#rcm'>rcm</a></li> -<li>⇢ ⇢ <a href='#gemtexter'>gemtexter</a></li> <li>⇢ ⇢ <a href='#quicklogger'>quicklogger</a></li> <li>⇢ ⇢ <a href='#docker-gpodder-sync-server'>docker-gpodder-sync-server</a></li> <li>⇢ ⇢ <a href='#terraform'>terraform</a></li> @@ -47,10 +45,13 @@ <li>⇢ ⇢ <a href='#gorum'>gorum</a></li> <li>⇢ ⇢ <a href='#guprecords'>guprecords</a></li> <li>⇢ ⇢ <a href='#randomjournalpage'>randomjournalpage</a></li> +<li>⇢ ⇢ <a href='#gemtexter'>gemtexter</a></li> <li>⇢ ⇢ <a href='#sway-autorotate'>sway-autorotate</a></li> <li>⇢ ⇢ <a href='#photoalbum'>photoalbum</a></li> <li>⇢ ⇢ <a href='#algorithms'>algorithms</a></li> <li>⇢ ⇢ <a href='#geheim'>geheim</a></li> +<li>⇢ ⇢ <a href='#foozone'>foo.zone</a></li> +<li>⇢ ⇢ <a href='#xerl'>xerl</a></li> <li>⇢ ⇢ <a href='#perl-c-fibonacci'>perl-c-fibonacci</a></li> <li>⇢ ⇢ <a href='#ioriot'>ioriot</a></li> <li>⇢ ⇢ <a href='#staticfarm-apache-handlers'>staticfarm-apache-handlers</a></li> @@ -59,7 +60,6 @@ <li>⇢ ⇢ <a href='#rubyfy'>rubyfy</a></li> <li>⇢ ⇢ <a href='#pingdomfetch'>pingdomfetch</a></li> <li>⇢ ⇢ <a href='#gotop'>gotop</a></li> -<li>⇢ ⇢ <a href='#xerl'>xerl</a></li> <li>⇢ ⇢ <a href='#debroid'>debroid</a></li> <li>⇢ ⇢ <a href='#fapi'>fapi</a></li> <li>⇢ ⇢ <a href='#template'>template</a></li> @@ -74,23 +74,23 @@ <li>⇢ ⇢ <a href='#perldaemon'>perldaemon</a></li> <li>⇢ ⇢ <a href='#awksite'>awksite</a></li> <li>⇢ ⇢ <a href='#jsmstrade'>jsmstrade</a></li> -<li>⇢ ⇢ <a href='#netcalendar'>netcalendar</a></li> <li>⇢ ⇢ <a href='#ychat'>ychat</a></li> -<li>⇢ ⇢ <a href='#hsbot'>hsbot</a></li> +<li>⇢ ⇢ <a href='#netcalendar'>netcalendar</a></li> <li>⇢ ⇢ <a href='#vs-sim'>vs-sim</a></li> +<li>⇢ ⇢ <a href='#hsbot'>hsbot</a></li> <li>⇢ ⇢ <a href='#fype'>fype</a></li> </ul><br /> <h2 style='display: inline' id='overall-statistics'>Overall Statistics</h2><br /> <br /> <ul> <li>📦 Total Projects: 56</li> -<li>📊 Total Commits: 10,552</li> -<li>📈 Total Lines of Code: 216,571</li> -<li>📄 Total Lines of Documentation: 22,738</li> -<li>💻 Languages: Go (26.6%), Java (18.7%), HTML (15.8%), C (8.9%), Perl (7.2%), XML (6.2%), C/C++ (3.7%), Shell (3.2%), C++ (2.4%), Config (1.4%), Ruby (1.3%), HCL (1.3%), Python (0.7%), Make (0.6%), CSS (0.6%), Raku (0.4%), JSON (0.4%), Haskell (0.3%), YAML (0.2%), TOML (0.1%)</li> -<li>📚 Documentation: Text (50.5%), Markdown (47.0%), LaTeX (2.5%)</li> +<li>📊 Total Commits: 10,576</li> +<li>📈 Total Lines of Code: 206,858</li> +<li>📄 Total Lines of Documentation: 24,896</li> +<li>💻 Languages: Go (29.9%), Java (26.5%), C (9.3%), C++ (8.2%), Perl (6.9%), C/C++ (6.0%), Shell (2.8%), HTML (1.8%), Config (1.8%), Ruby (1.4%), HCL (1.3%), Python (0.8%), Make (0.7%), CSS (0.6%), XML (0.5%), Raku (0.4%), JSON (0.4%), Haskell (0.3%), YAML (0.2%), TOML (0.1%)</li> +<li>📚 Documentation: Text (44.4%), Markdown (41.8%), LaTeX (13.8%)</li> <li>🎵 Vibe-Coded Projects: 4 out of 56 (7.1%)</li> -<li>🤖 AI-Assisted Projects (including vibe-coded): 9 out of 56 (16.1% AI-assisted, 83.9% human-only)</li> +<li>🤖 AI-Assisted Projects (including vibe-coded): 8 out of 56 (14.3% AI-assisted, 85.7% human-only)</li> <li>🚀 Release Status: 34 released, 22 experimental (60.7% with releases, 39.3% experimental)</li> </ul><br /> <h2 style='display: inline' id='projects'>Projects</h2><br /> @@ -98,15 +98,15 @@ <h3 style='display: inline' id='totalrecall'>totalrecall</h3><br /> <br /> <ul> -<li>💻 Languages: Go (98.9%), Shell (0.9%), YAML (0.2%)</li> -<li>📚 Documentation: Markdown (93.3%), Text (6.7%)</li> -<li>📊 Commits: 55</li> -<li>📈 Lines of Code: 7684</li> -<li>📄 Lines of Documentation: 390</li> -<li>📅 Development Period: 2025-07-14 to 2025-07-20</li> -<li>🔥 Recent Activity: 1.7 days (avg. age of last 42 commits)</li> +<li>💻 Languages: Go (98.9%), Shell (0.5%), YAML (0.5%)</li> +<li>📚 Documentation: Markdown (89.0%), Text (11.0%)</li> +<li>📊 Commits: 74</li> +<li>📈 Lines of Code: 12010</li> +<li>📄 Lines of Documentation: 498</li> +<li>📅 Development Period: 2025-07-14 to 2025-07-21</li> +<li>🔥 Recent Activity: 1.6 days (avg. age of last 42 commits)</li> <li>⚖️ License: MIT</li> -<li>🏷️ Latest Release: v0.6.1 (2025-07-20)</li> +<li>🏷️ Latest Release: v0.7.1 (2025-07-21)</li> <li>🎵 Vibe-Coded: This project has been vibe coded</li> </ul><br /> <br /> @@ -114,6 +114,8 @@ <br /> <span>**totalrecall** is a Bulgarian language learning tool that generates comprehensive Anki flashcard materials from Bulgarian words. It creates high-quality audio pronunciations using OpenAI TTS, AI-generated contextual images via DALL-E, and automatic translations, making it easier for learners to memorize Bulgarian vocabulary through visual and auditory associations. The tool is particularly useful for language learners who want to create professional-quality flashcards with authentic Bulgarian pronunciation and memorable visual contexts without manually sourcing audio and images.</span><br /> <br /> +<a href='showcase/totalrecall/image-2.png'><img alt='totalrecall screenshot' title='totalrecall screenshot' src='showcase/totalrecall/image-2.png' /></a><br /> +<br /> <span>The project is implemented in Go with a modular architecture featuring both CLI and GUI interfaces. It leverages OpenAI's APIs for audio generation (11 available voices) and image creation, includes audio caching to minimize API costs, and supports batch processing from text files. The tool outputs Anki-compatible packages (.apkg format) or CSV files with all media included, following a clean package structure with separate modules for audio generation, image processing, Anki formatting, and configuration management using industry-standard libraries like Cobra for CLI and Viper for configuration.</span><br /> <br /> <a class='textlink' href='https://codeberg.org/snonux/totalrecall'>View on Codeberg</a><br /> @@ -126,13 +128,13 @@ <ul> <li>💻 Languages: Go (90.3%), Shell (8.1%), YAML (1.0%), JSON (0.5%)</li> <li>📚 Documentation: Markdown (100.0%)</li> -<li>📊 Commits: 92</li> -<li>📈 Lines of Code: 9187</li> +<li>📊 Commits: 94</li> +<li>📈 Lines of Code: 9183</li> <li>📄 Lines of Documentation: 2484</li> -<li>📅 Development Period: 2025-06-23 to 2025-07-19</li> -<li>🔥 Recent Activity: 7.8 days (avg. age of last 42 commits)</li> +<li>📅 Development Period: 2025-06-23 to 2025-07-20</li> +<li>🔥 Recent Activity: 8.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: BSD-2-Clause</li> -<li>🏷️ Latest Release: v0.8.2 (2025-07-19)</li> +<li>🏷️ Latest Release: v0.8.3 (2025-07-20)</li> <li>🎵 Vibe-Coded: This project has been vibe coded</li> </ul><br /> <br /> @@ -154,7 +156,7 @@ <li>📈 Lines of Code: 873</li> <li>📄 Lines of Documentation: 137</li> <li>📅 Development Period: 2025-06-25 to 2025-07-19</li> -<li>🔥 Recent Activity: 22.0 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 23.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: BSD-2-Clause</li> <li>🏷️ Latest Release: v0.0.0 (2025-06-29)</li> <li>🎵 Vibe-Coded: This project has been vibe coded</li> @@ -178,7 +180,7 @@ <li>📈 Lines of Code: 4142</li> <li>📄 Lines of Documentation: 854</li> <li>📅 Development Period: 2021-12-28 to 2025-07-16</li> -<li>🔥 Recent Activity: 22.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 24.3 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -201,7 +203,7 @@ <li>📈 Lines of Code: 6160</li> <li>📄 Lines of Documentation: 162</li> <li>📅 Development Period: 2025-06-19 to 2025-07-12</li> -<li>🔥 Recent Activity: 23.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 25.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: BSD-2-Clause</li> <li>🏷️ Latest Release: v0.9.2 (2025-07-02)</li> <li>🎵 Vibe-Coded: This project has been vibe coded</li> @@ -220,30 +222,6 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='foozone'>foo.zone</h3><br /> -<br /> -<ul> -<li>💻 Languages: HTML (70.6%), XML (28.8%), Shell (0.4%), CSS (0.2%)</li> -<li>📚 Documentation: Markdown (61.0%), Text (39.0%)</li> -<li>📊 Commits: 2939</li> -<li>📈 Lines of Code: 44172</li> -<li>📄 Lines of Documentation: 574</li> -<li>📅 Development Period: 2021-04-29 to 2025-07-20</li> -<li>🔥 Recent Activity: 24.8 days (avg. age of last 42 commits)</li> -<li>⚖️ License: No license found</li> -<li>🧪 Status: Experimental (no releases yet)</li> -<li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> -</ul><br /> -<br /> -<span>This is **foo.zone**, a personal blog and technical website belonging to Paul Buetow, a Site Reliability Engineer based in Sofia, Bulgaria. The project is a static website that serves as a comprehensive platform for sharing technical knowledge, book notes, and personal experiences in the fields of system administration, DevOps, and programming.</span><br /> -<br /> -<span>The site is built using **Gemtexter**, a static site generator that creates both HTML and Gemini protocol content from markdown sources. The architecture is refreshingly simple and follows KISS principles, with content organized into several key sections: a main blog feed (gemfeed) with over 100 technical posts dating back to 2008, detailed book notes and summaries, project documentation (including tools like DTail for distributed log tailing), and personal resources. The website is served by OpenBSD using relayd and httpd, demonstrating the author's preference for robust, security-focused Unix systems. The project emphasizes clean, semantic HTML, custom CSS styling, and accessibility, while maintaining both web and Gemini protocol compatibility for broader reach across different internet communities.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/foo.zone'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/foo.zone'>View on GitHub</a><br /> -<br /> -<span>---</span><br /> -<br /> <h3 style='display: inline' id='ior'>ior</h3><br /> <br /> <ul> @@ -253,7 +231,7 @@ <li>📈 Lines of Code: 12762</li> <li>📄 Lines of Documentation: 742</li> <li>📅 Development Period: 2024-01-18 to 2025-07-14</li> -<li>🔥 Recent Activity: 61.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 63.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> <li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> @@ -283,7 +261,7 @@ <li>📈 Lines of Code: 20091</li> <li>📄 Lines of Documentation: 5674</li> <li>📅 Development Period: 2020-01-09 to 2025-06-20</li> -<li>🔥 Recent Activity: 63.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 64.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: Apache-2.0</li> <li>🏷️ Latest Release: v4.2.0 (2023-06-21)</li> <li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> @@ -311,7 +289,7 @@ <li>📈 Lines of Code: 396</li> <li>📄 Lines of Documentation: 24</li> <li>📅 Development Period: 2025-04-18 to 2025-05-11</li> -<li>🔥 Recent Activity: 82.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 84.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v1.0.0 (2025-05-11)</li> </ul><br /> @@ -334,7 +312,7 @@ <li>📈 Lines of Code: 25762</li> <li>📄 Lines of Documentation: 3101</li> <li>📅 Development Period: 2008-05-15 to 2025-06-27</li> -<li>🔥 Recent Activity: 96.0 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 97.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> <li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> @@ -360,7 +338,7 @@ <li>📈 Lines of Code: 33</li> <li>📄 Lines of Documentation: 3</li> <li>📅 Development Period: 2025-04-03 to 2025-04-03</li> -<li>🔥 Recent Activity: 108.5 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 110.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -383,7 +361,7 @@ <li>📈 Lines of Code: 3967</li> <li>📄 Lines of Documentation: 324</li> <li>📅 Development Period: 2024-05-04 to 2025-07-12</li> -<li>🔥 Recent Activity: 121.7 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 123.1 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v1.0.0 (2025-03-04)</li> </ul><br /> @@ -410,7 +388,7 @@ <li>📈 Lines of Code: 1586</li> <li>📄 Lines of Documentation: 154</li> <li>📅 Development Period: 2023-01-02 to 2025-07-12</li> -<li>🔥 Recent Activity: 129.5 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 130.9 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v0.1.0 (2025-07-12)</li> </ul><br /> @@ -433,7 +411,7 @@ <li>📈 Lines of Code: 1373</li> <li>📄 Lines of Documentation: 48</li> <li>📅 Development Period: 2024-12-05 to 2025-02-28</li> -<li>🔥 Recent Activity: 149.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 150.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -447,29 +425,6 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='gemtexter'>gemtexter</h3><br /> -<br /> -<ul> -<li>💻 Languages: Shell (68.1%), CSS (28.7%), Config (1.9%), HTML (1.3%)</li> -<li>📚 Documentation: Text (76.1%), Markdown (23.9%)</li> -<li>📊 Commits: 465</li> -<li>📈 Lines of Code: 2268</li> -<li>📄 Lines of Documentation: 1180</li> -<li>📅 Development Period: 2021-05-21 to 2025-07-09</li> -<li>🔥 Recent Activity: 211.7 days (avg. age of last 42 commits)</li> -<li>⚖️ License: GPL-3.0</li> -<li>🏷️ Latest Release: 3.0.0 (2024-10-01)</li> -</ul><br /> -<br /> -<span>**Gemtexter** is a static site generator and blog engine that transforms content written in Gemini Gemtext format into multiple output formats. It's a comprehensive Bash-based tool designed to support the Gemini protocol (a simpler alternative to HTTP) while maintaining compatibility with traditional web technologies. The project converts a single source of Gemtext content into HTML (XHTML 1.0 Transitional), Markdown, and native Gemtext formats, enabling authors to write once and publish across multiple platforms including Gemini capsules, traditional websites, and GitHub/Codeberg pages.</span><br /> -<br /> -<span>The implementation is built entirely in Bash (version 5.x+) using a modular library approach with separate source files for different functionality (atomfeed, gemfeed, HTML generation, Markdown conversion, templating, etc.). Key features include automatic blog post indexing, Atom feed generation, customizable HTML themes, source code highlighting, Bash-based templating system, and integrated Git workflow management. The architecture separates content directories by format (gemtext/, html/, md/) and includes comprehensive theming support, font embedding, and publishing workflows that can automatically sync content to multiple Git repositories for deployment on various platforms.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/gemtexter'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/gemtexter'>View on GitHub</a><br /> -<br /> -<span>---</span><br /> -<br /> <h3 style='display: inline' id='quicklogger'>quicklogger</h3><br /> <br /> <ul> @@ -479,7 +434,7 @@ <li>📈 Lines of Code: 917</li> <li>📄 Lines of Documentation: 33</li> <li>📅 Development Period: 2024-01-20 to 2025-07-06</li> -<li>🔥 Recent Activity: 459.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 460.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: MIT</li> <li>🏷️ Latest Release: v0.0.3 (2025-07-06)</li> </ul><br /> @@ -506,7 +461,7 @@ <li>📈 Lines of Code: 12</li> <li>📄 Lines of Documentation: 3</li> <li>📅 Development Period: 2024-03-24 to 2024-03-24</li> -<li>🔥 Recent Activity: 483.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 484.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -529,7 +484,7 @@ <li>📈 Lines of Code: 2850</li> <li>📄 Lines of Documentation: 52</li> <li>📅 Development Period: 2023-08-27 to 2025-04-05</li> -<li>🔥 Recent Activity: 513.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 514.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: MIT</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -552,7 +507,7 @@ <li>📈 Lines of Code: 1096</li> <li>📄 Lines of Documentation: 287</li> <li>📅 Development Period: 2023-04-17 to 2025-06-12</li> -<li>🔥 Recent Activity: 525.9 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 527.3 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v1.1.0 (2024-05-03)</li> <li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> @@ -578,7 +533,7 @@ <li>📈 Lines of Code: 32</li> <li>📄 Lines of Documentation: 3</li> <li>📅 Development Period: 2023-12-31 to 2023-12-31</li> -<li>🔥 Recent Activity: 566.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 568.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -601,7 +556,7 @@ <li>📈 Lines of Code: 29</li> <li>📄 Lines of Documentation: 3</li> <li>📅 Development Period: 2023-08-13 to 2024-01-01</li> -<li>🔥 Recent Activity: 659.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 661.3 days (avg. age of last 42 commits)</li> <li>⚖️ License: MIT</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -624,7 +579,7 @@ <li>📈 Lines of Code: 1525</li> <li>📄 Lines of Documentation: 15</li> <li>📅 Development Period: 2023-04-17 to 2023-11-19</li> -<li>🔥 Recent Activity: 712.0 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 713.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -647,7 +602,7 @@ <li>📈 Lines of Code: 312</li> <li>📄 Lines of Documentation: 416</li> <li>📅 Development Period: 2013-03-22 to 2025-05-18</li> -<li>🔥 Recent Activity: 762.0 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 763.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: v1.0.0 (2023-04-29)</li> </ul><br /> @@ -670,7 +625,7 @@ <li>📈 Lines of Code: 51</li> <li>📄 Lines of Documentation: 26</li> <li>📅 Development Period: 2022-06-02 to 2024-04-20</li> -<li>🔥 Recent Activity: 776.7 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 778.1 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -685,6 +640,30 @@ <br /> <span>---</span><br /> <br /> +<h3 style='display: inline' id='gemtexter'>gemtexter</h3><br /> +<br /> +<ul> +<li>💻 Languages: Shell (86.6%), CSS (8.3%), Config (3.2%), HTML (1.9%)</li> +<li>📚 Documentation: Text (68.0%), Markdown (32.0%)</li> +<li>📊 Commits: 465</li> +<li>📈 Lines of Code: 1585</li> +<li>📄 Lines of Documentation: 778</li> +<li>📅 Development Period: 2021-05-21 to 2023-07-17</li> +<li>🔥 Recent Activity: 826.8 days (avg. age of last 42 commits)</li> +<li>⚖️ License: GPL-3.0</li> +<li>🏷️ Latest Release: 3.0.0 (2024-10-01)</li> +</ul><br /> +<span>⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.</span><br /> +<br /> +<span>**Gemtexter** is a static site generator and blog engine that transforms content written in Gemini Gemtext format into multiple output formats. It's a comprehensive Bash-based tool designed to support the Gemini protocol (a simpler alternative to HTTP) while maintaining compatibility with traditional web technologies. The project converts a single source of Gemtext content into HTML (XHTML 1.0 Transitional), Markdown, and native Gemtext formats, enabling authors to write once and publish across multiple platforms including Gemini capsules, traditional websites, and GitHub/Codeberg pages.</span><br /> +<br /> +<span>The implementation is built entirely in Bash (version 5.x+) using a modular library approach with separate source files for different functionality (atomfeed, gemfeed, HTML generation, Markdown conversion, templating, etc.). Key features include automatic blog post indexing, Atom feed generation, customizable HTML themes, source code highlighting, Bash-based templating system, and integrated Git workflow management. The architecture separates content directories by format (gemtext/, html/, md/) and includes comprehensive theming support, font embedding, and publishing workflows that can automatically sync content to multiple Git repositories for deployment on various platforms.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/gemtexter'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/gemtexter'>View on GitHub</a><br /> +<br /> +<span>---</span><br /> +<br /> <h3 style='display: inline' id='sway-autorotate'>sway-autorotate</h3><br /> <br /> <ul> @@ -694,7 +673,7 @@ <li>📈 Lines of Code: 41</li> <li>📄 Lines of Documentation: 17</li> <li>📅 Development Period: 2020-01-30 to 2025-04-30</li> -<li>🔥 Recent Activity: 1070.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 1071.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: GPL-3.0</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -717,7 +696,7 @@ <li>📈 Lines of Code: 342</li> <li>📄 Lines of Documentation: 39</li> <li>📅 Development Period: 2011-11-19 to 2022-04-02</li> -<li>🔥 Recent Activity: 1289.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 1291.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.5.0 (2022-02-21)</li> </ul><br /> @@ -741,7 +720,7 @@ <li>📈 Lines of Code: 1728</li> <li>📄 Lines of Documentation: 18</li> <li>📅 Development Period: 2020-07-12 to 2023-04-09</li> -<li>🔥 Recent Activity: 1441.0 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 1442.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -765,7 +744,7 @@ <li>📈 Lines of Code: 671</li> <li>📄 Lines of Documentation: 19</li> <li>📅 Development Period: 2018-05-26 to 2025-01-21</li> -<li>🔥 Recent Activity: 1442.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 1444.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -781,6 +760,55 @@ <br /> <span>---</span><br /> <br /> +<h3 style='display: inline' id='foozone'>foo.zone</h3><br /> +<br /> +<ul> +<li>📚 Documentation: Markdown (100.0%)</li> +<li>📊 Commits: 2942</li> +<li>📈 Lines of Code: 0</li> +<li>📄 Lines of Documentation: 23</li> +<li>📅 Development Period: 2021-05-21 to 2022-04-02</li> +<li>🔥 Recent Activity: 1458.0 days (avg. age of last 42 commits)</li> +<li>⚖️ License: No license found</li> +<li>🧪 Status: Experimental (no releases yet)</li> +</ul><br /> +<span>⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.</span><br /> +<br /> +<span>This is **foo.zone**, a personal blog and technical website belonging to Paul Buetow, a Site Reliability Engineer based in Sofia, Bulgaria. The project is a static website that serves as a comprehensive platform for sharing technical knowledge, book notes, and personal experiences in the fields of system administration, DevOps, and programming.</span><br /> +<br /> +<span>The site is built using **Gemtexter**, a static site generator that creates both HTML and Gemini protocol content from markdown sources. The architecture is refreshingly simple and follows KISS principles, with content organized into several key sections: a main blog feed (gemfeed) with over 100 technical posts dating back to 2008, detailed book notes and summaries, project documentation (including tools like DTail for distributed log tailing), and personal resources. The website is served by OpenBSD using relayd and httpd, demonstrating the author's preference for robust, security-focused Unix systems. The project emphasizes clean, semantic HTML, custom CSS styling, and accessibility, while maintaining both web and Gemini protocol compatibility for broader reach across different internet communities.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/foo.zone'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/foo.zone'>View on GitHub</a><br /> +<br /> +<span>---</span><br /> +<br /> +<h3 style='display: inline' id='xerl'>xerl</h3><br /> +<br /> +<ul> +<li>💻 Languages: CSS (54.6%), XML (39.1%), Perl (4.0%), Make (2.2%)</li> +<li>📚 Documentation: Text (91.2%), Org (4.9%), Markdown (3.9%)</li> +<li>📊 Commits: 670</li> +<li>📈 Lines of Code: 815</li> +<li>📄 Lines of Documentation: 102</li> +<li>📅 Development Period: 2011-03-06 to 2021-11-02</li> +<li>🔥 Recent Activity: 1860.8 days (avg. age of last 42 commits)</li> +<li>⚖️ License: Custom License</li> +<li>🏷️ Latest Release: v1.0.0 (2018-12-22)</li> +</ul><br /> +<span>⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.</span><br /> +<br /> +<span>Based on my analysis of the project files, here's a summary of Xerl:</span><br /> +<br /> +<span>**Xerl** is an open-source website template engine with Content Management System (CMS) features, written in object-oriented Perl and powered by FastCGI. It uses XML-based configuration and content files to generate static websites with multiple output formats (HTML5, XHTML, RSS feeds, and plain text).</span><br /> +<br /> +<span>The system works through a template-driven architecture where content is written in XML files with semantic tags (like <span class='inlinecode'><pagetitle></span>, <span class='inlinecode'><text></span>, <span class='inlinecode'><enumeration></span>) that get transformed into HTML using configurable transformation rules. The <span class='inlinecode'>config.xml</span> file defines how these semantic tags map to HTML elements, supporting variables and dynamic content insertion. Each website can have its own template configuration, content files, and static assets (CSS, images, fonts), making it useful for maintaining multiple related websites with consistent styling and structure while allowing customization per site. The project includes several example sites (paul.buetow.org, xerl.buetow.org) and redirect configurations, demonstrating its practical use for personal or organizational web presence management.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/xerl'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/xerl'>View on GitHub</a><br /> +<br /> +<span>---</span><br /> +<br /> <h3 style='display: inline' id='perl-c-fibonacci'>perl-c-fibonacci</h3><br /> <br /> <ul> @@ -790,7 +818,7 @@ <li>📈 Lines of Code: 51</li> <li>📄 Lines of Documentation: 69</li> <li>📅 Development Period: 2014-03-24 to 2022-04-23</li> -<li>🔥 Recent Activity: 1921.9 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 1923.3 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -814,7 +842,7 @@ <li>📈 Lines of Code: 12420</li> <li>📄 Lines of Documentation: 610</li> <li>📅 Development Period: 2018-03-01 to 2020-01-22</li> -<li>🔥 Recent Activity: 2463.5 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 2464.9 days (avg. age of last 42 commits)</li> <li>⚖️ License: Apache-2.0</li> <li>🏷️ Latest Release: 0.5.1 (2019-01-04)</li> </ul><br /> @@ -840,7 +868,7 @@ <li>📈 Lines of Code: 919</li> <li>📄 Lines of Documentation: 12</li> <li>📅 Development Period: 2015-01-02 to 2021-11-04</li> -<li>🔥 Recent Activity: 2972.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 2973.6 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.1.3 (2015-01-02)</li> </ul><br /> @@ -864,7 +892,7 @@ <li>📈 Lines of Code: 18</li> <li>📄 Lines of Documentation: 49</li> <li>📅 Development Period: 2014-03-24 to 2021-11-05</li> -<li>🔥 Recent Activity: 3208.0 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3209.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -888,7 +916,7 @@ <li>📈 Lines of Code: 5360</li> <li>📄 Lines of Documentation: 789</li> <li>📅 Development Period: 2015-01-02 to 2021-11-05</li> -<li>🔥 Recent Activity: 3474.7 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3476.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.0.1 (2015-01-02)</li> </ul><br /> @@ -912,7 +940,7 @@ <li>📈 Lines of Code: 273</li> <li>📄 Lines of Documentation: 32</li> <li>📅 Development Period: 2015-09-29 to 2021-11-05</li> -<li>🔥 Recent Activity: 3478.9 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3480.3 days (avg. age of last 42 commits)</li> <li>⚖️ License: Apache-2.0</li> <li>🏷️ Latest Release: 0 (2015-10-26)</li> </ul><br /> @@ -936,7 +964,7 @@ <li>📈 Lines of Code: 1839</li> <li>📄 Lines of Documentation: 412</li> <li>📅 Development Period: 2015-01-02 to 2021-11-05</li> -<li>🔥 Recent Activity: 3558.5 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3560.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.0.2 (2015-01-02)</li> </ul><br /> @@ -960,7 +988,7 @@ <li>📈 Lines of Code: 499</li> <li>📄 Lines of Documentation: 8</li> <li>📅 Development Period: 2015-05-24 to 2021-11-03</li> -<li>🔥 Recent Activity: 3569.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3570.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.1 (2015-06-01)</li> </ul><br /> @@ -975,30 +1003,6 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='xerl'>xerl</h3><br /> -<br /> -<ul> -<li>💻 Languages: Perl (98.3%), Config (1.2%), Make (0.5%)</li> -<li>📊 Commits: 670</li> -<li>📈 Lines of Code: 1675</li> -<li>📅 Development Period: 2011-03-06 to 2018-12-22</li> -<li>🔥 Recent Activity: 3624.9 days (avg. age of last 42 commits)</li> -<li>⚖️ License: Custom License</li> -<li>🏷️ Latest Release: v1.0.0 (2018-12-22)</li> -</ul><br /> -<span>⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.</span><br /> -<br /> -<span>Based on my analysis of the project files, here's a summary of Xerl:</span><br /> -<br /> -<span>**Xerl** is an open-source website template engine with Content Management System (CMS) features, written in object-oriented Perl and powered by FastCGI. It uses XML-based configuration and content files to generate static websites with multiple output formats (HTML5, XHTML, RSS feeds, and plain text).</span><br /> -<br /> -<span>The system works through a template-driven architecture where content is written in XML files with semantic tags (like <span class='inlinecode'><pagetitle></span>, <span class='inlinecode'><text></span>, <span class='inlinecode'><enumeration></span>) that get transformed into HTML using configurable transformation rules. The <span class='inlinecode'>config.xml</span> file defines how these semantic tags map to HTML elements, supporting variables and dynamic content insertion. Each website can have its own template configuration, content files, and static assets (CSS, images, fonts), making it useful for maintaining multiple related websites with consistent styling and structure while allowing customization per site. The project includes several example sites (paul.buetow.org, xerl.buetow.org) and redirect configurations, demonstrating its practical use for personal or organizational web presence management.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/xerl'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/xerl'>View on GitHub</a><br /> -<br /> -<span>---</span><br /> -<br /> <h3 style='display: inline' id='debroid'>debroid</h3><br /> <br /> <ul> @@ -1008,7 +1012,7 @@ <li>📈 Lines of Code: 88</li> <li>📄 Lines of Documentation: 148</li> <li>📅 Development Period: 2015-06-18 to 2015-12-05</li> -<li>🔥 Recent Activity: 3673.0 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3674.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -1034,7 +1038,7 @@ <li>📈 Lines of Code: 1681</li> <li>📄 Lines of Documentation: 539</li> <li>📅 Development Period: 2014-03-10 to 2021-11-03</li> -<li>🔥 Recent Activity: 3951.0 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3952.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.0.2 (2014-11-17)</li> </ul><br /> @@ -1058,7 +1062,7 @@ <li>📈 Lines of Code: 65</li> <li>📄 Lines of Documentation: 228</li> <li>📅 Development Period: 2013-03-22 to 2021-11-04</li> -<li>🔥 Recent Activity: 4005.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4006.9 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.0.0.0 (2013-03-22)</li> </ul><br /> @@ -1082,7 +1086,7 @@ <li>📈 Lines of Code: 136</li> <li>📄 Lines of Documentation: 96</li> <li>📅 Development Period: 2013-03-22 to 2021-11-05</li> -<li>🔥 Recent Activity: 4018.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4019.8 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.2.0 (2014-07-05)</li> </ul><br /> @@ -1106,7 +1110,7 @@ <li>📈 Lines of Code: 134</li> <li>📄 Lines of Documentation: 106</li> <li>📅 Development Period: 2013-03-22 to 2021-11-05</li> -<li>🔥 Recent Activity: 4025.9 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4027.3 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.1.5 (2014-06-22)</li> </ul><br /> @@ -1130,7 +1134,7 @@ <li>📈 Lines of Code: 493</li> <li>📄 Lines of Documentation: 26</li> <li>📅 Development Period: 2009-09-27 to 2021-11-02</li> -<li>🔥 Recent Activity: 4069.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4070.6 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.9.3 (2014-06-14)</li> </ul><br /> @@ -1154,7 +1158,7 @@ <li>📈 Lines of Code: 286</li> <li>📄 Lines of Documentation: 144</li> <li>📅 Development Period: 2013-03-22 to 2021-11-05</li> -<li>🔥 Recent Activity: 4074.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4075.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.4.3 (2014-06-16)</li> </ul><br /> @@ -1178,7 +1182,7 @@ <li>📈 Lines of Code: 191</li> <li>📄 Lines of Documentation: 8</li> <li>📅 Development Period: 2014-03-24 to 2014-03-24</li> -<li>🔥 Recent Activity: 4135.5 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4136.9 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -1200,7 +1204,7 @@ <li>📊 Commits: 7</li> <li>📈 Lines of Code: 80</li> <li>📅 Development Period: 2011-07-09 to 2015-01-13</li> -<li>🔥 Recent Activity: 4215.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4217.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -1224,7 +1228,7 @@ <li>📈 Lines of Code: 124</li> <li>📄 Lines of Documentation: 75</li> <li>📅 Development Period: 2010-11-05 to 2021-11-05</li> -<li>🔥 Recent Activity: 4256.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4257.6 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.0.2 (2014-06-22)</li> </ul><br /> @@ -1248,7 +1252,7 @@ <li>📈 Lines of Code: 1828</li> <li>📄 Lines of Documentation: 100</li> <li>📅 Development Period: 2010-11-05 to 2015-05-23</li> -<li>🔥 Recent Activity: 4286.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4287.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.7.5 (2014-06-22)</li> </ul><br /> @@ -1270,7 +1274,7 @@ <li>📊 Commits: 110</li> <li>📈 Lines of Code: 614</li> <li>📅 Development Period: 2011-02-05 to 2022-04-21</li> -<li>🔥 Recent Activity: 4335.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4337.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v1.4 (2022-04-29)</li> </ul><br /> @@ -1294,7 +1298,7 @@ <li>📈 Lines of Code: 122</li> <li>📄 Lines of Documentation: 10</li> <li>📅 Development Period: 2011-01-27 to 2014-06-22</li> -<li>🔥 Recent Activity: 4666.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4668.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: v0.2 (2011-01-27)</li> </ul><br /> @@ -1318,7 +1322,7 @@ <li>📈 Lines of Code: 720</li> <li>📄 Lines of Documentation: 6</li> <li>📅 Development Period: 2008-06-21 to 2021-11-03</li> -<li>🔥 Recent Activity: 4729.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4730.9 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v0.3 (2009-02-08)</li> </ul><br /> @@ -1335,6 +1339,32 @@ <br /> <span>---</span><br /> <br /> +<h3 style='display: inline' id='ychat'>ychat</h3><br /> +<br /> +<ul> +<li>💻 Languages: C++ (62.8%), C/C++ (27.1%), HTML (3.1%), Config (2.5%), Perl (1.9%), Shell (1.9%), Make (0.4%), CSS (0.2%)</li> +<li>📚 Documentation: Text (100.0%)</li> +<li>📊 Commits: 67</li> +<li>📈 Lines of Code: 27104</li> +<li>📄 Lines of Documentation: 109</li> +<li>📅 Development Period: 2008-05-15 to 2014-07-01</li> +<li>🔥 Recent Activity: 5331.8 days (avg. age of last 42 commits)</li> +<li>⚖️ License: GPL-2.0</li> +<li>🏷️ Latest Release: yhttpd-0.7.2 (2013-04-06)</li> +</ul><br /> +<span>⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.</span><br /> +<br /> +<span>Based on my analysis of the codebase, here's a concise summary of the yChat project:</span><br /> +<br /> +<span>**yChat** is a web-based chat server written in C++ that functions as a standalone HTTP server without requiring external web server dependencies. It allows users to participate in multi-room chat sessions using standard web browsers, with no special client software needed. The system supports user registration, authentication via session IDs, customizable HTML templates, and multi-language support through XML configuration files.</span><br /> +<br /> +<span>The architecture is built around several key managers: a socket manager for handling HTTP connections, a chat manager for core functionality, an HTML template manager for dynamic content generation, and a modular system supporting dynamically loadable command modules. It uses hash maps for efficient O(1) data retrieval, POSIX threads for concurrent request handling, and includes advanced features like SSL support, MySQL database integration, garbage collection for memory management, and comprehensive logging. The codebase also includes related projects like yhttpd (a lightweight HTTP server) and ycurses (a terminal interface library), making it a comprehensive communication platform designed for performance and extensibility.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/ychat'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/ychat'>View on GitHub</a><br /> +<br /> +<span>---</span><br /> +<br /> <h3 style='display: inline' id='netcalendar'>netcalendar</h3><br /> <br /> <ul> @@ -1344,7 +1374,7 @@ <li>📈 Lines of Code: 17380</li> <li>📄 Lines of Documentation: 947</li> <li>📅 Development Period: 2009-02-07 to 2021-05-01</li> -<li>🔥 Recent Activity: 5360.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 5361.6 days (avg. age of last 42 commits)</li> <li>⚖️ License: GPL-2.0</li> <li>🏷️ Latest Release: v0.1 (2009-02-08)</li> </ul><br /> @@ -1363,29 +1393,29 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='ychat'>ychat</h3><br /> +<h3 style='display: inline' id='vs-sim'>vs-sim</h3><br /> <br /> <ul> -<li>💻 Languages: C++ (51.1%), C/C++ (29.9%), Shell (15.9%), HTML (1.4%), Perl (1.2%), Make (0.4%), CSS (0.1%)</li> -<li>📚 Documentation: Text (100.0%)</li> -<li>📊 Commits: 67</li> -<li>📈 Lines of Code: 9958</li> -<li>📄 Lines of Documentation: 103</li> -<li>📅 Development Period: 2008-05-15 to 2014-07-01</li> -<li>🔥 Recent Activity: 5389.7 days (avg. age of last 42 commits)</li> -<li>⚖️ License: GPL-2.0</li> -<li>🏷️ Latest Release: yhttpd-0.7.2 (2013-04-06)</li> +<li>💻 Languages: Java (98.6%), Shell (0.8%), XML (0.4%)</li> +<li>📚 Documentation: LaTeX (98.4%), Text (1.4%), Markdown (0.2%)</li> +<li>📊 Commits: 411</li> +<li>📈 Lines of Code: 14582</li> +<li>📄 Lines of Documentation: 2903</li> +<li>📅 Development Period: 2008-05-15 to 2022-04-03</li> +<li>🔥 Recent Activity: 5397.8 days (avg. age of last 42 commits)</li> +<li>⚖️ License: Custom License</li> +<li>🏷️ Latest Release: v1.0 (2008-08-24)</li> </ul><br /> <span>⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.</span><br /> <br /> -<span>Based on my analysis of the codebase, here's a concise summary of the yChat project:</span><br /> +<a href='showcase/vs-sim/image-1.jpg'><img alt='vs-sim screenshot' title='vs-sim screenshot' src='showcase/vs-sim/image-1.jpg' /></a><br /> <br /> -<span>**yChat** is a web-based chat server written in C++ that functions as a standalone HTTP server without requiring external web server dependencies. It allows users to participate in multi-room chat sessions using standard web browsers, with no special client software needed. The system supports user registration, authentication via session IDs, customizable HTML templates, and multi-language support through XML configuration files.</span><br /> +<span>VS-Sim is an open-source distributed systems simulator written in Java, developed as a diploma thesis at Aachen University of Applied Sciences. It provides a visual environment for simulating and understanding distributed system algorithms including consensus protocols (one-phase/two-phase commit), time synchronization (Berkeley, Lamport, vector clocks), and communication patterns (multicast, broadcast, reliable messaging). The simulator is useful for educational purposes, allowing students and researchers to visualize complex distributed system concepts through interactive simulations.</span><br /> <br /> -<span>The architecture is built around several key managers: a socket manager for handling HTTP connections, a chat manager for core functionality, an HTML template manager for dynamic content generation, and a modular system supporting dynamically loadable command modules. It uses hash maps for efficient O(1) data retrieval, POSIX threads for concurrent request handling, and includes advanced features like SSL support, MySQL database integration, garbage collection for memory management, and comprehensive logging. The codebase also includes related projects like yhttpd (a lightweight HTTP server) and ycurses (a terminal interface library), making it a comprehensive communication platform designed for performance and extensibility.</span><br /> +<span>The implementation features a modular architecture with separate packages for core processes, events, protocols, and visualization. It includes pre-built protocol implementations, a GUI-based simulator with start/pause/reset controls, serialization support for saving simulations, and comprehensive time modeling systems. The codebase demonstrates clean separation of concerns with abstract base classes for extensibility and a plugin-like protocol system for easy addition of new distributed algorithms.</span><br /> <br /> -<a class='textlink' href='https://codeberg.org/snonux/ychat'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/ychat'>View on GitHub</a><br /> +<a class='textlink' href='https://codeberg.org/snonux/vs-sim'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/vs-sim'>View on GitHub</a><br /> <br /> <span>---</span><br /> <br /> @@ -1396,7 +1426,7 @@ <li>📊 Commits: 80</li> <li>📈 Lines of Code: 601</li> <li>📅 Development Period: 2009-11-22 to 2011-10-17</li> -<li>🔥 Recent Activity: 5455.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 5457.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -1411,39 +1441,16 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='vs-sim'>vs-sim</h3><br /> -<br /> -<ul> -<li>📚 Documentation: Markdown (100.0%)</li> -<li>📊 Commits: 411</li> -<li>📈 Lines of Code: 0</li> -<li>📄 Lines of Documentation: 7</li> -<li>📅 Development Period: 2008-05-15 to 2015-05-23</li> -<li>🔥 Recent Activity: 5816.7 days (avg. age of last 42 commits)</li> -<li>⚖️ License: No license found</li> -<li>🏷️ Latest Release: v1.0 (2008-08-24)</li> -</ul><br /> -<span>⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.</span><br /> -<br /> -<span>VS-Sim is an open-source distributed systems simulator written in Java, developed as a diploma thesis at Aachen University of Applied Sciences. It provides a visual environment for simulating and understanding distributed system algorithms including consensus protocols (one-phase/two-phase commit), time synchronization (Berkeley, Lamport, vector clocks), and communication patterns (multicast, broadcast, reliable messaging). The simulator is useful for educational purposes, allowing students and researchers to visualize complex distributed system concepts through interactive simulations.</span><br /> -<br /> -<span>The implementation features a modular architecture with separate packages for core processes, events, protocols, and visualization. It includes pre-built protocol implementations, a GUI-based simulator with start/pause/reset controls, serialization support for saving simulations, and comprehensive time modeling systems. The codebase demonstrates clean separation of concerns with abstract base classes for extensibility and a plugin-like protocol system for easy addition of new distributed algorithms.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/vs-sim'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/vs-sim'>View on GitHub</a><br /> -<br /> -<span>---</span><br /> -<br /> <h3 style='display: inline' id='fype'>fype</h3><br /> <br /> <ul> -<li>💻 Languages: C (71.2%), C/C++ (20.7%), HTML (6.6%), Make (1.5%)</li> -<li>📚 Documentation: Text (60.3%), LaTeX (39.7%)</li> +<li>💻 Languages: C (71.3%), C/C++ (20.6%), HTML (6.6%), Make (1.5%)</li> +<li>📚 Documentation: Text (60.2%), LaTeX (39.8%)</li> <li>📊 Commits: 99</li> -<li>📈 Lines of Code: 8954</li> -<li>📄 Lines of Documentation: 1432</li> -<li>📅 Development Period: 2008-05-15 to 2014-06-30</li> -<li>🔥 Recent Activity: 5842.4 days (avg. age of last 42 commits)</li> +<li>📈 Lines of Code: 8906</li> +<li>📄 Lines of Documentation: 1431</li> +<li>📅 Development Period: 2008-05-15 to 2021-04-29</li> +<li>🔥 Recent Activity: 5864.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> diff --git a/about/showcase/debroid/image-1.png b/about/showcase/debroid/image-1.png index 80b07466..71c4a1e5 100644 --- a/about/showcase/debroid/image-1.png +++ b/about/showcase/debroid/image-1.png @@ -36,44 +36,44 @@ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-dc7ca6859caf.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-03a65c451725.css" /> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-d1aed5b4075c.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-8bbd7051486c.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-db7b386c190b.css" /> - <script type="application/json" id="client-env">{"locale":"en","featureFlags":["alternate_user_config_repo","api_insights_show_missing_data_banner","attestations_filtering","attestations_sorting","client_version_header","code_scanning_security_configuration_ternary_state","codespaces_prebuild_region_target_update","contact_requests_implicit_opt_in","contentful_lp_copilot_extensions","contentful_lp_flex_features","contentful_lp_footnotes","copilot_activity_report","copilot_chat_attach_multiple_images","copilot_chat_floating_sidebar_focus_trap","copilot_chat_group_notifications","copilot_chat_navigable_refs","copilot_chat_vision_in_claude","copilot_chat_vision_skip_thread_create","copilot_chat_wholearea_dd","copilot_custom_copilots_feature_preview","copilot_custom_copilots_images","copilot_duplicate_thread","copilot_free_to_paid_telem","copilot_ftp_hyperspace_upgrade_prompt","copilot_ftp_settings_upgrade","copilot_ftp_upgrade_to_pro_from_models","copilot_ftp_your_copilot_settings","copilot_immersive_draft_issue_template_form_ui","copilot_immersive_structured_model_picker","copilot_no_floating_button","copilot_read_shared_conversation","copilot_spaces_input_menu_select","copilot_spark_allow_empty_commit","copilot_spark_single_user_iteration","copilot_spark_use_billing_headers","copilot_task_oriented_assistive_prompts","copilot_workbench_connection_reload_banner","copilot_workbench_iterate_panel","copilot_workbench_preview_analytics","copilot_workbench_refresh_on_wsod","custom_copilots_128k_window","custom_copilots_capi_mode","custom_copilots_file_uploads","direct_to_salesforce","dotcom_chat_client_side_skills","failbot_report_error_react_apps_on_page","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","insert_before_patch","issue_fields_report_usage","issues_catch_non_json_graphql_response","issues_comment_load_user_settings","issues_label_search_url","issues_preserve_tokens_in_urls","issues_react_blur_item_picker_on_close","issues_react_bots_timeline_pagination","issues_react_create_milestone","issues_react_optimistic_markdown","issues_react_prohibit_title_fallback","issues_react_remove_placeholders","issues_template_picker_redirect","lifecycle_label_name_updates","link_contact_sales_swp_marketo","marketing_pages_search_explore_provider","memex_mwl_filter_field_delimiter","nonreporting_relay_graphql_status_codes","primer_react_select_panel_with_modern_action_list","remove_child_patch","sample_network_conn_type","scheduled_reminders_updated_limits","site_homepage_contentful","site_msbuild_hide_integrations","site_msbuild_launch","site_msbuild_webgl_hero","spark_commit_on_default_branch","spark_sync_repository_after_iteration","swp_enterprise_contact_form","use_paginated_repo_picker_cost_center_form","viewscreen_sandbox","workbench_default_sonnet4","workbench_store_readonly"],"copilotApiUrl":"https://api.individual.githubcopilot.com"}</script> + <script type="application/json" id="client-env">{"locale":"en","featureFlags":["alternate_user_config_repo","api_insights_show_missing_data_banner","attestations_filtering","attestations_sorting","client_version_header","code_scanning_security_configuration_ternary_state","codespaces_prebuild_region_target_update","contact_requests_implicit_opt_in","contentful_lp_copilot_extensions","contentful_lp_flex_features","contentful_lp_footnotes","copilot_activity_report","copilot_chat_attach_multiple_images","copilot_chat_floating_sidebar_focus_trap","copilot_chat_group_notifications","copilot_chat_navigable_refs","copilot_chat_vision_in_claude","copilot_chat_vision_skip_thread_create","copilot_chat_wholearea_dd","copilot_custom_copilots_feature_preview","copilot_custom_copilots_images","copilot_duplicate_thread","copilot_free_to_paid_telem","copilot_ftp_hyperspace_upgrade_prompt","copilot_ftp_settings_upgrade","copilot_ftp_upgrade_to_pro_from_models","copilot_ftp_your_copilot_settings","copilot_immersive_draft_issue_template_form_ui","copilot_immersive_structured_model_picker","copilot_no_floating_button","copilot_read_shared_conversation","copilot_spaces_input_menu_select","copilot_spark_allow_empty_commit","copilot_spark_single_user_iteration","copilot_spark_use_billing_headers","copilot_task_oriented_assistive_prompts","copilot_workbench_connection_reload_banner","copilot_workbench_iterate_panel","copilot_workbench_preview_analytics","copilot_workbench_refresh_on_wsod","copilot_workbench_synthetic_generation","custom_copilots_128k_window","custom_copilots_capi_mode","custom_copilots_file_uploads","direct_to_salesforce","dotcom_chat_client_side_skills","failbot_report_error_react_apps_on_page","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","insert_before_patch","issue_fields_report_usage","issues_catch_non_json_graphql_response","issues_comment_load_user_settings","issues_label_search_url","issues_preserve_tokens_in_urls","issues_react_blur_item_picker_on_close","issues_react_bots_timeline_pagination","issues_react_create_milestone","issues_react_optimistic_markdown","issues_react_prohibit_title_fallback","issues_react_remove_placeholders","issues_template_picker_redirect","lifecycle_label_name_updates","link_contact_sales_swp_marketo","marketing_pages_search_explore_provider","memex_mwl_filter_field_delimiter","nonreporting_relay_graphql_status_codes","primer_react_select_panel_with_modern_action_list","remove_child_patch","sample_network_conn_type","scheduled_reminders_updated_limits","site_homepage_contentful","site_msbuild_hide_integrations","site_msbuild_launch","site_msbuild_webgl_hero","spark_commit_on_default_branch","spark_sync_repository_after_iteration","swp_enterprise_contact_form","use_paginated_repo_picker_cost_center_form","viewscreen_sandbox","workbench_default_sonnet4","workbench_store_readonly"],"copilotApiUrl":"https://api.individual.githubcopilot.com"}</script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/high-contrast-cookie-039f089f08c3.js"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-1685eb918d8c.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-9135a4a49258.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-a8c266e5f126.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-1d3d52-babac9434833.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_failbot_failbot_ts-4eaa91ff7c9c.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/environment-37836f8ad297.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_failbot_failbot_ts-ebf5f98f3920.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/environment-17084f3f370f.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_index_mjs-c44edfed7f0d.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_selector-observer_dist_index_esm_js-cdf2757bd188.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_relative-time-element_dist_index_js-5913bc24f35d.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_text-expander-element_dist_index_js-e50fb7a5fe8c.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-8e9f78-c1e2fb329866.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-8e9f78-bd3e08e767f2.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b5f1d7-514a92c925f0.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_markdown-toolbar-element_dist_index_js-6a8c7d9a08fe.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_primer_view-co-f03a40-c631b99b0f08.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-594e8106f187.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-529fad20b892.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-04e767b0ad5b.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-ac220d0be4ce.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_braintree_browser-detection_dist_browser-detection_js-node_modules_githu-bb80ec-34c4b68b1dd3.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-b93a87060d31.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_morphdom_dist_morphdom-esm_js-300e8e4e0414.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_turbo_dist_turbo_es2017-esm_js-595819d3686f.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-893f9f-5f044d8dcee3.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_session-resume_-c39857-54c022ad5a68.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_updatable-content_updatable-content_ts-7b14b8aa0beb.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_updatable-content_updatable-content_ts-19a9ffc8367b.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_task-list_ts-app_assets_modules_github_sso_ts-ui_packages-900dde-f953ddf42948.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-e45aabc67d13.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-422e3114b79c.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_include-d0d0a6-a7da4270c5f4.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-567e0f340e27.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-161506cb2918.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-ea8eaa-0416579acb39.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-753a553f1820.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-c2c56357c82e.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-ea8eaa-9039ec39e74d.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-7746e1ef54b3.js" defer="defer"></script> <title>Page not found · GitHub · GitHub</title> @@ -83,13 +83,13 @@ <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient> <meta name="route-controller" content="blob" data-turbo-transient> <meta name="route-action" content="show" data-turbo-transient> - <meta name="fetch-nonce" content="v2:e05a05e7-39ff-bf9b-884a-5737d19b50ec"> + <meta name="fetch-nonce" content="v2:c41c714a-3934-7458-f785-90206cda4c2c"> <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb"> - <meta name="request-id" content="AA78:76351:783297:7C25DB:687CC802" data-pjax-transient="true"/><meta name="html-safe-nonce" content="8a42c9d0cb8964d36aeefa70abd070fa9a7c720dc0122c9e16046ba72b7d653e" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBQTc4Ojc2MzUxOjc4MzI5Nzo3QzI1REI6Njg3Q0M4MDIiLCJ2aXNpdG9yX2lkIjoiNDg5NzgwNjE5MzAwMDIzNzA1OCIsInJlZ2lvbl9lZGdlIjoiZnJhIiwicmVnaW9uX3JlbmRlciI6ImZyYSJ9" data-pjax-transient="true"/><meta name="visitor-hmac" content="afe69105b3f05c2da2bdc124ac638187acc2b0671a5e58293c82ae4ba0a79386" data-pjax-transient="true"/> + <meta name="request-id" content="B2C4:283F0D:2A3927:2B68DA:687EA59A" data-pjax-transient="true"/><meta name="html-safe-nonce" content="d42dd9287687c1bb7bf5e9b81acf38439e8194523e8c016f6ce2c50eb49d43ca" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCMkM0OjI4M0YwRDoyQTM5Mjc6MkI2OERBOjY4N0VBNTlBIiwidmlzaXRvcl9pZCI6Ijg0MzM4Njc1OTQwMjQyNjUxMTQiLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="803727356552859425910eb645625d353b3b2dadf53d3bcf95042c7b37ef29b7" data-pjax-transient="true"/> @@ -165,10 +165,10 @@ <meta name="expected-hostname" content="github.com"> - <meta http-equiv="x-pjax-version" content="a10164239a746d51677dd7864bd8a936f1617b21c72f47e9d647f2c061013122" data-turbo-track="reload"> + <meta http-equiv="x-pjax-version" content="71f7acc1971f8a2c950fc0485954bad95205635cf5e5a601396bbb9cd1c866b8" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="352e51c42d5f5727a7c545752bf34d1f83f40219e7036c6959817149a51651bc" data-turbo-track="reload"> - <meta http-equiv="x-pjax-css-version" content="db5407b34ed7dd78a10c3ffb9090ce21da82a95b43668b04d1de30e3d8a51dde" data-turbo-track="reload"> - <meta http-equiv="x-pjax-js-version" content="94f5de206406773bbf4cb7d075bea8be0e6e953d36f462380a86b5c178c4c7ca" data-turbo-track="reload"> + <meta http-equiv="x-pjax-css-version" content="83f9a94c02d28b6b9d27897e1bf0bb06438da8c3b28dcbfd90a1dba29bcec474" data-turbo-track="reload"> + <meta http-equiv="x-pjax-js-version" content="35cf16a460a2d001bef3a023841dca370e81f17acb48b282227f96f1953f4436" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> @@ -192,7 +192,7 @@ <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> - <meta name="release" content="af8b8db961ba78e3d23e4b92e239c190ef136f06"> + <meta name="release" content="55f3f659d6c2fe3429ceb1d5122d8a3ddd040037"> <meta name="ui-target" content="full"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> @@ -228,8 +228,8 @@ <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_cookie_index_js-node_modules_primer_live-region-element_dist_esm_index_j-1ca8f6-89ab81577c38.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ui-commands_ui-commands_ts-b755d908e0b1.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_document-metadata_document-metadata_ts-ui_packages_hydro-analytics_hydro-analytic-f29230-07417997172c.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-cf9f9950f389.js" defer="defer"></script> -<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.47f1598729334a521d2a.module.css" /> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-675f9f3d03d4.js" defer="defer"></script> +<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.31e88b582609fdba6d49.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.f8fba3bd67fe74f9227b.module.css" /> <react-partial @@ -253,7 +253,7 @@ <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_gsap_index_js-028cb2a18f5a.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-94fd67-b0625c39513c.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/sessions-d7b06c3c09b0.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/sessions-5b8882e94623.js" defer="defer"></script> <header class="HeaderMktg header-logged-out js-details-container js-header Details f4 py-3" role="banner" data-is-top="true" data-color-mode=light data-light-theme=light data-dark-theme=dark> <h2 class="sr-only">Navigation Menu</h2> @@ -292,15 +292,15 @@ </a> <div class="AppHeader-appearanceSettings"> <react-partial-anchor> - <button data-target="react-partial-anchor.anchor" id="icon-button-e8989817-7b1f-4c34-8284-d9edc712d79f" aria-labelledby="tooltip-c1cdf6f8-f921-460e-ab54-45bdf6107743" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual"> + <button data-target="react-partial-anchor.anchor" id="icon-button-59f7a8a8-a550-4fb1-8145-2ec7d8bf54bb" aria-labelledby="tooltip-f66044fc-3ad3-4648-b2c6-6b06e70cf7c5" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual"> <path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path> </svg> -</button><tool-tip id="tooltip-c1cdf6f8-f921-460e-ab54-45bdf6107743" for="icon-button-e8989817-7b1f-4c34-8284-d9edc712d79f" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip> +</button><tool-tip id="tooltip-f66044fc-3ad3-4648-b2c6-6b06e70cf7c5" for="icon-button-59f7a8a8-a550-4fb1-8145-2ec7d8bf54bb" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip> <template data-target="react-partial-anchor.template"> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_document-metadata_document-metadata_ts-ui_packages_promise-with-resolvers-polyfil-40d47c-2b0274d4149e.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/appearance-settings-d35856a333a1.js" defer="defer"></script> -<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.47f1598729334a521d2a.module.css" /> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/appearance-settings-5343e9f3bfc4.js" defer="defer"></script> +<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.31e88b582609fdba6d49.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.76259b61ecc822265749.module.css" /> <react-partial @@ -969,7 +969,7 @@ -<qbsearch-input class="search-input" data-scope="owner:buetow" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="2Ck6HOhhwAqQt8c6qwGDbgA3oqZum6Fl7jQ-oNpbh3lAHscaxWqKvjkyN02YE7qh7GuIG3SZooKcRHDjw6Gulw" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="" data-current-org="" data-current-owner="" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true"> +<qbsearch-input class="search-input" data-scope="owner:buetow" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="LeVWGxn28ErmuBblxxc9o7LDaGoC8x0fZt6ZmITRDKFuumM9NmXzi61oingkJH2mPHaK1s1MSyTedB0CVHsqKA" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="" data-current-org="" data-current-owner="" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true"> <div class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center mr-4 rounded" data-action="click:qbsearch-input#searchInputContainerClicked" @@ -1033,7 +1033,7 @@ ></div> <div class="QueryBuilder-InputWrapper"> <div aria-hidden="true" class="QueryBuilder-Sizer" data-target="query-builder.sizer"></div> - <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-109ae132-4111-4d7c-8ecb-ca730c34f331" data-target="query-builder.input" data-action=" + <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-82ec56ff-522b-446b-a809-afab1ea971ed" data-target="query-builder.input" data-action=" input:query-builder#inputChange blur:query-builder#inputBlur keydown:query-builder#inputKeydown @@ -1271,7 +1271,7 @@ tabindex="-1" ></ul> </div> - <div class="FormControl-inlineValidation" id="validation-109ae132-4111-4d7c-8ecb-ca730c34f331" hidden="hidden"> + <div class="FormControl-inlineValidation" id="validation-82ec56ff-522b-446b-a809-afab1ea971ed" hidden="hidden"> <span class="FormControl-inlineValidation--visual"> <svg aria-hidden="true" height="12" viewBox="0 0 12 12" version="1.1" width="12" data-view-component="true" class="octicon octicon-alert-fill"> <path d="M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"></path> @@ -1312,7 +1312,7 @@ </div> <scrollable-region data-labelled-by="feedback-dialog-title"> - <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="Na3fufjPKYxhNF++Ja2F96/pjmGvK4xQeKA4ihjjjsSkLQR+p1y/S2F7fAlfwJt7FjZPUzpNC237lOLSnlli0Q==" /> + <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="c5DRGWgUiB6rUkFtxjk49N3eab4aXiAlYCy/+IMYRXs2y03ZwHB7Q4JETa0xntOQxV6MZxnaxQme3zPjv7pNqQ==" /> <p>We read every piece of feedback, and take your input very seriously.</p> <textarea name="feedback" class="form-control width-full mb-2" style="height: 120px" id="feedback"></textarea> <input name="include_email" id="include_email" aria-label="Include my email address so I can be contacted" class="form-control mr-2" type="checkbox"> @@ -1350,7 +1350,7 @@ <div data-view-component="true" class="Overlay-body"> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <div hidden class="create-custom-scope-form" data-target="custom-scopes.createCustomScopeForm"> - <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="rz1ShIS6FLV011f5jfpN8udE5UjnC0RYBoC3yH3GPK7jyKf0XnAAHE1bN9OKzDTj7F2ydnrrqey08E7B4DoOfQ==" /> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="O0SfwHtd3vB68OC2PF80g63lxcMomWjwkL41YsAxoh0uaO6mUzw76w0MSt/zIl10+0RmqzXW/6WWHKeR5ucgag==" /> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField"> @@ -1368,7 +1368,7 @@ placeholder="github-ruby" required maxlength="50"> - <input type="hidden" data-csrf="true" value="jr/WFu6obHWvRSQWIGbEyN0yO0JbM1DRXlCrmywcUyvOZQmzHi75JuROhkbiNB6fxU76nrIbCFIFM8SbppR0Xw==" /> + <input type="hidden" data-csrf="true" value="9wcGcuGurpoGfOgzDBoeiLuTINRpGZe2fIlOpx8FbPnkuAxyCNWFIKAbx/j9HcgzqnWb7B7dWOXTpnyRbVYksg==" /> </auto-check> </div> @@ -1423,7 +1423,7 @@ <h4 data-view-component="true" class="color-fg-default mb-2"> Sign in to GitHub </h4> -<!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/session" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="t50Igv4yAIff6J7XLVoY1BbtSUisN0DHY5oBi1y/uHpvEVdUacGUg+sbZ5lJCHaEyL8Fe5eYcURJyIeaZnD2Pg==" /> <input type="hidden" name="add_account" id="add_account" autocomplete="off" class="form-control" /> +<!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/session" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="7RcFIlHIM5zMrSg7iU50rf0idYO8i/1d2Gt9T5f6SCcliQOhqjoblUQTIOfvtHmSjzZE/GM0yfxGXXxoIDvKIA==" /> <input type="hidden" name="add_account" id="add_account" autocomplete="off" class="form-control" /> <label for="login_field"> Username or email address @@ -1445,9 +1445,9 @@ <input type="hidden" name="allow_signup" id="allow_signup" autocomplete="off" class="form-control" /> <input type="hidden" name="client_id" id="client_id" autocomplete="off" class="form-control" /> <input type="hidden" name="integration" id="integration" autocomplete="off" class="form-control" /> -<input class="form-control" type="text" name="required_field_c7b3" hidden="hidden" /> -<input class="form-control" type="hidden" name="timestamp" value="1753008130290" /> -<input class="form-control" type="hidden" name="timestamp_secret" value="d25de836f037c0fb0f1a2e91d1dede2556dffe907249ba4c605987f5669e2537" /> +<input class="form-control" type="text" name="required_field_2332" hidden="hidden" /> +<input class="form-control" type="hidden" name="timestamp" value="1753130394954" /> +<input class="form-control" type="hidden" name="timestamp_secret" value="ffb7a47b5527aff899e48fe95b1e91b91d21a38db44cea14318eee8e9f016936" /> <input type="submit" name="commit" value="Sign in" class="btn btn-primary btn-block js-sign-in-button" data-disable-with="Signing in…" data-signin-label="Sign in" data-sso-label="Sign in with your identity provider" development="false" disable-emu-sso="false" /> @@ -1474,13 +1474,13 @@ <div class="AppHeader-appearanceSettings"> <react-partial-anchor> - <button data-target="react-partial-anchor.anchor" id="icon-button-7e779273-34dd-4665-9cf2-35f3bf5c58a2" aria-labelledby="tooltip-5c14853a-1c71-4201-bf51-0ce649c8720a" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual"> + <button data-target="react-partial-anchor.anchor" id="icon-button-a62b8d45-7fba-4e88-a03c-315f2fd2cde9" aria-labelledby="tooltip-540d8ce7-93e1-4577-b0d7-559111ee9350" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual"> <path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path> </svg> -</button><tool-tip id="tooltip-5c14853a-1c71-4201-bf51-0ce649c8720a" for="icon-button-7e779273-34dd-4665-9cf2-35f3bf5c58a2" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip> +</button><tool-tip id="tooltip-540d8ce7-93e1-4577-b0d7-559111ee9350" for="icon-button-a62b8d45-7fba-4e88-a03c-315f2fd2cde9" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip> <template data-target="react-partial-anchor.template"> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.47f1598729334a521d2a.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.31e88b582609fdba6d49.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.76259b61ecc822265749.module.css" /> <react-partial @@ -1514,10 +1514,10 @@ <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> - <button id="icon-button-d3a02aa3-4cd3-4327-aa94-df25d198628a" aria-labelledby="tooltip-a0ca2cbf-0553-4bf9-83bd-69cc4f63f902" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> + <button id="icon-button-7235a1af-7639-48cb-8156-2a49e74f2ec9" aria-labelledby="tooltip-bd001ab2-85df-4c89-90ab-4c6d0679b3d2" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> -</button><tool-tip id="tooltip-a0ca2cbf-0553-4bf9-83bd-69cc4f63f902" for="icon-button-d3a02aa3-4cd3-4327-aa94-df25d198628a" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> +</button><tool-tip id="tooltip-bd001ab2-85df-4c89-90ab-4c6d0679b3d2" for="icon-button-7235a1af-7639-48cb-8156-2a49e74f2ec9" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> diff --git a/about/showcase/totalrecall/image-2.png b/about/showcase/totalrecall/image-2.png Binary files differnew file mode 100644 index 00000000..d8340c98 --- /dev/null +++ b/about/showcase/totalrecall/image-2.png |
