Intro
This website is a personal computer science notes produced from various online courses, tutorial, books, blogs, Wikipedia pages, lectures, and many other online sources.
Main Topics
Section titled “Main Topics”- CS Notes, main computer science notes:
- Computer & Programming Fundamentals
- Digital Signal Processing
- Digital Media Processing
- Computer Networking
- Data Structures & Algorithms
- Computer Organization & Architecture
- Operating System
- Theory of Computation & Automata
- Compilers & Programming Language
- Database System
- Computer Graphics
- Internet & Web
- Backend System
- Computer Security
- Machine Learning
- Deep Learning
- Software Engineering
- Cloud Computing & Distributed Systems
- Reverse Engineer Notes, notes mainly focusing on reverse engineering:
Credits
Section titled “Credits”- This site is made using Starlight with the customized Obsidian theme.
- GitHub — For storing and hosting this site.
- LTEX Extension for VS Code — Grammar/spell checker.
- Assisted with few AI tools, such as Poe, ChatGPT, and Bard. They are mostly used for paraphrasing and generating extra information.
- Perchance — favicon.ico generator.
- And last but not least, various online learning resources which are included in each note.
TO-DOs
Section titled “TO-DOs”- [add]: to add a new note.
- [update]: update existing notes.
- [ref]: add reference to particular notes.
- [update] Revisit all notes to fix English, typo, minor update/edit information, reformat to the latest writing styles, and add references to newly added notes. Any major update to note will be listed in separate to-dos.
- [update] /computer-graphics: Major update with new topics. Combine old note with new details from a textbook.
- [update] /internet-and-web: Minor update of information for all note.
- [update] Re-explain context-dependent notes. For example, many notes may refer to parsing. However, it appears that the note doesn’t have proper introduction to parsing. It instead continues to explain it as the next step of scanning. The “scanning” topic itself continues from the previous “syntax” topic, which all root to the first note “CPL Fundamentals”. This assumes that reader has knowledge of the previous note in the whole topic. Some note to include:
- /compilers-and-programming-languages/parsing: about parsing
- /computer-organization-and-architecture/registers-and-ram: provide general/introductory info about registers and ram in the beginning.
- [update] If a note were to explain about something, always provide the generalized information first, then continue to explain that related to the topic. Some note to include:
- /internet-and-web/html#html-dom: provide general information about DOM, then continue explaining the HTML DOM. This makes note like XML refer easily.
- /internet-and-web/web-url/uri: add uniform resource identifier (URI) before actual web URL.
- [update] /digital-signal-processing/compression#bitmap-encoding: add bitmap encoding as another compression method.
- [add] /digital-media-processing-intro/iso: add ISO file format.
- [update] /backend-system/websocket#data-exchange: add web socket payload, frame, ping, pong, fin, rsv, close, timeout.
- [update] /backend-system/microservice: clarify possible wrong information.
- [update] /backend-system/soa: clarify possible wrong information (emphasize more on its difference with microservice).
- [add] /cloud-computing-and-distributed-systems-intro/distributed-systems-failure-detection-and-recovery: should add more about distributed failure detection and recovery mechanism.
- Additional note:
- replication, redundancy, reassignment, checkpointing, restart.
- heartbeat mechanism, timeout, neighbour-based, gossip.
- hot standby server clusters, active-takeover clusters, failover cluster.
- Additional note:
- [update] /data-structures-and-algorithms/array#string-as-an-array: add information about string as a char array.
- [update] /computer-and-programming-fundamentals/memory#pointer—references-problems: add information about pointer and reference problems, such as dangling pointer, dangling reference, wild pointer, etc.
- [add] /computer-and-programming-fundamentals-intro/serialization: add a new topic about serialization, possibly comparing various serialization method such as JSON, XML, language gnostic. Also, move protocol buffer here.
- [ref] /backend-system/rpc#protocol-buffers: ref to serialization, protocol buffer.
- [update] /data-structures-and-algorithms/hash-table#log-structured-hash-table: add log-structured hash table, which is a hash table stored in a file system. Just explain basic idea of how it works, then explain how a more scalable data structure is the idea of common data structure for database index, made with b-tree.
- [update] /database-system/logging-and-recovery#migration: add more about migration, particularly how it works.
- [update]: /cloud-computing-and-distributed-systems/distributed-systems-model#consensus add about Byzantine failures, Two Generals’ Problem.
- [update] /data-structures-and-algorithms/graph#graph-problems: add common problem about graph, such as graph coloring.
- [ref] /compilers-and-programming-languages/compiler-optimization: ref to graph coloring.
- [update] /computer-organization-and-architecture: add about low level instruction, actual example of simple processor like 8080 with emulation as the example.
- hex code disassemble to original assembly
- cpu opcode emulation, simulate each kind of instruction
- can refer to 8080 emulation in emulator 101
- [update] /software-engineering: add/update/edit more about terminologies:
- /software-engineering/version-control: release tags, feature-based vs trunk-based development (refer to /software-engineering/software-process).
- /software-engineering/software-deployment: a/b testing, canary release, feature flags factory.
- /software-engineering/creational-patterns: factory pattern and its use in configuration file.
- /software-engineering/behavioral-patterns: strategy pattern.
- [add] /digital-media-processing-intro/zip: add ZIP archive as “other” digital media formats.
- [ref] /digital-media-processing/mime-type: ref to ZIP archive.
- [ref] /digital-media-processing/xml#xml-schema: ref to URI.
Process
Section titled “Process”don’t mind this heading as it forces the graph view to render