Learning Progress 2021

Learning is an eternal path. I wanted to share my own adventure primarily for the following practical reasons: to help me remember what I have been working on technology-wise and to help me practice a technique known as spaced repetition. This is a summary to motivate myself to keep on track, to practice consistent self-reflection and to be reminded as often as possible to stay a bit more humble. In the process, I hope you may find some inspiration too.

December

November

October

September

August

July

June

May

April

  • University of London
  • Computer Security
    • Ethics in information security, security threats, types of malicious software, malware analysis and techniques, passwords, social engineering, CIA (confidentiality, integrity, accessibility), attack surface and denial of service attack, DDOS, botnets, Mirai, WiFi attack vectors, firewalls, intrusion detection systems;
    • Operating systems, file system and directory structure, Windows security, hardening Linux systems, Android attack surface, virtualised and containerised operating systems;
    • Intro to cryptography (symmetric, asymmetric, basic encryption techniques, transposition cipher, Playfair substitution, Vigenere), intro to RSA (including Fermat’s last theorem, Fermat’s little theorem), modular arithmetic.
    • Hashing, hash tables, cryptographic hash functions.
    • Intro to Bitcoin; blockchain protocol; double spending problem; immutability of the blockchain; data on the blockchain; introduction to Ethereum; IPFS; Filecoin.
    • Security policies & military security policy; Clark-Wilson security policy; Chinese Wall security policy; BellLa Padula model; Biba model; Graham Denning model.
  • Databases, Networks and the Web
    • Web application, web requests, three-tier web application architecture, introduction to Node.js and Express, simple web servers, web hosting, separation of concerns, templating engines, GET and POST request methods.
    • Introduction to databases; lists of data; intro to relational databases; MySQL databases; basic SQL; primary keys.
  • Software Design and Development
    • Introduction to modules, module coupling, cohesion and complexity (structural complexity, McCabe complexity measure, criteria for the evaluation of implemented architectures, sustainability evaluation of software architectures), JavaScript (scope, const);
    • Unit testing workflow with Python’s unittest, C++ primer, intro to cppunit, physics engine, intro to Mocha, RESTful web APIs, assertions.
    • Secure programming; Bandit static analysis in Python; exception handling; debuggers.
    • Requirements techniques (natural language, UML, simplified technical English, Z mathematical language); EARS (Easy Approach to Requirements Syntax); black box and white box testing; test procedure specification; automated black box testing; usability testing; usability metrics; usability principles; accessibility testing.
    • Git: design goals; basic operations; branching and merging; git log; ungit.
  • Articles:
  • Why You Shouldn’t Use “Markdown” for Documentation.
  • reStructuredText Primer.
  • Books:
  • Code Complete (by Steve McConnell): Metaphors for a Richer Understanding of Software Development; Upstream Prerequisites.
  • Clean Coder (by Robert C. Martin): collaboration; teams and projects; mentoring.
  • Misc:
  • Getting started with LaTeX in Overleaf.
  • Git worktrees.
  • How to use Read the Docs.
  • Interactive components in Figma.
  • Learn about Prefect.
  • Database paradigms.
  • Review SQL concepts, SQL tutorial.
  • Software architecture: designing a system; implementing a design; class diagrams.
  • JavaScript:
  • Query selectors.
  • Python:
  • Passing context as decorators with Click; review decorators.
  • functools cache function.
  • Dataclasses.
  • UML Diagrams.

March

  • University of London
  • Agile Software Projects
    • Writing a software proposal report: problem statement.
  • Graphics Programming
    • Making a “webcam piano” with howler.js; integrating a music player with playlist.
    • Working on an “average face” sketch, combining different images.
  • Books:
  • Clean Coder (by Robert C. Martin): Professionalism; saying no; saying yes; coding; test driven development; practicing; acceptance test; testing strategies; time management; estimation; pressure.
  • Misc:
  • Basics of blockchain technology, Web Assembly (WASM), GraphQL.
  • Learning how to use Docusaurus.
  • Learning how to use Hasura.
  • Model checker: Alloy, “Finding bugs without running or even looking at code”.
  • JavaScript:
  • Review promises.

February

  • University of London
  • Agile Software Projects
    • Integrating Material-UI within a React application; makeStyles.
    • Theming with Material-UI; React props.
    • Building a React app with Next.js.
    • SSR with Next.js, styled-components and Material UI.
    • Integrating Next.js Commerce template.
    • Writing a software proposal report.
    • Writing a problem analysis.
  • Graphics Programming
    • Making a “webcam piano” with howler.js; integrating a music player with playlist.
    • Customize 3D sine game.
    • Working on an “average face” sketch, combining different images.
  • Introduction to convolution.
  • Books:
  • Clean Code: smells and heuristics; refactoring; systems; classes; unit tests; error handling; formatting; comments; functions; names; concurrency programming.
  • Clean Coder (by Robert C. Martin): Professionalism; saying no; saying yes; coding; test driven development.
  • Taking screenshots with Chrome developer tools.
  • Using Click to build command-line tools.
  • Using Kitty terminal.
  • How to Publish an Open-Source Python Package to PyPI.

January

  • University of London
  • Agile Software Projects
    • Gantt chart; validation techniques; measuring success; sampling and heuristic evaluation.
    • Evaluation studies; emotional interaction; interfaces in interaction design.
    • Interfaces in interaction design; data at scale; cognitive aspects.
    • React: Introduction to React; creating a React component.
    • Next.js: Create a Next.js application; navigating between pages; assets, metadata, and CSS.
    • Next.js: pre-rendering and data fetching.
    • Next.js: Adding a responsive navbar.
    • Researching React frameworks to use to style Next.js application: stick with Material UI.
    • Integrating Material-UI within a React application.
  • Graphics Programming
    • Integrating a particle system in p5.js.
    • Making an Instagram filter.
    • Making a “webcam piano” with howler.js.
  • Programming with Data
    • Pandas, Matplotlib, JupyterLab.
    • Data cleaning.
  • Regexes in Python.
  • Hackerrank: solve Alphabet Rangoli and Designer Door Mat.
  • Setting up multiple bars in i3wm.
  • Using tailwindcss with Next.js.
  • Fundamentals of TDD: Introducing the Unit Converter (example application); phases of testing.
  • Vim:
  • Track open files with the buffer list; group buffers into a collection with the argument list.
  • Managing hidden files; divide the workspace into split windows.
  • Organize window layouts with tab pages.
  • Open a file by its filepath using :edit and :find.
  • Explore the File System with netrw.
  • Save files to nonexistent directories; save a file as the super user.
  • Difference between wrapped real lines and display lines; moving word-wise.
  • Find by character; search to navigate.
  • Trace your selection with precision text objects; delete around and change inside selections.
  • Mark your place and snap back to it; jump between matching parentheses; traverse the jump list.
  • Traverse the change list; jump to filename under the cursor.
  • Snap between files using global marks.

2020

2019

2018 and earlier