Are there any plans for supporting other databases? Our company primarily uses and has experience managing MySQL deployments. I evaluated Temporal some time ago as it seemed like a good fit for what we're building so I'm watching this closely. Thanks!
Our primary focus is Postgres. DBOS Python recently added SQLite support, we'll add this to other languages if it proves popular, but no current plans for MySQL.
That said, while DBOS requires Postgres for its own checkpoints, it can (and often is) used alongside other databases like MySQL for application data.
To build on what Peter said, we need to stay focused and make one backend solid before expanding. But architecturally, nothing prevents us from supporting more engines going forward.
The OP is real time ray tracing which is running between 30-60FPS on my macbook air while moving the camera and objects around.
Your link appears to be a basic ray tracer which anyone who has taken an intro to computer graphics course in college is likely required to implement and would only need a javascript canvas. To be honest I have no idea how much OPs real-time ray tracing differs in complexity from traditional ray tracing.
You could simulate pixels with divs if that's all you had. Or you could create an image in memory and save to file. You could write the text for it and save as SVG.
For a CPU based ray tracer, you don't need any output capability at all(unless you want it to be interactive, which school assignment raytracers usually don't have to).
I've used several MVC UI frameworks in the past both on the desktop and web, and they all had the same problems. When the view becomes out of sync with the model, it becomes a nightmare to figure out why that's happening.
You have your model (data), and conceptually, you just want to bind that model to the view. But you have to write all this imperative code to do that. It's very simple with an imperative UI to have infinite loops even with very simple UIs. "When this field changes, I want to update this other field". But that other field has it's own event listeners that trigger other effects. The event listeners work fine in their own silo, but the interactions between fields cause unintended effects that are not obvious reading the code.
When the component is mounted, the behavior is very hard to reason about and you spend lots of time in a debugger tracing through all the event listeners just to reach the initial state of the UI. Additionally, in these frameworks the developer is typically responsible for cleaning up all the event listeners. It's very easy to forget to clean these up properly.
Once a UI reaches a certain complexity, you try to rewrite the imperative code so that it almost reads declarative and you wish you could simply use a declarative UI framework. I can't speak for React as I have not used that in a long time, but in Vue.js I never write the UI to use global state. All state is local to the views that it pertains to and with defineModel introduced back in late 2023, you can write small UI components without all the plumbing required in earlier versions. I've never experienced such a simple and reliable UI framework previously.
> "When this field changes, I want to update this other field".
That's the problem MVC solves, and that not just a vast majority of so-called MVC frameworks (that are nothing of the sort) get fundamentally wrong, but also a lot of people talking about MVC, in particular those who want to "fix" this non-problem of MVC (see: React).
In MVC, fields never update other fields. The model also doesn't update any fields.
1. UI events update the model, and only the model
2. The model notifies the UI that it has been updated, and the UI is now inconsistent. It does not initiate an actual update, nor does send data to the UI.
3. The UI fixes the inconsistency by updating itself from the model. This can be a full update, or it can do something more clever to only update parts it knows have changed. This may be in response to an update notification or not.
No update loops. No inconsistencies (well except the temporary ones until the UI has updated itself, but those are part of the deal). Solved in the 70s.
I wrote about this here: Model Widget Controller (MWC) aka: Apple "MVC" is not MVC
The update loop occurs as a result of step 3 in which the UI updates itself from the model which then, due to a combination of developer inexperience, UI framework design/complexity, or application complexity, the UI then automatically triggers updates to the model. In my experience, this was a common defect in all applications I've seen that used various MVC style frameworks or home grown MVC architectures.
In a declarative framework, while it is still technically possible, it is very rare. The current app I'm working on is one of the largest front-end apps I've worked on (multiple years of dev). We've had a single infinite loop issue reported that was trivial to fix. We have very junior UI devs compared to teams I've worked on in the past, yet our UI defect rate is incredibly low.
> The update loop occurs as a result of step 3 in which the UI updates itself from the model which then, due to a combination of developer inexperience, UI framework design/complexity, or application complexity, the UI then automatically triggers updates to the model.
In an actual MVC framework, that can't happen.
By which I mean: it cannot and does not happen as a side effect of normal processing that you need extra skill and care to avoid.
Because updates to the UI only come from the model (but pulled by the UI when it is ready) and do nothing else. Changes to the model from the UI only come from user input and only from user input.
As an example, I can't recall every having to deal with this problem in NeXTstep/AppKit/Cocoa in the last 35 years.
If this situation is something that can and does happen just as an emergent effect of normal processing and takes extra care, effort and skill to avoid, then I would argue what you have is not a real MVC framework.
You can obviously always add bugs to programs by just putting them in manually, like, abort() or while(true) {}.
> It's very simple with an imperative UI to have infinite loops even with very simple UIs.
That's something that reactive UIs inherited from the imperative events by design. It's not a differentiator here. You may be able to debug them better, but infinite event streams are pretty much still an issue, and about as easy to get.
Anyway, almost every problem in the article is a react problem, not a FRP problem. Vue may not have them, I don't know it well enough to say (but some do really look like a FRP in javascript problem, so they should apply there too).
I went through the Crafting Interpreters book with modern Java. I posted this on reddit, but I basically used records and sealed interfaces. With modern Java there's no need for visitor pattern.
private void execute(Stmt statement) {
switch (statement) {
case Stmt.Expression expression -> evaluate(expression.expr());
case Stmt.Block block -> executeBlock(block.statements(),
new Environment(environment));
...
public sealed interface Expr permits
Expr.Assign,
Expr.Binary,
Expr.Call,
Expr.Function,
.... more exprs here
Interesting. Almost all my actual experience writing Java is in Java 8, so I'm not super familiar with the modern stuff (other then a few things like Records). I'll have to take a look.
Most of the people I know who write Java would have an aneurysm at seeing a switch statement.
To be clear, that's a critique of the Java mindset, not your code. Lol
How does Magit handle complex merges? The website shows simple diffs. In my experience, merging is something where a great UI can vastly simplify the process. I personally use SmartGit which I find is fantastic for diffs and resolving conflicts.
Like most of the things in Emacs - with variability that can suit [almost] every scenario - you can simply accept upstream or downstream changes with a keypress; use plain (line-by-line) diffing or 3way-merge diff UI; you can go through every hunk and precisely control things, while (if needed) rewriting the code; you can delegate the task to the external tooling;
What's great is that all that is happening in your editor - you can always bring another window next to your conflict resolution to compare with context in a different branch, revision or stash; you can jump from a diff pointing to a file to open it in Dired - directory browser and editor, where you can also get the log of changes pertaining that file only (or any marked files and dirs in the filetree). You can even ask LLM to help you at precise point, by just marking a hunk and sending a request - without context switching, without losing your focus.
Not the OP and driving my EV isn't a terrible experience, but I do find I struggle to drive it smoothly.
I have a really hard time using cruise control in my Genesis EV. I usually use one of the regen breaking modes, and when you disable cruise control, the car will automatically start regen braking unless you have you have the throttle at the perfect position which is near impossible. And that's much more noticeable if you use one of the more heavy regen modes.
So I have to follow this pattern: Disable regen, engage cruise, use cruise, disable cruise, enable regen just to use it for a few minutes. And with the Genesis, every time you change between regen modes the car kind of jerks a bit. I've heard this is not really a problem in Teslas. Of course I could simply not use regenerative braking (a major feature of the car) or I can attempt to change my driving habits and not use cruise control as often. For long drives I much prefer my ICE vehicle specifically because of this.
The other thing may be related more to my driving position. The car is heavy and rides harshly over bumps which causes my foot to accidentally push harder on the throttle for < 1 sec. And because it's an EV which has quick acceleration the car occasionally will accelerate fast after I hit a bump. I've driven a ton of ICE sports cars with hard suspensions and never had this problem. Perhaps I'm just getting old and now have bad reflexes!
I understand the cruise control dance. I do it on both my Tesla and my Lightning. My solution, which works with both of my cars (notably, not a Genesis, therefore this may not work the same!) is just to accelerate slightly, deactivate cruise, drive as normal.
The Lightning would allow me to do it old school, it has a non-one-pedal-drive mode that has similar regen to normal engine braking on an ICE truck. But I prefer OPD so I just do the 'accelerate slightly and deactivate cruise' to get around the sudden slow down if I just turn it off abruptly.
> Perhaps I'm just getting old and now have bad reflexes!
Sounds like just a very aggressive throttle mapping. Not something I personally run into, but as with my earlier comment, this is very much going to be specific to the car. I also tend to drive with my toe at the bottom of the accelerator pedal which steadies my foot quite a bit and makes it less prone to bouncing on a bump.
> accelerate slightly, deactivate cruise, drive as normal.
That was also what I tried doing to try and remedy the problem. The problem is normally when you want to deactivate cruise, it's because there's a slower car in front. And it's a bit unnerving to accelerate towards the slower vehicle (even if ever so subtle) when the goal is to deactivate cruise. I've attempted this about 3 times on the highway and it just didn't feel comfortable so I stopped doing that.
I wish there was simply some setting so that after deactivating cruise there was some smoother ramp up to the current regen setting. For example, after deactivating cruise it's max-regen should be similar to ICE vehicle deceleration, then after N milliseconds ramp up to last used regen. That would solve the problem for me.
I agree it would be nice to have a setting. There is a bit of a delay on my Lightning, less so on the Tesla, but it could be a settable option. I don't run into exactly he same situation, however, because the only cruise control I have is adaptive cruise and it's slowing down for traffic on its own. If I have to disengage cruise in that situation, chances are pretty good I'm using the brake pedal to do it, ha.
Why deactivate cruise control for a slower vehicle in front of you? Does the Genesis not have active cruise control? Both of my cars will slow down automatically to match the speed and keep a safe follow distance.
I drove a Genesis G80E for a week and I understand where you're coming from. The regen was a bit awkward and I had the same issues. The Mercedes EQE 350 I rented recently did better there.
Tesla has their regen dialed in quite well. I've read Ford's is good as well, but I haven't had a chance to drive one yet.
I have a Tesla as well as a Lightning, and in my experience the Ford's regen behavior is indeed very similar to Tesla. I don't have much experience with other brands.
I haven't experienced this but I see you're the second comment pointing that out. I've been using macbooks for work for a long time and never once used iCloud nor do I remember seeing a confusing prompt. But I also rarely upgrade my machine.
With Windows, a regular seemingly normal update appeared almost as if I was upgrading from Windows 10 to Windows 11 and it prompted me to do the backup to OneDrive. I accepted it because I was worried the update to Windows 11 would get screwed up. After the update completed it was just a normal update after all and there was no need for me to accept that onedrive backup!
iCloud nags appear in the Settings app and Notifications menu. When you are signed out, Apple will assault you with notifications (that you must disabled with a script) until you log in: https://discussions.apple.com/thread/250786208?sortBy=rank
I've got my fair share of horror-stories with both OSes, I switched between dailying Mojave and Windows 10 for a big portion of my life. Nothing will ever top updating to Catalina, booting up Ableton Live and seeing all my paid plugins go from "working fine" to "completely unsupported" in the span of an update.
I see. I think part of the reason why I don't see this (or don't remember it?) is I treat my work computer differently than my home computer. For my work computer, I honestly only restart my Mac maybe once every few months and never install updates. By the time I'm 1-2 OS releases out (usually when the battery starts to fail), my company gives me the latest macbook.
For the people in the office who use Windows they start dropping off randomly during the day as their computer decides to start installing updates during critical times.
If anyone else was confused, they're referring to the Audio Readers' Briefs. I didn't immediately recognize it as AI. To be honest the voice sounds exactly like my coworker responsible for doing our product video demonstrations.
I skipped through it and heard it pronounce nginx as en-gee-onix and only then did I realize it was fake.
You might want to mention this on the website as well, where it's definitely not clear. I also don't see how to navigate from the website to the introduction where it's explained.
That's a good point. I just redid the sample audio to include the opening section that adds that opening track that sets the stage with the positioning I put above.
Thanks for sharing Toshi. I've been very interested in Cosmic DE recently and have been playing with it with a Virtual machine. Will definitely try Toshi tonight!
I used to use Windows and using control key for everything was leading me to have severe wrist pain. That ended ~14 years ago when I was forced to use Macbooks for work. The position of the command key and using my stronger thumb for all shortcuts is so vastly superior to stretching my pinky to reach control. It's bizarre the rest of the industry is still stuck with this design. I wish system76 and pop os would be strongly opinionated about this and design their laptops and keyboards to be more mac-like and use something like Toshi as the default. I had a mini rant about this on reddit recently. I still find it bizarre that System76 made the launch keyboard with a different layout for the super key than their laptops.
https://imgur.com/a/svQaeCa