The Curious Engineer

All blogs / OS / kernel

offlinemark

offlinemark.com

I'm Mark. This is my blog where I share thoughts on life, art, and computers.

OS / kernelEssays / personalC++Engineering management / careers

Posts
187 from 11 Oct 2013 to 28 Oct 2026
Posting
monthly (18 in the last year)
Kind
personal blog
Feed
https://offlinemark.com/feed/

2026 15

  1. My advice for aspiring software developers
  2. My OSdev Roadmap
  3. How learning compounds
  4. libc++ is surprisingly hard to use for my kernel
  5. Libraries for freestanding C++
  6. What I learned from yoga
  7. How to sharpen the saw
  8. Devtools update 2026: Ghostty, just, flash.nvim, and more
  9. How to ask for feedback at work
  10. What to know about GPLv2 vs GPLv3
  11. How to be a more effective professional engineer
  12. Are you practicing, or just maintaining?
  13. WIP: Integers, safe arithmetic, and handling overflow (lab notes)
  14. osdev journal: The virtual memory unit test experiment
  15. Review & tips for Chaos Communications Congress

2025 16

  1. 75 lessons on life, art, and making things happen
  2. How to level up your life
  3. Exploit your unfair advantages
  4. osdev journal: bootloaders and booting (grub, multiboot, limine, BIOS, EFI)
  5. osdev journal: Gotchas with cc-runtime/libgcc
  6. Idea pools: A simple AI metaphor (WIP)
  7. Tips for networking
  8. VIM tips + lab notes
  9. Diminishing returns of worrying
  10. How to be consistent and achieve success
  11. Tips for going to conferences alone
  12. How to do custom commands/targets in CMake
  13. Pure GNU Make is (unfortunately) not enough
  14. Show and tell: Suicide C Compiler
  15. You are the first advocate for your art
  16. What you’re doing vs. What you should be doing

2024 36

  1. How to build traction for your creative endeavor
  2. 7 steps towards learning something
  3. Find your own bugs
  4. Why I use 5 different git clients
  5. Toxic minimalism
  6. It’s worth writing, even if someone else covered the topic already
  7. Learning kernel development on hard mode
  8. Don’t be afraid to reinvent yourself
  9. Removing dates from post URLs
  10. Release it and move on to the next
  11. x86 kernel development lab notes
  12. You don’t even need to be successful
  13. Writing is like exercise
  14. 6 months of live-streaming
  15. WIP: Humans need variety
  16. How I live-stream programming
  17. WIP: We grow old because we stop making art
  18. To have good ideas, stop auto-rejecting your ideas
  19. Creative pitfall: You don’t need to innovate in every area
  20. It’s not enough to have good ideas
  21. How to learn everything
  22. You need your own workshop
  23. Getting into reading again by playing offense
  24. I like WordPress
  25. Be your most authentic self (and write about whatever you want)
  26. WIP: Fame is a hamster wheel
  27. 3 weeks of GTD
  28. What I learned in my 20s
  29. gardenOS Update 2: 12 weeks of streaming
  30. Advice for learning the dark arts
  31. What is mastery?
  32. gardenOS Update 1
  33. The astonishing cost/benefit asymmetry of a four-day work week
  34. Resources for learning systems programming
  35. Turtles all the way down
  36. Tip: When you’re learning a new programming language, look up prominent open source projects and copy their style

2023 67

  1. Even if people already know the plot, they appreciate the way you tell the story
  2. Accept the constraint and deal with the consequences
  3. Creative potential energy
  4. Unpublished content is like cash under your mattress
  5. Learn to build your own tools
  6. Life is a business; life is a game; life is art
  7. Art/Artist Fit
  8. Personal projects are like free weights
  9. Creativity is like gardening
  10. A lot of my friends have been sucked up into UFOs lately
  11. The difference between computer science and computer engineering
  12. Memory is an abstraction
  13. Sometimes, you just need to be willing
  14. Reflections on learning to write
  15. Learning on your own pales compared to spending time with experts
  16. Back to basics: FIFOs (Named Pipes) and simple IPC logging
  17. Why you feel stupider than ever, despite being smarter than ever
  18. WIP: Asking for help in the age of AI
  19. Everyone’s career sounds more impressive than yours
  20. Dimensions of life happiness
  21. Dimensions of job happiness
  22. Software engineers must learn to write
  23. How I create so much content
  24. I started a podcast
  25. Resolving git conflicts perfectly every time (using diff3)
  26. WIP: What’s the deal with memory ordering? (seq_cst, acquire, release, etc)
  27. KPTI: The virtual memory 101 fact that’s no longer true
  28. You don’t need to load code into RAM to execute it
  29. SerenityOS Day 1: Debugging the piano app
  30. Do you need to learn how to implement a red-black tree?
  31. 4 basic multithreading & lockfree programming exercises
  32. Mutexes, atomics, lockfree programming
  33. How the hardware/software interface works
  34. How to be happy
  35. It will never be easier than right now
  36. TIL: Debugging microcontrollers may require hardware breakpoints
  37. WIP: Business models can have significant technical impact
  38. TIL: ARM64 doesn’t include conditional instructions
  39. What cured my writer’s/publisher’s block
  40. How to not feel dumb around “smart” programmers
  41. Distance between application programming and standard library programming
  42. “What could go wrong” considered harmful
  43. Core devs are not necessarily product experts
  44. WIP: Reflections on audience building
  45. Goal: Become a pro systems programmer
  46. Runtime polymorphism cheat sheet
  47. Smartphone anxiety
  48. AI Predictions
  49. The nice part about working for big companies
  50. Pitfalls with fork() in real-time contexts
  51. Why we get busier as we get older
  52. Experiment: Categories for my posts
  53. Task queues, Redis, Python, Celery, RQ
  54. 3 years of Timestamps
  55. Syscall ABI compatibility: Linux vs Windows/macOS
  56. Tip: Have two checkouts of the repo
  57. WIP: “Interesting” is in the eye of the beholder
  58. Why do computers reboot multiple times during an update?
  59. What’s with the name?
  60. How to enable colored compiler output with CMake + VSCode
  61. WIP: Should everyone be a leader?
  62. Save all the code you write
  63. Pick an impressive project, then checkout to the first commit
  64. Why I enjoy hanging out with entrepreneurs
  65. Why I write in public
  66. A takeaway I often get from exploit writeups
  67. Can we have non-atomic std::shared_ptr in C++?

2022 4

  1. Location Capital
  2. Remote onboarding
  3. Short thread about LLDB pretty printing internals
  4. Tips for writing LLDB pretty printers

2021 11

  1. My audio development journey
  2. “Menu reference” shaped solutions
  3. I get asked why I’m into C++ and not Rust.
  4. git diff can natively detect code movement
  5. Linux Internals: How /proc/self/mem writes to unwritable memory
  6. The tradeoffs in using -Weverything
  7. Surgical formatting with git-clang-format
  8. What you should know before taking your gap year (and lessons from mine)
  9. How to pick a market that will make you money
  10. Open source licensing for supervillains
  11. An actionable framework for yearly goal planning

2020 26

  1. Evergreen tweets
  2. How to set up a business email for free
  3. Tips for reading the Linux kernel
  4. Tips for effective technical presentations
  5. How to manage your time like a millionaire
  6. Double fetches, scheduling algorithms, and onion rings
  7. Taking a gap year and working at a fast food restaurant
  8. What they don’t tell you about demand paging in school
  9. Tips for submitting your first Linux kernel patch
  10. How to set up a minimal Linux kernel dev environment on Ubuntu 20.04
  11. The “Early Stage Founder” Card
  12. Admitting defeat
  13. 3 Key Habits I Used to Learn Chinese
  14. The downside of a novel product
  15. Don’t sleep on Google Sheets for backend infra!
  16. Realizing that you are the end of line
  17. Don’t confuse std::move and std::forward
  18. Getting bit by unique_ptr
  19. You can use /proc/*/mem to bypass memory protections
  20. Read bits are not enforced for memory mappings
  21. macOS has a native memory leak checker
  22. How to set up an ARM64 playground on Ubuntu 18.04
  23. 3 Life Skills I Learned From Indie Hackers
  24. Advice for finding mentorship
  25. People hate surveys, but like being interviewed
  26. Taking responsibility for lost sales

2019 3

  1. I landed code in LLDB!
  2. Reproducing a GCC 8.1 ABI compatibility bug
  3. Being pedantic about C++ compilation

2017 1

  1. struct stat notes

2016 2

  1. Graduation haiku
  2. How setjmp and longjmp work (2016)

2015 2

  1. Off to the (Python Internals) Races
  2. Building a Sketchy Website 101

2014 3

  1. Netcat “-e” Analysis
  2. Beginner Crackme
  3. Netcat Refresher

2013 1

  1. Noise machine