<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us"><title>The B-List: Latest entries</title><link href="http://www.b-list.org/feeds/entries/" rel="alternate" /><id>http://www.b-list.org/feeds/entries/</id><updated>2008-12-04T02:14:26Z</updated><author><name>James Bennett</name></author><link rel="self" href="http://feeds.feedburner.com/b-list-entries" type="application/atom+xml" /><entry><title>Generic inlines and Django history</title><link href="http://www.b-list.org/weblog/2008/dec/04/generic-inlines/" rel="alternate" /><updated>2008-12-04T02:14:26Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-12-04:/weblog/2008/dec/04/generic-inlines/</id><summary type="html">
&lt;p&gt;The other day at work I stumbled across my first opportunity to use a relatively-new feature in the Django admin, one which turned what had looked like it would be a fairly nasty task into, basically, a five-minute job (plus staging, testing and deployment, of course, but that happens no matter how long it takes to develop the code). I&amp;#8217;ll get to the specifics in a minute, but first I want to give a ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/dec/04/generic-inlines/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/474446395" height="1" width="1"/&gt;</summary><category term="Django" /><category term="Misc" /><rights>http://www.b-list.org/about/copyright/</rights></entry><entry><title>Another take on content negotiation</title><link href="http://www.b-list.org/weblog/2008/nov/29/multiresponse/" rel="alternate" /><updated>2008-11-29T20:24:39Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-11-29:/weblog/2008/nov/29/multiresponse/</id><summary type="html">
&lt;p&gt;Today my co-worker Daniel posted &lt;a href="http://toastdriven.com/fresh/multiresponse/"&gt;a class which performs content negotiation for Django views&lt;/a&gt;, allowing you to write a single view which returns any of several types of responses (e.g., &lt;acronym title="HyperText Markup Language"&gt;&lt;span class="caps"&gt;HTML&lt;/span&gt;&lt;/acronym&gt;, &lt;acronym title="JavaScript Object Notation"&gt;&lt;span class="caps"&gt;JSON&lt;/span&gt;&lt;/acronym&gt;, &lt;acronym title="eXtensible Markup Language"&gt;&lt;span class="caps"&gt;XML&lt;/span&gt;&lt;/acronym&gt;) according to the incoming &lt;acronym title="HyperText Transfer Protocol"&gt;&lt;span class="caps"&gt;HTTP&lt;/span&gt;&lt;/acronym&gt; &lt;code&gt;Accept&lt;/code&gt; header. While it&amp;#8217;s certainly cool, he notes a couple of issues with it (including the redundancy it introduces in &lt;acronym title="Uniform Resource Locator"&gt;&lt;span class="caps"&gt;URL&lt;/span&gt;&lt;/acronym&gt;&amp;nbsp;configuration).
&lt;/p&gt;
&lt;p&gt;So let&amp;#8217;s see if we can&amp;#8217;t come up with a way ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/nov/29/multiresponse/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/469873803" height="1" width="1"/&gt;</summary><category term="Django" /><category term="Python" /><rights>http://www.b-list.org/about/copyright/</rights></entry><entry><title>Writing custom management commands</title><link href="http://www.b-list.org/weblog/2008/nov/14/management-commands/" rel="alternate" /><updated>2008-11-14T19:35:12Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-11-14:/weblog/2008/nov/14/management-commands/</id><summary type="html">
&lt;p&gt;The other night in the &lt;code&gt;#django-dev&lt;/code&gt; &lt;acronym title="Internet Relay Chat"&gt;&lt;span class="caps"&gt;IRC&lt;/span&gt;&lt;/acronym&gt; channel, &lt;a href="http://cecinestpasun.com/"&gt;Russ&lt;/a&gt;, &lt;a href="http://ericholscher.com/"&gt;Eric&lt;/a&gt; and I were talking about &lt;a href="http://docs.djangoproject.com/en/dev/howto/custom-management-commands/#howto-custom-management-commands"&gt;custom management commands&lt;/a&gt; for certain types of common but tedious tasks; Eric was discussing the possibility of a command for automatically generating a &lt;code&gt;tests&lt;/code&gt; module in a Django application, since he&amp;#8217;s our resident unit-testing freak, and I started toying with the idea of one to generate basic &lt;a href="http://docs.djangoproject.com/en/dev/ref/contrib/admin/"&gt;admin declarations&lt;/a&gt; for the models in an&amp;nbsp;application.
&lt;/p&gt;
&lt;p&gt;So I sat down ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/nov/14/management-commands/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/453566813" height="1" width="1"/&gt;</summary><category term="Django" /><category term="Programming" /><category term="Python" /><rights>http://www.b-list.org/about/copyright/</rights></entry><entry><title>So you want a dynamic form</title><link href="http://www.b-list.org/weblog/2008/nov/09/dynamic-forms/" rel="alternate" /><updated>2008-11-09T03:59:55Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-11-09:/weblog/2008/nov/09/dynamic-forms/</id><summary type="html">
&lt;p&gt;So I havent really been doing much writing lately. That&amp;#8217;s mostly a consequence of the fact&amp;nbsp;that:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
     Django 1.0 was released, and meeting the schedule for that took up an enormous amount of&amp;nbsp;time.
 &lt;/li&gt;
&lt;li&gt;
     After that, there was&amp;nbsp;DjangoCon.
 &lt;/li&gt;
&lt;li&gt;
     Oh, and there are all sorts of things in my life, including a book, a gigantic codebase and dozens of sites, which all need to be updated. Our entire team here in Lawrence has ...&lt;/li&gt;&lt;/ol&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/nov/09/dynamic-forms/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/447279330" height="1" width="1"/&gt;</summary><category term="Django" /><category term="Programming" /><category term="Python" /><rights>http://www.b-list.org/about/copyright/</rights></entry><entry><title>What's next?</title><link href="http://www.b-list.org/weblog/2008/nov/05/obama/" rel="alternate" /><updated>2008-11-05T04:00:19Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-11-05:/weblog/2008/nov/05/obama/</id><summary type="html">
&lt;p&gt;What happened&amp;nbsp;today:
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Each State shall appoint, in such Manner as the Legislature thereof may direct, a Number of Electors, equal to the whole Number of Senators and Representatives to which the State may be entitled in the Congress: but no Senator or Representative, or Person holding an Office of Trust or Profit under the United States, shall be appointed an&amp;nbsp;Elector.
&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;What happens&amp;nbsp;next:
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The Electors shall meet in their respective states, and vote ...&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/nov/05/obama/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/443080663" height="1" width="1"/&gt;</summary><category term="Misc" /><category term="Pedantics" /><rights>http://www.b-list.org/about/copyright/</rights></entry><entry><title>Slides</title><link href="http://www.b-list.org/weblog/2008/sep/07/slides/" rel="alternate" /><updated>2008-09-07T11:41:15Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-09-07:/weblog/2008/sep/07/slides/</id><summary type="html">
&lt;p&gt;I&amp;#8217;m sitting here in Building 40 at Google, waiting for this morning&amp;#8217;s first &lt;a href="http://djangocon.org/"&gt;DjangoCon&lt;/a&gt; keynote to start, and getting ready for the Django technical design panel which comes immediately afterward. Naturally, I&amp;#8217;m taking advantage of the down time (and Google&amp;#8217;s bandwidth) to upload my slides from yesterday&amp;#8217;s talk. If you&amp;#8217;ve seen/read the slides from &lt;a href="/weblog/2008/mar/15/slides/"&gt;the version of this talk I gave at PyCon&lt;/a&gt;, I can tell you that ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/sep/07/slides/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/385908812" height="1" width="1"/&gt;</summary><category term="Django" /><category term="Meta" /><rights>http://www.b-list.org/about/copyright/</rights></entry><entry><title>Database heresies</title><link href="http://www.b-list.org/weblog/2008/aug/04/orm/" rel="alternate" /><updated>2008-08-04T01:40:35Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-08-04:/weblog/2008/aug/04/orm/</id><summary type="html">
&lt;p&gt;While scanning reddit, I saw an article pop up by Jeff Davis &lt;a href="http://people.planetpostgresql.org/jdavis/index.php?/archives/8-Why-DBMSs-are-so-complex.html#extended"&gt;lamenting the way most people interact with databases&lt;/a&gt;, particularly when it comes to &lt;acronym title="Object-Relational Mapper"&gt;&lt;span class="caps"&gt;ORM&lt;/span&gt;&lt;/acronym&gt;s. Jeff seems to be pointing out (and, to an extent, conflating) two&amp;nbsp;issues:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
     At the moment, programming languages and &lt;span class="caps"&gt;SQL&lt;/span&gt; don&amp;#8217;t really mesh all that&amp;nbsp;well.
 &lt;/li&gt;
&lt;li&gt;
     Most people, in Jeff&amp;#8217;s opinion, take the wrong approach to working with a database from their programming language of&amp;nbsp;choice ...&lt;/li&gt;&lt;/ol&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/aug/04/orm/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/355258758" height="1" width="1"/&gt;</summary><category term="Frameworks" /><category term="Pedantics" /><category term="Programming" /><rights>http://www.b-list.org/about/copyright/</rights></entry><entry><title>Let's talk about DVCS</title><link href="http://www.b-list.org/weblog/2008/jul/28/lets-talk-about-dvcs/" rel="alternate" /><updated>2008-07-28T07:03:28Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-07-28:/weblog/2008/jul/28/lets-talk-about-dvcs/</id><summary type="html">
&lt;p&gt;So, a few years ago all the cool kids were switching from &lt;span class="caps"&gt;CVS&lt;/span&gt; to Subversion. These days, all the cool kids are switching from Subversion to some form of distributed version control; git and Mercurial seem to be the ones with the largest market shares. This switch is being accompanied by a simply &lt;em&gt;deafening&lt;/em&gt; amount of hype about &lt;span class="caps"&gt;DVCS&lt;/span&gt; and how it&amp;#8217;s a revolutionary new paradigm and will completely change the way people work ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/jul/28/lets-talk-about-dvcs/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/348345781" height="1" width="1"/&gt;</summary><category term="Misc" /><category term="Programming" /><rights>http://www.b-list.org/about/copyright/</rights></entry><entry><title>Microformats and such</title><link href="http://www.b-list.org/weblog/2008/jun/29/microformats-and-such/" rel="alternate" /><updated>2008-06-29T02:41:41Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-06-29:/weblog/2008/jun/29/microformats-and-such/</id><summary type="html">
&lt;p&gt;I hope you&amp;#8217;ll forgive this brief diversion from my ongoing attempt to distinguish web developers from web designers, but it&amp;#8217;s late, I&amp;#8217;ve had a couple beers and I&amp;#8217;ve been tinkering a bit with some code. Regularly-scheduled programming will return&amp;nbsp;shortly.
&lt;/p&gt;
&lt;p&gt;So. &lt;a href="http://diveintomark.org/archives/2008/06/29/microformats-accessibility"&gt;The microformats people and the accessibility people are at war with each other&lt;/a&gt;, or so it seems (remember to read that article with tongue firmly in cheek). The cause of ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/jun/29/microformats-and-such/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/322455544" height="1" width="1"/&gt;</summary><category term="Accessibility" /><category term="Pedantics" /><category term="Web standards" /><rights>http://www.b-list.org/about/copyright/</rights></entry><entry><title>Designers and developers: FIGHT!</title><link href="http://www.b-list.org/weblog/2008/jun/26/fight/" rel="alternate" /><updated>2008-06-26T14:36:07Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-06-26:/weblog/2008/jun/26/fight/</id><summary type="html">
&lt;p&gt;In a thorough and well-thought-out article published on Tuesday, Andy Rutledge &lt;a href="http://www.andyrutledge.com/the-employable-web-designer.php"&gt;listed what he considers to be the essential skills and knowledge for a web designer&lt;/a&gt;; this list is notable not only for what it includes &amp;#8212; namely, a masterful distillation of just what it is that a web designer should be able to do &amp;#8212; but also for what it explicitly&amp;nbsp;excludes:
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Note also that nowhere in this list do the words &amp;#8220;Photoshop,&amp;#8221; &amp;#8220;Illustrator,&amp;#8221; &amp;#8220;Dreamweaver,&amp;#8221; or ...&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/jun/26/fight/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/320771795" height="1" width="1"/&gt;</summary><rights>http://www.b-list.org/about/copyright/</rights></entry><entry><title>Media and performance</title><link href="http://www.b-list.org/weblog/2008/jun/23/media/" rel="alternate" /><updated>2008-06-23T07:10:49Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-06-23:/weblog/2008/jun/23/media/</id><summary type="html">
&lt;p&gt;Ever since last September when I moved this site off the shared-hosting account which had been handling it from its initial launch, I&amp;#8217;ve been using separate services to handle static files &amp;#8212; &amp;#8220;media&amp;#8221; in common Django parlance &amp;#8212; instead of using the same web server instance, or a separate instance running on the same physical server as the rest of the site. Specifically, I&amp;#8217;m using &lt;a href="http://www.amazon.com/gp/browse.html?node=16427261"&gt;Amazon S3&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;When I first &lt;a href="/weblog/2008/feb/07/media/"&gt;explained this&lt;/a&gt; a few months ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/jun/23/media/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/318077728" height="1" width="1"/&gt;</summary><category term="Django" /><rights>http://www.b-list.org/about/copyright/</rights></entry><entry><title>Things I have learned about XHTML</title><link href="http://www.b-list.org/weblog/2008/jun/21/xhtml/" rel="alternate" /><updated>2008-06-21T19:59:44Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-06-21:/weblog/2008/jun/21/xhtml/</id><summary type="html">
&lt;p&gt;The following are gleaned from the comments to &lt;a href="/weblog/2008/jun/18/html/"&gt;my recent explanation&lt;/a&gt; of why I chose to use &lt;acronym title="HyperText Markup Language"&gt;&lt;span class="caps"&gt;HTML&lt;/span&gt;&lt;/acronym&gt; 4.01 Strict for my redesign, rather than a flavor of &lt;acronym title="eXtensible HyperText Markup Language"&gt;&lt;span class="caps"&gt;XHTML&lt;/span&gt;&lt;/acronym&gt;, an explanation in which I mostly boiled the debate &amp;#8212; for my needs, here on this site &amp;#8212; down to &amp;#8220;&lt;span class="caps"&gt;XHTML&lt;/span&gt; doesn&amp;#8217;t offer me any compelling advantage, and it&amp;#8217;s more complex to do right than most people&amp;nbsp;know/admit&amp;#8221;.
&lt;/p&gt;
&lt;p&gt;Advance warning: yes, this is snarky ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/jun/21/xhtml/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/317166415" height="1" width="1"/&gt;</summary><category term="Pedantics" /><category term="Web standards" /><rights>http://www.b-list.org/about/copyright/</rights></entry><entry><title>Let's talk about documentation</title><link href="http://www.b-list.org/weblog/2008/jun/21/documentation/" rel="alternate" /><updated>2008-06-21T03:18:30Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-06-21:/weblog/2008/jun/21/documentation/</id><summary type="html">
&lt;p&gt;&lt;a href="http://www.reddit.com/r/programming/info/6o8s7/comments/"&gt;One of the most active threads&lt;/a&gt; on reddit&amp;#8217;s programming section right now discusses things people look for when reviewing someone else&amp;#8217;s code; &lt;a href="http://www.noop.nl/2008/04/the-perfect-job.html"&gt;the article being discussed&lt;/a&gt; treats this as a great interview question and points to things like algorithm choices and object-oriented design as good responses. While these are important considerations, I&amp;#8217;ve found I tend to make snap judgments long before I get to that level of analysis, and they&amp;#8217;re almost ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/jun/21/documentation/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/316769711" height="1" width="1"/&gt;</summary><category term="Django" /><category term="Pedantics" /><category term="Programming" /><category term="Python" /><rights>http://www.b-list.org/about/copyright/</rights></entry><entry><title>Fun with queryset-refactor</title><link href="http://www.b-list.org/weblog/2008/jun/19/qsrf/" rel="alternate" /><updated>2008-06-19T22:15:04Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-06-19:/weblog/2008/jun/19/qsrf/</id><summary type="html">
&lt;p&gt;Mixed in with my recent redesign and server move, I&amp;#8217;ve taken the opportunity to update the Django trunk snapshot this site runs on; generally I snapshot a week or two after a big change, once I&amp;#8217;ve had time to see any major bugs shake out and update &lt;a href="/about/colophon/"&gt;the various applications I use&lt;/a&gt;. This time around the recent big change was &lt;a href="http://code.djangoproject.com/wiki/QuerysetRefactorBranch"&gt;the queryset-refactor branch&lt;/a&gt; landing in trunk. Most people have been focusing obsessively on ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/jun/19/qsrf/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/315906617" height="1" width="1"/&gt;</summary><category term="Django" /><rights>http://www.b-list.org/about/copyright/</rights></entry><entry><title>Why HTML</title><link href="http://www.b-list.org/weblog/2008/jun/18/html/" rel="alternate" /><updated>2008-06-18T01:14:02Z</updated><author><name>James Bennett</name><uri>http://www.b-list.org/</uri></author><id>tag:www.b-list.org,2008-06-18:/weblog/2008/jun/18/html/</id><summary type="html">
&lt;p&gt;So, as I let the dust settle from &lt;a href="/weblog/2008/jun/15/minimal/"&gt;the most controversial changes I made in the redesign&lt;/a&gt; (and tweak some things and watch my stats in response to the constructive feedback I&amp;#8217;ve gotten), I&amp;#8217;d like to address the &lt;em&gt;other&lt;/em&gt; big change that people have been asking about: why I switched (switched &lt;em&gt;back&lt;/em&gt;, actually) from &lt;acronym title="eXtensible HyperText Markup Language"&gt;&lt;span class="caps"&gt;XHTML&lt;/span&gt;&lt;/acronym&gt; 1.0 to &lt;acronym title="HyperText Markup Language"&gt;&lt;span class="caps"&gt;HTML&lt;/span&gt;&lt;/acronym&gt;&amp;nbsp;4.01.
&lt;/p&gt;
&lt;p&gt;The short and sweet reason is simply this: &lt;span class="caps"&gt;XHTML&lt;/span&gt; offers no compelling ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.b-list.org/weblog/2008/jun/18/html/"&gt;Read full entry and comments&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/b-list-entries/~4/314394199" height="1" width="1"/&gt;</summary><category term="Meta" /><category term="Pedantics" /><category term="Web standards" /><rights>http://www.b-list.org/about/copyright/</rights></entry></feed>
