instead of sleeping I tried out different options for DI and yeah, none of them have all the things I want (except for dyn probably)
I tried to do something about some kind of dependency injection today. I found "coi" crate which seems very well-written and there are bindings for actix as well but I don't want to litter my code with annotations, I would prefer to manually define bindings. I would also love to avoid dynamic dispatch if possible. I tried to do something on my own but couldn't downcast an Arc for some reason. I could avoid it in some more manual way with dispatcher, maybe it's fine as long as I don't have too big of a graph (and hopefully I won't have it).
Fixed signup and started migrating to the podman from virtual machine for development. Let's see if I'll manage to migrate masto too
I'm also stubbing the heck of database this time.
I checked Lemmy and Aardwolf and both seem to run tests against real database and I don't consider this very unit test-y
I made character limit configuration and can really write long things now.
It's kind of a weird feel and I have no idea if it will break my perception and relationship with fedi as microblogging service. It's one of those things you want to get rid of all the time but once you actually do it makes you think if it did make sense after all.
On the other hand, chopped posts are stupid and only good for engagement™ metrics. I don't want to scream into the narrow tube anymore, it's not twitter, we define what and how much we'll say here.
I should probably opt out of search asap because marketing shits like https://ahrefs.com/robot are already crawling.
I mean, it won't help much but it's something.
Add links to posts and fixed login.
Let's try some links:
Are we still up? Amazing.
So, here we go, 10 days of lacking sleep to port this software to Actix. Could be faster if I didn't try to fix things and did rewrite most of the static website rendering but oh well, would need to to do it sooner or later.
I'm actually done with Actix now. DId some additional cleanup, improved main page and right now I'm building it. I hope it won't fall apart immediately (but it probably will)
If I didn't have to sleep, I could finish porting AP routes today, there's like 5 of them left.
Re-wrote signature parsing, ported inbox and object endpoints. Need to finish following/followers collections and outbox and THAT'S IT. Done with porting. New stuff. Fixing stuff.
Ported oauth, nodefinfo, webfinger to Actix today, started with Activitypub. I don't think it will be too much work now.
Was kinda fucky moment when I needed to test notifications and I remembered that I deleted all of them because of some corruption and I couldn't find a way to generate any because you can't log in 2 accounts on same instance in Pinafore and replies/follows from static fe didn't generate any. Even spun up masto but remembered that federation is not ported yet. Had to quickly add them on follows from static fe.
Oooof so I spent.. what? 5 more hours to finish static frontend and to fix some bugs. Now it should be really done.
I wish I left myself bigger part of the Sunday to rest... oh well
Finished profile updates. It was the last part of static frontend to port to Actix. I reused the same file handling logic as for other media uploads so all this multipart stuff was not so bad but I still spend more hours than I want to acknowledge on that.
Now the only thing to port is federation.
Was porting raito_fe for the most of the day and I'm almost done now. Had to rip off remains of Rocket because of the version conflict and use another session system for Actix.
Have to fix status media, status upload and, the worst part, profile update (which I wrote myself but it's multipart and it's... uh). Will have to just port AP endpoints (which should be the easiest) then and we are done!
Re-implementing parts of static frontend and run into happy little accident with time. Considering leaving it like it is.
Creating a new Rocket and new renderer to render each status before inserting it into template 🙈
@Tak that's not my focus right now to build static frontend either, it was idea before me to have brutaldon-like frontend, for own server and for others but I'm not a fan of "js-less" fetish
@Tak it doesn't make too much difference whether there is another frontend or not, it's a matter for couple of HTML files. I certainly don't want to work on another dynamic frontend for now but you need static one to at least render static posts/sign up anyway.
I also started with raito_fe (static frontend), kinda ported one route (/about). Had to set up templates and implement couple of Responder/FromRequest things.
I'm done porting Mastodon API, file upload was done. Was almost pulling my hear off trying to figure out why nothing was uploaded, turns out you cannot move one thing, oh well.
I finished porting more Mastodon endpoints today, the only one left is uploading media so I started with it and I was able to upload a file.
I'm impressed by how simple and straight to the point actix_multipart is and it's possible thanks to async. I can process any parts or chunks as they come, without preconfiguring and then parsing everything back.
It could be done declaratively but this can be built on top of it.
So actix is very positive so far and examples directory is a golden mine.
Didn't do much today, ported couple of more Mastodon routes. Still need to fix POSTs with the code @asonix wrote for me. I think that's the next thing to do. WIll only need to fix multipart for media after that.
Ok, porting to Actix moves forward but I try to unfuck things on my way and it comlicated everything obviously.
I was quite disappointed that you can't use async on trait methods (well, at least without boxing). I read a long explanation about it:
and I have no idea how it can be solved without exposing API and without boxing
I started with a single API route for public timeline, managed to hook up the route and the next step was to rewrite extractor for authenticated user. Now would be nice to check that static/templates/cookies work and then I can start with mundane task of re-wiring all of the routes.
Started migration to Actix today.
Docs are not always as good as one would want but it's pretty nice overall. It seems less "friendlier" than Rocket but everything so far made sense and there are docs and examples about plugging things in.
Kinda nice to have more and more things working although this "feeling good" progress will probably end soon.
I was in Matrix that Plume is using dev branch of Rocket to have async. I am temted to do the same instead of switching to Actix but
1. It's still dev
2. It's not clear when it will be released
3. It won't be very stable at first anyway
4. There are still no websockets
I'm mostly afraid of templates, API shouldn't be hard to hook up. Let's see.
Ok, I added inline reply counters on posts so I can finally merge it to master if nothing goes horribly wrong in the next few days.
It's hacky and all over the place but I plan to reorganize a lot of stuff anyway.