Category Archives: Favorite

75 lessons on life, art, and making things happen

Inspired by Naval Ravikant, when I learn life lessons, I try to compress them into a short phrase so I remember the lesson better. Here are 75 of my personal learnings:

—

  1. Your lowest points might be your greatest opportunities in disguise.
  2. All truly incredible outcomes start as “crazy” ideas.
  3. If believing everything happens for a reason makes life better, believe it.
  4. Only keep tense what absolutely must be. Relax everything else.
  5. Before they call you visionary, they call you weird.
  6. Everything useful in the world was created by someone who cared enough to push it into reality.
  7. Just because all your friends do something, doesn’t mean you should.
  8. Just because all your friends don’t do something, doesn’t mean you shouldn’t.
  9. Mix your interests to find your area of world-class potential.
  10. World-class expertise is more attainable than you think.
  11. Zoom in unusually far and narrow on anything, and you’ll see things no one has seen before.
  12. Good ideas aren’t enough – they need to look incredible.
  13. It’s easier to get a good deal if you have cash in hand, exact change, arm extended.
  14. Be able to distinguish investments that look like luxuries.
  15. The true cost of things: (Price Paid – Price Sold For) / (# of Times Used).
  16. Invest aggressively in tools used daily.
  17. Money is the worst form of capital. Prefer health, relationships, knowledge, experience.
  18. Half the battle of making great art is knowing the tools to use.
  19. People will tell you the tools they use, if you ask nicely.
  20. Investing aggressively in the right tools will save money in the long run.
  21. When beginning an art form, try many styles, share, and see what works.
  22. When you find what works, stop exploring. Create in that style until you get tired.
  23. Repeat.
  24. New hobbies can have defined, planned lifetimes.
  25. But previous pursuits do remain part of your identity.
  26. Everything you make builds toward your global body of work.
  27. Your global body of work is a ball of dry kindling, waiting for a spark.
  28. The bigger the ball of kindling, the bigger the flame.
  29. The spark might come soon, in decades, or never.
  30. Being public and meeting many people reduces the risk of the latter.
  31. You don’t need to be a world expert to generate novelty.
  32. Remixing is easier than synthesizing from scratch to generate novelty.
  33. The paradox of art: creative decisions lead to different ends. There is no best end, but some are better than others.
  34. Your life is a decades-long performance art project.
  35. A master chef can answer not only the “right” way to make rice, but also: “What if we use half the water? Twice as much? Half the heat?” – because she’s tried.
  36. Everything good in life comes from people.
  37. Find a community where it’s normal to do the things you aspire to do.
  38. Buy your way in if that’s the easiest way.
  39. Cold email or DM people with gratitude and one hyper-specific question.
  40. Don’t assume you’ll be ignored. Test it.
  41. Lack of reply = Test to see how serious you are.
  42. Don’t rely on your memory for following up. Have a system.
  43. Don’t rely on your memory, in general. Have a system.
  44. Mentorship begins the moment they reply.
  45. Finding mentorship is about making yourself an attractive investment.
  46. You’re not a nobody; you’re a rocket on the launch pad.
  47. Show proof of work to de-risk yourself as a mentee.
  48. Go out of your way to travel to where your mentors live.
  49. Some seeds take years to sprout, but bear the most incredible fruit.
  50. Buying something from them is a way to get closer to a potential mentor.
  51. Being in need is a great way to start conversations with strangers.
  52. You can invent small needs on a moment’s notice, anywhere.
  53. For example, simply needing a recommendation.
  54. Compliments are a great way to start conversations with strangers.
  55. You can take actions that make it easier for strangers to start conversations with you, like wearing interesting clothes.
  56. When surrounded by strangers, gravitate toward who shows you warmth.
  57. Mingling is easier when you’re early to an event.
  58. The transition from stranger to friend can happen in seconds.
  59. The connection isn’t crystallized until you’ve followed up later online.
  60. Reach out to everyone on the internet whose work you admire.
  61. Move from email to text message to deepen relationships.
  62. You’re not competing against the best – only those who show up.
  63. Any great pursuit is a marathon. Learn the art of long-term consistency.
  64. Genuine passion = endurance.
  65. Copycats will have weak endurance.
  66. You can often bypass bureaucracy by showing up in person, early.
  67. Do things that terrify you.
  68. Sometimes impossible decisions solve themselves with time.
  69. Focus less on winning; focus more on not losing. (Warren Buffett)
  70. Don’t be afraid to exploit your unfair advantages.
  71. Have a personal agenda.
  72. When no one has a strong opinion, that’s an opportunity to advance your agenda, if you wish.
  73. “A healthy man wants a thousand things. A sick man wants one.”
  74. The only competition is to know yourself as fully as possible, and act with maximum authenticity towards that truth.
  75. Remember: Millions would switch lives with you in a heartbeat, and readily inherit every single one of your problems.

You don’t even need to be successful

Something I’ve learned through my streaming project is that you don’t even need to be super “successful” at what you’re doing to build an audience of people that are excited for you and want to support you.

Based on my experience, you just need to be:

  • trying hard
  • at something hard
  • consistently
  • in public

I wouldn’t say I’ve been so “successful” at building an OS. It currently doesn’t even really boot or do anything yet. It does not support running programs at all. All it can do is kind of initialize the hardware and slowly initialize itself to the point where it’s almost ready to run programs. (And I didn’t even write a lot of that code. A lot of it was provided by the base foundation for the course I’m following.)

And none of that matters. People are still excited about what I’m doing, even though it’s not novel in the slightest, and I’m not that “successful”. What matters is simply that I’ve been trying, a lot, and talking about it.

Life is a business; life is a game; life is art

Here are three ways to view your life:

Life as a business

Life is a business, and you are the Founder & CEO.

You have goals, resources, and agency. The idea is to build the strongest business and life for yourself. You do this by making good decisions and generating profit.

The most savvy founders look for holes in the fabric of society, the market, their industry — and exploit them. They seek trends that allow them to be ahead of the curve.

Life as a game

Life is a game, and you are a player.

You are initialized with random parameters that inform your strengths, weaknesses, and initial environment. There’s an endless world in front of you to explore and play in.

The idea is to do well at the game — build points, power, connections. You encounter other players, transact with them, exchange moves, determine if they are trustworthy or hostile.

You learn the rules over time and understand what game you are even playing. You discover that within the greater context of “the game”, there are many sub-games you can play.

Randomness and luck are all built into the game.

Life as an art piece

Life is an art project, and you are the artist.

You have a blank canvas in front of you and an infinite number of creative decisions to make. The idea is to find a beautiful & satisfying creative endpoint for your piece.

There are many creative paths to take, leading to different ends. There is no best end, but some ends are better than others.

Like any other artist, you must apply techniques to manage the decision space. You apply constraints — sometimes artificially, sometimes destructively — to move forward.

edit 2026-08-14:

Life as a school

Life is a school, and you are a student.

Life will offer you lessons. Your job is to be open to them, learn them, and prove you’ve mastered them, before moving on to the next module.

You won’t always make forward progress. Sometimes, you’ll forget lessons and need to re-learn them.

There is always a next module.

Sometimes, you just need to be willing

Sometimes, you just need to be willing. No special skills or particular competence necessary — simply just being willing to do something others can but won’t do.

I learned and have profited from this realization at work in the past year. A certain set of important tasks on my team are somewhat hands-on in nature and not compatible with remote work. Our colleague that usually does these left the team. I stepped up and filled this gap.

The work is not particularly difficult — my teammates are smarter than me and could surely do it also. But I’m the only one that was willing and able to sacrifice remote work and commute every day. So I’ve been doing it.

Although it’s not the hardest, the work is nonetheless very important — critical, even. So I’ve been getting a lot of credit, brownie points, and even a raise from doing it.

Not because I’m smart — just willing.

How to be happy

Note to self:

  1. Remember: You are already enough just as you are, right here, right now. You don’t need to achieve or do anything. 1
  2. Remember: The only competition in life — if you must think of it that way — is to know yourself as fully as possible, and act with maximum authenticity towards that truth.
  3. Remember: All things considered, you have it good — so many around the world would kill to switch places and inherit every single one of your problems.

Linux Internals: How /proc/self/mem writes to unwritable memory

Introduction

An obscure quirk of the /proc/*/mem pseudofile is its “punch through” semantics. Writes performed through this file will succeed even if the destination virtual memory is marked unwritable. In fact, this behavior is intentional and actively used by projects such as the Julia JIT compiler and rr debugger.

This behavior raises some questions: Is privileged code subject to virtual memory permissions? In general, to what degree can the hardware inhibit kernel memory access?

By exploring these questions2, this article will shed light on the nuanced relationship between an operating system and the hardware it runs on. We’ll examine the constraints the CPU can impose on the kernel, and how the kernel can bypass these constraints.

Continue reading →

What they don’t tell you about demand paging in school

This post details my adventures with the Linux virtual memory subsystem, and my discovery of a creative way to taunt the OOM (out of memory) killer by accumulating memory in the kernel, rather than in userspace.

Keep reading and you’ll learn:

  • Internal details of the Linux kernel’s demand paging implementation
  • How to exploit virtual memory to implement highly efficient sparse data structures
  • What page tables are and how to calculate the memory overhead incurred by them
  • A cute way to get killed by the OOM killer while appearing to consume very little memory (great for parties)

Note: Victor Michel wrote a great follow up to this post here.

Continue reading →

How setjmp and longjmp work (2016)

Pretty recently I learned about setjmp() and longjmp(). They’re a neat pair of libc functions which allow you to save your program’s current execution context and resume it at an arbitrary point in the future (with some caveats3). If you’re wondering why this is particularly useful, to quote the manpage, one of their main use cases is “…for dealing with errors and interrupts encountered in a low-level subroutine of a program.” These functions can be used for more sophisticated error handling than simple error code return values.

I was curious how these functions worked, so I decided to take a look at musl libc’s implementation for x86. First, I’ll explain their interfaces and show an example usage program. Next, since this post isn’t aimed at the assembly wizard, I’ll cover some basics of x86 and Linux calling convention to provide some required background knowledge. Lastly, I’ll walk through the source, line by line.

Continue reading →