Archives
Months
- October 2025 (1)
- September 2025 (1)
- August 2025 (3)
- June 2025 (1)
- April 2025 (1)
- January 2025 (1)
- December 2024 (1)
- November 2024 (1)
- October 2024 (2)
- November 2021 (1)
- May 2021 (1)
- April 2021 (1)
- January 2021 (1)
- October 2020 (2)
- September 2020 (1)
- August 2020 (1)
- May 2020 (1)
- January 2020 (1)
- May 2019 (2)
- March 2019 (1)
- September 2018 (1)
- July 2018 (1)
- April 2018 (1)
- March 2018 (1)
- February 2018 (1)
- December 2017 (5)
- August 2017 (1)
- March 2017 (3)
- February 2017 (1)
- January 2017 (1)
- December 2016 (5)
- October 2016 (1)
- September 2016 (4)
- August 2016 (2)
- July 2016 (1)
- May 2016 (2)
- April 2016 (1)
- January 2016 (1)
- December 2015 (1)
- November 2015 (1)
- September 2015 (1)
- August 2015 (1)
- May 2015 (2)
- January 2015 (1)
- December 2014 (2)
- November 2014 (1)
- September 2014 (2)
- August 2014 (3)
- July 2014 (2)
- May 2014 (4)
- April 2014 (1)
- March 2014 (1)
- January 2014 (6)
- December 2013 (1)
- October 2013 (2)
- September 2013 (4)
- August 2013 (1)
- July 2013 (3)
- June 2013 (1)
- May 2013 (4)
- April 2013 (6)
- March 2013 (3)
- January 2013 (3)
- December 2012 (3)
- November 2012 (5)
- October 2012 (7)
- September 2012 (4)
- August 2012 (8)
- July 2012 (3)
- June 2012 (1)
- May 2012 (5)
- April 2012 (2)
- March 2012 (5)
- February 2012 (5)
- January 2012 (6)
- December 2011 (4)
- November 2011 (3)
- October 2011 (3)
- September 2011 (2)
- August 2011 (6)
- July 2011 (13)
- June 2011 (13)
- May 2011 (13)
- April 2011 (13)
- March 2011 (13)
- February 2011 (13)
- December 2010 (14)
- November 2010 (13)
- October 2010 (13)
- September 2010 (13)
- August 2010 (14)
- July 2010 (13)
- June 2010 (13)
- May 2010 (13)
- April 2010 (13)
- March 2010 (13)
- February 2010 (12)
- January 2010 (13)
- December 2009 (2)
Categories
- Academia (6)
- Agda (1)
- AI Coding (2)
- C (9)
- Compilers (8)
- Computer Science (50)
- Concurrency (1)
- Coq (4)
- Cryptography (3)
- Distributed Systems (1)
- Finance (1)
- Frivolity (6)
- Galois Tech Talk (7)
- GHC (36)
- Hoopl (5)
- Git (9)
- Guest (1)
- Hack (6)
- Haskell (160)
- Backpack (13)
- c2hs (6)
- Haskell Heap (7)
- Space Leak (5)
- Type Kata (3)
- HTML Purifier (1)
- Mailbox (1)
- Math (20)
- Logic (3)
- Type Theory (3)
- Meta (7)
- Miscellaneous (7)
- Music (2)
- NIPS (3)
- OCaml (4)
- Open Source (2)
- Personal (31)
- Philosophy (6)
- Programming (22)
- Programming Languages (13)
- Python (6)
- PyTorch (15)
- Racket (1)
- Radio (3)
- Rust (1)
- Scheme (4)
- Security (1)
- SIPB (9)
- Society (1)
- Software Engineering (13)
- Teaching (10)
- Toolbox (37)
- Ur/Web (1)
- Visualization (1)
- Web (1)
Articles
- Draw high dimensional tensors as a matrix of matrices (October 25, 2025)
- So you want to control flow in PT2 (September 5, 2025)
- The Parallelism Mesh Zoo (August 30, 2025)
- You could have invented CuTe hierarchical layout (but maybe not the rest of it?) (August 22, 2025)
- State of torch.compile for training (August 2025) (August 13, 2025)
- Vibe coding case study: ScubaDuck (June 2, 2025)
- Why you should maintain a personal LLM coding benchmark (April 4, 2025)
- New Years resolutions for PyTorch in 2025 (January 9, 2025)
- Ways to use torch.export (December 23, 2024)
- Ways to use torch.compile (November 5, 2024)
- Tensor programming for databases, with first class dimensions (October 14, 2024)
- What’s different this time? LLM edition (October 4, 2024)
- Interactive scraping with Jupyter and Puppeteer (November 23, 2021)
- PyTorch Developer Podcast (May 5, 2021)
- Rage bug reporting (April 25, 2021)
- The PyTorch open source process (January 6, 2021)
- The hidden problem(?) with basic block procedures in SSA (October 24, 2020)
- Idiomatic algebraic data types in Python with dataclasses and Union (October 14, 2020)
- Let’s talk about the PyTorch dispatcher (September 10, 2020)
- Dynamic scoping is an effect, implicit parameters are a coeffect (August 27, 2020)
- A brief taxonomy of PyTorch operators by shape behavior (May 6, 2020)
- vmap in Haskell (January 29, 2020)
- PyTorch internals (May 16, 2019)
- A short note about functional linear maps (May 15, 2019)
- Microsoft Surface Book 2 (March 17, 2019)
- HIW’18: Let’s Go Mainstream with Eta! (September 23, 2018)
- A year into Backpack (July 14, 2018)
- A compile-time debugger that helps you write tensor shape checks (April 6, 2018)
- Online/offline continuous integration (March 12, 2018)
- Semantic Import Versioning in the wild (February 23, 2018)
- Systems ML workshop panel (December 8, 2017)
- Accelerating Persistent Neural Networks at Datacenter Scale (Daniel Lo) (December 8, 2017)
- MOCHA: Federated Multi-Tasks Learning (Virginia Smith) (December 8, 2017)
- A Machine Learning Approach to Database Indexes (Alex Beutel) (December 8, 2017)
- Ray: A Distributed Execution Framework for Emerging AI Applications (Ion Stoica) (December 8, 2017)
- Backpack for deep learning (August 17, 2017)
- Proposal: Suggest explicit type application for Foldable length and friends (March 21, 2017)
- Prio: Private, Robust, and Scalable Computation of Aggregate Statistics (March 17, 2017)
- Designing the Backpack signature ecosystem (March 11, 2017)
- How to integrate GHC API programs with Cabal (February 8, 2017)
- Try Backpack: Cabal packages (January 17, 2017)
- A tale of backwards compatibility in ASTs (December 31, 2016)
- Backpack and the PVP (December 30, 2016)
- Left-recursive parsing of Haskell imports and declarations (December 21, 2016)
- The problem of reusable and composable specifications (December 17, 2016)
- Thoughts about Spec-ulation (Rich Hickey) (December 16, 2016)
-
Try Backpack:
ghc --backpack(October 10, 2016) - Seize the Means of Production (of APIs) (September 13, 2016)
- The Base of a String Theory for Haskell (September 7, 2016)
- The Edit-Recompile Manager (September 2, 2016)
- Backpack and separate compilation (September 1, 2016)
- cabal new-build is a package manager (August 29, 2016)
- Optimizing incremental compilation (August 27, 2016)
- What Template Haskell gets wrong and Racket gets right (July 18, 2016)
- Debugging tcIfaceGlobal errors in GHC: a study in interpreting trace output (May 15, 2016)
- Announcing cabal new-build: Nix-style local builds (May 2, 2016)
- Hindley-Milner with top-level existentials (April 24, 2016)
- ghc-shake: Reimplementing ghc --make (January 7, 2016)
- The convergence of compilers, build systems and package managers (December 7, 2015)
- What is Stateless User Interface? (November 27, 2015)
- Is no-reinstall Cabal coming to GHC 8.0? (September 18, 2015)
- Help us beta test “no-reinstall Cabal” (August 29, 2015)
- Ubuntu Vivid upgrade (Xmonad) (May 29, 2015)
- Width-adaptive XMonad layout (May 2, 2015)
- An Eq instance for non de Bruijn terms (January 30, 2015)
- Unintended consequences: Bound threads and unsafe FFI calls (December 8, 2014)
- Ubuntu Utopic upgrade (Xmonad) (December 4, 2014)
- Tomatoes are a subtype of vegetables (November 14, 2014)
- Haskell Implementor’s Workshop ’14 (September 7, 2014)
- Open type families are not modular (September 4, 2014)
- A taste of Cabalized Backpack (August 26, 2014)
- The fundamental problem of programming language package management (August 21, 2014)
- What’s a module system good for anyway? (August 9, 2014)
- New theme! (July 26, 2014)
- Type classes: confluence, coherence and global uniqueness (July 11, 2014)
- Parsec: “try a <|> b” considered harmful (May 17, 2014)
- GHC and mutable arrays: a DIRTY little secret (May 9, 2014)
- Elimination with a Motive (in Coq) (May 7, 2014)
- The cost of weak pointers and finalizers in GHC (May 4, 2014)
- Calculating Shanten in Mahjong (April 1, 2014)
- Haskell for Coq programmers (March 17, 2014)
- Equality, roughly speaking (January 30, 2014)
- How to maintain a pristine copy of your configuration files (January 20, 2014)
- PEPM’14: The HERMIT in the Stream (January 17, 2014)
- Ott ⇔ PLT Redex (January 13, 2014)
- When a lock is better than an MVar (January 7, 2014)
- So you want to add a new concurrency primitive to GHC… (January 1, 2014)
- Two bugs in the borrow checker every Rust developer should know about (December 17, 2013)
- Visualizing a block allocator (October 30, 2013)
- Xmonad and media keys on Saucy (October 27, 2013)
- If you’re using lift, you’re doing it wrong (probably) (September 26, 2013)
- Of Monadic Fixpoints and Heap Offsets (September 24, 2013)
- Induction and logical relations (September 18, 2013)
- Cost semantics for STG in modern GHC (September 7, 2013)
- Blame Trees (August 12, 2013)
- OPLSS lecture notes (July 29, 2013)
- No grammar? No problem! (July 2, 2013)
- HoTT exercises in Coq (in progress) (July 1, 2013)
- (Homotopy) Type Theory: Chapter One (June 24, 2013)
- The AST Typing Problem (May 28, 2013)
- Anatomy of an MVar operation (May 19, 2013)
-
HotOS “Unconference” report:
Verifying Systems (May 14, 2013) - Category theory for loop optimizations (May 12, 2013)
- The Difference between Recursion & Induction (April 27, 2013)
- Kindle is not good for textbooks (April 15, 2013)
- A Zerocoin puzzle (April 11, 2013)
- A classical logic fairy tale (April 7, 2013)
- NDSEG (April 5, 2013)
- Resource limits for Haskell (April 2, 2013)
- The single export pattern (March 31, 2013)
- The duality of weak maps and private symbols (March 19, 2013)
- What is a membrane? (March 15, 2013)
- Kindle Paperwhite notes (January 30, 2013)
- The GHC scheduler (January 28, 2013)
- NLP: the missing framework (January 2, 2013)
- Google Nexus 7 setup notes (December 31, 2012)
- Metro Maps of the News (December 13, 2012)
- Maildir synchronizing Sup (December 1, 2012)
- Why can’t I just be a little lazy? (November 26, 2012)
- Functional Encryption (November 25, 2012)
- Extremist Programming (November 20, 2012)
- Plan 9 mounts and dependency injection (November 8, 2012)
- hp/D3.js: an interactive heap profile viewer (November 2, 2012)
- Ubuntu Quantal upgrade (Thinkpad/Xmonad) (October 24, 2012)
- ACM XRDS: Jeff Dean profile (October 22, 2012)
- Duality for Haskellers (October 19, 2012)
- Hails: Protecting Data Privacy in Untrusted Web Applications (October 16, 2012)
- Visualizing satisfiability, validity & entailment (October 15, 2012)
- GET /browser.exe (October 12, 2012)
- Generalizing the programmable semicolon (October 3, 2012)
- Template project for GHC plugins (September 28, 2012)
- “This is really the End.” (September 24, 2012)
- Unintuitive facts about Safe Haskell (September 17, 2012)
- The Y Combinator and strict positivity (September 12, 2012)
- So you want to hack on IMAP… (August 31, 2012)
- OfflineIMAP sucks (August 30, 2012)
- How OfflineIMAP works (August 27, 2012)
- The Monad Reader: Issue 20 (August 25, 2012)
- Applicative functors (August 16, 2012)
- Practical Foundations for Programming Languages (first impressions) (August 15, 2012)
- Is Haskell liberal or conservative? (August 10, 2012)
- Two ways of representing perfect binary trees (August 4, 2012)
- Polymorphic variants in Ur/Web (July 29, 2012)
- Managing the server/client split in Ur/Web (July 25, 2012)
- Secure multiparty Bitcoin anonymization (July 20, 2012)
- Why verification results in higher quality code (June 23, 2012)
- Thoughts on gamifying textbooks (May 24, 2012)
- An Interactive Tutorial of the Sequent Calculus (May 22, 2012)
- Ubuntu Precise upgrade (Thinkpad/Xmonad) (May 18, 2012)
- What happens when you mix three research programming languages together (May 16, 2012)
- Some thoughts about literature review (May 13, 2012)
- How Ur/Web records work and what it might mean for Haskell (April 20, 2012)
- Use the source, don’t read it (April 17, 2012)
- Reduce Ubuntu latency by disabling mDNS (March 24, 2012)
- Visit month: Princeton (March 20, 2012)
- Is it better to teach formalism or intuition? (March 18, 2012)
- Visit month: University of Pennsylvania (March 16, 2012)
- You could have invented fractional cascading (March 5, 2012)
- Visualizing range trees (February 26, 2012)
- Anatomy of “You could have invented…” (February 23, 2012)
- Transcript of “Inventing on Principle” (February 20, 2012)
- Travel: Spring 2012 Edition (February 18, 2012)
- How to build DRM you can trust (February 15, 2012)
- POPL (January 28, 2012)
- Modelling IO: MonadIO and beyond (January 24, 2012)
- monad-control is tricky (January 23, 2012)
- Mystery Hunt and the Scientific Endeavour (January 16, 2012)
- Problem Set: The Codensity Transformation (January 7, 2012)
- Why iteratees are hard to understand (January 4, 2012)
- Bugs and Battleships (December 19, 2011)
- How to build i686 glibc on Ubuntu (December 18, 2011)
- Interactive Demo of Zero-Knowledge Proofs (December 17, 2011)
- Accessing lazy structures from C (December 15, 2011)
- Transparent xmobar (November 28, 2011)
- Ubuntu Oneiric upgrade (Thinkpad/Xmonad) (November 24, 2011)
- How to read Haskell like Python (November 14, 2011)
- The new Reflections on Trusting Trust (October 28, 2011)
- Obviously Correct (October 24, 2011)
- Polyglot programming (October 12, 2011)
- Why you shouldn’t do a PhD in systems (September 26, 2011)
- Let’s play a game (September 5, 2011)
- 8 ways to report errors in Haskell revisited (August 29, 2011)
- Joseph and the Amazing Technicolor Box (August 23, 2011)
- Diskless Paxos crash recovery (August 14, 2011)
- First impressions of module programming (August 5, 2011)
- In-program GC stats redux (August 3, 2011)
- Changes to IntMap (August 1, 2011)
- Food-related functional humor (July 29, 2011)
- BlockedIndefinitelyOnMVar (July 27, 2011)
- From data type definitions to code (July 25, 2011)
- Variant types and GADTs (July 22, 2011)
- In-program GC stats for GHC (July 20, 2011)
- Synthetic Git merges (July 18, 2011)
- Parallelism to plug space leaks (July 15, 2011)
- Facebook support for BarnOwl (July 13, 2011)
- Grad School, Oh My (July 11, 2011)
- Cambridge retrospective: History and Philosophy of Science (July 8, 2011)
- A new vision for Mendeley (July 6, 2011)
- IVar leaks (July 4, 2011)
- Scheduling IVars (July 1, 2011)
- The IVar monad (June 29, 2011)
- Debugging compilers with optimization fuel (June 27, 2011)
- Multi-monitor xmobar placement on Gnome (June 24, 2011)
- A Year of Notebooking (Part 2) (June 22, 2011)
- A Year of Notebooking (Part 1) (June 20, 2011)
- A pattern for increasing sharing (June 17, 2011)
- On type synonyms (June 15, 2011)
- A Taxonomy of Socialization on the Internet (June 13, 2011)
- Pinpointing space leaks in big programs (June 10, 2011)
- Measurement, quantification and reduction (June 8, 2011)
- What Philosophy of Science Can Say for Software Engineers (June 6, 2011)
- The Cryptography of Bitcoin (June 3, 2011)
- Bitcoin is not decentralized (June 1, 2011)
-
Chain Rule + Dynamic Programming
= Neural Networks (May 30, 2011) - An insufficiently lazy map (May 27, 2011)
- If it has lots of comments, it’s probably buggy (May 25, 2011)
- Tail recursion makes your loops cleaner (May 23, 2011)
- Computing function composition (May 20, 2011)
- Anatomy of a thunk leak (May 18, 2011)
- Space leak zoo (May 16, 2011)
- Reified laziness (May 13, 2011)
- Calling all space leaks (May 11, 2011)
- Bindings and CAFs on the Haskell Heap (May 9, 2011)
-
How Aristotle got it Wrong
On the importance of conceptual frameworks (May 6, 2011) - Unraveling the mystery of the IO monad (May 4, 2011)
- Haskell: Not pure enough? (May 2, 2011)
- How the Grinch stole the Haskell Heap (April 29, 2011)
- Functions produce the Haskell Heap (April 27, 2011)
- Implementing the Haskell Heap in Python, v1 (April 25, 2011)
- IO evaluates the Haskell Heap (April 24, 2011)
- Evaluation on the Haskell Heap (April 20, 2011)
- The Haskell Heap (April 18, 2011)
- Mailbox: Advice for a sup first-timer (April 16, 2011)
- Tracing the compilation of Hello Factorial! (April 13, 2011)
- Bugs from using the wrong variable (April 11, 2011)
- Hoopl: Dataflow analysis (April 8, 2011)
- Type Kata: Local data type (April 5, 2011)
- Hoopl: Dataflow lattices (April 4, 2011)
- Hoopl guided tour: Base system (April 1, 2011)
- GHC migrating to Git (March 30, 2011)
- HTML Purifier 4.3.0 released (March 28, 2011)
- Ely Cycles (March 25, 2011)
- Interleaving stream processors (March 23, 2011)
- The return of Hellenistic reasoning (March 21, 2011)
- Spring Reading: 2011 edition (March 18, 2011)
- On expressivity (March 16, 2011)
- Someone is wrong on the Internet (March 14, 2011)
- Many-valued logics and bottom (March 11, 2011)
- Killer mutants attack (mutation gone wrong) (March 9, 2011)
- Type Technology Tree (March 7, 2011)
- Petri net concurrency (March 4, 2011)
- The creation of a statically-typed functional programmer (March 2, 2011)
- On cargo culting and hacking (February 28, 2011)
- Multi-day debugging (February 25, 2011)
- Ad hoc approximations (February 23, 2011)
- Semi-automatic testing (February 21, 2011)
- Two short tips for FFI bindings (February 20, 2011)
- On checked exceptions and proof obligations (February 18, 2011)
- Picturing Hoopl transfer/rewrite functions (February 16, 2011)
- Picturing binomial coefficient identities (February 14, 2011)
- Android 2.x Sensor Simulator (February 11, 2011)
- A suggestion for indent/php.vim (February 9, 2011)
- Lav’net is watching you (February 7, 2011)
- OCaml gotchas (February 4, 2011)
- All about MVars (February 2, 2011)
- A year of blogging (December 31, 2010)
- Greetings from Switzerland (December 29, 2010)
- No one expects the Scott induction! (December 27, 2010)
- Thriller: Doing it for the thrills (December 24, 2010)
- Travel advisory (December 21, 2010)
- Generalization and vagueness in specifications (December 20, 2010)
- Tourist by day, Blogger by night (December 17, 2010)
- ω: I’m lubbin’ it (December 15, 2010)
- Getting a fix on fixpoints (December 13, 2010)
- Errata for gin and monotonic (December 10, 2010)
- Gin and monotonic (December 8, 2010)
- Hussling Haskell types into Hasse diagrams (December 6, 2010)
- Talk Friday (December 3, 2010)
- How I Learned to Stop Worrying and Love the ⊥ (December 1, 2010)
- My first proof in Isabelle (November 29, 2010)
- Reflexivity. Qed. (November 26, 2010)
- Integer sequences every computer scientist should know? (November 24, 2010)
- Is multiply-carry strongly universal? (November 22, 2010)
- Cambridge potpourri (November 19, 2010)
- Haskell.org committee (November 17, 2010)
- It’s just a longjmp to the left (November 15, 2010)
- You are in a maze of twisty little passages, all alike… (a GHC hacking post) (November 12, 2010)
- mod_fcgid 2.3 is broken (fixed in 2.3.6) (November 10, 2010)
- Medieval medicine and computers (November 8, 2010)
- DP Zoo Tour (November 5, 2010)
- Dead Edward Day (November 3, 2010)
- DP Zoo (November 1, 2010)
- Intelligence is the ability to make finer distinctions: Another Haskell Advocacy Post (October 29, 2010)
- Blog name changed… (October 27, 2010)
- OCaml for Haskellers (October 25, 2010)
- Don’t Repeat Yourself is context dependent (October 22, 2010)
- Purpose of proof: semi-formal methods (October 20, 2010)
- Rapidly prototyping scripts in Haskell (October 18, 2010)
- Existential type-curry (October 15, 2010)
- Quote Day (October 13, 2010)
- Why being a sysadmin will help you do Science! (October 11, 2010)
- The HTML purification manifesto (October 8, 2010)
- Abstraction without a concrete concept (October 6, 2010)
- Why I am in Cambridge (October 4, 2010)
- Tips for running a hackathon (October 1, 2010)
- How to get answers from busy maintainers (September 29, 2010)
- So long America! (September 27, 2010)
- High performance monads (September 24, 2010)
- Data is Code (September 22, 2010)
- Tension of patch and tree version control (September 20, 2010)
- Session types, subtyping and dependent types (September 17, 2010)
- Evolution of a Shared Web Host (September 15, 2010)
- Keyword arguments in Haskell (September 13, 2010)
- Towards platform-agnostic interruptibility (September 10, 2010)
- pthread_cancel on Windows (September 8, 2010)
- Embracing Windows (September 6, 2010)
- Annotating slides (September 3, 2010)
- My type signature overfloweth (September 1, 2010)
- Defining "Haskelly" (August 30, 2010)
- Interrupting GHC (August 27, 2010)
- abcBridge: Functional interfaces for AIGs and SAT solving (August 25, 2010)
- Type Kata: Distinguishing different data with the same underlying representation (August 23, 2010)
- Day in the life of a Galois intern (August 20, 2010)
- Type kata: Controlled sharing of references (August 18, 2010)
- What high school Algebra quizzes and NP-complete problems have in common (August 16, 2010)
- Generalizing APIs (August 13, 2010)
- A radical Hackage social experiment (August 11, 2010)
- Paper Monday (August 9, 2010)
- The Gateway Drug to Type Programming (August 6, 2010)
- Tour of a distributed Erlang application (August 5, 2010)
- Buffered streams and iteratees (August 4, 2010)
- How to pick your string library in Haskell (August 2, 2010)
- Suggestion box (July 30, 2010)
- Delaying implicit parameter binding (July 28, 2010)
- Reader monad and implicit parameters (July 26, 2010)
- Managing foreign pointers effectively (July 23, 2010)
- Pipelines and continuations (July 21, 2010)
- System.Posix.Redirect (July 19, 2010)
- Maximum matching deadlock solution (July 16, 2010)
- Flipping arrows in coBurger King (July 14, 2010)
- Graphs not grids: How caches are corrupting young algorithms designers and how to fix it (July 12, 2010)
- Safety first: FFI and threading (July 9, 2010)
- Groom: human readable Show for Haskell (July 7, 2010)
- Little’s law (July 5, 2010)
- MVC and Purity (July 2, 2010)
- Call and fun: marshalling redux (June 30, 2010)
- Thinking about talk (June 28, 2010)
- Marshalling with get and set (June 25, 2010)
- First steps in c2hs (June 23, 2010)
- The secret to successful autogenerated docs (June 21, 2010)
- Principles of FFI API design (June 18, 2010)
- Well-founded recursion in Agda (June 16, 2010)
- Setting up Cabal, the FFI and c2hs (June 14, 2010)
- The Haskell Preprocessor Hierarchy (June 11, 2010)
- Static Analysis for everyday (not-PhD) man (June 9, 2010)
- AP Physics: Stuck in the concrete (June 7, 2010)
- Databases are categories (June 4, 2010)
- Bug boogie: Git and symlinks (June 2, 2010)
- Punt the Prelude (May 31, 2010)
- Use The Monoid: A worked example (May 28, 2010)
-
Bananas, Lenses, Envelopes and Barbed Wire
A Translation Guide (May 26, 2010) - Lazy exceptions and IO (May 24, 2010)
- Upgrading to Ubuntu Lucid (May 21, 2010)
- Class Reflections (May 19, 2010)
-
I Hate Patches:
Confessions of an Open-Source Developer (May 17, 2010) - Spring 2010: A Random Walk (May 14, 2010)
- Refactoring Haskell code? (May 12, 2010)
- Nested Data Parallelism versus Creative Catamorphisms (May 10, 2010)
- Omnipresent Cabal (May 7, 2010)
- Name conflicts on Hackage (May 5, 2010)
- Design Patterns in Haskell (May 3, 2010)
- Art. Code. Math. (And mit-scheme) (April 30, 2010)
- Inessential guide to fclabels (April 28, 2010)
- The Problem with xUnit (April 26, 2010)
- Creative catamorphisms (April 23, 2010)
- Association maps in mit-scheme (April 21, 2010)
- Thoughts on discussion (April 19, 2010)
- Dudamel visits MIT (April 16, 2010)
- Inessential Guide to data-accessor (April 14, 2010)
- Later Impressions of the VX-8R (April 12, 2010)
- Diagramming in Xournal and Gimp (April 9, 2010)
- You could have invented zippers (April 7, 2010)
- Cup of FP with a Java twist (April 5, 2010)
- Summer internship at Galois (April 2, 2010)
- More fun with Futamura projections (March 31, 2010)
- The case of the Hash Array Mapped Trie (March 29, 2010)
- Ad hoc wireless (March 24, 2010)
- Hunting for abstractions in mathematics (March 22, 2010)
- Mutation sleuthing in Python (March 19, 2010)
- Haskell, The Hard Sell (March 17, 2010)
- Straitjacket programming (March 15, 2010)
- Five tips for maintainable shell scripts (March 12, 2010)
- Replacing small C programs with Haskell (March 10, 2010)
- Being an expert considered harmful (March 8, 2010)
- How to use Vim’s textwidth like a pro (March 5, 2010)
- Third-party unattended upgrades in three steps (March 3, 2010)
- Writing generator friendly code (March 1, 2010)
- History as documentation (February 26, 2010)
- The Art of Posing a Problem (February 24, 2010)
- Comonads and Convolutions (February 22, 2010)
- Type manipulation: Tricks of the trade (February 19, 2010)
- Why we stay up late (February 17, 2010)
- Hunting for constraints (February 15, 2010)
- Scheming environments (February 12, 2010)
- Sources of music (February 10, 2010)
- Nested loops and exceptions (Oleg Kiselyov) (February 8, 2010)
- Nested loops and continuations (February 5, 2010)
- Classes begin (February 3, 2010)
- Cute macro tricks in the kernel (February 1, 2010)
- Workflows in Git: Single-user style (January 29, 2010)
- Arcadia Rising posters (January 27, 2010)
- To the right! Autocompletable names (January 25, 2010)
- Hacking git-rerere (January 22, 2010)
- Too many leftovers! (January 20, 2010)
- Five advanced Git merge techniques (January 18, 2010)
- Typeclasses matter (January 15, 2010)
- Sup: Mail for Nerds (January 13, 2010)
- First impressions of the VX-8R (January 11, 2010)
- Why Haskell? The big question (January 8, 2010)
- rxvt-unicode for gnome-terminal refugees (January 6, 2010)
- Audio connectors and radios (January 4, 2010)
- Adventures in Three Monads (January 1, 2010)
- 2010: A Roadmap (December 31, 2009)
- Iron Blogger (December 28, 2009)