roundabout,
created on Monday, 29 April 2024, 11:32:51 (1714390371),
received on Monday, 29 April 2024, 11:33:25 (1714390405)
Author identity: vlad <vlad.muntoiu@gmail.com>
42eb5c94d16f2811f0afb6cbe5099dae65128489
articles/markdown-testing.html
@@ -1,80 +0,0 @@
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Markdown testing</title><link rel="stylesheet" href="/static/style.css"><meta name="viewport" content="width=device-width, initial-scale=1.0"></head><body><header><nav><ul><li><a href="/">Home</a></li><li><a href="/projects">Projects</a></li><li><a href="/index">Index</a></li><li><a href="https://roundabout-host.com/roundabout">Roundabout-host</a></li></ul><ul><li><a href="mailto:root@roundabout-host.com" id="mail-link">root@roundabout-host.com</a></li></ul></nav></header><main><h1>Markdown testing</h1><div id="article-date">2024-04-29, 09:42:03</div><article class="content-area"><h1>Header 1</h1><h2>Header 2</h2><h3>Header 3</h3><h4>Header 4</h4><h5>Header 5</h5><h6>Header 6</h6><p><em class="emphasis-1">emphasis 1</em><strong class="emphasis-2">emphasis 2</strong><strong class="emphasis-2 emphasis-1">emphasis 3</strong><strong class="emphasis-3">emphasis 4</strong><strong class="emphasis-3 emphasis-1">emphasis 5</strong><strong class="emphasis-3 emphasis-2">emphasis 6</strong><strong class="emphasis-3 emphasis-2 emphasis-1">emphasis 7</strong></p><ul><li><p>list item 1</p></li><li><p>list item 2</p><ul><li><p>list item 2.1</p></li><li><p>list item 2.2</p><ul><li><p>list item 2.2.1</p></li><li><p>list item 2.2.2</p></li></ul></li><li><p>list item 2.3</p></li></ul></li></ul><ol><li><p>list item 1</p><ol><li><p>list item 1.1</p></li><li><p>list item 1.2</p><ol><li><p>list item 1.2.1</p></li><li><p>list item 1.2.2</p></li><li><p>list item 1.2.3</p></li></ol></li><li><p>list item 1.3</p></li></ol></li><li><p>list item 2</p></li><li><p>list item 3</p></li><li><p>list item 4</p><ol><li><p>list item 4.1</p></li><li><p>list item 4.2</p></li></ol></li></ol><pre data-language="python">if __name__ == "__main__":print("Hello, world!")``> blockquote 1> blockquote 2...> ### Test> **Hello?**[link](https://wikipedia.org)![image](https://www.wikipedia.org/portal/wikipedia.org/assets/img/Wikipedia-logo-v2@2x.png)`inline code`</pre></article></main><footer><p>Page generated on Monday, 29 April 2024 at 09:45:48</p><p>© Roundabout developer</p></footer></body></html>
articles/moved-to-a-roundabout.html
@@ -25,7 +25,7 @@
<main> <h1>Moved to a roundabout</h1> <div id="article-date">2024-04-29, 09:42:03</div><div id="article-date">2024-04-29, 13:58:23</div><article class="content-area"> <p>Welcome to my new website! I've moved from GitHub to a git software I've developed, <a href="https://roundabout-host.com/roundabout/roundabout">a roundabout</a>. To go along with
@@ -36,14 +36,16 @@ roundabout itself.
</p><p>I've also moved all my projects to the roundabout. You can find them at <a href="https://roundabout-host.com/roundabout">my profile</a>. I will keep the GitHub repositories for now, but they will not be updated except for a notice explaining about the move. There are some inactive, not archived repositories on GitHub that haven't been moved yet, but I will move them in the future when I get back to them.</p><p><img alt="Moved!" src="https://private-user-images.githubusercontent.com/74449186/315608390-21cd38d3-a42c-4d3e-bccb-7bbc6aa2fade.svg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTM2MjY2MjAsIm5iZiI6MTcxMzYyNjMyMCwicGF0aCI6Ii83NDQ0OTE4Ni8zMTU2MDgzOTAtMjFjZDM4ZDMtYTQyYy00ZDNlLWJjY2ItN2JiYzZhYTJmYWRlLnN2Zz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA0MjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNDIwVDE1MTg0MFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFjNTdiZjA1ZmJiNDI3NjJkYzFiMDdjOGUzNzc0OTc4ZGE0ZWJjMWQ5NDEzMDg0YzgyZDhmODVmNjAwYzJjMTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.q_c1VAhb_7JHoCGeL9u8oe0Z5LH1wvfEzYiK_bBHBTs"></img> </p> </article> </main> <footer> <p>Page generated on Monday, 29 April 2024 at 09:45:48</p><p>© Roundabout developer</p><p>Page generated on Monday, 29 April 2024 at 14:32:39</p> <p xmlns:cc="http://creativecommons.org/ns#" >This work is marked with <a href="https://creativecommons.org/publicdomain/zero/1.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC0 1.0 Universal</a> (🄍). No rights reserved.</p></footer> </body> </html>
index.html
@@ -37,17 +37,11 @@ roundabout itself.
</p></p> </article> <article class="content-area"><h2><a href="/articles/markdown-testing.html" class="article-title">Markdown testing</a></h2><div class="home-article-date">2024-04-29</div><p><h1>Header 1</h1><h2>Header 2</h2><h3>Header 3</h3><h4>Header 4</h4><h5>Header 5</h5><h6>Header 6</h6></p></article></main> <footer> <p>Page generated on Monday, 29 April 2024 at 09:45:48</p><p>© Roundabout developer</p><p>Page generated on Monday, 29 April 2024 at 14:32:39</p> <p xmlns:cc="http://creativecommons.org/ns#" >This work is marked with <a href="https://creativecommons.org/publicdomain/zero/1.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC0 1.0 Universal</a> (🄍). No rights reserved.</p></footer> </body> </html>
projects/ampoule.html
@@ -68,6 +68,8 @@ and <strong class="emphasis-2">Jinja2</strong> all at once.
to publish. </p></li><li><p>If you see fit, it's easy to <strong class="emphasis-2">convert</strong> to a dynamic site. A <strong class="emphasis-2">Flask implementation</strong> is planned. </p></li><li><p>Clear and <strong class="emphasis-2">magic-free</strong>. You can see exactly what's happening and why. No magic, no configuration files, no hidden behaviour. The code is so short you can read it.</p></li></ul><h2>Minimal example</h2><pre data-language="python">import string from datetime import datetime import string
@@ -136,18 +138,35 @@ site.add_from_index(
site.build() </pre><h2>More information</h2><h3>Name origin</h3><p>An ampoule is smaller than a flask. Because it is related to Flask (it uses Jinja2) but is a much smaller static version of it, the name makes sense. </p><h3>Why not use Jekyll, Hugo, or Pelican?</h3><h4>Jekyll</h4><p>Jekyll is Ruby, and it's very much Ruby, in fact, it's 17,000 lines of Ruby. Configurationis done only in YAML. It's hard to extend, and the plugin and theme systems areoverengineered. It's also limited (no OOP, not even multiple index directories). And for theFlask users like me, it uses a template language that is very similar to Jinja2, but it'snot Jinja2, so templates aren't reusable. I've actually used Jekyll, and it's not nice.</p><h4>Hugo</h4><p>Hugo is actually pretty interesting, but it's not as flexible, because it's not scriptable,and a compiled language is not appropriate for this. Did I mention it also has anoverengineered theme system? And it's even larger, a whooping 133,000 lines of Go!You can never know it all.</p><h4>Pelican</h4><p>Pelican is opinionated and relies on plugins for everything. It's extremely limited, infact it can only do blogs. It also can't be portable and implemented in Flask.</p><h3>Why even use a static site generator?</h3><p>You've got two other options. Let's examine them.</p><h3>What about the other static site generators?</h3><p>There are many static site generators out there, but they all have their own problems. In particular, I haven't seen one that uses code to describe the site, rather than a configuration file. This makes it much more flexible and powerful. </p><p>Also, Ampoule is familiar to Python programmers, because it's written in Python and uses Jinja2, a templating engine that is also used in Flask. It's even the smallest static site generator: </p><ol><li><p>Hugo: written in Go, uses go html/template, and it has 133k lines of Go, not counting </p></li><li><p>Jekyll: written in Ruby, uses Liquid, and it has 17300 lines of Ruby, not counting Interestingly, it's got more Markdown than Ruby. </p></li><li><p>Gatsby: they call it a framework, and rightfully so, because it's overkill for actually e. for publishing content) sites, even though JS people use it for precisely that t's written in JavaScript, uses React, and it's git 380k lines of JavaScript and combined. (For comparison, it's over 1/100 of Linux itself, which is HUGE considering high-level language and only has to do so much.) </p></li><li><p>Pelican: written in Python, uses Jinja2, and it has 12400 lines of Python, not counting </p></li><li><p>Docusaurus: written in TypeScript, uses React (of course, because it's made by Facebook), </p></li><li><p>VuePress: written in JavaScript, uses Vue, and it has 11k lines of JavaScript, Vue and </p></li><li><p>Zola: written in Rust, uses Tera, and it has 17k lines of Rust, not counting comments or Also, it's designed to be monolithic and not extensible at all. </p></li></ol><p>Whereas I have only got 750 lines of Python, not counting comments or blanks. Add the script to generate the site, and it's still under 1000 lines. </p><p>I don't want to criticise other static site generators, they all do some things well, but they're not what I want. I want a simple, small, flexible and versatile static site generator that is low-maintenance and easy to use. I don't know about you, but maybe you want the same thing. </p><p>The JS-based ones are particularly unsuitable for most people, because they're slow, bloated, hard to install, and most often actually generate an SPA, which is not what you want for a blog or documentation or web book or anything like that. </p><h3>Why generated static sites?</h3><p>If you don't want generated static sites, you've got two other options.</p><h4>Dynamic sites</h4><ul><li><p>bloated; </p></li><li><p>slow; </p></li><li><p>requires smart server;
@@ -164,7 +183,8 @@ fact it can only do blogs. It also can't be portable and implemented in Flask.
</p></li><li><p>no support for metadata; </p></li><li><p>markup languages must be manually converted; </p></li></ul><p>With a <em class="emphasis-1">generated</em> static site, you get the best of both worlds. It's the best publishing platform, because it's just files.platform, because it's just files, but it still provides the convenience of just writing content and having it magically appear on the site and formatted correctly.</p><h2>How to install</h2><p>Please note that this is not yet available on PyPI. For now you'll need to download the code (ideally using git) and install it with <code>pip</code> as a local package by giving it the path to the directory containing <code>setup.py</code>.
@@ -186,8 +206,10 @@ that name.
one argument, the value to be filtered, and return the filtered value. </p><h4>def <code>test(self, name: str)</code></h4><p>A decorator that registers a test function with the site. The function should take at least one argument, the value to be tested, and return a boolean. </p><h4>def <code>build(self)</code></h4><p>Build (save) the site to the build directory it was constructed with. This will create the</p><h4>def <code>build(self, dont_delete: typing.Optional[list[str]] = None)</code></h4><p>Build (save) the site to the build directory it was constructed with. This will create thedirectory if it does not exist, clear it (but not delete it) and then write all the pages. You can set <code>dont_delete</code> to a list of files that should not be deleted when the directory is cleared, for example, the <code>.git</code>.</p><h4><code>context: dict[str, typing.Any]</code></h4><p>A dictionary containing names that are available to all pages. It can be overriden by the page's context or modified at any time. </p><h3>class <code>ampoule_ssg.Page(str)</code></h3><p><code>Page</code> is a class that represents a single page on the site. A page is composed of a
@@ -240,8 +262,8 @@ behaves like a dictionary.
</main> <footer> <p>Page generated on Monday, 29 April 2024 at 09:45:48</p><p>© Roundabout developer</p><p>Page generated on Monday, 29 April 2024 at 14:32:39</p> <p xmlns:cc="http://creativecommons.org/ns#" >This work is marked with <a href="https://creativecommons.org/publicdomain/zero/1.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC0 1.0 Universal</a> (🄍). No rights reserved.</p></footer> </body> </html>
projects/echo.html
@@ -0,0 +1,63 @@
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title> Echo </title> <link rel="stylesheet" href="/static/style.css"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <header> <nav> <ul> <li><a href="/">Home</a></li> <li><a href="/projects">Projects</a></li> <li><a href="/index">Index</a></li> <li><a href="https://roundabout-host.com/roundabout">Roundabout-host</a></li> </ul> <ul> <li><a href="mailto:root@roundabout-host.com" id="mail-link">root@roundabout-host.com</a></li> </ul> </nav> </header> <main> <h1 class="project-title"> <span>Echo</span> <a href="https://roundabout-host.com/roundabout/itec24-echo">Repository</a> </h1> <article class="content-area"> <p>Echo is a very basic status tracker for web endpoints. I don't recommend you use it. It was made for a programming competition (hackathon) organised by the Automation and Computing faculty of the Politehnica University of Timișoara, in 3 days, alone. I decided to publish it because it might be useful for someone and doesn't hurt me to have it online, and the contest encourages publishing the works. </p><p>It uses Flask, SQLAlchemy and PostgreSQL. I wanted to use htmx, but I didn't have time to learn it, because one of the contest mentors recommended it to me 2 hours before the end of the contest. Therefore, there is really no JS, it's form-based. </p><p>The app won the 7th place out of 24 teams. </p><p>Luckily I did learn about htmx and now I will use it in my other projects. </p><h2>Features</h2><ul><li><p>User registration </p></li><li><p>User login/logout </p></li><li><p>App and endpoint creation </p></li><li><p>Endpoint status change </p></li><li><p>Endpoint status history </p></li><li><p>Pinging endpoints </p></li><li><p>Customisable ping interval and stability threshold (since when must all endpoints be OK to consider the app OK) </p></li><li><p>... and that's it </p></li></ul><h2>Licence</h2><p>Copyright 2024. </p><p>Use of the works is permitted provided that this instrument is retained with the works, so that any entity that uses the works is notified of this instrument. </p><p><strong class="emphasis-2">DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.</strong> </p> </article> </main> <footer> <p>Page generated on Monday, 29 April 2024 at 14:32:39</p> <p xmlns:cc="http://creativecommons.org/ns#" >This work is marked with <a href="https://creativecommons.org/publicdomain/zero/1.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC0 1.0 Universal</a> (🄍). No rights reserved.</p> </footer> </body> </html>
projects/index.html
@@ -32,20 +32,47 @@ It uses Jinja2 for templating.
</p></p> </article> <article class="content-area"> <h2><a href="/projects/echo.html" class="article-title">Echo</a></h2> <p><p>Echo is a very basic status tracker for web endpoints. I don't recommend you use it. It was made for a programming competition (hackathon) organised by the Automation and Computing faculty of the Politehnica University of Timișoara, in 3 days, alone. I decided to publish it because it might be useful for someone and doesn't hurt me to have it online, and the contest encourages publishing the works. </p></p> </article> <article class="content-area"> <h2><a href="/projects/roundabout.html" class="article-title">The roundabout</a></h2> <p><p>The roundabout is a <strong class="emphasis-2">git repository hosting</strong> server software. It is designed to be a complete alternative to GitHub, GitLab, BitBucket, Gogs/Gitea/Forgejo, and other similar services. It is still in development and not yet ready for production use. As of version 0.2.0 developmentis still in development and not yet ready for production use. As of version 0.3.0 developmentstage, it supports: </p></p> </article> <article class="content-area"> <h2><a href="/projects/waste.html" class="article-title">Waste detection</a></h2> <p><p>An YOLO model specifically trained to detect waste in images. We collected a custom dataset of waste, classified and annotated it, and trained the model using YOLOv8 on Keras. The model is able to detect the position and class of waste in images. It can separate the following classes of waste: </p></p> </article> <article class="content-area"> <h2><a href="/projects/wordle.html" class="article-title">Teletype Wordle</a></h2> <p><p>Just like the original Wordle, you have to guess a 5-letter word in 6 tries and it tells you how many letters are correct and in the right position, how many are correct but in the wrong position, and how many are not in the word at all. The only difference is that this one is played in the terminal. It's a great SSH toy for when you're bored. </p></p> </article> </main> <footer> <p>Page generated on Monday, 29 April 2024 at 09:45:48</p><p>© Roundabout developer</p><p>Page generated on Monday, 29 April 2024 at 14:32:39</p> <p xmlns:cc="http://creativecommons.org/ns#" >This work is marked with <a href="https://creativecommons.org/publicdomain/zero/1.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC0 1.0 Universal</a> (🄍). No rights reserved.</p></footer> </body> </html>
projects/roundabout.html
@@ -31,7 +31,7 @@
<article class="content-area"> <p>The roundabout is a <strong class="emphasis-2">git repository hosting</strong> server software. It is designed to be a complete alternative to GitHub, GitLab, BitBucket, Gogs/Gitea/Forgejo, and other similar services. It is still in development and not yet ready for production use. As of version 0.2.0 developmentis still in development and not yet ready for production use. As of version 0.3.0 developmentstage, it supports: </p><ul><li><p>User registration </p></li><li><p>Repository creation
@@ -45,42 +45,69 @@ stage, it supports:
</p></li><li><p>Favourite repositories (subscriptions) </p></li><li><p>Commit views and diffs </p></li><li><p>Themeing </p></li></ul><p>For now, it doesn't support, but certainly will before the 1.0.0 release:</p></li><li><p>Static site hosting </p></li><li><p>Really basic search </p></li><li><p>Markdown, but only for files (see below) </p></li></ul><p>For now, it doesn't support, but certainly <strong class="emphasis-2">will</strong> before the 1.0.0 release:</p><ul><li><p>Code review features (like comments on commits, for now you'll use the forum), something like Google Docs comments is planned </p></li><li><p>Static site hosting</p></li><li><p>CI/CD </p></li><li><p>Wiki</p></li><li><p>API </p></li><li><p>Native clients</p></li><li><p>Git over SSH or other protocols</p></li><li><p>Repository metadata</p></li><li><p>Repository metadata (licence, topics, language, etc.)</p></li><li><p>Decentralization </p></li><li><p>Packaging </p></li><li><p>Code syntax highlighting </p></li><li><p>Any kind of search</p></li><li><p>Any kind of statistics </p></li><li><p>Web-based code editing </p></li><li><p>Any kind of integration with other services</p></li><li><p>Users changing passwords </p></li><li><p>Admin panel </p></li><li><p>Forum labels </p></li><li><p>User mentions </p></li><li><p>Markdown comments (we just need to cache the HTML so it won't be too slow) </p></li></ul><p>It won't support: </p><ul><li><p>Wikis (why have another interface just for markdown, when you can use your own repo and publish it as a static site?) </p></li><li><p>Issues (forum does it already) </p></li></ul><p>I'm still not sure about: </p><ul><li><p>Project boards (what about making label grouping instead?) </p></li><li><p>Advertising (don't worry, instances could disable it, and logged-in users could also disable it for free, and it won't track anyone, no video, animation, sound, popups, overlays, or JS) </p></li><li><p>Paste service (does it really work well with Git? Couldn't you just use a repo for that?) </p></li><li><p>Git over SSH or other protocols (do people need it? HTTPS does the same things, and it's easier to set up; doesn't require daemons) </p></li><li><p>Native clients (Android development is hard, iOS is hostile, and on desktop it's not needed, there are GUI git clients that work with any server, for social features web is fine) </p></li><li><p>IDE plugins (sounds good, but it's hard work)</p></li></ul><p>The roundabout is written in flask, a Python web framework. It uses SQLAlchemy for database management. For light UI interactivity it uses htmx.</p><p>The official instance of the roundabout, roundabout-host, is hosted atmanagement. For light UI interactivity it uses htmx and some vanilla JS. It does some GitPython calls for basic operations, but mostly calls git with subprocess. Repositories are non-bare because this allows the server to understand the repository and can lead to some performance gains since querying git is not required. The server is designed to be run on a single machine but decentralisation will be added in the future, but it won't be automatic, you'll have to choose a server to use. </p><h2>roundabout-host.com</h2><p>The official instance of the roundabout, roundabout-host, is hosted at<a href="https://roundabout-host.com">roundabout-host.com</a>. Anyone can register and create repositories there. However, we ask that you do not rely on it and always keep your repos locally as well. In the future it may require payment for some features, but <strong class="emphasis-2">the program it runs will alwaysUptime is not guaranteed, and data loss is possible. The server is not backed up. </p><p>In the future it may require payment for some features, but <strong class="emphasis-2">the program it runs will alwaysbe free</strong>. Payment will not be required to lift artificial limitations, but to support server-intensive features like CI/CD.server-intensive features like CI/CD. Some free usage for useful projects will always be provided on demand. </p><p>Additionally, we may have advertising on the site. It will be unobtrusive and not track you. Logged-in users will be able to disable it for free. We will never have video, animation, sound, popups, overlays, or JS ads. Ads will be relevant to the content of the site, but they won't be personalised or use cookies. This just means no car, insurance, supermarket, or other unrelated ads. Most likely we will use EthicalAds, which is itself free software.</p><p>The roundabout program is licensed under the AGPL licence, version 3.0 or, at your option, any later version.later version. Whatever I decide to do for roundabout-host, I can't pull the rug from under you, you can always run your own instance.</p> </article> </main> <footer> <p>Page generated on Monday, 29 April 2024 at 09:45:48</p><p>© Roundabout developer</p><p>Page generated on Monday, 29 April 2024 at 14:32:39</p> <p xmlns:cc="http://creativecommons.org/ns#" >This work is marked with <a href="https://creativecommons.org/publicdomain/zero/1.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC0 1.0 Universal</a> (🄍). No rights reserved.</p></footer> </body> </html>
projects/waste.html
@@ -0,0 +1,122 @@
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title> Waste detection </title> <link rel="stylesheet" href="/static/style.css"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <header> <nav> <ul> <li><a href="/">Home</a></li> <li><a href="/projects">Projects</a></li> <li><a href="/index">Index</a></li> <li><a href="https://roundabout-host.com/roundabout">Roundabout-host</a></li> </ul> <ul> <li><a href="mailto:root@roundabout-host.com" id="mail-link">root@roundabout-host.com</a></li> </ul> </nav> </header> <main> <h1 class="project-title"> <span>Waste detection</span> <a href="https://roundabout-host.com/roundabout/waste-detection">Repository</a> </h1> <article class="content-area"> <p>An YOLO model specifically trained to detect waste in images. We collected a custom dataset of waste, classified and annotated it, and trained the model using YOLOv8 on Keras. The model is able to detect the position and class of waste in images. It can separate the following classes of waste: </p><ul><li><p>Plastic </p></li><li><p>Metal </p></li><li><p>Paper </p></li><li><p>Glass </p></li><li><p>Organic </p></li><li><p>Wood </p></li><li><p>Textile </p></li><li><p>Medical </p></li><li><p>Electronic </p></li><li><p>Other </p></li></ul><p>There are actually over 90 classes, but they are grouped into these ones because there is only a small amount (in the 1-2 digits) of samples for each class. The model is able to detect multiple classes in the same image, or acknowledge that there is no waste in the image. </p><p>YOLO is used pretrained on the COCO dataset, and then fine-tuned on our dataset. This is until there are enough samples for each class to train the model from scratch. </p><p>Contributions are welcome. If you have a dataset of waste, please share it with us. We will annotate it (if it's not already) and train the model on it. </p><p>You don't need technical knowledge to contribute. If you can take photos with a phone and make a ZIP of them, you can contribute. If you can draw rectangles around objects with the mouse, you can contribute. If you can drop photos into folders corresponding to their class, you can contribute. </p><p>Of course, if you do have technical knowledge, you can help with the model training, testing, and optimisation. You can also improve the training code and better process the dataset. </p><h2>Licence</h2><p>Unless otherwise stated, the software (source code) in this repository is licenced under the GNU Affero General Public License, with an additional permission in section 7. A copy of the licence is located in the file <code>LICENCE-GNU-AGPL.md</code> in this directory. </p><blockquote><p>This program is free software, you can redistribute it and/or modify it under the terms of GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. </p><p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of or FITNESS FOR A PARTICULAR PURPOSE. See the General Public License for more details. </p><p>You should have received a copy of the the GNU Affero General Public License, along with this program. If not, see <https://www.gnu.org/licenses/>. </p><h5>Additional permission under the GNU Affero GPL version 3 section 7:</h5><p>If you modify this program, or any covered work, by linking or combining it with other code, such other code is not for that reason alone subject to any of the requirements of the GNU Affero GPL version 3. </p></blockquote><p>Unless otherwise stated, the annotations in this repository are dual-licensed under either of these licences: </p><ul><li><p><a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution Share-Alike 4.0</a>. To view a copy of this license, read the <code>LICENCE-CC-BY-SA.md</code> file, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. </p></li><li><p><a href="https://creativecommons.org/licenses/by-nc/4.0/">Creative Commons Attribution Non-Commercial 4.0</a>. To view a copy of this license, read the <code>LICENCE-CC-BY-NC.md</code> file, visit http://creativecommons.org/licenses/by-nc/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. </p></li></ul><p>You do not have to comply with the terms of both licences. Choose one and comply only with it. </p><p>The images in the repository are licensed depending on their source: </p><ul><li><p>If the file name has the <code>original</code> prefix (or no prefix at all), the images are licenced under the same terms as the annotations (see above). </p></li><li><p>If the file name has the <code>trash-detection</code> prefix, it comes from https://universe.roboflow.com/nora-slimani/trash-detection-otdmj and is licensed under <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0</a>. </p></li><li><p>If the file name has the <code>ffml</code> prefix, it comes from https://www.kaggle.com/datasets/cristeaioan/ffml-dataset and is licensed under <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution Share-Alike 4.0</a>. </p></li><li><p>If the file name has the <code>dwc</code> prefix, it comes from https://www.kaggle.com/datasets/arkadiyhacks/drinking-waste-classification and is public domain. </p></li><li><p>If the file name has the <code>hitl</code> prefix, it comes from https://www.kaggle.com/datasets/humansintheloop/recycling-dataset and is public domain. </p></li></ul><p>I hope I didn't infringe on any licences or miss any sources. If you think there is a problem, please send me an email at <mailto:root@roundabout-host.com> and I'll remove the infringing files. </p><p>The VIA application shipped in this repository (located at the <code>/via</code> path) is licensed under the BSD licence. </p><blockquote><p>Copyright (c) 2016-2021, Abhishek Dutta, Visual Geometry Group, Oxford University and VIA Contributors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: </p><p>Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. </p><p>Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. </p><p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. </p></blockquote> </article> </main> <footer> <p>Page generated on Monday, 29 April 2024 at 14:32:39</p> <p xmlns:cc="http://creativecommons.org/ns#" >This work is marked with <a href="https://creativecommons.org/publicdomain/zero/1.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC0 1.0 Universal</a> (🄍). No rights reserved.</p> </footer> </body> </html>
projects/wordle.html
@@ -0,0 +1,75 @@
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title> Teletype Wordle </title> <link rel="stylesheet" href="/static/style.css"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <header> <nav> <ul> <li><a href="/">Home</a></li> <li><a href="/projects">Projects</a></li> <li><a href="/index">Index</a></li> <li><a href="https://roundabout-host.com/roundabout">Roundabout-host</a></li> </ul> <ul> <li><a href="mailto:root@roundabout-host.com" id="mail-link">root@roundabout-host.com</a></li> </ul> </nav> </header> <main> <h1 class="project-title"> <span>Teletype Wordle</span> <a href="https://roundabout-host.com/roundabout/tty-wordle">Repository</a> </h1> <article class="content-area"> <p>Just like the original Wordle, you have to guess a 5-letter word in 6 tries and it tells you how many letters are correct and in the right position, how many are correct but in the wrong position, and how many are not in the word at all. The only difference is that this one is played in the terminal. It's a great SSH toy for when you're bored. </p><p>The game is written in Python and uses the <code>termcolor</code> library for coloured output. Since it uses <code>colorama</code>, it works on Windows as well as Unix-like systems. </p><p><img alt="A game of teletype Wordle" src="/static/photos/wordle.png"></img> </p><p>You can also customise the game quite a bit. You can change the number of tries, the list of words to guess from (and length will be inferred from that), and the list of words to randomly choose an answer from. You can also enable the analyser, which shows all the letters that have been found so far. Let's make someone play it with the full dictionary :) </p><p>There is also a hard mode, where you must use all the letters that have been found in your guesses. </p><pre data-language="">usage: tty-wordle [-h] [-a] [-x] [--delay DELAY] [-l WORDS] [-n ANSWERS] [-t GUESSES] A Wordle for your console. options: -h, --help show this help message and exit -a, --analyser add the analyser, a row of all found letters -x, --hard enable hard Wordle: you must use all found letters in your guesses --delay DELAY time to show error messages for, in seconds -l WORDS, --list WORDS file to pull allowed guesses from -n ANSWERS, --answers ANSWERS file to pull a random answer from -t GUESSES, --tries GUESSES number of tries </pre><p>Also, this is how the analyser looks like: </p><p><img alt="The analyser in teletype Wordle" src="/static/photos/wordle-analyser.png"></img> </p><p>If you press ^C it asks you whether you want to give up or not. If you do, it shows you the answer. If you don't, it continues the game. You can press ^C again to close it and never see the answer. </p><h2>Licence</h2><p>Apache 2.0 </p> </article> </main> <footer> <p>Page generated on Monday, 29 April 2024 at 14:32:39</p> <p xmlns:cc="http://creativecommons.org/ns#" >This work is marked with <a href="https://creativecommons.org/publicdomain/zero/1.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC0 1.0 Universal</a> (🄍). No rights reserved.</p> </footer> </body> </html>
static/photos/wordle-analyser.png
static/photos/wordle.png
static/style.css
@@ -81,7 +81,9 @@ nav {
justify-content: space-between; align-items: center; box-sizing: border-box; height: 4rem;min-height: 4rem; padding: 1rem 0; margin: 0 0.5rem;} nav > ul {
@@ -98,6 +100,29 @@ nav > ul {
text-transform: uppercase; } @media (max-width: 576px) { nav > ul { flex-flow: row wrap; justify-content: center; row-gap: 0.5rem; } nav { flex-direction: column; gap: 1rem; } header { position: static; } } @media (max-width: 720px) { nav { flex-direction: column; padding: 0.5rem; gap: 0.5rem; } } nav > ul > li > a { font-weight: normal; text-decoration: none;
@@ -243,6 +268,19 @@ pre {
transition: 400ms; } @media (max-width: 512px) { .project-title { flex-direction: column; align-items: center; } .project-title > a { min-height: 1.5lh; margin: auto; padding: 0 2rem; } } .project-title > a:hover { border-width: 8px; }
@@ -269,4 +307,26 @@ strong, em {
font-feature-settings: "zero" on; font-weight: 625; text-align: center; }} blockquote { font-family: "Source Serif", serif; font-weight: 350; border-top: 0.5px solid #009688; border-bottom: 0.5px solid #009688; padding: 0.5rem 2rem; margin: 0; } blockquote > p:first-child { margin-top: 0; } blockquote > p:last-child { margin-bottom: 0; } img { max-width: 100%; height: auto; }