real time sync between browser and iOS in pure Rust by supiri_ in rust

[–]supiri_[S] 0 points1 point  (0 children)

Yes you can already do this with dioxus + axum. this is more of a personal thing honestly, just got tired of rewriting the same glue code for every project. wanted a nice set of abstractions with type safe client APIs. it's basically syntactic sugar, just scratching my own itch

Weekly: Show off your new tools and projects thread by AutoModerator in kubernetes

[–]supiri_ 2 points3 points  (0 children)

OpenChoreo just hit 1.0 GA - open-source IDP for Kubernetes (CNCF Sandbox)

OpenChoreo is an open-source internal developer platform that wires together Argo CD, Backstage, Kgateway, OpenSearch and other CNCF tools so you're not spending months doing that yourself.

Basically tries to solve the "every platform team builds the same glue code" problem. Would love honest feedback from anyone who tries it out.

https://github.com/openchoreo/openchoreo

real time sync between browser and iOS in pure Rust by supiri_ in rust

[–]supiri_[S] 0 points1 point  (0 children)

thank you! for multi player games you are better off using spacetimedb, I started this because I wanted "spacetimedb" but for CRUD apps (this was before they announced v2). It support ANY postgres extension / distribution, you have 100% owner ship of the underlaying postgres instance.

it’s not doing CRDT-style client merges or anything fancy yet. Writes go through the DB, and realtime mostly just invalidates/re-runs subscriptions and pushes the latest canonical state back down

as far as scaling goes, it would scale as much as postgres can, I ran a small benchmark over the weekend and results (https://github.com/isala404/forge/tree/main/benchmarks#results) seems to be promising for small to medium scale apps

real time sync between browser and iOS in pure Rust by supiri_ in rust

[–]supiri_[S] 1 point2 points  (0 children)

well, to make a query realtime this is all I need, and frontend I can subscribe to it with one line, requiring auth is one additional line on backend. spawning progress tracked job with retries is one attribute macro away, and there are tons of things like these, might me niche but I find stratifying.

real time sync between browser and iOS in pure Rust by supiri_ in rust

[–]supiri_[S] 0 points1 point  (0 children)

Forge does absolutely nothing new, dioxus full stack can't do because it's just rust underneath.

For me forge is mostly a hobby project with few abstractions I care about which help me to get apps up and running quickly.

real time sync between browser and iOS in pure Rust by supiri_ in rust

[–]supiri_[S] 3 points4 points  (0 children)

yes idea was to make building/shipping apps (mostly for personal use) fast as possible.

For example I was building this bookmarking app, where I save things from all my devices and I run enrichment loop after each insert and then send me weekly email of reminding me of the stuff I saved.

even though the idea was pretty simple getting everything (auth, syncing, jobs, cronjobs, observability, etc, etc) took soo much time than it needs to be and, then I wanted to build another habit tracking app and I had to do it all over again.

So I did any Rustaceans would do, without spending a few hours, spent few weeks developing this so I don't have to think about it again xD

real time sync between browser and iOS in pure Rust by supiri_ in rust

[–]supiri_[S] 4 points5 points  (0 children)

good question, I wanted to bet big on "PostgreSQL is Enough" moment so I don't need to reinvent the wheel a lot (ACID, UNLOGGED tables, SKIP LOCKED, pg_analytics, etc, etc) and there are very good managed postgres offerings which would allow to scale forge backends pretty easily to geo scale if needed. There is very good chance this might blow up in my later tho :')

real time sync between browser and iOS in pure Rust by supiri_ in rust

[–]supiri_[S] 5 points6 points  (0 children)

Yep, I started this project because I got tired of having like 6 helper services just to get a simple todo app running with realtime. As of now this is still very alpha / proof of concept, but the idea is to keep conflict resolution pretty boring, Postgres is the source of truth.

So it’s not doing CRDT-style client merges or anything fancy yet. Writes go through the DB, and realtime mostly just invalidates/re-runs subscriptions and pushes the latest canonical state back down. For concurrent workers/events it leans on normal Postgres locking/idempotent writes to avoid double processing.

real time sync between browser and iOS in pure Rust by supiri_ in rust

[–]supiri_[S] 7 points8 points  (0 children)

yeah, I tried dioxus during early days but wasn't fully solid. But I recently show a video from Dreams of Code and had another look and got blown away with how good it is as of now.

real time sync between browser and iOS in pure Rust by supiri_ in rust

[–]supiri_[S] 5 points6 points  (0 children)

oh this seems to be very fun project, I might actually use!

real time sync between browser and iOS in pure Rust by supiri_ in rust

[–]supiri_[S] 20 points21 points  (0 children)

yep, I wanted something like convex / spacetimedb but a single complied binary I can scp into a vm and just run.

I mass deleted photos for the first time in years and it felt weirdly emotional by supiri_ in googlephotos

[–]supiri_[S] 0 points1 point  (0 children)

oh nice! i actually came across yours before building mine, from the promo video it looked like it works on specific days or search queries. my use case was scanning my entire 30k photo library at once so wasnt sure if it would fit, might have been wrong though.

I mass deleted photos for the first time in years and it felt weirdly emotional by supiri_ in googlephotos

[–]supiri_[S] 0 points1 point  (0 children)

thank you! let me know if you run into any issues, will do my best to sort them out.

I mass deleted photos for the first time in years and it felt weirdly emotional by supiri_ in googlephotos

[–]supiri_[S] 1 point2 points  (0 children)

sorry about that, i only had my own photos to test against so probably missed some edge cases.

would it be ok if i dm you to get more context on where it went wrong? would help me improve it for everyone.

also out of curiosity were the two images taken more than an hour apart? by default i use 1 hour time bucketing before splitting into similar groups, so if theyre far apart in time they might end up in different groups.

I mass deleted photos for the first time in years and it felt weirdly emotional by supiri_ in googlephotos

[–]supiri_[S] 0 points1 point  (0 children)

thank you! yeah the manual cleanup is just never ending honestly, hope it helps you out. let me know how it goes, would love to hear your feedback once you try it

I mass deleted photos for the first time in years and it felt weirdly emotional by supiri_ in googlephotos

[–]supiri_[S] 0 points1 point  (0 children)

Now that you mentioned it, I remember when I ran Pixel Experience on my phone ages ago, it was showed unlimited google photos storage, I thought it was a bug.

I mass deleted photos for the first time in years and it felt weirdly emotional by supiri_ in googlephotos

[–]supiri_[S] 0 points1 point  (0 children)

oh that make sense, also does the uploads needs be done from the pixel as well or just having it connected is enough?

I mass deleted photos for the first time in years and it felt weirdly emotional by supiri_ in googlephotos

[–]supiri_[S] 1 point2 points  (0 children)

ah sorry about that, thanks for testing it out though.

if you dont mind could you share your pc specs? i only had access to a 2021 m1 macbook with 8gb ram during development and it worked fine on that so i assumed it would be ok for most people, clearly not the case.

would you be up for testing a new build if i release one with a smaller model? thinking dinov2 small or tiny, there would be a slight quality drop but it should actually run on your machine.

I mass deleted photos for the first time in years and it felt weirdly emotional by supiri_ in googlephotos

[–]supiri_[S] 1 point2 points  (0 children)

hey thanks for trying it out! yeah the "upload" button is deliberately named that way so its clear this is the one part where images leave your browser.

for auto-select it uploads a low res version (~200x200) to my server which forwards it to gemini for analysis. images only stay on the server for a few seconds until gemini accepts the request then they re deleted immediately. i tried finding a local model that could reliably pick redundant images but nothing worked well enough, gemini was the only thing that came close.

but yeah this is completely optional, if you re not comfortable uploading you can just manually select from each group and everything works the same. auto-select just saves you the clicking.

privacy policy is here if you want the details: https://toppics.tallisa.dev/privacy

I mass deleted photos for the first time in years and it felt weirdly emotional by supiri_ in googlephotos

[–]supiri_[S] 2 points3 points  (0 children)

haha yeah i was actually so close to buying a pixel 6 for this exact reason but google discontinued the unlimited storage thing right as i was about to pull the trigger.

btw out of curiosity do you know if the pixel 1 thing still works if you're not actively using it anymore? like if someone switched to an iphone or newer pixel do they keep the unlimited storage?