Learn Three.js By Building Five Projects
in JavaScript
#threeJS #JavaScript #OpenSource #POSIX #Web #frontEnd #programming
Here's a little bash script that fetches a random quote!! I have it run at startup, but feel free to run it anytime you like..
gist.github.com/furycd001/76a3…
#bash #Linux #OpenSource #github #quote
A workflow and code walkthrough by Samvardhan Vishnoi for building a Bayesian regression model in STAN 👉
桜の木ギューイギューイと鳴くオナガ
詳しくはブログに。
atasinti.chu.jp/dad3/archives/…
写真アルバムはこちら。(5枚)
flickr.com/photos/atasinti/alb…
like this
Cult Following: The Extreme Sects That Capture Our Imaginations—and Take Over Our Lives by J. W. Ocker, 2024
Have you ever wondered how ordinary people end up enmeshed in extreme cults? Everything you’ve ever wanted to know about history’s most notorious cults—and the psychology of the people who join them—is packed into this accessible, engaging volume. Walk in the footsteps of those who were lured into such sinister groups.
bookstodon group reshared this.
Random musing:
Let's say that I have a database. It's a glorified KV store, but it looks about like this:
object(id(uri), property(name), ref(uri) | value(simple))
I can represent every ActivityPub object in this format easily (the astute observer will notice I just defined an ersatz RDF triple). So I can easily create a datastore for this that can flexibly represent every object.
Cool!
*brushes hands*
Okay so now that that's sorted…
wait, what do you mean there's more?
1/
anyone got any suggestions for an instance with more than a 500 character post limit that would be suitable for posting book reviews?
Nextcloud Hub 9 is a packed release with many quality-of-life improvements.
Self-Care for Autistic People: 100+ Ways to Recharge, De-Stress, and Unmask! by Megan Anna Neff, 2024
Ditch the stigma, celebrate your identity, and put yourself first with these 100+ exercises that reinforce the idea that neurodiversity is a strength and teaches you how to relax, destress, find your community, practice self-love, and more.
bookstodon group reshared this.
Reasoning in Psychopathology; Rationality and Irrationality in Mental Disorders by Valentina Cardella & Amelia Gangemi, 2024
Reasoning in Psychopathology adopts a pragmatic conception of reasoning, demonstrating how people with mental disorders develop characteristic strategies of reasoning depending on the particular disorder they have and the emotions they experience.
@bookstodon
#books
#nonfiction
#pychopathology
#reasoning
#rationality
#irrationality
#MentalHealth
bookstodon group reshared this.
👋 @nextcloud @bigbluebutton
#️⃣ #OpenSource #LogicielsLibres #Nextcloud #NextcloudConf #NextcloudConf2024 #BBB

Hrefna (DHC)
in reply to Hrefna (DHC) • • •Okay, now I want to _query_ this database. So I build a simple traversal algorithm (it's easy, just a few lines of prolog) and…
…I get a result that is PTIME-complete to evaluate?
Uhhhhhhhh.
Well, I suppose with some good caching and some backdrops…
But everything might not even be hosted on my server and require multiple HTTP calls to retrieve, it might be quite large, it might connect to other graphs.
Well this will be fun to preload.
2/
Hrefna (DHC)
in reply to Hrefna (DHC) • • •Also, we get new information, how do we know if it is already in our now-preloaded database that includes most of the internet? If there are differences when we want to refresh objects, what are they?
Well to do that I need to solve a GI-complete problem. Which is theoretically probably easier than a PTIME-complete problem!
But it isn't cheap.
It's both in terms of space and time _extremely_ expensive to maintain all of this state using this basic format. Especially if I need updates.
3/
Hrefna (DHC)
in reply to Hrefna (DHC) • • •There are ways I can avoid this, but every single one of those ways requires compromises and/or moves the complexity somewhere _else_ in the stack.
You can add more structure to your database… but that requires now more work to format it to get it to fit into your database.
Etc.
Now think about doing this at the scale of… even a single mastodon instance.
We can push some of this to the clients, but it's easy doing this to create DDoS-as-a-Service systems (moreso than they already are).
4/
Irenes (many)
in reply to Hrefna (DHC) • • •Hrefna (DHC)
in reply to Irenes (many) • • •Irenes (many)
in reply to Hrefna (DHC) • • •Hrefna (DHC)
in reply to Irenes (many) • • •Exactly. That's my point ^_^
You can do that.
But ActivityPub then requires that you parse the data from basically RDF triples to get it _into_ that format and it is up to you to validate that what you are getting will actually fit into that format.
You have to run your cycle detection algorithms, you have to preload and precache results, and you have to ground it into a different data structure that the data may not fit into (which you also have to determine).
Irenes (many)
in reply to Hrefna (DHC) • • •oh! welp. that's not good.
we take it your thesis is that this can't be fixed while staying ActivityPub-shaped? if so, we're convinced and our follow-up question is what shape WOULD the protocol have to take for it to work better?
Hrefna (DHC)
in reply to Irenes (many) • • •Basically I think you can make it AP-shaped but in order to do so you have to be willing to make serious compromises in the JSON-LD-nature and/or you need strong namespacing, people to document their types explicitly, and the ability to handshake/negotiate/document the protocols.
Like today: I have no way of knowing if I can follow a Note a priori, and I have no idea when I render a collection what format it will be in (I counted something like 30 ways before I stopped counting).
Hrefna (DHC)
in reply to Hrefna (DHC) • • •@ireneista The fix could be as simple as something like ATProto's lexicons.
Publish a document with a formatted series of essentially JSON-Schema and/or OpenAPI statements that tells others how to interact with your system, what they can expect, and what format you will send or receive things in. Those who communicate follow the guidelines.
But then you must discard the conceits of JSON-LD, because you can't risk the format changing every twenty seconds.
Irenes (many)
in reply to Hrefna (DHC) • • •Hrefna (DHC)
in reply to Irenes (many) • • •Hrefna (DHC)
in reply to Hrefna (DHC) • • •I could do it by throwing large amounts of hardware at the problem, backed by a tool like Google Spanner or by something like the Storm Architecture. You'd still have a lot of compromises to make, especially to prevent queries of death, but you can solve it this way.
But that defeats the idea of "we don't want big centralized systems." Your moderate-sized systems basically disappear and you are left with tiny instances and giant instances that cost a significant amount.
5/
Hrefna (DHC)
in reply to Hrefna (DHC) • • •So you push the logic here to the clients. Easy right?
But wait, it turns out there's a bug in a client that makes it not resolve circular references properly! There's a remote code exploitation in some of them, and others are simply DDoS'd to oblivion! Now your server is hosting a giant worm! It's already big in scope and impact than the morris worm, and it is growing!
Great, now we need additional security checks and hardware in our servers to prevent this problem.
6/
Hrefna (DHC)
in reply to Hrefna (DHC) • • •Basically my point is: You can store it very simply, but if you store it very simply then you _still have to solve the underlying problems_. Often. Frequently. At speed.
There just aren't any good answers on how you do that and the problem isn't an easily tractable one.
You can do more work upfront, but that incurs additional costs and risks.
You can do more work later in the stack, but that spreads out the work to less efficient systems and still comes with a lot of risk.
7/7
Hrefna (DHC)
Unknown parent • • •@ireneista
Crap. The Actor is another id. I follow that and look up and that one helpfully downloads the entire public outbox for me into the actor. So now I've gotten the actor plus 5 MB of random post data that I don't want.
So now I need a validator that can pull that apart, or I need an API that is defined in such a way that I can do subselection from the objects.
But neither of those are defined in AP.
So it is both the semantic and the structural
5/5
@risottobias @jenniferplusplus
Hrefna (DHC)
Unknown parent • • •@ireneista
Another example:
I have an Actor that I want to follow updates on a Note. How do I do this? Do I contact the attributedTo actor? With what? Do I contact the object itself? Where do I send the follow request? Can I even send such a request and expect anything?
There's no documented way to do it in AP, so I end up making it up
To my understanding, this is the layer of semantic confusion that you are discussing: there's a mismatch in expectations
3/
@risottobias @jenniferplusplus
Hrefna (DHC)
in reply to Hrefna (DHC) • • •@ireneista
There's another layer, however, that is also important. That's how the data structure actually appears in practice.
So I receive a Create(Note) object, but it doesn't include the entire note, it includes just the _id_ for the note.
Or worse, it contains _multiple_ ids for multiple objects, only some of which are notes.
I need to resolve those ids before I know what types I'm dealing with.
I resolve them, pull them up, and look at the actor…
4/
@risottobias @jenniferplusplus
Hrefna (DHC)
Unknown parent • • •@ireneista
Someone else builds a bicycle radio app, designed so that groups of cyclists can sync up their music on long trips. This uses Arrive() to mean "arrived at my destination" and uses Listen(SoundFile) to track what you are listening to while driving
So my microblog app is now not going to know what to do with Listen(SoundFile) and has a different semantic meaning for arrive
This creates different expectations and interpretations between the systems
2/
@risottobias @jenniferplusplus
Hrefna (DHC)
Unknown parent • • •@ireneista
Yes and.
If I'm understanding correctly: That is all correct and describes some of it, and the problem exists on two separate levels. This ties into what is technically called reification and also gets into some of my core objections to the use of JSON-LD.
First layer:
I am building a microblogging app. I interpret "Arrive" activities to be arriving online (presence), and I have no idea what to do with Listen(SoundFile).
1/
@risottobias @jenniferplusplus
Hrefna (DHC)
Unknown parent • • •@risottobias
If you want to preserve the JSON-LD, you do it by advertising capabilities somehow, and still you'll probably want to constraint JSON-LD to a subset of what it can do in order to make sure that everything is formatted in a way that lets you validate it easily.
@jenniferplusplus @ireneista
Irenes (many)
Unknown parent • • •Irenes (many)
Unknown parent • • •Irenes (many)
Unknown parent • • •Irenes (many)
Unknown parent • • •there is a metaphor of a "timeline" or "feed" (arguably the same thing, we're still chewing on that sort of question)
and there is a data structure of, like, some specific ActivityPub-defined type that you'd know more about than we do, which needs to be the primary entity that the timeline metaphor organizes
Irenes (many)
Unknown parent • • •Irenes (many)
in reply to Hrefna (DHC) • • •Hrefna (DHC)
Unknown parent • • •@risottobias There's no one right way, but several possibilities.
If you could start over you can go with something like what @jenniferplusplus proposed and move the activity information into headers, or Nostr's approach of a frame object. Combine that with JSON-schema renditions of the objects and you are good to go.
As I was discussing with @ireneista there's something like ATProto's lexicons—OpenAPI docs that establish how a service needs to behave. But you sacrifice JSON-LD for that.
Irenes (many)
in reply to Irenes (many) • • •