Skip to content
ernestbaffour, home
Portrait of Ernest Nana Baffour

$ whoami

Accra, Ghana

Ernest Nana
Baffour

Systems Software Engineer

I build the layer most people never see — editors, shells, and allocators, written from first principles in C.

Currently studying CS at the University of Ghana — open to interesting engineering roles.

About

I'm a Computer Science student at the University of Ghana and a software engineer focused on systems programming. I like understanding how things actually work underneath — so instead of reaching for a library, I'd rather build the thing myself: a text editor that talks directly to the terminal, a shell that forks and execs its own processes, a memory allocator that manages the heap one block at a time.

Building from first principles has taught me more about operating systems, memory, and performance than any lecture could. I'm drawn to low-level work where correctness and efficiency matter, and I'm always looking for the next piece of the stack to take apart.

Outside of code, you'll find me grinding LeetCode, playing basketball, or in a Call of Duty Mobile lobby.

Projects

~/text-editor

Text Editor

A terminal-based text editor built from first principles in C, with no dependencies beyond the C standard library and POSIX.

Highlights

  • Puts the terminal into raw mode via termios and renders directly with VT100 escape sequences
  • Gap-buffer text storage for efficient inserts and deletes
  • Cursor movement, scrolling, file open/save, and incremental search
  • Syntax highlighting for C
  • C
  • POSIX
  • termios
  • VT100/ANSI escape codes
  • Make

~/shell

Unix Shell

A Unix shell written in C that parses commands and arguments, manages processes, and works with files.

Highlights

  • Command parsing with arguments and quoting
  • Process creation with fork, execvp, and waitpid
  • I/O redirection (<, >, >>) and pipelines (|) via dup2 and pipe
  • Built-ins: cd, pwd, exit, echo
  • Signal handling so Ctrl+C interrupts the child, not the shell
  • C
  • POSIX system calls
  • Linux
  • Make

~/allocator

Custom Memory Allocator

A drop-in heap allocator implementing malloc, free, calloc, and realloc, built on sbrk and mmap.

Highlights

  • Segregated free lists with block splitting and coalescing to reduce fragmentation
  • Large allocations served directly with mmap
  • Thread-safe with per-thread arenas to avoid lock contention
  • Tested against real programs via LD_PRELOAD, verified with Valgrind
  • C
  • sbrk/mmap
  • pthreads
  • Valgrind
  • GDB
  • Make

Skills

Languages
  • C
  • Python
  • Bash
Systems
  • Linux
  • POSIX APIs
  • Processes & signals
  • Memory management
  • File I/O
Tools
  • Git
  • GDB
  • Valgrind
  • Make
  • Vim
Fundamentals
  • Data structures & algorithms (LeetCode)
  • Operating systems concepts

Education & Certifications

  • BSc Computer Science

    University of Ghana

    In progress

  • CS50: Introduction to Computer Science

    Harvard / edX

    Certificate

Contact

Have an interesting problem, a role, or just want to talk systems? My inbox is open.