I've been doing this as well, but using regular editors.
What benefit does Obsidian give here that a text editor doesn't give? You just want to write/paste something for storing but I never understood why I needed a different editor for it.
Well, it has a bunch of plugins for making your notes folder into a database, or cataloguing meta data, or adding graphs, spreadsheets, mind maps, or flow charts, but I don’t really use any of those.
The only thing I use is the Mathjax plug-in for keeping notes about interesting publications.
Aside from its plugins, Obsidian is a great markdown editor and has a folder view and search integrated. I like it for that. My alternative is Apple notes, but long notes are hard to read there, so having markdown view is a positive experience.
If your editor has a wiki mode (like Emacs' org mode) then maybe nothing. If not, then Obsidian is your browser and your editor is your editor. For example, git syncing between Android and desktop isn't working well for me, so I edit directly in github UI and browse in Obsidian. The fact that Obsidian works exactly like that is one of the biggest benefits of Obsidian.
The integration of notes and tasks - that’s unbeatable. While I journal stuff during the day adding tasks is one macro away, and these task can then be searched easily. Your journaling becomes a database of stuff to do.
I feel like the only reason I use Obsidian is because of the "real time" markdown editor. If I could have this in Zed (not split view between source and render) I would probably not used Obsidian anymore.
Right, I wonder what else is under NSFW. Are they really forcing users to enable NSFW which includes actual smut, in order to get a bible app? This is malicious.
A killer feature that none of the tiling managers for macOS will ever implement for reasons I don’t know why:
Make it so I can double tap the cmd key to see outlines of windows and allow me to swipe using the touch board to shift windows around into pockets space.
Network connection, lobby, matchmaking, leaderboards or even chats, yes. But the actual simulation, probably not for fast paced twitchy shooter.
Also not just for performance reasons, I wouldn’t call BeamVM hard realtime, but also for code. Your game server would usually be the client but headless (without rendering). Helps with reuse and architecture.
In the case of Call of Duty: Black Ops 1. Thee matchmaking + leaderboards system was implemented by DemonWare (3rd party) in Erlang.
Erlang actually has good enough performance for many types of multiplayer games. Though you are correct that it may not cut it for fast paced twitch shooters. Well...I'm not exactly sure about that. You can offload lots of expensive physics computations to NIF's. In my game the most expensive computation is AI path-finding. Though this never occurs on the main simulation tick. Other processes run this on their own time.
The biggest hurdle to a game server written entire on the BEAM is the GC. GC pauses just take too much time, and when you need to get out (for example) 120 updates per second, you can't afford it. Even offloading stuff to C or C++ does not save you, because you either have to use the GC, do a copy, or both.
Game servers typically use very cheap memory allocation techniques like arenas and utilize DOD. It's not uncommon for a game server simulation to be just a bunch of arrays that you grow, never shrink, and then reset at the end of the game.
Good point. Yeah I guess it wouldn't cut it for any fast-paced twitch shooter. Especially with a 120 update per second deadline. A non-deterministic GC pause could have disastorous effects, especially in a tense shootout. I don't know much about GC theory but the GC in BEAM is per process and heap-based? I'm not sure exactly what that entails, but can you not structure the main simulation process to take advantage of this fact?
I find myself interested in developing multi-player simulations with more flexible deadlines. My MMO runs at 10 ticks. And its not twitch-based. So the main simulation process can have pauses and it wouldn't have a big impact on gameplay. Though this has never occurred.
As long as: (tick process time) + (send update to clients) + (gc pause) < 100ms, everything is fine?. (My assumption).
Btw what does DOD mean? Is it Data on Demand? Since my game is persistent I can't reset arrays at some match end state. So I store things either in maps on the main server process or I store it in the dedicated client process state (can only be updated via server process).
The best query builder I’ve seen is Kysely and it works because of anonymous sum types. So far no other library in any other language has come remotely close. You’d think Rust would have that level of type safety, but alas no.
Implementing convenience APIs in Rust has been tricky, since a lot of the usual memory-safety semantics start to break once you push into fast concurrent code that shares buffers across threads. My early drafts were riddled with unsafe and barely functional, so I’d definitely welcome suggestions for quality-of-life improvements.
That would pollute the namespace. The type could be namespaced under the function signature, it's not its own type unless you extract it with FunctionParamater<typeof ..>[0] or along those lines.