<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: david-cramer</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/david-cramer.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2023-09-27T04:34:57+00:00</updated><author><name>Simon Willison</name></author><entry><title>Optimizing for Taste</title><link href="https://simonwillison.net/2023/Sep/27/optimizing-for-taste/#atom-tag" rel="alternate"/><published>2023-09-27T04:34:57+00:00</published><updated>2023-09-27T04:34:57+00:00</updated><id>https://simonwillison.net/2023/Sep/27/optimizing-for-taste/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://cra.mr/optimizing-for-taste"&gt;Optimizing for Taste&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
David Cramer’s detailed explanation as to why his company Sentry mostly avoids A/B testing. David wrote this as an internal blog post originally, but is now sharing it with the world. I found myself nodding along vigorously as I read this—lots of astute observations here.&lt;/p&gt;

&lt;p&gt;I particularly appreciated his closing note: “The strength of making a decision is making it. You can always make a new one later. Choose the obvious path forward, and if you don’t see one, find someone who does.”


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ab-testing"&gt;ab-testing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/david-cramer"&gt;david-cramer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sentry"&gt;sentry&lt;/a&gt;&lt;/p&gt;



</summary><category term="ab-testing"/><category term="david-cramer"/><category term="sentry"/></entry><entry><title>Presenting django-devserver, a better runserver</title><link href="https://simonwillison.net/2010/Feb/10/devserver/#atom-tag" rel="alternate"/><published>2010-02-10T11:33:12+00:00</published><updated>2010-02-10T11:33:12+00:00</updated><id>https://simonwillison.net/2010/Feb/10/devserver/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.davidcramer.net/code/1174/presenting-django-devserver-a-better-runserver.html"&gt;Presenting django-devserver, a better runserver&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I really like this—it’s a Django management command (./manage.py rundevserver) which adds SQL logging and cache access summaries to the console output of Django’s local development server. It solves a similar set of problems to the debug toolbar, but requires slightly less setup and doesn’t inject additional HTML in to your pages. You can add your own custom modules to it as well.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/david-cramer"&gt;david-cramer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/debugging"&gt;debugging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/devserver"&gt;devserver&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/runserver"&gt;runserver&lt;/a&gt;&lt;/p&gt;



</summary><category term="david-cramer"/><category term="debugging"/><category term="devserver"/><category term="django"/><category term="python"/><category term="runserver"/></entry><entry><title>django-db-log</title><link href="https://simonwillison.net/2008/May/13/djangodblog/#atom-tag" rel="alternate"/><published>2008-05-13T08:07:49+00:00</published><updated>2008-05-13T08:07:49+00:00</updated><id>https://simonwillison.net/2008/May/13/djangodblog/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.davidcramer.net/code/126/django-db-log.html"&gt;django-db-log&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Middleware that logs Django exceptions to the database, using a clever scheme based on an MD5 of the traceback text to group duplicate errors in to batches.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/david-cramer"&gt;david-cramer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/djangodblog"&gt;djangodblog&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/exceptions"&gt;exceptions&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/logging"&gt;logging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/middleware"&gt;middleware&lt;/a&gt;&lt;/p&gt;



</summary><category term="david-cramer"/><category term="django"/><category term="djangodblog"/><category term="exceptions"/><category term="logging"/><category term="middleware"/></entry><entry><title>Setup mod_wsgi for Django and Shared Hosting</title><link href="https://simonwillison.net/2008/Mar/26/setup/#atom-tag" rel="alternate"/><published>2008-03-26T14:42:02+00:00</published><updated>2008-03-26T14:42:02+00:00</updated><id>https://simonwillison.net/2008/Mar/26/setup/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.davidcramer.net/code/django/108/setup-mod_wsgi-for-django-and-shared-hosting.html"&gt;Setup mod_wsgi for Django and Shared Hosting&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Tutorial by David Cramer; attached are useful comments from mod_wsgi author Graham Dumpleton.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/david-cramer"&gt;david-cramer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/graham-dumpleton"&gt;graham-dumpleton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hosting"&gt;hosting&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/modwsgi"&gt;modwsgi&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wsgi"&gt;wsgi&lt;/a&gt;&lt;/p&gt;



</summary><category term="david-cramer"/><category term="django"/><category term="graham-dumpleton"/><category term="hosting"/><category term="modwsgi"/><category term="python"/><category term="wsgi"/></entry><entry><title>In-Depth django-sphinx Tutorial</title><link href="https://simonwillison.net/2008/Mar/5/indepth/#atom-tag" rel="alternate"/><published>2008-03-05T00:03:45+00:00</published><updated>2008-03-05T00:03:45+00:00</updated><id>https://simonwillison.net/2008/Mar/5/indepth/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.davidcramer.net/code/79/in-depth-django-sphinx-tutorial.html"&gt;In-Depth django-sphinx Tutorial&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Another neat Django extension from the guys at Curse: easy integration with the sphinx full text search engine.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/curse"&gt;curse&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/david-cramer"&gt;david-cramer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/search"&gt;search&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sphinx-search"&gt;sphinx-search&lt;/a&gt;&lt;/p&gt;



</summary><category term="curse"/><category term="david-cramer"/><category term="django"/><category term="python"/><category term="search"/><category term="sphinx-search"/></entry><entry><title>Caching Layer for Django ORM</title><link href="https://simonwillison.net/2008/Jan/23/caching/#atom-tag" rel="alternate"/><published>2008-01-23T15:18:19+00:00</published><updated>2008-01-23T15:18:19+00:00</updated><id>https://simonwillison.net/2008/Jan/23/caching/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.davidcramer.net/code/73/caching-layer-for-django-orm.html"&gt;Caching Layer for Django ORM&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Interesting extension to Django’s ORM that adds automatic caching of querysets and smart cache invalidation.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/caching"&gt;caching&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/david-cramer"&gt;david-cramer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/orm"&gt;orm&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ormcaching"&gt;ormcaching&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="caching"/><category term="david-cramer"/><category term="django"/><category term="orm"/><category term="ormcaching"/><category term="python"/></entry><entry><title>django-sphinx</title><link href="https://simonwillison.net/2007/Sep/9/djangosphinx/#atom-tag" rel="alternate"/><published>2007-09-09T00:35:19+00:00</published><updated>2007-09-09T00:35:19+00:00</updated><id>https://simonwillison.net/2007/Sep/9/djangosphinx/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/django-sphinx/"&gt;django-sphinx&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
More code from Curse Gaming; this time a really nice API for adding Sphinx full-text search to a Django model.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www.davidcramer.net/code/54/mediawiki-markup-and-sphinxsearch-for-django.html"&gt;David Cramer&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cursegaming"&gt;cursegaming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/david-cramer"&gt;david-cramer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/full-text-search"&gt;full-text-search&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/orm"&gt;orm&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/search"&gt;search&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sphinx-search"&gt;sphinx-search&lt;/a&gt;&lt;/p&gt;



</summary><category term="cursegaming"/><category term="david-cramer"/><category term="django"/><category term="full-text-search"/><category term="orm"/><category term="python"/><category term="search"/><category term="sphinx-search"/></entry><entry><title>wikimarkup</title><link href="https://simonwillison.net/2007/Sep/9/wikimarkup/#atom-tag" rel="alternate"/><published>2007-09-09T00:33:28+00:00</published><updated>2007-09-09T00:33:28+00:00</updated><id>https://simonwillison.net/2007/Sep/9/wikimarkup/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/wikimarkup/"&gt;wikimarkup&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
“MediaWiki markup in Python”. I’ve always suspected that MediaWiki was like Perl; the only thing that can parse MediaWiki is MediaWiki. Not sure how faithful this Python port is but I’d love my theory to be proved wrong.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www.davidcramer.net/code/54/mediawiki-markup-and-sphinxsearch-for-django.html"&gt;David Cramer&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cursegaming"&gt;cursegaming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/david-cramer"&gt;david-cramer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mediawiki"&gt;mediawiki&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/perl"&gt;perl&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wiki"&gt;wiki&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wikimarkup"&gt;wikimarkup&lt;/a&gt;&lt;/p&gt;



</summary><category term="cursegaming"/><category term="david-cramer"/><category term="mediawiki"/><category term="perl"/><category term="python"/><category term="wiki"/><category term="wikimarkup"/></entry></feed>