> Presumably, your server stores a registry of Device IDs and IPs to route messages?
Not IPs but Push API registration objects.
> What about replacing this with some sort of partitioned DHT to make it decentralized?
I guess this could be done but it's a task I can't tackle at this point.
> Also, the messages flow through your servers?
Yes but I don't store them. My API just dispatches the message to the recipient's push service. Which means the message exists on my server only in the form of an in-memory variable for several microseconds between being received and sent further.
> Would it be possible to set up WebSocket connections between the users instead, and how would that compare from a security model perspective?
This generally can't be done in a PWA. OS won't allow a persistent WebSocket to run in background.
Also, this would disclose too much information about a client to all the other clients. Currently, all I know about other clients is their Device IDs which are just random strings.
The biggest challenge with Enu is that kids don't read or write well, so they're basically sitting there telling youbehat to do and you're just coming up with solutions frantically on the spot.
It just occurred to me, that sounds a lot like actual development for a customer :-)
Congratulations to everyone involved and the entire Nim community!
Nim has been my language of choice for the past decade and I'm really happy with the new features in Nim 2.0. Some of them are real gamechangers for my projects. For example, default values for objects theoretically allow me to make Norm[1] work with object types along with object instances. And the new overloadable enums is something Karkas [2] wouldn't be possible at all (it's still WIP though).
Of all the recent changes, default values is my favorite. Aside from generally useful and further reducing the need for initialisation boilerplate, I lets us guarantee valid state at compile time for things like enums - and, I assume, object variants?
As a Python user, I had my a-ha moment with Nim when I realized I didn't need a repl.
With Python, I used repl all the time. There's bpython, ptpython, ipython, and probably a couple more great repls because repl is really important for Python development.
Nim's INim is no match for those. But here's the great part: with Nim you don't have to test code snippets all the time. I get all my error messages before they happen. This felt liberating after Python.
AFAIU she said the agreements were never viewed as a solution for the conflict.
The goal was to cool the conflict down to a state that allowed Ukraine to get better at war: collect arms, build defense lines, train soldiers, etc.
So, in other words, she said the war between Russia and Ukraine was inevitable and even expected and the agreements were introduced to give Ukraine advantage.