7,096 karma · joined September 27, 2019
https://www.athanorlab.com/
- Hue lights still slap, "just work", and have proved to be reliable over time. They are a big upgrade over non-dimmable, non-temp-changeable bulbs, or buzzing dimmer switches from ages past.
- Home Assistant's UX is poor
- I should probably try some of the temp control and security camera tools
Most importantly: These systems can be useful and have a good design without being cloud. A microcontroller and good user interface can be a big upgrade over a "dumb" system, without evoking the internet, or a Linux etc operating system.Thoughts on an abstraction over ARM and x86, at 128, 256, and 512-bit widths which, either in a manual or automatic way (The latter more challenging) makes your floating point computations 4-16x faster with minimal restructuring? I think that's doable, and a nice goal of SIMD.
Downside: It's currently x86 only.
Balance in all things?
Another angle: Unfortunately, the `first()` method being fallible here is just an issue of using an imperfect method/datatype here. This is where the author gets in to a non-empty-vec custom type. Then you are balancing using a more correct type that takes custom wiring vs a std lib thing everyone understands and takes no setup. I would lean towards this setup if I were using this non_empty_vec.first() unwrap pattern a number of times in the code base; then the setup would be worth it, at least for my own code bases. If I were exposing this in a lib others would use, I would keep the standard Vec so as to be more transparent for others.
In both views: "This is what unwrap is for" does it for me in all cases I've encountered to date. Maybe for aerospace or safety critical systems, I would have a different take.
A third take: I notice this trend in the rust community. It's not my cup of tea. Keep things simple, easy to maintain, and don't let "correctness" get in the way. In this example, I don't think it gets in the way, but I have seen this mindset lead to it getting in the way, especially in embedded, where mapping the Owernership model to hardware ends up in messy patterns and surprising assertions about embedded-101 concepts like DMA being "unsolved", "no good way", "difficult" etc.
Rust provides tools to make sure specific logic is correct if it passes the compiler. People sometimes go overboard and assume you have to type-maxx your code, regardless of complexity added by doing so.
- Providing a memory allocator
- Providing threads which manage how the CPU cores are used
- Interacting with network hardware, the motherboard's RTC, memory address mapping etc
- Scheduling arbitrary software to run simultaneously
- Providing a file system
- etc
> Why do we have modern operating systems? It’s not simply to “provide access to hardware resources”; plenty of embedded systems do that with runtimes that have no business calling themselves an “OS”. No, the core purpose of a modern operating system is to partition different applications off from each other, and carefully control how they can communicate.This gets at the core of it; i.e. you don't need anything in that list above to run software, but it's useful when you want third party software to run on the hardware, and multiple pieces of software co-existing with each other, and running without special hardware knowledge.
So, to this point, I agree with the article/author on this distinction. I think differences arise from how different people use computers, and perhaps I quibble with the title more than the contents. There is many software I run and write which I imagine will continue relatively unchanged (or changed incrementally) for decades. Broadly, GUI creative software, media consumption etc. CAD, EDA, structural biology/bioinformatics software, games, media consumption (video, text etc), IDEs. I suppose another highlight is that I never personally understood the appeal of terminal-based software that many software programmers love. (Not just software programmers: bioinformaticians love CLI-based workflows too, i.e. piping stdin/out around)
I would love Android/iPhone competition! Although I imagine the same obstacle of "How do I get my societal-connections functionality to work in a way where I'm not excluded" will continue to be a problem in the short term, at least. (Banking, communications, NFC payments etc)
Is it worth the ~10x extra cost over the subscriptions? (This is obviously a leading question). Also, I think you can use OpenAI's subcription login with Air, but not Claude's.
SBC is a PCB which includes ports for power, I/O, often other parts like sensors on it. Esp32 is a MCU. You can put an Esp32 on a PCB and call it an SBC. (Although semantically SBC usually refers to something that runs a GPOS, but perhaps that's flexible or changing)
Stated another way: An MCU, like the ESP32, is a tiny computer, sans the hardware you physically interface with it.
The computing power, and memory is much lower than your desktop or laptop PC (or mobile phone), but if you are using it to run a dedicated task, instead of using a big OS like Linux or Windows, it can complete the tasks really fast (often microseconds) and with minimal power use. This is because it's easy to program to do exactly what you need, with nothing competing for the hardware.
A note on ESP in particular compared to other MCUs: It's one of the only (Or was?) options which has Wi-Fi integrated into the MCU itself. It's a good default if you want that.
It's not novel, and they don't know if it means anything. They published it here for PR purposes.
FWIW I think your Rust + Qt route is fantastic. I've been using Rust + EGUI myself, but have Qt in mind for future projects.