WEBVTT

00:00.000 --> 00:14.080
Next up, we have James Smith from the Manifold Project.

00:14.080 --> 00:26.080
Hello, it's just, yeah, it's like, I don't envy whoever has to follow the previous

00:26.080 --> 00:28.080
talk that was amazing.

00:28.080 --> 00:35.080
I'm James, and I'm going to talk about a thing that I'm building called Manifold, or many

00:35.080 --> 00:40.080
fold, or nobody knows quite how to pronounce it, just.

00:40.080 --> 00:41.080
What is it?

00:41.080 --> 00:49.080
It is an application I've been building for about four years that is about organising

00:49.080 --> 00:50.080
3D print models.

00:50.080 --> 00:57.080
So I've got a 3D printer, I've got a huge pile of model files sitting in a folder somewhere,

00:57.080 --> 00:59.080
and I don't know what they are.

00:59.080 --> 01:04.080
So I built the thing, the lights, he browse them, preview them, organise them, tidy them up,

01:04.080 --> 01:08.080
rename them, tag them, all that good stuff, troubleshoot them, convert them.

01:08.080 --> 01:10.080
And it renders them in the browser.

01:10.080 --> 01:13.080
These are all, you can subtly tell that there are different angles.

01:13.080 --> 01:18.080
All of those will move in the browser, you can view it live.

01:18.080 --> 01:19.080
So that's cool.

01:19.080 --> 01:21.080
That's the thing I've been building.

01:21.080 --> 01:26.080
It's a bit like having your own thing of us, but without the horrible download for

01:26.080 --> 01:32.080
the second advert banner, which on my home network, the ads block.

01:32.080 --> 01:35.080
So it's just a blank screen, it's just annoying.

01:35.080 --> 01:36.080
We don't want that.

01:36.080 --> 01:39.080
Instead, it's self-hosted container.

01:39.080 --> 01:40.080
It's a Docker container.

01:40.080 --> 01:45.080
It's built in Ruby on Rails.

01:45.080 --> 01:50.080
And you can install it in a bunch of different places, but you just run up a Docker container.

01:50.080 --> 01:52.080
And you can run it in a bunch of different modes.

01:52.080 --> 01:56.080
You can run it as a private single user thing, just for yourself.

01:56.080 --> 01:59.080
Just to look after the files that you have.

01:59.080 --> 02:03.080
But then you can also put it in multi user mode, share things with your friends.

02:03.080 --> 02:06.080
If you want legally allowed to do so.

02:06.080 --> 02:09.080
Of course.

02:09.080 --> 02:11.080
And then it can be federated.

02:11.080 --> 02:13.080
And that's what I'm going to talk a little bit about.

02:13.080 --> 02:17.080
Now, it's about how I'm doing that.

02:17.080 --> 02:20.080
How I've made up how I'm doing that.

02:20.080 --> 02:24.080
And this is like a big feedback session where I want you to tell me whether what

02:24.080 --> 02:27.080
I've done is terrible or completely wrong.

02:27.080 --> 02:31.080
But actually, hearing the talk so far, I think I'm not too far off.

02:31.080 --> 02:34.080
So there's a write up.

02:34.080 --> 02:36.080
There's a description of it on the website.

02:36.080 --> 02:38.080
I'm about to release this.

02:38.080 --> 02:41.080
It'll probably come out next week.

02:41.080 --> 02:44.080
I didn't quite get it done in time for foster.

02:44.080 --> 02:49.080
So the first thing that I need to do is have a few extra properties.

02:49.080 --> 02:57.080
So I've defined a name space, which I realize I've also given an unpronounceable name.

02:58.080 --> 03:01.080
So I'm no kidding at naming.

03:01.080 --> 03:06.080
But it was things that I needed to be able to express in activity public without.

03:06.080 --> 03:11.080
And anyone who's done massive on interoperability knows about two namespace and things like that.

03:11.080 --> 03:13.080
So it just adds a couple of bits.

03:13.080 --> 03:15.080
I'll explain what they are.

03:15.080 --> 03:17.080
We have a bunch of actors.

03:17.080 --> 03:20.080
Much like the other platform to talk about.

03:20.080 --> 03:25.080
There are actors aren't necessarily just people there.

03:25.080 --> 03:27.080
I want to follow a particular content creator.

03:27.080 --> 03:29.080
And that could be a bunch of people.

03:29.080 --> 03:31.080
But there's a profile for that.

03:31.080 --> 03:33.080
I want to follow a particular model.

03:33.080 --> 03:36.080
I don't care about what the rest of what this person's made.

03:36.080 --> 03:38.080
I just want to know if that one changes.

03:38.080 --> 03:40.080
Can you feed back?

03:40.080 --> 03:42.080
No.

03:42.080 --> 03:45.080
I just have a metal neck.

03:45.080 --> 03:47.080
I don't know.

03:47.080 --> 03:50.080
Or I want to subscribe to a collection.

03:50.080 --> 03:54.080
So all those things anything that you would want to follow is

03:54.080 --> 03:56.080
an actor.

03:56.080 --> 03:58.080
The actual login users are also actors.

03:58.080 --> 04:02.080
They don't create them quite the same way.

04:02.080 --> 04:11.080
And because of the well-stated issue that interoperability with masters on requires certain

04:11.080 --> 04:13.080
sorts of actors are ignored.

04:13.080 --> 04:17.080
It would be great if these were if a 3D model was a 3D model.

04:17.080 --> 04:20.080
Object that actors are acting.

04:20.080 --> 04:22.080
But that will be ignored by lots of things.

04:22.080 --> 04:26.080
So we use some of the standard types.

04:26.080 --> 04:30.080
And the standard types of that mastered on the stands.

04:30.080 --> 04:35.080
And the first little bit of extra data that we put in there is this concrete type,

04:35.080 --> 04:39.080
which actually when that activity public message comes to another manifold instance,

04:39.080 --> 04:41.080
it can go, ah, now I know what that is.

04:41.080 --> 04:43.080
It's not just a person.

04:43.080 --> 04:46.080
It's a content creator.

04:47.080 --> 04:51.080
Um, we support a whole bunch of activities.

04:51.080 --> 04:52.080
Uh, on those things.

04:52.080 --> 04:54.080
Models dressed in collections.

04:54.080 --> 04:56.080
You can, you've got bidirectional federation between

04:56.080 --> 04:58.080
uh, manifold instances.

04:58.080 --> 05:02.080
Um, they can, you can follow any of them, etc.

05:02.080 --> 05:07.080
Uh, users, you don't really, you wouldn't really follow a user on a manifold instance.

05:07.080 --> 05:10.080
Yet, I haven't worked out whether that's useful or not.

05:10.080 --> 05:12.080
So it's not what I'm currently doing it.

05:12.080 --> 05:15.080
Um, but the other thing they will see is notes.

05:15.080 --> 05:17.080
Because, um, yeah, sorry.

05:17.080 --> 05:21.080
So this will mean nothing to you.

05:21.080 --> 05:26.080
But that there, if you follow, uh, create it on another manifold server,

05:26.080 --> 05:29.080
it will pop up in your list of creators on your server,

05:29.080 --> 05:33.080
just like a profile would do on, uh, on master.

05:33.080 --> 05:38.080
Uh, and the only way you can tell that is that it's got the address there.

05:38.080 --> 05:43.080
But anyway, live demos are not a thing.

05:43.080 --> 05:48.080
So, um, right.

05:48.080 --> 05:51.080
So all these actors are getting updated.

05:51.080 --> 05:53.080
So creator releases a new model.

05:53.080 --> 05:59.080
They will, but it will send out an activity for, yes, a new model has been created by its person.

05:59.080 --> 06:01.080
So it's a new actor creation.

06:01.080 --> 06:04.080
But that doesn't really work in the micro block world.

06:04.080 --> 06:09.080
So what I'm doing is also sending out a note at the same time

06:09.080 --> 06:11.080
to the same set of followers to say,

06:11.080 --> 06:14.080
which is a better text description of,

06:14.080 --> 06:16.080
hey, look, I just published a new thing.

06:16.080 --> 06:19.080
Literally saying the same thing, but in a note form.

06:19.080 --> 06:24.080
And the other, uh, a little bit of extra metadata is that I'm calling this

06:24.080 --> 06:26.080
for my own purposes a compatibility note,

06:26.080 --> 06:28.080
so that when I do build commenting in,

06:28.080 --> 06:32.080
and we can get replies back, I can just ignore it.

06:32.080 --> 06:34.080
That's one of them.

06:34.080 --> 06:39.080
I think that was the first one that probably worked back in October.

06:39.080 --> 06:45.080
Uh, so that's a Macedon account following a creator on a manful instance.

06:45.080 --> 06:51.080
Um, now all this is, I was saying this is Ruby on Rails.

06:51.080 --> 06:55.080
Uh, and all of the activity pub core of all of that,

06:55.080 --> 06:59.080
there's the manifold code and then the core of it is in this thing called Federals.

06:59.080 --> 07:02.080
Uh, which I didn't start though I've done a bunch of work on.

07:02.080 --> 07:04.080
Uh, as part of this.

07:04.080 --> 07:08.080
Um, and it is a Rails engine for activity pub.

07:08.080 --> 07:11.080
So you can add the gem.

07:11.080 --> 07:13.080
Uh, you can mount the engine.

07:13.080 --> 07:16.080
Say, right, okay, I have Federation here now.

07:16.080 --> 07:17.080
Uh, set, do some flat up.

07:17.080 --> 07:21.080
And then you can map it to the objects that are in your application.

07:21.080 --> 07:26.080
So, uh, this is my use of model in my normal application.

07:26.080 --> 07:29.080
Um, and I can just say, oh, and this is a Federals actor.

07:29.080 --> 07:31.080
And there's a bit of configuration.

07:31.080 --> 07:37.080
Uh, it can react to following Federals handles all of that stuff underneath.

07:37.080 --> 07:43.080
Um, and, uh, you can create activities and so on.

07:43.080 --> 07:46.080
And all of that is sort of handled, uh, lower down.

07:46.080 --> 07:48.080
You can also have data entities that are just objects.

07:48.080 --> 07:52.080
Things that no have to turn themselves into objects.

07:52.080 --> 08:00.080
Uh, and we've also, uh, as part of this produced a add-on gem for, uh, moderation.

08:00.080 --> 08:04.080
Uh, because before I did any activity pub stuff,

08:04.080 --> 08:06.080
I wanted to be able to block it.

08:06.080 --> 08:08.080
I'm a master on admin as well.

08:08.080 --> 08:11.080
I know this and things that I want to block straight away.

08:11.080 --> 08:15.080
So, uh, so we've got to put in there for flag activities to main blocks.

08:15.080 --> 08:16.080
Uh, stuff already.

08:16.080 --> 08:20.080
And all of those, all that gems you can just, if you're building in Riga and Rails,

08:20.080 --> 08:22.080
you can just go pop it in.

08:22.080 --> 08:24.080
And hopefully fairly quickly, you should have,

08:24.080 --> 08:26.080
Rails out, but Fed writes.

08:26.080 --> 08:28.080
And that's my time.

08:28.080 --> 08:29.080
Take care of that.

08:29.080 --> 08:30.080
Take care of that.

08:30.080 --> 08:31.080
Thank you.

08:31.080 --> 08:36.080
Thank you.

