The Tech Monoculture is Finally Breaking
Growing up in the 90s and early 2000s, tech was a foundational part of my childhood.
The Game Theory Behind Big Tech's Patent Stockpiles
Although unintentional, the software patent system has evolved into a classic game-theoretic dynamic.
The Fair Use Paradox: If It Applies to Training… Doesn't It Apply to Distillation?
Few industries have experienced as many disruptions in the 21st century as publishing. The last two decades have brought a shift from print to digital, the decline of ad-supported models, the rise of paywalls, and a surge of self-publishing and social platforms.
Beyond the Plateau: The Real Existential Crisis Is a Slowdown, Not a Takeoff
For most of history, humanity’s greatest accomplishment has been its ability to out-accelerate its own existential problems.
Mitigating Vibe Coding Security Pitfalls
Vibe coding—the art of guiding LLMs to write code on your behalf, according to stated requirements—is shifting from a quirky, experimental approach to something that, in many cases, is expected even in large, bureaucratic organizations. It can be a huge productivity booster, but it also comes with real risks: even a single misplaced character can lead to SQL injection, bypass logins, or expose sensitive user data.
Leetcode for prompting: Introducing AI Dojo 🥋
As AI tools have become more widespread, and generally better, I’ve seen the rift between those who incorporate these tools into their development process and those who don’t, widen.
Vibe Coding with LLMs: Tips for Building Faster
Large Language Models (LLMs) are transforming the way we build software. Vibe Coding — popularized by tools like Cursor and Windsurf — refers to deeply embedding LLMs into the development workflow. Like all tools, however, it takes time to learn how to use them effectively.
Teaching GPT to Use Tools: Function Calling with OpenAI
Most developers start their journey with language models by prompting them: “Explain this code”, “Summarize this thread”, “Write a SQL query”. But eventually, you hit a wall. You want your model to do something dynamic — like call an API, look something up, or trigger a workflow. This is not data that you can provide in advance, because it is constantly changing, and yet LLMs are trained on a static dataset.