Personal Notes: Software and Technology

The following are the topics I have studied (and will be planning to study) during my time in the Korean military until November 2022. As these notes are primarily for my personal use, I did not spend as much time writing them in a manner that is clear for all readers. But since it would be a waste not to share them, I uploaded them on this website. All of my personal notes are free to download, use, and distrbute under the Creative Commons "Attribution- NonCommercial-ShareAlike 4.0 International" license. Please contact me if you find any errors in my notes or have any further questions. I have used the LaTeX editing program Overleaf to create my notes; diagrams are often drawn using the tikz package or iPad Notes.

- Introduction:
*Computers, Internet Protocol, Networks, UDP/TCP, DNS/HTTPS, Binary Representation of Data* - Information Theory:
*Shannon Entropy, Data Compression* - Finite Computation:
*AON-CIRC Programs, Syntactic Sugar, NAND-CIRC Programs* - Uniform Computation:
*Infinite Functions, Deterministic Finite Automata, Regular Expressions, Turing Machines, Turing Completeness, Cellular Automata, Lambda Calculus, Uncomputable Functions* - Efficient Algorithms:
*Modeling Running Time, Time Hierarchy Theorem, Non-Uniform Computation, Polynomial Time Reductions, Traveling Salesman Problem, Graph Problems, 3SAT, NP Hard/Completeness* - Randomized Computation:
*Probabilistic Computation, Monte Carlo Algorithms*

- C Programming Language
- Memory, CPUs
- Assembly
- Compilers, Linkers

- Quantum Mechanics:
*Bra-ket Notation, State Space, Unitary Evolution, General & Projective Measurements, POVM, Distinguishable Quantum States, Composite Systems as Tensor Product Spaces, Heisenberg Uncertainty Principle, Entanglement* - Qubits & Quantum Circuits:
*Superposition, Born's Rule, Change of Computational Basis, Bloch Sphere, Global & Relative Phase, Logic Gates (Pauli matrices, Hadamard, CNOT, etc.), No-Cloning Theorem, Bell States, Teleportation* - Quantum Algorithms:
*Reversible extensions of classical gates, Quantum Parallelism, Deutch-Jozsa Algorithm*

- Cryptography & Encoding:
*Symmetric, Asymmmetric Encryption, SHA256 Hash Function, Digital Signatures, Elliptic Curve Cryptography, Base58Check, WIF Format* - Cryptocurrency Wallets:
*Bitcoin Keys, Addresses, WIF-Compression, Hierarchical Deterministic Wallets, (Hardened) (Extended) Child Key Derivation, HD Wallet Key Path* - Transaction Chains:
*UTXO, Fees, Orphan Transaction Pool* - Standard Transactions:
*Locking/Unlocking Scripts, Script Language, P2PKH, P2SH, P2PK, MultiSig, OP_RETURN Scripts* - Bitcoin Network:
*Full Nodes, SPV nodes, Bootstrapping, UTXO pools, networking, three-way handshake* - Blockchain:
*Block Header, Linking Blocks, Merkle Trees & Paths* - Mining:
*Coinbase transaction, Proof-of-Work, Difficulty Targeting, Network Block Validation, Blockchain Forks, Hash Rate, Mining Pools, Consensus Attacks*

**Data Structures & Algorithms [CS201]**

- Java OOP:
*Classes, Inheritance, Public/Private Methods/Attributes* - Performance:
*Runtime Complexity and Memory Allocation* - Collections:
*Lists (ArrayLists, LinkedLists), Sets (HashSets, TreeSets), Maps (HashMaps, TreeMaps)* - Algorithms:
*Iteration vs Recursion, Sorting (Selection Sort, MergeSort), Searching*

**Linux Operating System and Configuration**

- Introduction:
*Vim Configuration, Distributions, Package Managers, Display Servers, Windows Managers, Desktop Environments, File Tree, Shells, Terminal Emulators, Boot Configuration* - Booting:
*Hardware, BIOS and UEFI, File Systems* - Note Taking:
*LaTeX, VimTex* - Networking:
*Topologies, IP, TCP, UDP, SSL, TLS, HTTP, SSH* - Driver and Hardware Configuration
- Development:
*Git, Python, Conda*

- Relational Algebra:
- Functional Dependencies:
- Entity-Relation Diagrams:

- Fundamental Operations:
*Addition, Subtraction, Multiplication, Division, Bit vs Value Runtime* - Graphs:
*DFS, BFS, Shortest Path, Bipartite Graphs, Graph Colorings, Minimum Spanning Trees*

**Simultaneous Localization and Mapping [CS394]**

- Hardware:
*Sensors (GPS, LiDAR), Cameras, IMUs, Lens, Wireless Connections, Sparse/Dense Maps* - Image Processing:
*Feature Points, ORB Algorithm, Segmentation, Image Pyramids, Camera Parameterization, World/Camera Coordinates, Intrinsic/Extrinsic Matrix* - Transformations:
*Lie Groups, Lie Algebras, SO(3), SE(3), Euler Angles, Quaternions, Exponential Map* - Frontend:
*Visual Odometry, Keyframes, Mappoints, Epipolar Geometry, Triangulation, Essential/Fundamental Matrix, 8-Point Algorithm,* - Backend:
*Filters, Extended Kalman Filter (EKF), Nonlinear Optimization, Graph Optimization, Bundle Adjustment, Sliding Window Filters, Pose Graphs, Sparse Optimization* - Beyond:
*Loop Closing, EdgeSLAM, Multi-Agent Collaborative SLAM*

**Performance Testing ORB-SLAM3 in Virtual Emulators [CS394]**

- Research Independent Study done in Duke's I3^T Lab in Spring 2023.

- HTML:
*Tags, Attributes* - CSS:
*Selectors, Importing CSS rules, Attributes* - JavaScript:
*Changing HTML elements* - Web APIs:
*REST API, HTTP Protocol, Requests* - Webscraping & Parsing:
*Scrapy, BeautifulSoup, LXML* - React:
- Django:

- Flutter

- System Hardware:
*Non-Volatile Drives (Floppy Disk, HDD, SSD), Volatile Storage (RAM, CPU Caches)* - Program Lifecycle Phases:
*High/Low-Level Languages, Source Code, Language Processor (Compiler, Assembler, Interpreter), Compile Time, Runtime, Executable* - Shell Commands:
*Navigation, Files & Directory, Network & Connectivity Commands* - Environment Variables:
*PATH variable* - Git:
*Git Commands, Github* - Python Environments:
*Base vs Virtual Environments, Venv, Conda, Pip*

- Virtual Environments & FileSystem
- Basics:
*Syntax, String Interpolation, Data Structures, Functions & Scope, Classes* - Intermediate:
*References, Regular Expressions, API Calls, Datetime Package* - Object Oriented Programming:
*Iterators/Generators, Built-in Types, Dunder Methods* - Data Science:
*Numpy, Pandas, SciPy, TensorFlow, PyTorch* - Parallel Programming:
*Parallelism, GPUs, Numba*

- Virtual Environments & FileSystem:
*REPL Commands* - Basics:
*Syntax, Data Structures, Functions, Structs, Modules* - Intermediate:
*Types, Parametric Types*

- Basics:
*Syntax, Data Structures, Functions, Classes*

- Basics:
*Remix, Types, Functions (View/Pure), Visibility (External, Public, Internal, Private), Contracts, Error Handling (Require, Assert, Revert), Global Variables, Memory vs Storage, Structs, Arrays, Mappings, Loops, Conditionals, Datetime, Constructors, Inheritance, Modifiers (Owner Permissions), Fallback Functions* - Contracts:
*Basic Funding/Withdrawing Contracts*

- C++ is probably the lowest-level language that I will cover here. People run C++ in a separate IDE like NetBeans, but I do it in VSCode. Unfortunately, it is quite difficult setting it up in VSCode, so refer to this and this in setting up.
- Types, Conditionals, Arrays, Vectors, Loops, Strings, Math
- Functions, Pointers, Exception Handling, Classes/Objects, Inheritance, Structs

- Linux Environment: Ubuntu 22.04
- Vim Text Editor:
*Command Line and Insert Modes* - Bash Scripting:
- OpenSSH: