The opposite of elementary particle.
A computer is a highly layered system, and so you have to decide which layers you are the most interested in studying.
Although the layer are somewhat independent, they also sometimes interact, and when that happens it usually hurts your brain. E.g., if compilers were perfect, no one optimizing software would have to know anything about microarchitecture. But if you want to go hardcore enough, you might have to learn some lower layer.
It must also be said that like in any industry, certain layers are hidden in commercial secrecy mysteries making it harder to actually learn them. In computing, the lower level you go, the more closed source things tend to become.
But as you climb down into the abyss of low level hardcoreness, don't forget that making usefulness is more important than being hardcore: Figure 1. "xkcd 378: Real Programmers".
First, the most important thing you should know about this subject: cirosantilli.com/linux-kernel-module-cheat/should-you-waste-your-life-with-systems-programming
Here's a summary from low-level to high-level:
- semiconductor physical implementation this level is of course the most closed, but it is fun to try and peek into it from any openings given by commercials and academia:
- photolithography, and notably photomask design
- register transfer level
- interactive Verilator fun: Is it possible to do interactive user input and output simulation in VHDL or Verilog?
- more importantly, and much harder/maybe impossible with open source, would be to try and set up a open source standard cell library and supporting software to obtain power, performance and area estimates
- Are there good open source standard cell libraries to learn IC synthesis with EDA tools? on Quora
- the most open source ones are some initiatives targeting FPGAs, e.g. symbiflow.github.io/, www.clifford.at/icestorm/
- qflow is an initiative targeting actual integrated circuits
- microarchitecture: a good way to play with this is to try and run some minimal userland examples on gem5 userland simulation with logging, e.g. see on the Linux Kernel Module Cheat:This should be done at the same time as books/website/courses that explain the microarchitecture basics.This is the level of abstraction that Ciro Santilli finds the most interesting of the hardware stack. Learning it for actual CPUs (which as of 2020 is only partially documented by vendors) could actually be useful in hardcore software optimization use cases.
- instruction set architecture: a good approach to learn this is to manually write some userland assembly with assertions as done in the Linux Kernel Module Cheat e.g. at:
- github.com/cirosantilli/linux-kernel-module-cheat/blob/9b6552ab6c66cb14d531eff903c4e78f3561e9ca/userland/arch/x86_64/add.S
- cirosantilli.com/linux-kernel-module-cheat/x86-userland-assembly
- learn a bit about calling conventions, e.g. by calling C standard library functions from assembly:
- you can also try and understand what some simple C programs compile to. Things can get a bit hard though when
-O3
is used. Some cute examples:
- executable file format, notably executable and Linkable Format. Particularly important is to understand the basics of:
- address relocation: How do linkers and address relocation work?
- position independent code: What is the -fPIE option for position-independent executables in GCC and ld?
- how to observe which symbols are present in object files, e.g.:
- how C++ uses name mangling What is the effect of extern "C" in C++?
- how C++ template instantiation can help reduce link time and size: Explicit template instantiation - when is it used?
- operating system. There are two ways to approach this:
- learn about the Linux kernel Linux kernel. A good starting point is to learn about its main interfaces. This is well shown at Linux Kernel Module Cheat:
- system calls
- write some system calls in
- pure assembly:
- C GCC inline assembly:
- write some system calls in
- learn about kernel modules and their interfaces. Notably, learn about to demystify special files such
/dev/random
and so on: - learn how to do a minimal Linux kernel disk image/boot to userland hello world: What is the smallest possible Linux implementation?
- learn how to GDB Step debug the Linux kernel itself. Once you know this, you will feel that "given enough patience, I could understand anything that I wanted about the kernel", and you can then proceed to not learn almost anything about it and carry on with your life
- system calls
- write your own (mini-) OS, or study a minimal educational OS, e.g. as in:
- learn about the Linux kernel Linux kernel. A good starting point is to learn about its main interfaces. This is well shown at Linux Kernel Module Cheat:
- programming language
Count: 0.
2019-12-26: applied Ronseal mould killer on external north east living room walls, had widespread light brown mould spots, and more localized black mould spots. The water insulation here is bad, possibly due to being on the last floor. Also applied next to window sills on those walls.
2021-04 clogged
To remove and install Shimano and ISIS Drive splined 20-tooth bottom bracket cups.
Bought: 2020-11-07. Also getting a park Tool PAW-12 adjustable wrench to use with it.
www.amazon.co.uk/dp/B07VL2MLYY DECARETA Pedal Spanner Bike Pedal Wrench Three-in-one Function Bicycle Pedal Spanner 24mm Front and Rear Axle Spanner Pedal Install Spanner Repair Tool with Anti-Skidding Long Handle (Silver) £10.99.
Got dented the first time I tried to use it in the Kross bicycle (2017). All Amazon reviews say the same thing, should have read first, and bought instead known brand like Park And Tool which is the same price. Material advertized on Amazon: "Steel alloy and rubber".
Sometimes, these are more than just mechanics, but also have deeper life analogues. The title of Zen and the Art of Motorcycle Maintenance comes to mind. Sometimes they are just mechanics.
With more philosophical metaphors:
- when your bike breaks, that provides an unique opportunity to learn how to fix it: try to fix your own bike before taking it to the shop
- if the wind is blowing against you on the way out, it will likely blow behind you on the way back. But remember that the other way around also applies.
- always take one extra clothing layer than what you think you will need in your back pocket or sport bag, especially when time is changing fast in Sprint and Autumn. The weather on the road outside of town can change very quickly!
- if you took a turn, and it feels wrong, stop to check the map, and possibly backtrack to safety. When it feels wrong, it usually is a bad idea, e.g. roads where cars are too fast/too many. But if you take a wrong turn and it feels right, then follow it without fear and see what it leads to!
- don't carry a speedometer on your bike. Analysis can be done afterwards on Strava. The only measurement that matters is "how awesome am I feeling right now?". Live in the moment instead of checking your speedometer every 10 seconds.
- cycle when you body calls it out of addiction, not out a goal that you've made up that must be reached
With less philosophical metaphors:
- learn how much water and food you need to take for a trip. Otherwise, you will bonk at some time, when you least expect, it happens very suddenly.And then you better hope to God that you can find a food shop nearby. Luckily this was the case for Ciro's first and only bonk so far.And besides bonking all out, being tired and hungry makes you make stupid decision, especially where traffic is involved!Food is safety. Light is safety. Time is safety. Calm is safety. Chocolate bars and candy cannot count as lunch food, only delay lunch. A sandwich with ham cheese and salad is food. A bag of M&M's with a can of soda can bring you back from the dead.When you are not in familiar grounds, take twice as much as you think you might possibly ever need. Hofstadter's law.You will also learn that, surprise surprise, carbohydrates that you ate one or two days before a ride stay stored in your liver and muscles, and also greatly affect how quickly you will bonk, thus the concept of carbohydrate loading.And surprise surprise: heat can also make you bonk! Who would have thought!
- correct saddle hight is fundamental, your legs must be almost fully stretched at the bottom position
- it is impossible to reach the correct tire pressure with (cheap?) hand pumps, their only purpose is to fill up a flat tire so you can get home after a long ride. But a track pump.
- clean and lube your chain. The speed benefit is instantaneous and mind blowing. It also greatly improves gear shifting.This also prevents the chain from rusting, because the lube takes up the place where water would stay, and the muck makes it harder for water to evaporate.This is the most common bike maintenance mistake you see on the streets: people with that high pitched overly dry chain noise.
- when a piece on your bike breaks and has no clear name written on it, you can try to identify it Google images
- the more you watch YouTube maintenance videos without haste, the more you end up learn random new stuff that unexpectedly saves you later
- if you took a turn, and it feels wrong, stop to check the map, and possibly backtrack to safety. When it feels wrong, it usually is a bad idea, e.g. roads where cars are too fast/too many
- public place with lots of people are bicycle parking Hell, because due to anonymity and the large number of distractions, it becomes exponentially more likely that someone will fuck you bike somehow, e.g. by dropping it on the ground. Always search a bit for a reasonable place to park, and avoid overcrowded parking spaces at all costs.
- gear change matters
- when you get on your bike to start riding, start riding slowly and gradually switch up pedal forces and gears. Things may have shifted in a weird position as it gets kicked around in parking. Ciro managed to bend his derailleur like that!
- spin to win, AKA learn to user your gears
- it is not shameful to ride on your lower gears on a hill. You can actually go surprisingly fast with them, and conserve energy for later. Learn when to use each gear ratio.
- learn to identify your suppliers:
- www.wiggle.co.uk/: in Europe, this is best place to buy clothing from, and also good for some bike parts. It is the most organized website, and contains non-generic shit which Amazon is full of.For bike parts Amazon is also worth looking into however. Bike parts a bit different from clothing because you have to make sure that stuff fits, so you hopefully know exactly the part name before before buying it, and therefore website organization is not as crucial.Wiggle is however guilty of shameless: discounts that happen more often than not
- always take your lights off the bike into your bag when you park, anywhere, and for any amount of time, even if a quick stop. Drug addicts are everywhere, always ready love to steal and resell them.
- sometimes you do something stupid like going into a really muddy path, and it is really fun, because you've never been there in your life. But then your bike gets really dirty, and your feet are wet and freezing, and you promise yourself you will never do something that stupid again. But then you do it again in a different location, because it was too much fun. Once more unto the breach just comes to Ciro's mind every such time. Embrace this.
Unlisted articles are being shown, click here to show only listed articles.