# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 2032
# self = https://watcher.sour.is?uri=https://anthony.buc.ci/user/abucci/twtxt.txt&offset=132
# next = https://watcher.sour.is?uri=https://anthony.buc.ci/user/abucci/twtxt.txt&offset=232
# prev = https://watcher.sour.is?uri=https://anthony.buc.ci/user/abucci/twtxt.txt&offset=32
I've been heads down working on a user interface in scalajs for a few weeks now. I rarely write user interfaces, so I'm not exactly learned. But I can say that the combination of scalajs and the laminar library is really nice to work with.
h
~ $ adb connect
adb: usage: adb connect <host>[:<port>]
~ [1]$ adb connect 10.0.0.234
missing port in specification: tcp:10.0.0.234


Hello adb, those square brackets around :<port> are supposed to mean it's optional.
The real meaning of "meaningful whitespace" is that you're constantly replacing tabs with spaces or vice versa to make the compiler stop complaining even though the code looked fine to you the entire time.
@prologic That makes sense. It has me thinking that maybe there is a user interface question of whether to "subscribe" a user to a topic, so that they can see notifications/mentions/what have you if they choose, but can turn that off too if they want. The thing that worries me is:

1. There's a topic I'm interested in that several people are discussing
2. I hit "Reply" and post my reply
3. The result of 2. is to only cite the topic and the person I "replied" to, so that all the others involved may not see my reply

Making this an option for the user can help with the noise problem--if a topic becomes too noisy they can turn off notifications.

Idk maybe you all thought this through already and I'm just catching up!
I think I don't understand how threads work on here! I keep replying to threads involving multiple people but there are not in the @ list.
@movq the only way I ever "remember" it is to keep a cheat sheet of the date formats associated with an actual date printed in that format, for all the different formats I commonly use. It's annoying. If I'm building a lookup table like that, the compiler could do it for me. That's what they're for!
@movq it wouldn't be so bad if you could use any date instead of just their magical 2006 date. I loathe the way date formats work--I never remember them and always have to look them up in the docs, like every single time I deal with dates. What I really want is to say "ugh, just make the date look like this: EXAMPLE DATE" and have it just work.
@lyse this talk reminded me how much I like Forth/concatenative languages!
@mckinley caddy file-server is meant to do this. If you add -- domain foo.TLD at the end it magically does https for you too.
@prologic @mckinley what do you think of caddy?
@prologic I just created a PR. The systemd unit isn't great, but it works to start yarnd and restart yarnd on reboot.
@stigatle @prologic here's mine, if it helps:

[Unit]
Description=Buccipod yarn.social
After=syslog.target
After=network.target

[Service]
Type=simple
User=abucci
Group=abucci
EnvironmentFile=/etc/default/yarnd
ExecStart=/usr/local/bin/yarnd -d /var/local/lib/yarnd/data -s bitcask:///var/local/lib/yarnd/data/yarn.db --admin-email "abucci@bucci.onl" --admin-name "Anthony Bucci" --admin-user "abucci" --descriptio
n "Buccipod, a yarn.social pod" --lang "en" --name "Buccipod" -u "https://anthony.buc.ci"

TimeoutSec=300

[Install]
WantedBy=multi-user.target
@lyse @mckinley @ocdtrekkie I use very sophisticated tools such as grep and wc
@mckinley very handy!
@darch @prologic Sunday 21:00 UTC is about the only window that works for me--I have the baby most of that day. I can steal a bit of time during the work week on Mon-Thu between 13:00 and 21:00 UTC. Fridays are a little too tough schedulewise to think about 🀯
@prologic apparently I don't get it either lol
@prologic haha oops! As you can see I'm very good with time πŸ€ͺ
@prologic @mckinley I couldn't make it at 6am UTC either fwiw
The vast majority of visits to my web server are:
- Me
- People or bots looking for vulnerabilities
- Web crawlers

with about 0.5% of traffic being legitimate, not-me visitors.
@prologic Don't change a good thing on my account!
@prologic ouch that would be 1am where I am 😬
@prologic oh interesting. I might try to make that next time. When does it happen?
Stumbled on WebID today. Besides being confusing, it doesn't work on the site I tinkered with and it seems to be mostly abandoned?
@prologic @ocdtrekkie I only ranted about monads that one time! πŸ˜‚
@Phys_org what happens when I do this?
@prologic yes but where's the fun in that!
and all of that to protect yourself from the possibility of leaking a resource? A little programming discipline can achieve the same!

Anyhow, I'm interested in algebraic effects because they look a little more natural to me. You can sorta kinda write code the way you want, and then supply "handlers" for the effects like I/O or database access or whatever. Which is a not-unreasonable way to structure things anyway. And the compiler barks at you with helpful errors like "you're not handling effect Foo" instead of "there is no implicit view from FooMonad to Option" that make little sense unless you've already stewed your brain in monads.
anyhow, that's what programming with monads is like, to me. Oh, I want to do X. OK I'll try using SpecialEffectsLibrary. But to do that I have to wrap my code in FooMonad. OK. But then to use FooMonad with this other monad I like using, I need a FooMonadTransformer. OK. Oh but now that doesn't compile because I didn't wrap such-and-such in a call to FooMonad.pure. OK. Oh and since I'm using monads I can't do this other thing recursively. Hmm what now. By the time I sort out all the compiler errors I forgot about X.
after hours of doing a depth-first search through the lib* tree and compiling as you go, eventually you'd start to succeed, but by that point you totally forgot about X and SpecialSoftware and you have made your computer into a mess of libraries you compiled. Isn't it nice that nowadays you can choose to trust a package maintainer to do that work on your behalf, and only take on the burden if you have a special reason to do so?*
this is a weird analogy I guess, but I find programming in a monadic style to be analogous to how you used to install software back in the days before reliable package managers. You'd be like "oh I want to do X so I need to install SpecialSoftware." So you'd download the source code for SpecialSoftware, try to compile it with make, and it'd explode. After reading the weird errors, you finally figure out that SpecialSoftware depends on libFoo. So you'd download the source code for libFoo, try to compile it, and it'd explode.
you can handle effects in the manner of algebraic effects using this feature, which I find way more palatable than living in monad hell.
I wish that this experimental Capture Checking feature in scala 3 were available in the official distribution so that I could play with it in a project i'm working on now.
@stigatle the pictures you posted the other day are amazing!
@stigatle it's a bit before 6am where I am, so, tired. How about you?
@lyse I didn't do anything special to make my web browsers default to utf-8. I just installed and used them.
@eaplmx it's new to me too! I can't pretend to know a whole lot about web tech, but anyway 🀷
Google’s video chat merger begins: Now there are two β€œGoogle Meet” apps | Ars Technica

OMG girl, stoppppp!
I'm discovering that setting up in the IndieWeb will take a non-trivial amount of work. But since I don't want to ever be stuck in a social media silo again, I think it's worth it. It's interesting to tinker with, too.
@movq @lyse Ah, that was the problem! W3C wants you to have a charset defined within the first 1024 bytes of the HTML, which that comment exceeded. I just moved the comment below the charset and the charset validates correctly now (though a bunch of other warnings and errors appear now lol). I am using a Jekyll theme I adapted from someone else and I guess they never encountered this issue. Thanks for finding it!

It's interesting, though, that some web browsers don't care about that. I've viewed that page in Vivaldi, Falkon, Opera, and Firefox and the unicode arrows showed up fine.
think think
I *think* it worked? I need to read more about microformats2 I think.
I wanted to tinker with webmentions so I'm going to needlessly link to a blog post about a class I taught last month.

Chaos managed β€’ Anthony Bucci
@lyse wow that's so bizarre. I viewed the page in Firefox (103.0.1 on Ubuntu) and those arrows look normal!
Speaking selfishly, of course, as someone who controls a domain.
I wish every web site would offer IndieAuth.
@prologic hmm, it looks interesting and I can't say I disagree with their points, but I'm also skeptical of anything called a "manifesto", and they sound somewhat combative.
34Β°C where I am πŸ₯΅
I wonder a lot about how much bad in the world can be ascribed to some variation of Hotelling's Law.
Analog Computer Museum
@prologic I hope these people change their ways because c'mon!
@lyse I mean, all they have to do is ask, I'll gladly tell them through a megaphone while driving through the city center!
@prologic I was so appalled I filed a ticket with their tech support and with the tech supportof the client of theirs who sent me to their service. Unbelievable to me that such things still exist, but I sure as hell am not going to keep quiet.
@prologic You may already do all this stuff, but here's my 2 cents.

One thing you can do is a use a site like https://myip.ms/browse/blacklist/Blacklist_IP_Blacklist_IP_Addresses_Live_Database_Real-time to download a list of blacllisted IP address in a format suitable for whichever firewall you're using. Then you can hard ban those IPs.

Another thing you can use is install fail2ban and set up rules appropriate to yarnd. I'm not familiar enough to say what those should be, but blocking http POST floods is a good idea. You can also manually add IP addresses to fail2ban jails, or semi-automate that where you read the IPs you want to ban from a list that you update regularly.

Finally, you could use something like akismet to automatically detect spam posts and block ones that fail their test. I'm not sure if you're able to self host if you're dependent on a call to their servers. Maybe there's something similar that you could host locally if nto.
It is 2022 how the heck are you emailing someone login credentials including a password in plain text and then not even providing them the ability to change that password?
@prologic Do you see any regularity in the origins of the registrations? You might be able to ban a few IP ranges at the server level for awhile until it calms down. I've done that on the VPS I manage.
@prologic luckily i have backups!
Punch Card Programming - Computerphile - YouTube

Absolutely fascinating.
@prologic the Ubuntu "minimal" cloud images are like 195 M! What the hell is in there?
Oof, looks like I have a corrupted SD card in my phone 😨
@prologic Oh yes, this isn't my student and he has a video on this page about how it works. So simple but amazing.
Recursive Drawing is really fun to play with. You can make spirally-looking things like


and



(which is a minor variation that looks more feathery). Or you can make more organic looking shapes like



or



This tool was a student's degree project and doesn't have all the bells and whistles you'd expect from a mature drawing program, but the one thing it does well, the recursive drawing, is super cool.
@prologic I saw a release announcement for gum, which looks like a great way to add interactivity to shell scripts.

Much as I'd love to help, I have my hands full right now! Job+kids takes up 200% of my time! I've been meaning to play with salty chat just to see how it looks but so far I haven't even had time to do that!
it's nice that you can self host the charm cloud part of it. Even though they say they end-to-end encrypt anything sent to or stored on their servers, and even though I mostly believe that, there's no way to verify. Reading the source code is not verification because there are no guarantees that what's running on their servers matches what's in the source code. So, it's safest to self host, and I'm glad they provide that option.
Charm

This whole set of libraries looks incredibly neat.
Firefox Focus is meant to be one of the more privacy friendly browsers on Android, yet after install it has Google set as the default web browser and it collects telemetry. So you still need to hunt through the settlings to find and turn off these things if they concern you (which they should imo)
@prologic lol, well I was venting so I had to be creative
Android always has seventeen different apps for any particular thing you want to do, where five are so full of ads they're unusable, three are hobby projects, two are paid and cost more than you're willing to spend on a phone app, three haven't been maintained in over two years, and four might possibly work for you. But you can't know any of that till you install all seventeen and try them.
Resurrected some old formal concept analysis code I'd written years ago. It's not great, but it works well enough and now it's dusted off.
I am a night owl by nature but ever since having kids I almost never sleep past 6:30am and am often awake by 5:30am. 😩 Gone are the days when I'd go to bed at 2am or later.
@prologic there is only one active user on my pod lol. Someday I may invite friends and family to use it though so we will see.
@prologic a little experimental framework for helping to build agent-based models. I'm unhappy with the existing frameworks I know about so I'm trying a different tack and so far I'm pretty happy with the results.
@mckinley πŸ˜†
for instance, I'm just firing all the agents' workloads asynchronously at the CPU and hoping for the best, where it'd probably be more efficient to batch up the work. I'm using scala and haven't done any jvm heap of GC tuning yet, so that's another way to improve performance.
OK lovely, I have a little demo of my nascent agent modeling framework thinger that can run 100,000 agents doing non-trivial (but faked for now) computations at about 1/3 of my screen refresh rate, meaning near real-time. I haven't tried optimizing it yet, just tinkering so far. That's pretty promising.
@prologic πŸ€·β€β™‚οΈ lol
Anyhow, in the scala world I like the approach the Laminar library takes. Somewhere in the guts of it is an Observer pattern but the abstraction presented to the typical library user is a bunch of signals that you wire together, some of which require responses.
As we all know, Earth subscribes to the Sun's gravity Observable and that is why its orbit is the way it is πŸ™„
On a related note, I think the Observable pattern has caused a lot of damage to how people think about reactive systems.
Spent a fair amount of time today working on an agent-based modeling framework I've been stewing on for a long time.
@prologic get well soon!
@prologic The main reason I used "likes" on twitter or on mastodon is as a kind of acknowledgement that I read someone's post. Back when they used to be stars on twitter I did that more often, but likes remind me too much of facebook 🀒 Anyhow I think it's maybe better to cut down on noise by not doing that, and only replying when there's something to say?
and they're starting to add features to promote "popular" toots and hashtags, which of course is a recipe for disaster. You'd think people would've learned by now how easy it is for a group of people to game popularity-based systems πŸ€”
@prologic oh, totally. The fediverse has some of the same dogpiling problems as twitter, and you're often beholden to the administrator of the instance you joined to take care of that for you. There are tools for blocking people and whole instances, which helps, but if a dozen people dive into your mentions to harass you because they decided they didn't like something you said, you're stuck with the labor of identifying each one and blocking them. At some point it'd be easier to abandon your account.

I don't have a clear view of how I'd deal with something like that on yarn.social (not that I think it'd happen), but at least since I administer my own instance I have a lot of power πŸ’ͺ
@retrocrash nah, this isn't accurate. I'm on the fediverse and the Nazi problem is very real and always in your face. There are hundreds of Nazi instances and new ones pop up every day. Every day I see toots about some new asshole. And I don't know what you're talking about "the radical left"--in the US at least there is no such thing.
I guess what I do with a phone is pretty tame and doesn't require too many resources but what I do with a computer is pretty intense and does. So maybe that says more about me than anything!
@mckinley Thinkpads are great. I have a circa 2013 Thinkpad that is still going strong. For my day to day work though I'm doing some heavy coding of a big simulation and need as much RAM, CPU, and GPU as I can fit in a box.
Once again I am exploring scala functional effects libraries πŸ™„
@prologic Will do! Not sure about a PR since I don't know Go, but I can definitely share suggested improvements if I think of any.
@prologic oh yeah, the outrage cycle is horrible. It almost seems like a public health hazard that ought to be dealt with. idk, I just want to be a nerd online and not have all that in my face day after day after day πŸ€“
@prologic I played around with Mastodon for awhile, and while it felt like a bit of an improvement over twitter, say, I didn't like how complicated it was to self-host and federate. Also the developers seem to be pushing Mastodon more and more into becoming a twitter clone. I feel like twitter is pretty mean-spirited in part because of how it's structured, so this worried me a lot.
@prologic I guess it's not to everyone's taste πŸ˜† I've been mostly doing functional programming for awhile now and unison seems to address several pain points, and I think their big idea of hashing parse trees and keeping an ever-growing database of code that is easy to marshall over the network if you want is very cool.
btw I have no plans to migrate out--definitely want to give this a go for awhile. I've found some interesting feeds to follow, and I'm sure that will continue. However, I do like very much that the post data is not trapped in some corporation's data center.
@prologic Yes. I noticed quite a few people used to keep up twtxt feeds but then stopped. You can goodl "twtxt.txt" and find lots. Hopefully with a nice web app and phone app and cli tool like yarn.social has enough critical mass will build.
@prologic Both the web app and yarnc. I've mostly been using the web app to experiment, but some days I'm mostly in the command line (I'm in tech and code a fair amount) and it's cool to be able to dash off a thought from there. I liked that about twtxt.
@prologic ahhhh that makes sense. Thank you!
@prologic no worries! I find this to be a feature, not a bug. I like asynchronous communication because I can't always check in (busy with life!) but do want to stay connected...
@prologic hi! πŸ‘‹ Thanks for writing back! I wanted to see what interacting with another person was like. And also to meet new people!

I'm liking yarn.social a lot so far, so thank you for this.

I have not been using twtxt very long. I stumbled on it long ago, but I've never really been into social networks and always found twitter pretty mean-spirited. But I decided to give it a go again and wanted to try to meet some folks so that I'm not always talking to my @testuser
I don't think I could tolerate a ten-year-old computer, by contrast.
The camera is not good, and the battery life could be better. There are definitely some improvements in modern phones. I'm pretty impressed by how usable a nearly decade-old phone is though.
There's a lot to be said for phones where you can replace the battery and SD card.