pet peeve #{random()}

downwards growing, web-readable, activity logs, coupled with infinite scrolling. really cloudera? wtf:


this one should probably be listed as a ux anti-pattern. by default:

  • display the newest log entries at the top of the page
  • insert newer log entries, as they appear, at the top
  • allow the user to select a specific entry, and stay focused on that entry, as newer ones are added
  • propagate these concepts through to the small details

forcing users to scroll to the bottom of an infinite-downwards-scrolling page to see the most recent log entries makes the most common uses for an activity log, the most difficult ones to use

selected recommendations for programmers

this is a (non-comprehensive, non-final, occasionally updated) list of videos, books and essays which influence my programming life. i’ve selected specifically for samples which have stood the test of time – they’re worth going back for.

(if you have suggestions for additions, please comment below)

Beating the averages – Paul Graham

object oriented programming
Self and the power of simplicity – David Ungar, Randal B. Smith, (1991)
Self: The Movie;

software engineering
The Mythical Man-Month — Frederick P. Brooks Jr.
The Cathedral and the Bazaar — Eric Steven Raymond
Clean Code: A Handbook of Agile Software Craftsmanship — Robert C. Martin (pdf)

computer graphics/ui/ux
sketchpad demo – Ivan Sutherland (1963!)

The Design of Everyday Things — Donald A. Norman
Don’t Make Me Think! A Common Sense Approach to Web Usability — Steve Krug

the mother of all demos – Douglas Engelbart (1968!)
computer revolution video – Allan Kay (1997) transcript
Personal Computing: Historic Beginnings – Alan Kay (2008)
Surely You’re Joking, Mr. Feynman! (Adventures of a Curious Character)

Learn Python the Hard Way – Zed Shaw

JavaScript: The Good Parts – Douglas Crockford

The Pragmatic Programmer’s Guide — Dave Thomas, Chad Fowler, Andy Hunt (was Yukihiro Matsumoto, a.k.a. “Matz”, not involved?) (printed on trees version)

C Programming Language (2nd Edition) — K&R (Brian W. Kernighan, Dennis M. Ritchie)

roots of lisp – Paul Graham

The Database as a Value – Rich Hickey

whyfore chat, with django, twisted and websockets?


upon seeing the work i’ve put into writing tutorials, showing how to get realtime chat working in django + twisted/websockets, you might make the assumption that i consider this architecture to be, in general, a good idea.


twisted’s implementation of websockets is, as of this writing, not integrated into the main branch.

don’t use code that isn’t considered, by its authors, to be reliable enough to merge into and release as part of their application distribution.


twisted is an event-driven networking engine
django is a solid, easy to use web framework
websockets, a tcp based protocol, is usually implemented as a strange mix between the tcp and http protocols

it is, generally speaking, not a good idea to mix abstraction levels; adding event-driven components to your application by combining twisted and django is a bad architectural decision. I strongly suggest you consider using twisted.web instead of mixing django and twisted.

websockets are a strange mix of protocols, and can be difficult to work with unless you are very careful with your choice of libraries and application design, scope and implementation. at the time of this post, i would recommend against using websockets, in production, with the standard deployment of twisted. i strongly urge you to consider the following alternatives, in rough order of likelihood to work for you: