508 karma · joined August 12, 2015
Next thing I did was design and build a DC lab. I bought my meters and scopes outright, but designed and built my own DC load and power supply. Since I'd already watched Dave's videos about them on EEVBlog, they were obviously influenced by his design, but I made a couple of non-trivial changes to the spec so that I'd have to make my own design decisions. I found this electronics stackexchange post very helpful for heat dissipation calculations [0]. Also, while it's very simple and not suitable for complex or precise work, Falstad's circuit simulator was very helpful for experimenting [1].
My next step was fixing things. This gave me an opportunity to do a bunch of things:
* Become familiar with ICs. At first I always had to look up the number on every IC I saw to figure out how it was supposed to behave before I could test if its actual behavior matched, but over time you'll start recognizing those numbers and understanding why it was chosen over another component that does the same job.
* Drawing schematics. Debugging is really hard without a schematic, so on anything remotely complex, my first step was often searching for a schematic. This search often came up empty, so my second step would be following all the traces and looking up all the chips so that I could draw a circuit diagram and figure out roughly what I should expect.
* Soldering. This should be fairly self-explanatory.
Frankly, I haven't gotten past here yet. I'm not terribly good with AC theory or RF stuff. I came to this thread looking for recommendations on that part, but I don't think there's any reason my methods so far wouldn't work; I just haven't had the time.
[0]: https://electronics.stackexchange.com/questions/55513/can-a-...
Prior to that, it was known as XBMC ("XBox Media Center"). Under that title it's been around since 2003.
I picked it because I like drop point blade geometry, it's heavy-duty enough to chop with in a pinch, like all high quality pocket knives it holds an edge very well, and it's at the upper limit of how big a knife can be without being uncomfortable or inconvenient to carry in my waistband.
Here's a fairly comprehensive list of those problems, but it hasn't been updated in a while, e.g., 601 is solvable with pencil and paper but it's new enough that it isn't on the list.
An iterable containing `[]`, `None`, or any other value that is false in a boolean context would return true. They've assumed that `(0 -> false) -> (false -> 0)`, which is simply not true.
Even if you're dealing with a context that cannot pass in an iterable with non-zero "falsy" values then it needs to be explicitly documented. At that point, why not "document" it by being explicit with the code. This is how I'd do it, but I feel like it could be made cleaner:
def contains_zero(iterable):
return any([i is 0 for i in iterable])
Edit: I forgot how to python. It's `return 0 in iterable`.FWIW, it actually does work on Firefox Quantum; it's just not guaranteed to work.
Of course, this runs the risk that a user will simply "salt" the sample you provide up to the necessary length, which makes the length of their secret effectively the difference between the minimum length and the sample length.
My first programming job had exactly this problem. Spec started at "connect these two services together using webhooks for $700" and creeped its way up to "build a database-backed web service that replaces both of the original services and then some for $4000, plus development expenses."
It's still not done. It'll never be done. But thankfully, I got out after it was off the ground and someone else maintains it now.
`a==b` is always an analog for the C code `a==b`, not `* a==*b` and certainly not C++'s `operator==(a, b)`