This is actually my first impression while I am reading the post. Mentions "open source" everywhere but dude how the earth it is open source without training data.
Almost no company is going to release training data because they don't want to waste time with lawsuits. That's why it doesn't happen. Until governments fix that issue, I don't even think the "it's not really open without training data!!!" argument is worth any time. It's more worth focusing on the various restrictions in the LLaMA license, or even better, questioning whether model weights can be licensed at all.
Another alternative is to use ESP32's deep sleep mode. You can tell ESP to sleep until some event occurs. There are many options for waking up the microcontroller.
The ESP32-S3 spends most of its time in deep sleep, only waking up for about 5-10 seconds every 5 minutes. The problem I ran into was that not just the ESP32-S3, every component on the board (the accelerometer, the haptic motor driver, the LiPo battery charger, the 3v3 LDO) has a some constant, minimum (quiescent) current draw. And even how your resistors are configured (pullup or pulldown) and their resistance values contributes. To diagnose it, I would need a precision measurement tool like a ($1k) Joulescope https://www.joulescope.com/products/js220-joulescope-precisi... and probably a significant amount of time.
I have also recently been through the same steep learning curve you have and the following worked for me. Reading spec sheets is fine but nothing beats measurement if its feasible. I built a custom PCB with all the power pins for all the peripherals broken out so I could put an ammeter in series with each of them individually. Then I used Nordic's inexpensive power profiler kit 2 (search for Nordic PPK2 - its under $100). Really decent specs at 100kHz sampling rate and 100nA resolution - you connect it to a PC to see the charts. I also bought my own resin 3D printer. They are so cheap these days and it helped with iterating on designs and not having to wait days for things to arrive. PS, great post, loved it.
I had this problem on a low power design. We were making an industrial temperature sensor for something that moved and we needed to run on battery.
What I ended up doing was using a second voltage regulator with an enable pin for all the accessories. When the MCU wakes up it turns power on to the accessories and waits for things to stabilize, maybe 1ms or so. Then it does what it needs to do and before going back to sleep turns all the accessories back off.
Costs you a few extra parts and a second voltage bus and the hassle of programming but it turns "small quiescent draw" into essentially zero. Maybe the regulator has a bit of leak but it should be pico amps or less.
Wait until you look at the leakage current of capacitors..! Very poorly specified, if at all, and can actually swamp the consumption of active components in these low or sub-microamp situations. The dual voltage rail that msanford described is the way to go here, gate as much as you possibly can and really focus on reducing the duty cycle.
ESP's deep sleep is not great - the datasheet for the C3 says 5 uA. That's an order of magnitude above low power microcontrollers (e.g. ATSAML), and two orders of magnitude above an ultra low power timer. Not horrendous, but higher than I'd prefer for a tiny watch battery.
Everything is out in the open nowadays. Kids can start learning whatever they what an younger and younger ages.
A perfect example is chess. It used that a lot of knowledge was in books, often in foreign languages. Nowadays everything is out there in the open and additionally you can casually play games against top 100 opposition once you are okeish enough accelerating the development even more.
The context of the log messages seems to imply that it's part of an automated (or semi-automated) string decryption system. Many binaries obfuscate strings using some simple encryption algorithm to defeat trivial analysis (i.e. "strings"), and manually reversing those is tedious. It's nice to have an automated decryption routine, but not so nice if it consists of just eval() with no sandbox...
Even if the binary isn't malicious executing random parts of a program has high risk of breaking or at least polluting the current system. Most executables will have some side effects on the system due to interactions with file system or other processes. There is no point in having executable which only crunches numbers in a loop with no sideeffects (unless it's a benchmark or something like ls executable) so in most cases there will be sideffects. And doing them in uncontrolled manner will be pure chaos. Something as seemingly harmless as backuping software can overwrite stuff if not executed in correct way.
Assuming sandbox is working correctly any parts with sideffects will probably not be very productive for deobfuscation anyway. Such automated decryption strategy would work best for purely functional parts of code. But the parts that interact with os and filesystem are either not part of decryption code (so no point executing) or if they are part of decryption they are probably the parts which try to defeat such automated decryption by detecting sandboxed/emulated environment and stopping decryption (again no point executing it without some manual intervention or very carefully designed fake environment simulating a specific target).
I want to learn PCB design, mostly with ARM and ESP based designs. How would I learn basics? I know theory part but I really couldn't figure out why they determine which component and which value they have to use. I mean there are resistors, capacitors all over the place but I really want to learn reason behind it. Also I guess there are some basics related power, battery, UART, USB etc. Is there any source that covers all of these concepts?
There are certain usage patterns that you will find all over the place, e.g.:
- Current-limiting resistors
- The resistor divider (two resistors between e.g. 3.3V and GND. The point between the two resistors will be between 3.3V and 0V, depending on the resistor values. Sometimes you need a certain voltage. For example to bias transistors.
- Delays, using a resistor and a capacitor. The values will determine the delay.
- Capacitors next to oscillators
- Filters, using a resistor and a capacitor. The order and the values will determine the cutoff frequency.
- Most capacitors on a PCB probably sit right next to a chip. Often, at least one per chip. They get rid of noise already on the line, and act as short-term energy storage for the chip next to it.
- Decoupling capacitors to get rid of the DC component of a signal (i.e. if there is a signal fluctuating between 4.5V and 5.5V before the cap, it'll be -0.5V and 0.5V behind the cap. Often, you need to add a DC component and later remove it, so that's two capacitors already.
Obvious but it never occurred to me that experienced person sees far fewer parts than layman when looking at the board, for expert its like yeah "file read there", "serialization here" (if I were to use programming analogy) but layman sees gazillion little parts magically working together.
They were quoting "The Matrix". But you're probably correct, even in the movies the existence of "The One" was a pretty serious security bug, and the entire need for "agents" was a workaround for other bugs.
"if there is a signal fluctuating between 4.5V and 5.5V before the cap, it'll be -0.5V and 0.5V behind the cap" if there's a resistance to ground after the capacitor. I've accidentally planned an audio amp with input decoupling capacitors, didn't add ground resistors before the capacitors, so if you plug it into an audio output with DC-blocking capacitors but not resistors to ground, the voltage in the middle could be anything.
Also worth mentioning are pull-up or pull-down resistors. They give a pin a default state when nothing is driving the pin. You will often see them on reset pins and on inputs from buttons.
> I mean there are resistors, capacitors all over the place but I really want to learn reason behind it.
There are some good YouTube channels that go into this. EEVBlog[1] has made a lot of really nice videos about the fundamentals, as has w2aew[2]. And I found MicroType Engineering[3] to be a good source of practical information on designing circuits.
Capacitors next to ICs are almost always for decoupling[4]. Similar to how the cistern in your toilet provides a large amounts of water in a short amount of time without affecting the water pressure in the rest of the house, hence decoupling the local water flow from the main supply,
decoupling capacitors can supply a lot of current for a short amount of time.
However what values to use can seemingly be a bit of a black art[5], not helped by the fact there's so much outdated information and rules of thumb out there from the days of through-hole components which just doesn't apply to modern surface mounted components (like needing multiple different values).
On the other hand, resistors on a data line can be there to protect against ESD events[6], for example.
Some of it might be a bit more advanced than what you need right now, but there's definitely some good stuff for people starting out. If for nothing else highlighting areas you should be aware of.
Also Phil's Lab, especially for PCB design specifically (though he covers schematics too, I'd say it's typically not as beginner-friendly/a faster-paced run-through so you understand what he's laying out).
Make: Electronics by Charles Platt will take you through all the whys and wheres, starting at the very basics. I highly recommend it.
Also, I'll recommend the "Follow the example" approach of just looking at the data sheets for various components and modules. Especially stuff like the Arduino Uno - It's got a microcontroller, and then everything around it is just support. You start to see patterns where there (for example) a 10uF and 0.1uF Capacitor around power inputs. And they're everywhere so even if you don't know why (yet) you do know that you need capacitors around power inputs.
I started by building a programmable mechanical keyboard based on this macropad tutorial (see link). If you want to simplify it somewhat, replace all the microcontroller circuitry (oscillator, capacitors, USB interface, etc.) with an Arduino, and use through-hole diodes. It's a really cool feeling to finish your design, order custom PCBs from jlcpcb, do a bit of soldering, and end up with a useful, working keyboard.
Yes, this is the way. Datasheets and application notes will tell you nearly everything you need to know. If you don’t understand why something is done or how something works, look it up at that point. Starting from fundamentals is going to be a much slower path than just following manufacturer examples.
For designing with basic components I recommend starting with microcontrollers on a breadboard. There's plenty of great youtube channels that talk about this stuff as well, like GreatScott and Ben Eater
Phil's Lab on YouTube has great PCB design tutorials that cover how to think about layout and design, how to use Kicad, and even how to turn your design into a real product.
So you want to learn electronics? I suggest that you take the time to actually learn the theory behind it and learn how resistance, capacitance, inductance affects the system. It is hard but helps a lot. If you want to understand digital systems, then learn how digital basic components work and how you combine them to create more complex systems. Had electronics as my major in my bachelor's degree, and the mental model is really important when it comes to electronics, and the only way to really understand it and get the correct mental model is by repeatedly analyzing the networks and the change over time (resistance,capacitance,inductance) and all of sudden it makes perfectly sense!
Underlying theory is important, but seeing practical examples that _explicitly applies theory_ has been critical in my particular electronics adventure. There are more ways to apply Ohm's Law (or Kirchhoff's Laws) than you can shake a stick at and seeing someone explicitly do the math and apply it while explaining a circuit that I am interested in has helped me get better at applying it.
I think the hardest things for me so far been (a) getting my head around the idea that everything in a circuit is happening all at once (rather than iteratively like an algorithm) and (b) "input" and "output" are convenience terms, e.g. an opamp can sink current through its "output". Both of these insights have come from seeing real circuits analyzed on YouTube.
In addition to the other replies which list a number of good resources, I've found reddit.com/r/PrintedCircuitBoard interesting to watch. It's mostly people asking for reviews of their projects, and there's a lot of tips and tricks to pick up in the review comments.
You can also see a nice progression there from beginner PCBs to more advanced things.
I think starting a side project with a goal of revenue is not practical. For me, doing side project is doing something that you can't normally do in day to day job. So, it has to something that I love to spend time for. On the other hand, I always think about making many part when I start something new. My side projects are generally about making games and mobile applications, search engine optimization, writing programs that transform data from one form to another. When I finish a side project, I don't hesitate to putting some ads and make passive income. It is lovely to make money while you are sleeping from something that you have enjoyed creating it.