Tom Moertel's Blog
HaskellSoftware / engineering practiceAlgorithms / data structures
- Posts
- 209 from 31 Jul 2001 to 14 Aug 2026
- Posting
- now and then (5 in the last year)
- Kind
- personal blog
- Feed
- https://blog.moertel.com/xml/atom/feed.xml
2026 5
2025 1
2024 1
2023 1
2013 8
- A Great Old-Timey Game-Programming Hack
- Tricks of the trade: Recursion to Iteration, Part 4: The Trampoline
- Tricks of the trade: Recursion to Iteration, Part 3: Recursive Data Structures
- Lazy merging in Python using streams
- Tricks of the trade: Recursion to Iteration, Part 2: Eliminating Recursion with the Time-Traveling Secret Feature Trick
- Tricks of the trade: Recursion to Iteration, Part 1: The Simple Method, secret features, and accumulators
- Odds and the evidence of a single coin toss
- The second-order-diff Git trick
2012 4
2011 14
- A flyweight mocking helper for Python
- The most surprisingly helpful thing I have written
- Almost there: 100K words
- Good enough to steal
- Writing a simple plagiarism detector in Haskell
- Presso hand-powered espresso maker: thoughts?
- Dear readers: let me know if my feeds explode
- Errata-sleuthing for fun and knowledge
- A quick summary of the VL2 data-center network scheme
- How to update your server's BIOS across the network
- Some less-uninformed speculation about the Google-Bing squabble
- The Google-Microsoft squabble over Bing results: some completely uninformed speculation
- Are engineers really bad at things they can't measure?
- The Bayesian meets Monty Hall
2010 11
- The other LectroTest
- Most popular articles on my blog for 2010: the old stuff rules
- Blog updates: faster, mathier, and more cacheable
- More on the evidence of a single coin toss
- On the evidence of a single coin toss
- The easy way to understand web-font licensing: use open-source fonts
- Emacs-magit 0.8.2 pushed to Fedora updates-testing
- Quick tip: converting lines of text to paragraphs (and the reverse)
- An interesting flaw (or feature?) in Amazon's marketplace
- Two handy alternatives to the top command: htop and atop
- A formal language for recipes: brain dump
2009 11
- Dispel the magic by defining the semantics
- How to fix a broken bootloader configuration after a Fedora Linux upgrade
- Dear Jeff Bezos: Here's an easy, effective way to fix the production problems in Amazon Kindle-edition books and, at the same time, prove that the Kindle is really, truly better than paper
- The best-kept secret in programming conferences, especially in a down economy
- Twitter puns
- Perl saved my vacation!
- Perlfolk! Get your YAPC|10 talk proposals in now!
- 10th-Anniversary YAPC coming right up!
- When you buy proprietary software, you get suffering
- Magit is a handy Emacs mode for people who use Git
- Emacs stuff I always seem to forget
2008 9
- See you at the Pittsburgh Perl Workshop 2008!
- The Insecurity of Security Questions: Why I met my wife in CWmKryWzuxCSAnMDuIg.
- PXSL Tools now on Hackage and GitHub
- Thinking algebraically: a functional-programming dividend that pays during your imperative-programming day job
- Fun stuff: Video of Type B Erie steam shovel in action!
- Fun stuff: Historical Construction Equipment Association's 2008 convention
- Oleg's great way of explaining delimited continuations
- That looks about right
- Property checking with Python's nose testing framework
2007 38
- PXSL Tools 1.0: Your ticket out of XML Hell
- How I stopped missing Darcs and started loving Git
- TMR 9!
- A couple of tips for writing Puppet manifests
- How to download photos and movies from the Palm Centro to a Linux desktop
- How to hotsync the Palm Centro with a Fedora 7 Linux desktop via USB
- Perl helps prove universality of 2, 3 Turing machine
- Practical differences between Darcs and Git/Mercurial
- PPW 2007 is here!
- PPW 2007: a twenty-ton can of programming whoop-ass
- Bloglines doesn't handle inter-element white space properly
- Updated cabal2rpm helps you make RPM packages from Haskell Cabal packages
- ClusterBy: a handy little function for the toolbox
- R tips and tricks: Producing smooth bitmap plots
- Fun with statistics: estimating blog readership (a do-it-yourself recipe)
- Pittsburgh Perl Workshop 2007: Don't miss your chance to speak!
- Seven signs YOU may have created a Gratuitous Domain Specific Language
- A bright future: security and modern type systems
- My photo of British soldier lichen is now published!
- Hailstorm!
- Greasmonkey script annotates IMDb movies with their decoder-ring percentile ranks
- Talk: Fun with Numbers: R and Perl (and IMDB data)
- My upgrade to Fedora 7: rocky start but great finish
- I'm going to be a published photographer!
- Repairing my Kenwood A/V receiver's remote-control sensor
- Good espresso at Sheetz?
- New Fedora Core RPMS for CRAN packages arm, Matrix, lme4, car, coda, leaps, and mlmRev
- Engauge Digitizer: a handy tool for extracting data from charts
- Netflix vs. Amazon Unbox: Netflix still wins
- I have written a short novel's worth of content for my blog
- Directory-tree printing in Haskell, part three: lazy I/O
- Debate to learn. Learn to debate.
- Directory-tree printing in Haskell, part two: refactoring
- The IMDB Movie Rating Decoder Ring: updated w/ 2 March 2007 data
- A simple directory-tree printer in Haskell
- Don't let password recovery keep you from protecting your users
- Ruby 1.9 gets handy new method Object#tap
- A bad way to start the evening
2006 56
- Never store passwords in a database!
- I blame the pie
- Lowering the bar for over a decade
- Minor site churn
- Adding Haskell syntax highlighting to the Typo blogging system
- Introductory Haskell: Solving the Sorting-It-Out Kata
- A type-based solution to the “strings problem”: a fitting end to XSS and SQL-injection holes?
- If unit testing can't keep Rails safe from string-escaping problems, what makes you think it will keep your projects safe?
- GHC 6.6 is out!
- Unit testing is a tool, not a goal
- Baker's percentages and how not to explain them
- The 2006 Pittsburgh Perl Workshop is a ten-ton can of programming whoop-ass
- Netflix: don't act like weasels
- Database connection leak in Typo 4.0.3: problem solved
- Typo-4.0.3 instability and a minor patch for sqlite3-ruby
- Solving the Google Code Jam "countPaths" problem in Perl
- Solving the Google Code Jam "countPaths" problem in Ruby
- Solving the Google Code Jam "countPaths" problem in Haskell
- Some recent reviews of distributed source-code-management systems
- Adding reddit and del.icio.us buttons to articles in Typo
- How to make sure your servers come back up after an extended power outage
- Amazon Grocery: an upbeat mini-review
- Upgrading my blog to run Typo 4.0
- A quick look at my blog's web statistics
- A coder's guide to usage guides (and why you ought to use one)
- Interesting stuff: matchstick moss (British soldier lichen)
- Claiming my blog on Bloglines
- Mini-review of CafePress's direct-printed t-shirts
- Dell-support follow-up survey
- LectroTest: new release, new talk, and the new LectroTest Emporium!
- New server arrives: my adventure in Dell customer-support Hell
- Macro photography: lady-beetle larva
- Unexpected downtime
- My code is “so clever as to be stupid”
- Two good talks on software and freedom
- Unofficial answers to FAQs about Giant Eagle's “fuelperks” gas discount
- The Supermarket Pricing Kata in Haskell
- The honeybee stories are back!
- Perl and Pittsburgh: fun stuff coming your way!
- Composing functions in Ruby
- The Bowling Game Kata in Haskell
- The "perfect shuffles" puzzle (solved in Haskell)
- Talk: Embedded domain-specific languages for Perl
- Good stuff: Tab Mix Plus for Firefox
- Finding duplicate words in writing: a handy Perl script
- How to flash your BIOS when you don't have a floppy drive
- My new rig is up and running
- Plogs: channelized shovel marketing from Amazon
- Ryan Carson: Building web applications on a budget
- A simple Apache recipe for migrating blog articles to a new host
- Good stuff: Aldo Coffee Company
- Night of the long-tailed beast!
- Everything old is new again: moving content over from my old blog.
- Wondrous oddities: R's function-call semantics
- Mining gold from the Internet Movie Database, part 1: decoding user ratings
- Improving Typo's spam protection
2005 36
- Cost-reducing interfaces should be the focus
- Proofreading with speech synthesis
- Try Ruby from your web browser
- Good stuff: Google Local for mobile devices
- Ten simple ways to protect your privacy
- Wow! A Haskell-based first-person shooter!
- Verizon FiOS fiber-optic Internet service: a first look
- Replacing the fan array in my HP ProCurve 4000M switch
- Things to do with unexpected free time
- Linux just works
- Damian Conway's talk on Sufficiently Advanced Technologies
- Interesting stuff: keeping bees
- Top-ten weblog usability mistakes: My blog's scorecard
- Google Web Accelerator vs. unsafe linking: Round Two!
- The oddities of floating-point arithmetic
- Scope herding with delimited continuations
- New RPM release: Emacs Speaks Statistics 5.2.10
- Good stuff: Foyle's War
- Closures and the professional programmer
- Power parsing with Haskell and Parsec
- I have moved my blog over to Typo
- How to change symlinks atomically
- Perl Mongers meet at PAPA-8 pinball tournament kickoff!
- Seeing small with digital cameras
- Math makes tea taste better
- The button_to helper is now part of Rails!
- Where have the IEEE t-shirts gone?
- Good stuff: One-Touch high capacity stapler from Staples
- Taking the unsafe GETs out of Rails
- Google Web Accelerator offers web developers an important opportunity
- Cool stuff: Composable memory transactions
- It's official: I like Ruby
- Writing a simple Ruby evaluator in Haskell
- Source code management with darcs: a first look
- When worlds collide and then dance: Test::LectroTest meets Test::Builder
- Google's no-follow proposal is a double win for the web
2004 11
- Letterpress Christmas cards
- Floss loss: how Amazon screwed up an order for the world's best dental floss
- How do software teams scale?: A snapshot based on switching SCM tools
- 2004 Presidential-election state polling data at a glance
- Fun with Modern Election Methods
- LectroTest: An automatic, specification-based testing tool for Perl
- Open-source statistics: R and ESS
- The Mobile Weather Problem and its solution
- Computing the digits of e
- Concurrent port scanner in Haskell
- My new Radio VCR