All articles, newest first

  1. Syntactic Sugar
  2. Macros with halos
  3. Entertaining Documentation
  4. iBlame Exchange
  5. Distorted Software
  6. tag.wordaligned.org
  7. Rewriting String.Left()
  8. Me, Myself and OpenID. Setting up a personal OpenID server using phpMyID
  9. Nonce Sense. Cryptography
  10. Fixing header file dependencies. A simple script to check header files are self contained
  11. Running Sums in Python. A Python program to generate the running sum of a series.
  12. Eurovision 2008 charts
  13. Curling for web sites. A script using curl and bash to detect when a website status changes.
  14. Fixing Compiler Warnings the Hard Way. Listen when your compiler grumbles, but sometimes you should ignore its suggestions.
  15. Accidental Emacs. A list of Emacs modes and tricks I use all the time but discovered by accident.
  16. Scatter pictures with Google Charts
  17. Takewhile drops one
  18. Stop the clock, squash the bug. Which is better, a clock which loses a minute a day or one which is stopped? An investigation into how we find and fix software defects.
  19. Hunting down globals with nm
  20. Programming Nirvana, Plan B
  21. Fun with Erlang, ACCU 2008
  22. White black knight then black white knight. Yet more on drawing chessboards
  23. Drawing Chess Positions. A follow-up article on scripting graphics.
  24. Ima Lumberjack, (s)he’s OK. Gender-neutral technical writing using fictional names.
  25. Drawing Chessboards. An article about creating graphics programmatically.
  26. Tracing function calls using Python decorators. Developing code to trace function calls using Python decorators.
  27. Sugar Pie. Approximating pi by scattering sugar.
  28. The Price of Coffee. Offering something for nothing and getting paid nothing for it. Leap day ramblings.
  29. Top Ten Percent. The most efficient way to sort the top 10% of a collection.
  30. Top Ten Tags. Choosing the right algorithm to select the N largest items from a collection.
  31. No www, yes comments, no categories
  32. Lexical Dispatch in Python. Dispatching to functions based on their names
  33. Essential Python Reading List. An essential Python reading list. I've ordered the items so you can pause or stop reading at any point: at every stage you'll have learned about as much possible about Python for the effort you've put in.
  34. Attack of the Alien Asterisks. Unusual font rendering on Windows
  35. From Hash Key to Haskell. A note on keys, characters, smileys, digraphs and Haskell.
  36. Erlang Erlang
  37. Animated pair streams. Another look at the functional programming problem of generating an infinite sequence of pairs. An example of using the Python Imaging Library to generate an animated GIF.
  38. ACCU Conference 2008
  39. File shifting using lftp and rsync. Sometimes it's easier to shift files using the command line, rather than a GUI.
  40. Too big or too clever? Steve Yegge says that, for large applications, size is an enemy best controlled by dynamic languages. Alex Martelli says a language can be too dynamic for a large application. Who's right?
  41. Maybe we live in a scripting universe. Comments on Larry Wall's 11th State of the Onion address.
  42. The Maximum Subsequence Problem. A stream-based solution to a classic computer science problem.
  43. So many feeds, so little news. So many feeds, so little news. A reflection on internet consumption.
  44. Elegance and Efficiency. Must elegant code be efficient? This article investigates.
  45. Not my links
  46. Ever wish you’d branched first? A short article describing how to branch a Subversion working copy based on the development trunk.
  47. Zippy triples served with Python. How do you generate previous, this next, triples from a collection. A stream-based solution in Python.
  48. Paging through the Manual using Access Keys
  49. Anti-Social Build Orders. An article advocating zero-tolerance for anti-social build offences.
  50. Metablog
  51. RTM vs STW
  52. Seeing with a fresh pair of ears
  53. Reversing Hofstadter’s Law
  54. Lock but don’t but
  55. Mistargeted ads
  56. svn help patch
  57. Big City Skyline Puzzle. Comments on a novel computer science puzzle. When machine resources are scarce, a compiled language offers precise control.
  58. Ongoing Peer Review
  59. Paralipsis
  60. Fixed Wheels and Simple Designs
  61. A yen for more symbols
  62. PyCon UK: statistics, pictures and perennial problems
  63. Pitching Python in three syllables
  64. What apple gets right
  65. The Granny—Stroustrup Scale
  66. Koenig’s first rule of debugging. The problems caused by the C++ compilation model, dependencies and cryptic compile diagnostics. If an expert like Andrew Koenig can’t get it right, what hope for the rest of us?
  67. Shameful Names
  68. He Sells Shell Scripts to Intersect Sets. The Unix command shell contains a lot of what I like in a programming environment: it’s dynamic, high-level, interpreted, flexible, succinct. This article shows the Unix tools in action.
  69. Collaborative documentation tools
  70. Space sensitive programming
  71. How green you are
  72. When web search results get read out of context
  73. A world without version control
  74. In, on and out of boxes
  75. Pragmatic fashion
  76. Robot wars
  77. The Third Rule of Program Optimisation
  78. Why Python programmers should learn Python
  79. Source open, problem closed. An example of the open source advantage.
  80. How many restarts?
  81. Evolving Python in and for the real world
  82. Turing Tests and Train Trackers
  83. Feeding an internet addiction
  84. Oberon, Cromarty, Lisa, Waggledance, Ariel
  85. Introducing Java
  86. Perlish Wisdom
  87. Awesome presentations
  88. Google Reader
  89. PyCon UK
  90. The Heroic Programmer
  91. An ideal working environment
  92. The Trouble with Version Numbers
  93. High altitude programming
  94. Python keyword workaround
  95. Charming Python
  96. Why Software Development isn’t Like Construction. What’s the best metaphor for software development? Steve McConnell prefers “construction”. I disagree.
  97. Shells, Logs and Pipes
  98. Drawing Software Designs
  99. Test driven development in Python
  100. Mixing Python and C++
  101. Release then Test
  102. bin2hex.py
  103. Code completion for dynamic languages
  104. Casualties in the great computer shootout. An investigation into various dimensions of some speed benchmark programs.
  105. A tale of two upgrades
  106. One svnserve, multiple repositories
  107. Happy Mac
  108. Retro-fitting coding standards
  109. fold left, right
  110. Code Craft
  111. Narrow Python
  112. Trac — not just a pretty interface
  113. 1, 6, 21, 107, … ?
  114. Martin Fowler on Soft Documentation
  115. Printed C++ Journals
  116. Review of Pete Becker’s TR1 Book
  117. Synchronising Workspaces
  118. Hong Kong Supplementary Character Set
  119. Permission and Forgiveness
  120. Different Angles on Legacy Code
  121. Wiki Markup. Wikis often invent their own markup syntax. A note on why I favour Markdown.
  122. Functional Programming “Aha!” Moments
  123. Spam, Typo, Subversion Logs
  124. Internal Subversion Externals
  125. Lenient Browsers and Wobbly Tables
  126. My First Typo Sidebar
  127. Smart Pointers, Dumb Programmers. A note describing how a smart pointer tripped me up.
  128. The Etch-A-Sketch User Interface
  129. Joined Output and the Fencepost Problem. Items and the spaces between them: some notes on the fencepost problem and joining up strings.
  130. When computer applications reside on the web
  131. Computer Language Complexity
  132. Complacency in the computer industry
  133. The Lazy Builder’s Complexity Lesson. A discussion of algorithmic complexity, and a demonstration of how the C++ standard library allows programmers to write code which is both concise and efficient.
  134. Soft Documentation. A software developer's investigation into documentation tools.
  135. Personal overnight builds
  136. From CVS to Subversion
  137. Pcl-cvs and Psvn Incompatibilities
  138. Sounds of the Tokyo Metro
  139. Subversion 1.4
  140. Look and Say Numbers
  141. Polyominoes
  142. Browsing Python Documentation using the Python Sidebar
  143. From __future__ import braces
  144. Python 2.5
  145. Friday Puzzles
  146. Version Control for Third Party Software
  147. Overload Online
  148. Personal version control
  149. String literals and regular expressions. An article about string literals, escape sequences, regular expressions, and the problems encountered when mixing these together.
  150. There’s no escape??!
  151. Parsing C++
  152. Py2exe
  153. Ignoring .svn directories
  154. Are List Comprehensions the Wrong Way Round?
  155. How to Mirror a Subversion Repository
  156. Message to Self. What’s this?
  157. Octal Literals
  158. A Subversion Pre-Commit Hook. How to install and test a simple Subversion pre-commit hook script.
  159. Creating a Temporary Subversion Repository
  160. Binary Literals
  161. Readable Code
  162. Keyword Substitution - Just say No!
  163. map, filter, accumulate, lambda
  164. Saving changes to read-only files
  165. Google Mail holiday auto-responder
  166. A Python syntax highlighter
  167. Generating solutions to the 8 Queens Puzzle
  168. My (Test) First Ruby Program
  169. Getting started with Typo
  170. Posting from the command line using mtsend
  171. Built in Type Safety?
  172. The case against TODO. A neat label for work in progress or an easy way to disguise the flaws in a codebase?
  173. Metaprogramming is Your Friend. An investigation into metaprogramming techniques used by lazy C, C++, Lisp and Python programmers.
  174. A Mini-Project to Decode a Mini-Language
  175. Code in Comments. Don't comment out dead code, delete it!
  176. Brackets Off! Thoughts on operator precedence.