190 karma · joined December 18, 2018
My background is in firmware development and 10-year goal is to modernize embedded software development.
It's such a low-effort and small event, and it allows people to get into other people's homes in a low-judgement way. It's been one of the more successful events at getting neighbors to become friends with each other.
This strategy is covered here: https://interrupt.memfault.com/blog/device-heartbeat-metrics...
Of course it’s better with thousands of devices, but we were always surprised how accurate it was (as long as we had a few Android users in the office - it reliably got worse battery life due to worse Bluetooth performance)
Definitely cumbersome to use, but it had fair reasons to be cumbersome.
---
A question for the maintainers...I was enjoying the command `stg publish` to allow myself to keep refreshing patches locally but every so often push to a branch that others non-stg users were pulling and pushing to. The command was removed in 1.0.
I'm curious why it was deprecated and removed and if there is a good replacement flow for working with non-stg users on branches I can't force push to.
Should have clarified. On the embedded systems I work on, generally Cortex-M4, you set an MPU region on address 0x0 and it turns into a hardfault, so it's pretty easy to catch.
I'm actually really curious what you all do in C/C++ to prevent bad operations from ever being performed in the first place.
For example, should we just change our internal malloc / free to use double pointers instead?
bool malloc(size_t n, void **ptr) {
*ptr = <memory>
}
void free(void **ptr) {
... <free>
*ptr = NULL
}
This way, if anyone actually tries to use that pointer, it will crash the system (hardfault), instead of potentially using corrupted memory, which IMO is much worse.If the light sensor or the braking module goes into a completely unexpected state where it can no longer be communicated with, it has corruption, etc, you need to do something about it.
The solution isn't to reboot the car, it's to reboot the individual module and quickly get it back into working order. Rebooting the braking or lighting module should take on the order of milliseconds (if done correctly), and that is much, much better than having a piece of software in a corrupted state for seconds/minutes/hours.
In a car, there is a mothership board that is orchestrating everything, pinging every module, and ensuring everything is in working order. Just like a kubernetes setup, if any one piece fails to ping or looks off, just reboot it and get it working ASAP.
At Memfault, we're helping companies that build their own hardware automatically catch, triage, and fix issues in the field.
Unlike mobile or web developers, hardware engineers today do not find out something is wrong with their device until their customers start calling (or worse, tweeting). Memfault gives companies the initiative by providing a real-time view of errors their devices are encountering in the field, and infrastructure to deploy targeted fixes.
We're mostly ex-Fitbit, Pebble, and Oculus engineers. We know the industry well, and we are excited to solve the problems that we have faced endlessly for the last 10 years.
Open Roles:
* Full-stack Software Engineer (React, TypeScript)
* Backend Engineer (Python, PostgreSQL, AWS)
* Marketing Manager
* Business Development Manager
* Customer Success Manager
* Sales Development Representative
Launch HN for more context: https://news.ycombinator.com/item?id=20801512
Angel Jobs Page: https://angel.co/company/memfault-inc
If you're a web developer who happens to have a passion for or wants to learn more about embedded systems and hardware, we'd love to hear from you.
Feel free to reach me directly at tyler(at)memfault(dot)com
https://interrupt.memfault.com/blog/code-size-deltas
Unsure if their minds were blown, but I at least know that mine would have been if I showed it to myself a couple of years ago. During that time, I had never touched databases, migration files, or devops in general. Now that's changed, but I still try put myself in those shoes.
In the end, I went with Heroku and it's included PostgreSQL offering and stomached the complexity, but along the way I found https://jsonbox.io/, which I thought was neat and seems very similar.
One of us from Memfault also wrote a post about tips with Binutils, and this approach is covered in it.
Too real. In the past, the way we usually went about saving space when we needed it was removing small animations, shortening log messages (eventually encoding/hashing them), compressing icons that were stored in the firmware, and ensuring large functions don't get inlined.
LTO was also an option, but wow, does it slow down build times and make the development cycle a pain.
I've even seen instances where deals take place. We'll clean up our module today and you can merge your 1k feature, but we'll need 1k in 2 weeks and you need to find it for us by then.
Software engineers usually laugh when I tell them about my struggles with code space and memory. I do enjoy it though.
I really wish we had open-sourced the UI framework we built for the Pebble firmware.
ifeq ($(V),1)
Q :=
else
Q := @
endif
somerule:
$(Q)$(CC) -c $^ -o $@
$ make V=1
It's mentioned in this article and I suggest everyone use it in their Makefiles, for when the time comes for me and others to debug it.Doing some basic groundwork and implementing the timer/software watchdog, writing out to logs when a watchdog is about to trigger, and not disabling the watchdog during development are all basic things teams can do to more easily catch these issues before shipping firmware.
JSYK: I do believe this was mentioned in the post as well, under the section 'Adding a “Software” Watchdog', but when a little bit further and implemented a per-task watchdog.
Precompiled headers are definitely a hack to a problem that shouldn't be necessary.
We have a list of contractors we’ve enjoyed working with. I can try to help pair you up based on the project description.
Happy to hear that an you thought to build this translation service even for early development! It's usually an after thought at the companies we've talked to, and an expensive one too.