Sorry I’m debugging something
Sorry I’m debugging something
Test
I’m building a new activitypub/threadiverse software focused on the needs of self hosters who want a single user instance.
I’ve been posting with it semi-regularly for the last month, and I think it’s ready for an open demo.
One of my objectives is to have the lightest resource usage for memory and CPU constrained hardware, as well as the fastest loading web interface for older phones and limited data plans. I ran out of data on my phone last week and having a 41kb front page came in very handy.
You can try the web UI at https://scrapetacular.ydns.eu/latest You can also POST AS A GUEST TO THE FEDIVERSE without signing up. I’m not sure you can do this anywhere else, I’m manually approving posts on the backend because .. well you know. If it asks for a user and pass, use guest and guest, your post will appear with a username like guest4269.
Ideally, open this post https://scrapetacular.ydns.eu/post/10127 and reply to it.
My other plan for mobile is to target the Sync for Lemmy app, as it’s dead, meaning it’s no longer a moving target.
I’ve made a few technical choices aimed at keeping things fast
These include:
I’m using the pure Go sqlite library, Bluemonday for html sanitisation, Blackfriday for Markdown and Migrate for auto db migrations.
Thanks to Snoopy and the Cool Froges at jlai.lu for allowing me to test on their channel.
Is this project of interest to you? Have I missed anything obvious? Is there anything else you would like to know?
I’m trying to understand why anyone would opt to self host an instance just for themselves. What are the benefits? A hypothetical that has likely never happened isn’t a benefit.
I swear to god this wasn’t me or any of my immediate family
I’m building a new activitypub/threadiverse software focused on the needs of self hosters who want a single user instance.
I’ve been posting with it semi-regularly for the last month, and I think it’s ready for an open demo.
One of my objectives is to have the lightest resource usage for memory and CPU constrained hardware, as well as the fastest loading web interface for older phones and limited data plans. I ran out of data on my phone last week and having a 41kb front page came in very handy.
You can try the web UI at https://scrapetacular.ydns.eu/latest You can also POST AS A GUEST TO THE FEDIVERSE without signing up. I’m not sure you can do this anywhere else, I’m manually approving posts on the backend because .. well you know. If it asks for a user and pass, use guest and guest, your post will appear with a username like guest4269. Ideally, open this post and reply to it.
My other plan for mobile is to target the Sync for Lemmy app, as it’s dead, meaning it’s no longer a moving target.
I’ve made a few technical choices aimed at keeping things fast
These include:
No ORMs - They are convenient but make performance tuning difficult when things get complex as you don’t write the queries directly No Javascript - I may have to go back on this if I keep the guest posting function, it might need a captcha or anubis. No nested comments in the web UI - Nested comments are super slow, you are essentially querying the database for the OP, then querying for the N immediate children, then doing N queries for all of their children, then keep going recursively until you reach your depth limit, or all comments are found, you then need to render this structure with html/css No front page images - This is more of a personal preference that happened to make things load faster, the front page displays the text of the OP and last few comments IN FULL, giving a good preview of the conversation, and allocating more space to people who write rather than post memes. Inline images in posts are also replaced with links. No upvotes/downvotes - DID YOU KNOW that most threadiverse traffic is upvotes, downvotes adn emojis? You get an instant speedup by simply not processing them. Also, since this is a single user instance, all my comments are by definition awesome
I’m using the pure Go sqlite library, Bluemonday for html sanitisation, Blackfriday for Markdown and Migrate for auto db migrations.
Thanks to Snoopy and the Cool Froges at jlai.lu for allowing me to test on their channel.
Is this project of interest to you? Have I missed anything obvious? Is there anything else you would like to know?
Bwoah very interesting thanks for sharing the details
I doubt that a lot of people will see it, and there’s very few nerds in there that will be interested in self hosting. But I really like the idea, it’s unhinged in the best possible way !
Using #Madblog as the easiest way to spin up an Indieweb/ActivityPub-compatible blog.
Zero db, zero JS, entirely hosted on text files.
At the current state it’s only single-user, but I’m working on a multi-user implementation. It should be available as soon as I have a proper implementation for the ActivityPub Group actor (similar to what WriteFreely already does, where you have a Group @blog actor that aggregates post from multiple Person actors). That would also unlock full compatibility with Lemmy/NodeBB and other threadiverse implementations. But it takes a while to get done right - and a multi-user set up is also a design challenge when your selling point is to have a blog running on a single folder with Markdown files.
About a free instance, it’s not currently available (you’ll need your own domain and host and then you can just spin up a Docker container), but AFAIK YunoHost is considering adding it to their offering.
This feels very cool…but I think it would look a bit confusing if all the fediverse reactions and the replies and webmetions here are displayed together.It feels like uncategorized message notification records😵
Last year, I was tearing apart some of these fancier pacifiers for adults when I noticed something
When you know you’re going to enjoy the article.
Loaded very quickly for me, just a few seconds. I’m guessing it was overloaded for a bit.
Testestestest
hi, congrats, here’s a cool froge cool froge
That’s a very cool froge, and thanks !
We knew it was goose egg season but hadn’t found their nest. This morning it was visible. 7 eggs. Probably less than a week old.
I’m going to have to change dinner plans this week now that I have gose eggs available.
Goose egg facts:
Three times the size of a chicken egg.
Chicken eggs are 30% yolk.
Goose eggs are 50% yolk.
That means the yolk is the size of 1.5 chicken eggs.
This makes them perfect for dippy yolks with fresh baked bread.
Boil time for a firm white and liquid yolk is one minute per ounce, so probably 6 to 7 minutes. Have an ice bath ready when you take them out of the water because they will continue to cook until you open them up.
They are great for baking. But not ideal for omelets because of the higher yolk content.
You get about one egg per female goose every other day. We have three females. So we will have about 10 eggs per week until they stop just before summer.
If a snake gets to a goose egg before we do that snake probably won’t have to eat for a month.
Time to make some crusty bread, buy some salted butter, and I crazy. Maybe some anchovies too. Anchovy butter on crusty bread dipped in goose yolk is very tasty.
You just can’t hide cedar eggs from a three legged dog!
Yeah. I’m hopeful that they build the nest inside their coop or outside of the fenced in portion of the yard.
Thanks, honestly I had not actually read the bill before coming here to shitpost, and it seems like yeah it’s more well-intentioned than people are giving it credit for.
I still have serious reservations about the broadness, vagueness, and premise that mandatory age signals are a good idea at all – it’s a lateral move at best; weakly attempting to curb the most overtly predatory parts of the whole “age verification” movement, without opposing the idea itself.
But you’re right, it’s not the blatant data-vacuuming law that I think some people imagine it to be.
IMO the real solution to preventing kids getting into adult content is for Governments to agree on and enforce a universal set of parental controls that every program and website has to respect. Put the onus on parents to make sure their kids aren’t doing that stuff.
But that’s not the world we’re working with. Instead Governments have decided they’re going to play nanny, and it would appear nobody is taking no for an answer.
So from a practical perspective, if I’m going to have to play along, I’d much rather my own computer handle my sensitive data locally and prove my age for me, than multiple fuckwits’ servers off who-knows-where holding onto that data per website I want to visit.
You know how it goes. You’re happily using Homer or Homepage for your home-lab dashboard. It’s great. It looks nice. It does its job. But then one evening you think: “Wouldn’t it be cool if the dashboard actually showed whether my services are alive without building a custom tile for homer?”
And instead of, oh I don’t know, contributing to homer or using Uptime Kuma next to it like a reasonable person, you go full not-invented-here and build your own thing from scratch.
So here’s ilias, a static HTML dashboard generator that actually checks your stuff.
What makes it different from Homer / Homarr / Dashy / the other 47 dashboards?
It actually runs arbitrary checks. You give it a YAML config with HTTP endpoints and shell commands, and it:
The output is literally one .html file. You can scp it to a Raspberry Pi running nginx, open it from a USB stick, email it to yourself … it just works. It’s HTML and CSS. That’s it.
services.ilias.enable = true and you’re done (after verifying my code ofc, I’m just a rando on the internet!).gopkg.in/yaml.v3). That’s the whole thing. You can read the entire codebase during lunch.Quick taste
Minimal config:
title: My Lab
groups:
- name: Services
tiles:
- name: Jellyfin
icon: https://cdn.jsdelivr.net/npm/simple-icons@v9/icons/jellyfin.svg
link: http://jellyfin.lan:8096
slots:
- name: status
check:
type: http
target: http://jellyfin.lan:8096/health
rules:
- match: { code: 200 }
status: { id: ok, label: "✅" }
- match: {}
status: { id: down, label: "❌" }
ilias generate -c config.yaml -o index.html
Done. Open index.html. Your Jellyfin tile shows ✅ or ❌ based on whether /health returns 200.
Want to check disk space too? Add a command check:
- name: Disk
slots:
- name: root
check:
type: command
target: "df / --output=pcent | tail -1 | tr -d ' '"
rules:
- match: { output: "^[0-6]\\d%$" }
status: { id: ok, label: "✅ <70%" }
- match: { output: "^[7-8]\\d%$" }
status: { id: warn, label: "⚠️ 70-89%" }
- match: {}
status: { id: full, label: "🔴 ≥90%" }
Hover over any status to see the raw command output in a tooltip. Regex matching on stdout. Exit codes. The works.
“But what about…”
Uptime Kuma? Uptime Kuma is excellent for monitoring with alerting, history, and notifications. ilias can’t do any of that! It’s for when you want a single glanceable status page that you regenerate every 5 minutes via cron ro whatever. No history, no alerts, no database. Just “is everything green right now.”
Homer? Homer is a beautiful bookmark dashboard. ilias took that idea and asked “what if the bookmarks could tell you if my random, unsupported service behind them is actually working?” If you just want a pretty link page or use the services already supported, Homer is great. If you want status checks for everything baked in, give ilias a try.
Links
Excellent! A dashboard dashboard!
Cool ❤
Monthly Active Users^[1]^:
| Software | Current | Yesterday[1D] | Last Week[6D] | Last Month[30D] | 3 Months Ago[90D] | 6 Months Ago[180D] | 1 Year Ago[365D] | All-Time Maximum |
| :——– | ——-: | ——-: | ——-: | ——-: | ——-: | ——-: | ——-: | ——-: |
| Piefed | 6179 | 6173 | 5556 | 2322 | 1632 | 1648 | 304 | 6179 |
| Lemmy | 40418 | 41389 | 39183 | 36132 | 35313 | 40214 | 48182 | 72618 |
| Mbin | 808 | 822 | 825 | 773 | 739 | 880 | 914 | 3967 |
| Threadiverse | 47405 | 48384 | 45564 | 39227 | 37684 | 42742 | 49400 | |
| | | | | | | | | |
| Mastodon | 787641 | 788844 | 798673 | 740922 | 676783 | 684859 | 913427 | 2737163 |
| Pixelfed | 119519 | 120239 | 115309 | 120485 | 77178 | 111147 | 234134 | 338813 |
| Peertube | 41181 | 41348 | 40855 | 28695 | 26691 | 23287 | 35082 | 41348 |
| Loops | 8088 | 8316 | 8110 | 4423 | 1969 | 29174 | 0 | 29821 |
| Bookwyrm | 1563 | 1606 | 1609 | 3817 | 2805 | 2962 | 7524 | 9429 |
| Friendica | 2632 | 2618 | 2637 | 1460 | 1297 | 1743 | 4395 | 4734 |
| Forgejo | 114 | 121 | 124 | 510 | 386 | 370 | 615 | 1168 |
| Funkwhale | 267 | 266 | 270 | 258 | 218 | 227 | 480 | 1114 |
| Flohmarkt | 21 | 18 | 33 | 33 | 3 | 0 | 0 | 40 |
| | | | | | | | | |
| Fediverse | 1008431 | 1011760 | 1013184 | 939830 | 825014 | 896511 | 1245057 | |
Difference^[1]^:
| Software | -1 Day[1D] | -1 Week[6D] | -1 Month[30D] | -3 Months[90D] | -6 Months[180D] | -1 Year[365D] | -All-Time Maximum |
| :——– | ——-: | ——-: | ——-: | ——-: | ——-: | ——-: | ——-: |
| Piefed | 6 | 623 | 3857 | 4547 | 4531 | 5875 | 0 |
| Lemmy | -971 | 1235 | 4286 | 5105 | 204 | -7764 | -32200 |
| Mbin | -14 | -17 | 35 | 69 | -72 | -106 | -3159 |
| Threadiverse | -979 | 1841 | 8178 | 9721 | 4663 | -1995 | |
| | | | | | | | |
| Mastodon | -1203 | -11032 | 46719 | 110858 | 102782 | -125786 | -1949522 |
| Pixelfed | -720 | 4210 | -966 | 42341 | 8372 | -114615 | -219294 |
| Peertube | -167 | 326 | 12486 | 14490 | 17894 | 6099 | -167 |
| Loops | -228 | -22 | 3665 | 6119 | -21086 | 0 | -21733 |
| Bookwyrm | -43 | -46 | -2254 | -1242 | -1399 | -5961 | -7866 |
| Friendica | 14 | -5 | 1172 | 1335 | 889 | -1763 | -2102 |
| Forgejo | -7 | -10 | -396 | -272 | -256 | -501 | -1054 |
| Funkwhale | 1 | -3 | 9 | 49 | 40 | -213 | -847 |
| Flohmarkt | 3 | -12 | -12 | 18 | 0 | 0 | -19 |
| | | | | | | | |
| Fediverse | -3329 | -4753 | 68601 | 183417 | 111920 | -236626 | |
Change (%)^[1]^:
| Software | -1 Day[1D] | -1 Week[6D] | -1 Month[30D] | -3 Months[90D] | -6 Months[180D] | -1 Year[365D] | -All-Time Maximum |
| :——– | ——-: | ——-: | ——-: | ——-: | ——-: | ——-: | ——-: |
| Piefed | 0.1% | 11.2% | 166.1% | 278.6% | 274.9% | 1932.6% | 0.0% |
| Lemmy | -2.3% | 3.2% | 11.9% | 14.5% | 0.5% | -16.1% | -44.3% |
| Mbin | -1.7% | -2.1% | 4.5% | 9.3% | -8.2% | -11.6% | -79.6% |
| Threadiverse | -2.0% | 4.0% | 20.8% | 25.8% | 10.9% | -4.0% | |
| | | | | | | | |
| Mastodon | -0.2% | -1.4% | 6.3% | 16.4% | 15.0% | -13.8% | -71.2% |
| Pixelfed | -0.6% | 3.7% | -0.8% | 54.9% | 7.5% | -49.0% | -64.7% |
| Peertube | -0.4% | 0.8% | 43.5% | 54.3% | 76.8% | 17.4% | -0.4% |
| Loops | -2.7% | -0.3% | 82.9% | 310.8% | -72.3% | 0.0% | -72.9% |
| Bookwyrm | -2.7% | -2.9% | -59.1% | -44.3% | -47.2% | -79.2% | -83.4% |
| Friendica | 0.5% | -0.2% | 80.3% | 102.9% | 51.0% | -40.1% | -44.4% |
| Forgejo | -5.8% | -8.1% | -77.6% | -70.5% | -69.2% | -81.5% | -90.2% |
| Funkwhale | 0.4% | -1.1% | 3.5% | 22.5% | 17.6% | -44.4% | -76.0% |
| Flohmarkt | 16.7% | -36.4% | -36.4% | 600.0% | 0.0% | 0.0% | -47.5% |
| | | | | | | | |
| Fediverse | -0.3% | -0.5% | 7.3% | 22.2% | 12.5% | -19.0% | |
Tracker Comparison^[1,2]^:
| Software | Fediverse-Observer^[1]^ | FediDB ^[2]^ |
| :——– | ——-: | ——-: |
| Piefed | 6179 | 6196 |
| Lemmy | 40418 | 49143 |
| Mbin | 808 | 1418 |
| Threadiverse | 47405 | 56757 |
| | | |
| Mastodon | 787641 | 1026747 |
| Pixelfed | 119519 | 129301 |
| Peertube | 41181 | 38969 |
| Loops | 8088 | 7997 |
| Bookwyrm | 1563 | 3818 |
| Friendica | 2632 | 3293 |
| Forgejo | 114 | 1421 |
| Funkwhale | 267 | 761 |
| | | |
| Fediverse | 1008431 | 1269064 |
Notes:
Takeaways:
Piefed
Thanks, I guess measuring the other way only makes sense in the community based threadiverse.