Electronics
Quick and interesting read about surface mount resistors:
Standard Electronic Decade Value Table (AKA why would I want a 49.9k resistor vs a 50k?)
Must read if you are using KiCAD: https://forum.kicad.info/t/library-management-in-kicad-version-5/14636
https://www.repairfaq.org/sam/hvprobe.htm
Great video on magnetics from Applied Science: https://www.youtube.com/watch?v=4UFKl9fULkA
Communication
JPL has some really great resources about deep space communications. Really well written stuff. https://descanso.jpl.nasa.gov/monograph/mono.html
Computers
One of my favorite blog packed with tons of details by Ken Shirriff on topics including retro computing and the Beagle Bone: http://www.righto.com/
Julia Evans has a really nice series on debugging tools like strace for linux: https://jvns.ca/blog/2016/07/03/debugging-tools-i-love/ and some really cool infographics: https://drawings.jvns.ca/
Mechanical
Dan Gelbart has an amazing series on prototyping:
https://www.youtube.com/user/dgelbart/videos
South Bend made some excellent publications which can be found at
http://vintagemachinery.org. Below are publications showing the basics of how to run a lathe and also a book with lots of shop projects.
Physics
I love this experimental physics book! Lot of very old, but very interesting practical information!
Python
You should learn a bit of the OO interface to matplotlib, not just the state machine interface. Almost all of the plt.*
function are thin wrappers that basically do gca().*
.
plt.subplot
(doc) return an axes
(doc) object. Once you have a referance to the axes object you can plot directly to it, change it’s limits, etc.
import matplotlib.pyplot as plt
ax1 = plt.subplot(131)
ax1.scatter([1, 2], [3, 4])
ax1.set_xlim([0, 5])
ax1.set_ylim([0, 5])
ax2 = plt.subplot(132)
ax2.scatter([1, 2],[3, 4])
ax2.set_xlim([0, 5])
ax2.set_ylim([0, 5])
and so on for as many axes as you want.
or better, wrap it all up in a loop:
import matplotlib.pyplot as plt
DATA_x = ([1, 2],
[2, 3],
[3, 4])
DATA_y = DATA_x[::-1]
XLIMS = [[0, 10]] * 3
YLIMS = [[0, 10]] * 3
for j, (x, y, xlim, ylim) in enumerate(zip(DATA_x, DATA_y, XLIMS, YLIMS)):
ax = plt.subplot(1, 3, j + 1)
ax.scatter(x, y)
ax.set_xlim(xlim)
ax.set_ylim(ylim)
In fact, almost every function in plt
is a very thin wrapper that first calls ax = plt.gca()
and then calls what ever function on that object. You should not be using plt
for anything but interactive work
http://stackoverflow.com/questions/15858192/how-to-set-xlim-and-ylim-for-a-subplot-in-matplotlib