Înapoi la articole →

Cel mai recent articol

Ultima verificare

Urmăritori 0 urmăritori
Articole: 98
  1. How should we think about error-handling in concurrent programs?

  2. Solving regex crosswords with Z3

    For a while now, I’ve been fascinated by Z3 and by SMT solving more broadly.

  3. The ITTAGE indirect branch predictor

    While investigating the performance of the new Python 3.14 tail-calling interpreter, I learned (via this very informative comment from Sam Gross) new (to me) piece of performance trivia: Modern CPUs mostly no longer struggle to predict the bytecode-dispat…

  4. About a month ago, the CPython project merged a new implementation strategy for their bytecode interpreter.

  5. Building personal software with Claude

    Earlier this month, I used Claude to port (parts of) an Emacs package into Rust, shrinking the execution time by a factor of 1000 or more (in one concrete case: from 90s to about 15ms).

  6. Suppose we have a large collection of documents, and we wish you identify which documents are approximately the same as each other.

  7. Stripe's monorepo developer environment

    I worked at Stripe for about seven years, from 2012 to 2019.

  8. I was recently introduced to the paper “Seeing the Invisible: Perceptual-Cognitive Aspects of Expertise” by Gary Klein and Robert Hoffman.

  9. This December, the imp of the perverse struck me, and I decided to see how many days of Advent of Code I could do purely in compile-time C++ metaprogramming.

  10. What's with ML software and pickles?

    I have spent many years as an software engineer who was a total outsider to machine-learning, but with some curiosity and occasional peripheral interactions with it.

  11. Graceful behavior at capacity

    Suppose we’ve got a service.

  12. What’s the “right” level of CPU utilization for a server?

  13. Transformers for software engineers

    Ever since its introduction in the 2017 paper, Attention is All You Need, the Transformer model architecture has taken the deep-learning world by storm.

  14. A Cursed Bug

    In my day job at Anthropic, we run relatively large distributed systems to train large language models.

  15. Distributed cloud builds for everyone

    CPU cycles are cheaper than they have ever been, and cloud computing has never been more ubiquitous.

  16. Last week, Frederic Cambus wrote about building LLVM quickly on some very large machines, culminating in a 2m37s build on a 160-core ARM machine.

  17. People who work with me tend to realize that I have Opinions about databases, and SQL databases in particular.

  18. Towards solving Ultimate Tic Tac Toe

    Summary: Read about my efforts to solve the game of Ultimate Tic Tac Toe.

  19. Alex Gaynor recently asked this question in an IRC channel I hang out in (a channel which contains several software engineers nearly as obsessed with software testing as I am): uhh, so I’m writing some code to handle an econnreset… how do I test this?

  20. Test suites as classifiers

    Suppose we have some codebase we’re considering applying some patch to, and which has a robust and maintained test suite.

  21. Last week, I wrote about the mindset that computer systems can be understood, and behaviors can be explained, if we’re willing to dig deep enough into the stack of abstractions our software is built atop.

  22. Computers can be understood

    Introduction This post attempts to describe a mindset I’ve come to realize I bring to essentially all of my work with software.

  23. Reflections on software performance

    At this point in my career, I’ve worked on at least three projects where performance was a defining characteristic: Livegrep, Taktician, and Sorbet (I discussed sorbet in particular last time, and livegrep in an earlier post).

  24. Why the Sorbet typechecker is fast

    This is the second in an indefinite series of posts about things that I think went well in the Sorbet project.

  25. Testing and feedback loops

    Testing and feedback loops This post tries to set out one mental model I have for thinking about testing and the purpose testing serves in software engineering, and to explore some of the suggestions of this model.

  26. Record/Replay testing in Sorbet

    In 2017 and 2018, I (along with Paul Tarjan and Dmitry Petrashko) was a founding member of the Sorbet project at Stripe to build a gradual static typechecking system for Ruby, with the aim of enhancing productivity on Stripe’s millions of lines of Ruby, a…

  27. Two kinds of testing

    While talking about thinking about tests and testing in software engineering recently, I’ve come to the conclusion that there are (at least) two major ideas and goals that people have when they test or talk about testing.

  28. With the ongoing move towards “infrastructure-as-code” and similar notions, there’s been an ongoing increase in the number and popularity of declarative configuration management tools.

  29. A Go/C Polyglot

    Writing a Go/C polyglot Someone on a Slack I’m on recently raised the question of how you might write a source file that’s both valid C and Go, commenting that it wasn’t immediately obvious if this was even possible.

  30. Abstract In writer-priority reader/writer locks, as soon as a single writer enters the acquisition queue, all future accesses block behind any in-flight reads.

  31. My Apollo Bibliography

    Over the last few years — perhaps not that unusually among the nerds I know — I’ve become increasingly fascinated by the Apollo program (and early space program more generally), and been reading my way through a growing number of books and documentaries w…

  32. Three kinds of memory leaks

    So, you’ve got a program that’s using more and more over time as it runs.

  33. Property Testing Like AFL

    In my last last post, I argued that property-based testing and fuzzing are essentially the same practice, or at least share a lot of commonality.

  34. Property-Based Testing Is Fuzzing

    “Property-based testing” refers to the idea of writing statements that should be true of your code (“properties”), and then using automated tooling to generate test inputs (typically, randomly-generated inputs of an appropriate type), and observe whether…

  35. Disable Transparent Hugepages

    tl;dr “Transparent Hugepages” is a Linux kernel feature intended to improve performance by making more efficient use of your processor’s memory-mapping hardware.

  36. Back when I was an undergraduate, as part of a class called “Computer Systems Engineering”, we read numerous classic papers of systems design.

  37. Running Tensorflow on AWS GPUs

    I’ve been spending some time learning deep learning and tensorflow recently, and as part of that project I wanted to be able to train models using GPUs on EC2.

  38. Thoughts On Kubernetes

    I spent a while the last week porting livegrep.com from running directly AWS to running on Kubernetes on Google’s Cloud Platform (specifically, the google container engine, which provisions and manages the cluster for me).

  39. Measuring Capacity Through Utilization

    (This post is cross-posted from Honeycomb’s instrumentation series).

  40. How I Write Tests

    The longer I spend as a software engineer, the more obsessive I get about testing.

  41. Design for Testability

    When designing a new software project, one is often faced with a glut of choices about how to structure it.

  42. What MongoDB got Right

    MongoDB is perhaps the most-widely-mocked piece of software out there right now.

  43. Indices point between elements

    If you’re familiar with nearly any mainstream programming language, and I asked you to draw a diagram of an array, the array indices, and the array elements, odds are good you’d produce a diagram something like this: In this post, I want to persuade you to

  44. Back in January of 2012, Russ Cox posted an excellent blog post detailing how Google Code Search had worked, using a trigram index.

  45. New reptyr feature: TTY-stealing

    Ever since I wrote reptyr, I’ve been frustrated by a number of issues in reptyr that I fundamentally didn’t know how to solve within the reptyr model.

  46. I don’t do a ton of Linux kernel development these days, but I’ve done a fair bit in the past, and picked up a number of useful techniques for doing kernel development in a relatively painless fashion.

  47. At Stripe, we rely heavily on ruby and EventMachine to power various internal and external services.

  48. For the past N months, it seems like there is no new technology stack that is either hotter or more controversial than node.js. node.js is cancer!

  49. I’ve posted the final slides from my talk this year at DEFCON and Black Hat, on breaking out of the KVM Kernel Virtual Machine on Linux.

  50. Exploiting misuse of Python's "pickle"

    If you program in Python, you’re probably familiar with the pickle serialization library, which provides for efficient binary serialization and loading of Python datatypes.