HN user

jayunit

96 karma

Starting something new in AI x education.

Formerly early engineer -> manager -> VPE at minerva.edu and minervaproject.com.

I'm interested in evidence-backed teaching and learning and collaboration technologies like CRDTs and WebRTC.

https://github.com/jasonm https://twitter.com/jayunit

Posts2
Comments69
View on HN

Congrats! I've been wanting exactly this app. I paid $5.99 for HealthFit trying to get similar information, but it doesn't (afaik) show the weekly/daily zone summaries.

I'd really love to see last week's information. Especially since you launched on a Monday, I'd love to have a new-user experience that shows me last week's info.

Other misc feedback:

1. Upon launching the app, I didn't see any data. Had to go into the gear menu -> approve health data sharing. I think it'd be better to push the user to this approval flow on their first session? (Edit: Aha, after watching the video: settings -> time period -> last 7 days)

2. Neither here nor there, but I wanted to download this so searched the app store on my phone for "heart rate zones plus" and this app was #16. I'm curious if anyone in the discussion knows -- how is this search rating determined? Is there anything the author can do to improve the ranking?

Congrats! I've been watching this space for a while, having built a couple multiplayer sync systems in the past in private codebases, including a "redux-pubsub" library with rebasing and server canonicity that is (IIUC?) TCR-like. There's a lot to like about this model, and I find the linked article quite clear - thank you for writing and releasing this!

1. You wrote "For example, schema validation and migrations just sort of fall out of the design for free." - very curious to read about what you've found to work well for migrations! I feel like there's a lot of nice stuff you can build here (tracking schema version as part of the doc, pushing migration functions into clients, and then clients can live-update) but I never got the chance to build that.

2. Do you have a recommendation for use-cases that involve substantial shared text editing in a TCR system? I'd usually default to Yjs and Tiptap/Prosemirror here (and am watching Automerge Prosemirror with interest). The best idea I've come up with is running two data stores in parallel: a CRDT doc that is a flat key/value identifying a set of text docs keyed by UUID, and a TCR doc representing the data, which occasionally mentions CRDT text UUIDs.

The “third part” of the post starts with “I’ve benchmarked cola against 3 other CRDTs implemented in Rust: diamond-types, automerge and yrs.” This cola library appears to perform favorably in operation speed.

I’d be curious to know about memory usage, too.

Congrats on the release! Having built several LLM apps in the past months and embarking on a couple new ones, I’m excited to take a look at Langfuse.

Are there any alternatives you’d also suggest evaluating, and any particular strengths/weaknesses we should consider?

I’m also curious about doing quality metrics, benchmarking, regression testing, and skew measurement. I’ll dig further into Langfuse documentation (just watched the video so far) but I’d love any additional recommendations base on that.

SEEKING WORK | San Francisco, CA or REMOTE | Consultant / Principal Software Engineer / fCTO | LLMs, Python, React, Full-Stack & Product Engineering, DevOps

Building generative AI and want to get the most out of it? Thin LLM wrappers are fine short-term plays but they aren't defensible - let's put together a product strategy that takes advantage of your unique process, data, or systems - and then build it.

Together with my business partner, we have advised founders/leaders and built LLM products across education (scalable personalized content authoring, AI tutoring/coaching, AI evaluation and feedback), general productivity, marketing tech, and healthcare.

We are exploring technical feasibility for a few startup ideas and are open to part-time work up to 20h/wk to aid our (currently bootstrapped) runway.

Technologies: LLMs (closed and open), Python (Django/FastAPI/Scikit-Learn), React (Next.js/Redux/etc), Devops (AWS/K8s/Docker/serverless/CDNs), RDBMS (MySQL/Postgres), Realtime (CRDT/OT/Websocket/WebRTC).

Remote: Yes, I have worked on and led a global distributed product & eng team since 2016 and am very comfortable with remote.

Willing to relocate: No

LinkedIn: https://www.linkedin.com/in/jasonpmorrison/

Website: https://jasonpmorrison.com/

Email: jason.p.morrison@gmail.com

Strong agree!

For JavaScript, I suggest folks check out fast-check [0] and this introduction to property-based testing that uses fast-check [1].

This is broadly useful, but one specific place I've found it helpful was to check redux reducers against generated lists of actions to find unchecked edge cases and data assumptions.

[0] https://github.com/dubzzz/fast-check [1] https://medium.com/criteo-engineering/introduction-to-proper...

Very cool! Thanks for sharing. Was binding Monaco particularly challenging?

I’m curious what the larger project/product is, if you are able to share.

I’ve used ShareDB (from @josephg in this thread) for a collaborative coding project with Jupyter as the execution backend. I just geek out seeing OT/CRDT projects in the wild :)

Thanks for your reply!

This is very interesting - I'm pretty unfamiliar with BEAM. Does this "processes all the way down" span across machines/VMs?

From the article, it seemed like there could be two players, each connecting to different LiveServer instances (on different VMs/hardware in different geographic regions) which in turn communicate async via one central GameServer.

In the article, it seems like a message from Player 1 to LiveServer 1 doesn't need to wait for the message to also reach the central GameServer and be acknowledged before LiveServer 1 acks the change back to Player 1. This seems to allow races, since the central GameServer is the source of truth but the Player1/LiveServer1 communication can complete a message/ack round-trip without waiting for acknowledgement from the GameServer.

I guess an alternative would be for the system to require a message from Player 1 to be passed to LiveServer 1, then passed on to the central Game Server which acks back to LiveServer 1, which finally can ack back to Player 1 -- this means that Player 1 would still need to pay full round-trip latency to LS1 and then to the GameServer for any action.

Thanks for any light you can shed on this!

I'm curious about how race conditions would be handled when multiple users, on different regional LiveView servers, take conflicting actions.

In the "Let's walk it through" section, it seems like the Player-to-LiveView connection will process user input (e.g. a Tic-Tac-Toe move) and update the UI to acknowledge this, at which point the user can be assured that the LiveView server accepted their input. But it seems like this happens before the GameServer has also accepted the input. What if Player 2 made a conflicting play and their change was accepted by the GameServer before Player 1's change reached the GameServer?

Given, in Tic-Tac-Toe, the game is simple enough that this is neatly avoided: each regional LiveView server has enough information to only allow the current player to make a play. But in more complex applications, how might you (anyone; curious for discussion) handle this?

One answer is something like: The LiveView server is effectively producing optimistic updates, and the GameServer would need to produce an authoritative ordering of events and tell the various LiveServers which of the optimistic updates lost a race and should be backed out.

Minerva Project | Full-Stack Engineer and Product Manager roles | Remote or San Francisco, CA | Full-Time | https://www.minervaproject.com/jobs/

Come help build the Minerva Forum: an engaging live educational platform that pushes the boundaries of WebRTC and realtime web technology. You can see a video of Forum at work: https://www.youtube.com/watch?v=Fz9UV4eXbJ8 or read more about the approach: https://www.minervaproject.com/solutions/forum-learning-envi...

Work on challenging technology problems with a small, sharp, high-EQ team. Our product team is about 20 folks across the US, Spain, Norway, and Israel. Our tech stack is mostly Python/Django/DRF, React/Redux, and Backbone/Marionette. Our real time collaboration services are a combination of websockets, ShareDB, and WebRTC. We deploy to AWS with Terraform and Kubernetes (EKS).

You can read about our team and values here: https://www.keyvalues.com/minerva

This sounds really cool! What’s the company? (I also work on WebRTC-based classrooms, at Minerva - we haven’t looked outside of voice in the audio sphere though.)