Skip to content

Nana Adjei Manu

Blog

Thoughts on type systems, semantics, and building software that holds up.

The Two Modes of Thinking: How Divergent and Convergent Thinking Drive Research and Innovation

Explore the complementary roles of divergent and convergent thinking in research, problem-solving, and creative work. Learn how to balance exploration and exploitation to maximize intellectual productivity.

Read more →

Branded Types in TypeScript: From Structural to Nominal Typing

How to achieve nominal typing in TypeScript with branded types, preventing subtle runtime bugs by making types explicitly incompatible even when their structures match.

Read more →

Building a View Counter for Static Sites with Supabase and Astro

How I added a simple, privacy-friendly view counter to my static Astro blog using Supabase's free tier — no backend server required.

Read more →

Learning with the Strangler Fig Pattern: Replace Your Skills Gradually

Discover how to apply the Strangler Fig Pattern from software architecture to career transitions and skill development. Learn to modernize yourself gradually without the risk of a 'Big Bang' change.

Read more →

The End of 'Sorry, I Didn't Understand': How AI Agents Are Replacing Old Chatbots

Explore how AI agents differ from traditional decision-tree chatbots. Learn about the perceive-reason-act loop and the four key characteristics that make agents autonomous, goal-oriented, reactive, and proactive.

Read more →

Unveiling the Shadow Play: Simplifying Complex Data with Vector Projection

Learn how vector projection and dimensionality reduction techniques like PCA help simplify high-dimensional data for visualization and machine learning.

Read more →

Operational Semantics: Adding Variables, Functions and Conditionals

Extend a simple arithmetic language with variables, functions, and conditionals. Learn about environments, closures, and lexical scoping in operational semantics.

Read more →

Operational Semantics: A Formal Approach to Arithmetic Expressions

An introduction to operational semantics for programming languages. Learn small-step and big-step semantics through a simple arithmetic expression language.

Read more →

Strengthening Connections: A Hebbians Lens on Love and Relationships

Explore how the neuroscience principle 'neurons that fire together, wire together' offers insights into romantic relationships and emotional bonds.

Read more →

A Beginner's Guide to Functional Programming with OCaml

Learn functional programming through OCaml, from lambda calculus foundations to practical programs. Covers immutability, pattern matching, recursion, and higher-order functions.

Read more →

Algorithms: What are they?

An introduction to algorithms in computer science. Learn what computational problems are, the difference between decision and optimization problems, and why algorithm design matters.

Read more →

Filtering Sensitive Data in Ruby on Rails with ActiveSupport::ParameterFilter

Learn how to protect sensitive data in Rails applications using ActiveSupport::ParameterFilter. Covers filtering passwords, API keys, and custom patterns from logs.

Read more →

How I became a Software Engineer/Programmer

My journey from studying Medicine in China to becoming a self-taught software engineer. A personal story about discovering coding, making career changes, and lessons learned along the way.

Read more →