Weblog archive
I’ve been keeping this blog semi-regularly since 2006 and have posted 265 entries in that time. Here they all are, though you might find what you want more easily browsing them by category.
2024
- Introducing DjangoVer — November 18
- Three Django wishes — November 4
- There can’t be only one — August 27
2023
- Know your Python container types — December 24
- Compare strings the right way — December 23
- Set cookies the right way — December 22
- Don’t use Python’s property — December 21
- Use Django’s system checks — December 20
- Show Python deprecation warnings — December 19
- Running async tests in Python — December 18
- Don’t use class methods on Django models — December 17
- Say what you mean in a regex — December 16
- Python packaging: use the “src” — December 15
- Database functions in Django — December 14
- Database views in Django — December 13
- Django’s three types of model inheritance — December 12
- Raise the right exceptions — December 11
- Test your documentation — December 10
- Use unittest’s subtest helper — December 9
- Don’t mock Python’s HTTPX — December 8
- Use “pip install” safely — December 7
- Compile your Python — December 6
- Understanding virtual environments in Python — December 5
- Easy HTTP status codes in Python — December 4
- A Python/Django Advent calendar — December 3
- Bullets of vaguely silvery hue — October 20
2022
- Boring Python: code quality — December 19
- A Python 3.11 “gotcha” — November 8
- Understanding async Python for the web — August 16
- Yes, I have opinions on your open source contributions — July 11
- Boring Python: dependency management — May 13
- For hire — January 24
2020
- Variations on the Death of Python 2 — May 5
- More on service layers in Django — March 23
- Against service layers in Django — March 16
- How I’m testing in 2020 — February 3
- Having some fun with Python — January 20
- A Python Packaging Carol — January 5
2019
- Contributing to classiness (in Django) — March 4
2018
- Truths programmers should know about case — November 26
- Core no more — November 20
- django-registration 3.0 — September 4
- Checking if you’re pwned (with Django) — June 18
- Let’s talk about packages — April 25
- For hire — April 11
- Testing Django applications in 2018 — April 2
- Making mistakes — March 20
- Two new projects — March 6
- On Django’s longevity — February 22
- Let’s talk about usernames — February 11
- On degrees — January 8
2017
- How Python does Unicode — September 5
- Let’s talk about testing Django apps — April 3
2016
- How to break Python — November 28
- On Python 3, again — June 10
- Things and stuff — May 5
2015
- A real Python “wat” — November 15
- Destroy all hiring processes — October 19
- Wat’s up, doc? — October 13
- django-registration updates — September 6
- django-registration — August 13
- A couple quick tips — July 22
- News and such — July 20
2014
- Charity. — March 31
2013
- Extended media thoughts — October 16
- Personafied — September 5
- Catching up — August 26
- Good tools — April 5
2012
- reddit takes a new direction — February 13
2011
- Apropos — November 19
- Napoleon’s battle plan — August 21
- Quo Vadimus? — April 27
2010
- A stateful problem — December 24
- The news done broke — November 2
- django-FUNserver — November 1
- On branching — February 2
2009
- django-registration — October 14
- Let’s talk about WSGI — August 10
- On “magic”, once again — July 23
- When licenses attack — July 14
- In pace requiescat — July 8
- An update on the book — July 7
- A fun little bug — June 26
- Second edition — June 23
- Slicehost is smarter than I am — June 3
- PyCon ORM panel liveblog — March 28
- Slides — March 28
- Django 2.0 — January 18
- Second editions galore — January 9
- Oldest files meme — January 3
2008
- Users and the admin — December 24
- Why I like pip — December 15
- On packaging — December 14
- Let’s talk about Python 3.0 — December 5
- Generic inlines and Django history — December 4
- Another take on content negotiation — November 29
- Writing custom management commands — November 14
- So you want a dynamic form — November 9
- What’s next? — November 5
- Slides — September 7
- Database heresies — August 4
- Let’s talk about DVCS — July 28
- Microformats and such — June 29
- Designers and developers: FIGHT! — June 26
- Media and performance — June 23
- Things I have learned about XHTML — June 21
- Let’s talk about documentation — June 21
- Fun with queryset-refactor — June 19
- Why HTML — June 18
- Minimal — June 15
- Rebooted. — June 13
- Kick me — June 7
- Housekeeping notice — June 7
- django-registration 0.5 — June 5
- Book notes — June 3
- And that’s a wrap. — May 28
- Micro. — April 29
- Minty fresh — April 19
- I don’t normally do memes — April 10
- Batteries sold separately — April 8
- More slides — March 16
- Slides — March 15
- Where to find me at PyCon — March 12
- Advertising and me — March 11
- Victory for the web — March 3
- Dependencies. — March 3
- Managers versus class methods — February 25
- X-UA-8-Ball — February 19
- X-No-Really — February 19
- On “conceptual integrity” — February 11
- Miscellany — February 10
- Media moves — February 7
- X-No-Thanks — January 28
- Legacy. — January 23
- Shared hosting is not a ghetto — January 13
- Web frameworks and web hosts — January 10
2007
- The why and wherefore — December 31
- The future of web standards — December 17
- Speaking and writing — December 12
- Requiring HTTP methods — December 11
- A couple updates — December 9
- The magic of template tags — December 4
- Making magic — December 3
- Clarke’s Third Law — December 3
- Where is Django’s blog application? — November 29
- Keeping up with the Django — November 29
- Performance tips — November 27
- Django sprint — November 26
- Newforms, part 3 — November 25
- User profiles — November 24
- Newforms, part 2 — November 23
- Newforms, part 1 — November 22
- Auth tips and tricks — November 21
- Initial data and install-time code — November 21
- Let’s talk about frameworks (again) — November 19
- My streak ends — November 14
- Instant web sites — November 13
- More on admin documentation — November 12
- comment_utils 0.3 — November 11
- Unicode in the real world — November 10
- Living without projects — November 9
- Moving into production — November 8
- Documentation bookmarklets — November 7
- URLConf tips and tricks — November 6
- “Server startup” and its discontents — November 5
- Working with models, part 2 — November 4
- Working with models, part 1 — November 3
- Handle choices the right way — November 2
- Django tips: template loading and rendering — November 1
- Be careful with your URL patterns — October 14
- Another django-registration update — October 7
- Baseball — October 6
- iPod touch — September 30
- Standalone Django scripts — September 22
- django-registration update — September 19
- Django sprint wrap (for me) — September 16
- Sprinting all the day long — September 15
- Tips and tricks — September 6
- ORM Wars — September 4
- Django, Accelerated — September 4
- Honey, I’m home — September 3
- A quick survey — July 5
- Hacking comments without hacking comments — June 25
- Hypothetical framework choices — June 2
- django-registration update — May 29
- Software Update — May 28
- A tale of two redesigns — April 25
- Django template utilities — April 12
- Quote of the day — April 10
- The types will save us! — April 1
- Reusable Django apps — March 27
- Typo — March 26
- Django snippets — February 25
- PyCon 2007: Web frameworks panel — February 23
- PyCon 2007: the prelude — February 22
- About model subclassing… — February 20
- Python framework design — February 19
- The JavaScript knowledge gap — February 16
- A chronicle of the Ages of the Web — January 24
- Choosing a JavaScript library — January 22
- Let’s talk about JavaScript libraries — January 15
- Be liberal in your HTTP Accept… — January 12
- OpenID delegation under Django and lighttpd — January 8
2006
- Merry Christmas — December 24
- I can’t believe it’s not XML! — December 21
- Sniffle — December 18
- Status update — December 10
- My site is smarter than I am — November 22
- Django tips: get the most out of generic views — November 16
- Comment problems — November 12
- Programming tips: learn optimization strategies — November 5
- Django tips: auto-populated fields — November 2
- Python tips: don’t be too concise — October 28
- That’s not Popper! — October 25
- The Prestige — October 22
- Django and NIH — October 21
- How I got here — October 16
- Heads up — October 11
- The functional language that’s right under your nose — October 11
- Django tips: laying out an application — September 10
- Django tips: documentation and resources — September 4
- Tool Wars — September 3
- Django tips: user registration — September 2
- Friday fun — September 1
- The Rules — August 29
- The best of all worlds — August 29
- A Web 2.0 service idea — August 28
- Let’s talk about accessibility — August 25
- Trying something new — August 20
- A modest proposal — August 19
- Some long-overdue cleaning — August 19
- I’m going to predict this now — August 18
- Django tips: using properties on models and managers — August 18
- Quick note for pydelicious users — August 15
- Let’s talk about frameworks, security edition — August 13
- Django tips: A simple AJAX example, part 2 — August 5
- Django tips: A simple AJAX example, part 1 — July 31
- Apropos of even less — July 25
- Apropos of nothing — July 24
- Helpers, scaffolding, tradeoffs and other stuff — July 17
- Django tips: Hacking FreeComment — July 16
- Independence Day — July 4
- JavaScript, ORM and “hiding SQL” — July 4
- Django tips: scaling an application — July 3
- Django and AJAX — July 2
- Essentialism — June 30
- Django tips: the difference between ‘blank’ and ‘null’ — June 28
- Levels of openness knowledge — June 25
- Let’s talk about Python and Ruby — June 18
- Upgrading to Ubuntu 6.06 — June 16
- Django tips: Template context processors — June 14
- How Django processes a request — June 13
- Let’s talk about frameworks: When frameworks aren’t right — June 10
- Installing the GIMP — June 8
- Django tips: Write better template tags — June 7
- Django tips: extending the User model — June 6
- Templating languages redux — June 5
- Let’s talk about frameworks, DBA edition — June 4
- Let’s talk about frameworks, programmer edition — June 3
- Let’s talk about frameworks, designer edition — May 31
- Let’s talk about frameworks — May 30
- Why templating languages aren’t a bad idea — May 24
- Django, gzip and WSGI — May 21
- The Google Web Toolkit — May 21
- And away we go — May 18