<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://www.ericholscher.com</id>
  <title>Eric Holscher - Posted in 2008</title>
  <updated>2026-04-20T04:45:54.152087+00:00</updated>
  <link href="https://www.ericholscher.com"/>
  <link href="https://www.ericholscher.com/blog/archive/2008/atom.xml" rel="self"/>
  <generator uri="https://ablog.readthedocs.io/" version="0.11.12">ABlog</generator>
  <entry>
    <id>https://www.ericholscher.com/blog/2008/dec/31/year-review/</id>
    <title>Year in Review</title>
    <updated>2008-12-31T15:25:24+00:00</updated>
    <content type="html">&lt;section id="year-in-review"&gt;

&lt;p&gt;Well it’s been a crazy roller coaster year for me. So this post is
going to be the typical recap of what’s gone on with my life and my
blog over the past year. I’m really happy with where I’m at both
professionally and personally, and 2008 has been an interesting
year for me.&lt;/p&gt;
&lt;section id="last-semester-and-graduation"&gt;
&lt;h2&gt;Last semester and Graduation&lt;/h2&gt;
&lt;p&gt;It’s kind of surreal to think that at the beginning of this year, I
was still a senior at the
&lt;a class="reference external" href="http://umw.edu"&gt;University of Mary Washington&lt;/a&gt;, living in
Virginia with some of my best friends in an awesome house. My final
semester senior year was a lot of fun, I took very little in the
way of course work. I was employed by
&lt;a class="reference external" href="http://www.caci.com/index2.shtml"&gt;CACI&lt;/a&gt;, which is a defense
contractor at the
&lt;a class="reference external" href="http://www.nswc.navy.mil/"&gt;Naval Surface Warfare Center Dahlgren&lt;/a&gt;.
I was doing Java, Javascript, and a little Perl code for a Navy
portal at the base. It was a really fun job socially, but the
technology (other than Javascript libraries) was pretty dull.&lt;/p&gt;
&lt;p&gt;At school I was finishing up my senior/honors project using Django.
This turned out to have probably been the most important decision
of my college career (hindsight being 20/20). I went to the
&lt;a class="reference external" href="http://ericholscher.com/blog/2008/feb/11/ncur-22/"&gt;National Conference on Undergraduate Research&lt;/a&gt;
to present the ideas from my senior project. This was a really neat
place, and I was exposed to a lot of interesting things other
people were doing.&lt;/p&gt;
&lt;p&gt;We had a really crazy Primary Election season, which included
&lt;a class="reference external" href="http://ericholscher.com/blog/2008/feb/11/bill-clinton/"&gt;Bill Clinton&lt;/a&gt;
talking at my school, which I saw. Obama also later spoke at UMW
(His famous in the rain speech), which i would have died to see.&lt;/p&gt;
&lt;p&gt;I applied for a
&lt;a class="reference external" href="http://ericholscher.com/blog/2008/feb/20/job-hunt/"&gt;couple different jobs&lt;/a&gt;
all over the country after I graduated. I had phone interviews with
Yelp, a Wiki startup, and a couple other places. I interviewed and
was offered a job by &lt;a class="reference external" href="http://zope.com/"&gt;Zope&lt;/a&gt; which randomly is
based in the town I went to college in. I also applied at
&lt;a class="reference external" href="http://www.mediaphormedia.com/"&gt;The World Company&lt;/a&gt;, the
birthplace of Django in the middle of the country, Kansas. I got
offered the Jobs at Zope and the World Company, so I had to choose
which to pick. As I’ve talked about before, I chose Kansas, and it
has all been a blur since. I
&lt;a class="reference external" href="http://ericholscher.com/blog/2008/feb/3/graduate/"&gt;graduated&lt;/a&gt;
from UMW.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="the-epic-journeys"&gt;
&lt;h2&gt;The epic journeys&lt;/h2&gt;
&lt;p&gt;I
&lt;a class="reference external" href="http://ericholscher.com/blog/2008/jun/21/job/"&gt;accepted the job&lt;/a&gt;
right before graduation at the end of April, subsequently quitting
my old job at CACI. I arranged to start in Lawrence on July 1,
giving me all of May and June to enjoy summer. I had some decent
savings and decided to move to Lawrence with no money, and to
travel a bunch before I went.&lt;/p&gt;
&lt;p&gt;Over those 2 months I took a bunch of different trips. I went to
&lt;a class="reference external" href="http://ericholscher.com/blog/2008/jun/2/goodbye-east-coast/"&gt;Boston for a week&lt;/a&gt;,
going to Barcamp Boston, which was the first conference I’d ever
been to. I met some amazing people and got really excited about the
culture that surrounds the profession that I had chosen. I also
just got to tour around MIT and Harvard, met some great people
through friends, and just had a great experience.&lt;/p&gt;
&lt;p&gt;I also went down to North Carolina, and to the
&lt;a class="reference external" href="http://www.outerbanks.org/index.asp"&gt;Outer Banks&lt;/a&gt;. The Outer
Banks are one of my favorite places on earth, and totally recommend
them to anyone. They have some of the best waves on the East Coast,
and a completely relaxed and beautiful beach atmosphere. I really
hit the beach hard because I was moving to KANSAS!&lt;/p&gt;
&lt;p&gt;I went to Maryland to a friends late graduation party, and to visit
family that I don’t see very often, even less often now that I live
in Kansas. I also went all around Virginia, to Nelson County to
visit my friend Josh’s house. Charlottesville to see some music and
visit friends. Virginia Beach (Home) a little bit to go surfing and
visit friends and family. Berryville (where I grew up) to visit old
friends and the rest of my family.&lt;/p&gt;
&lt;p&gt;So at the end of June, I move out of my house, and leave for
Kansas. Great first half of the year.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="lawrence-chronicles"&gt;
&lt;h2&gt;Lawrence Chronicles&lt;/h2&gt;
&lt;p&gt;I was
&lt;a class="reference external" href="http://ericholscher.com/blog/2008/jun/14/lawrence-day-1/"&gt;in love with Lawrence&lt;/a&gt;
on the first day. It’s a great town and I love it to death. I moved
into a &lt;a class="reference external" href="http://www.lawrencecoop.org/uksha/Olive.html"&gt;Co-op&lt;/a&gt; for
July-August so that I could find a place to lease and have an
instant social network. The people I lived with were amazing, and
it turns out that one of my co-workers had lived there while she
was in college!
&lt;a class="reference external" href="http://www.flickr.com/photos/ericholscher/2675719446/"&gt;Cool&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The job at the World Company turned out to be amazing, working with
&lt;a class="reference external" href="http://postneo.com/"&gt;lots&lt;/a&gt; &lt;a class="reference external" href="http://mintchaos.com/"&gt;of&lt;/a&gt;
&lt;a class="reference external" href="http://www.b-list.org/"&gt;brilliant&lt;/a&gt;
&lt;a class="reference external" href="http://playgroundblues.com/"&gt;people&lt;/a&gt;. On my second week on the
job,
&lt;a class="reference external" href="http://ericholscher.com/blog/2008/jul/7/djangocon-2008/"&gt;DjangoCon&lt;/a&gt;
was announced. It’s really neat feeling like you fell right in the
middle of something amazing going on. I had a hunch from afar, but
it turned out to be more true than I could imagine.&lt;/p&gt;
&lt;p&gt;My birthday was on July 9, and right around my Birthday I was added
to Django’s Community Aggregator. This was the first time that my
blog had ever gotten more than 20 hits a day (and all those 10+
were when I sent my resumes around). I started getting people
reading the things I was writing, and actually appreciating what I
was saying. It’s really neat to have a way to talk to people, and
have them be excited and listen to what you say.&lt;/p&gt;
&lt;p&gt;At the end of july, I
&lt;a class="reference external" href="http://ericholscher.com/blog/2008/jul/23/automating-tests-django/"&gt;released&lt;/a&gt;
my first open source project, testmaker. This was met with a great
response from the community. This is where I really started to
appreciate and understand the value of the open source community. I
got great feedback, inspiration from comments, and a great dialogue
around the project. It is tiny compared to some of the things that
people do, but I was floored with the response.&lt;/p&gt;
&lt;p&gt;Djangocon was in September and was more amazing than I could have
anticipated. I gave an incredibly nervous lightning talk (having
broken my demo 5 mins before I went on, and fixed it). I learned so
much, got to meet some amazing people, and had lots of fun. I see
now that I didn’t do a writeup post, which is sad.&lt;/p&gt;
&lt;p&gt;November was
&lt;a class="reference external" href="http://ericholscher.com/blog/2008/nov/30/post-day-review/"&gt;post-a-day month&lt;/a&gt;
that was a lot of work but very rewarding. I did it with a lot of
other people in the community and I think it was a great effort and
it worked out really well.&lt;/p&gt;
&lt;p&gt;December was really laid back. I started a couple more
&lt;a class="reference external" href="http://ericholscher.com/projects/"&gt;projects&lt;/a&gt; which are going to
be getting some love in the new year. I went to Jamaica on
vacation, and went back to Virginia to visit friends and family for
2 weeks.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="wow"&gt;
&lt;h2&gt;Wow&lt;/h2&gt;
&lt;p&gt;A lot of things have happened this year, and I’m grateful for where
I am and what I’m doing. It’s been an amazing ride, and I can only
guess as to how 2009 will be. I’m sure it will be another great
year, and things are only looking up. I want to thank everyone for
reading my blog, and I want to wish everyone a happy new year full
of blessings and insights.&lt;/p&gt;
&lt;p&gt;Happy new year!!&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://www.ericholscher.com/blog/2008/dec/31/year-review/"/>
    <summary>Well it’s been a crazy roller coaster year for me. So this post is
going to be the typical recap of what’s gone on with my life and my
blog over the past year. I’m really happy with where I’m at both
professionally and personally, and 2008 has been an interesting
year for me.</summary>
    <published>2008-12-31T15:25:24+00:00</published>
  </entry>
  <entry>
    <id>https://www.ericholscher.com/blog/2008/dec/3/starting-django-conventions-project/</id>
    <title>Starting a Django Conventions Project and Reference</title>
    <updated>2008-12-03T19:45:39+00:00</updated>
    <content type="html">&lt;section id="starting-a-django-conventions-project-and-reference"&gt;

&lt;p&gt;During the last month I have proposed some conventions for Django,
mostly in the realm of templates. In doing so I have looked around
for other documented places where conventions are mentioned. I
haven’t found a really good reference for Django conventions.
&lt;a class="reference external" href="http://oebfare.com/blog/2008/nov/04/reusable-app-conventions/"&gt;Brian’s post&lt;/a&gt;
was a good example of reusable app conventions, and the
&lt;a class="reference external" href="http://pinaxproject.com/"&gt;Pinax Project&lt;/a&gt; is a great reference
implementation. However, I couldn’t find any simple reference for
regularly used conventions in the Django world.&lt;/p&gt;
&lt;p&gt;I don’t know if this will be useful for people, but I think this
goes along the whole convention/pattern ideal. If we all use a
common naming, syntax, and style in places where they can be
arbitrary, then we gain a lot of value of being able to understand
whats going on in others code. So I have started a project that
hopefully will act as a
&lt;a class="reference external" href="http://ericholscher.com/projects/django-conventions/"&gt;reference for Django Conventions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Currently it is pretty sparse, but I think that having that
document in any form is a great step. I’d love to hear some
feedback, and it needs a lot of work, so feel free to email me or
leave comments here with your additions and criticisms. If this
idea becomes useful, I would be fully in support of including it in
the Django Documentation or something along those lines as well,
but I don’t know how “official” this will really be. For the moment
just consider it my hair brained idea of how things should be done
:) Cheers.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://www.ericholscher.com/blog/2008/dec/3/starting-django-conventions-project/"/>
    <summary>During the last month I have proposed some conventions for Django,
mostly in the realm of templates. In doing so I have looked around
for other documented places where conventions are mentioned. I
haven’t found a really good reference for Django conventions.
Brian’s post
was a good example of reusable app conventions, and the
Pinax Project is a great reference
implementation. However, I couldn’t find any simple reference for
regularly used conventions in the Django world.</summary>
    <published>2008-12-03T19:45:39+00:00</published>
  </entry>
  <entry>
    <id>https://www.ericholscher.com/blog/2008/nov/30/post-day-review/</id>
    <title>Post a day in review</title>
    <updated>2008-11-30T17:29:05+00:00</updated>
    <content type="html">&lt;section id="post-a-day-in-review"&gt;

&lt;p&gt;It’s the end of the Post a day for a month. I did pretty well, but
fell off about 3 weeks in because of work. First some stats.&lt;/p&gt;
&lt;section id="post-stats"&gt;
&lt;h2&gt;Post stats&lt;/h2&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="n"&gt;Post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;published&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;publish__year&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;2008&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;publish__month&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;11&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;Out&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;

&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;cont&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nb"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cont&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nb"&gt;sum&lt;/span&gt;
&lt;span class="n"&gt;Out&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="mi"&gt;18517&lt;/span&gt;

&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nb"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;
&lt;span class="n"&gt;Out&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="mi"&gt;805&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This doesn’t really mean much, because it is simplistic
len(body.split()), but it shows that I have been writing a ton over
the past month. I have also gotten a ton of stuff done. I have
re-written 1 project, started another, and put out some ideas into
the community.&lt;/p&gt;
&lt;p&gt;The above stats basically mean I posted 24 times (counting this
one), averaged 800 words a post (with code examples probably
inflating that)&lt;/p&gt;
&lt;p&gt;I only missed my first day about 3 weeks in, and that was because
of work. I was working non-stop trying to launch our main websites
at work on Django 1.0, and just didn’t have enough time (energy
really) to do anything else. For Thanksgiving I was also up
visiting family in rural Ohio for 4 days, so I didn’t have an
internet connection there, which made posting hard.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="traffic-stats"&gt;
&lt;h2&gt;Traffic stats&lt;/h2&gt;
&lt;figure class="align-center" id="id1"&gt;
&lt;img alt="Analytics stats" src="http://media.ericholscher.com/images/postaday-analytics.jpg" /&gt;
&lt;figcaption&gt;
&lt;p&gt;&lt;span class="caption-text"&gt;Analytics stats&lt;/span&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The day after that big spike I launched my redesign, so there are
probably around 1,000 hits missing from that. I got around 30,000
Page views and 17,000 Unique visitors.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="pros-and-cons-of-post-a-day"&gt;
&lt;h2&gt;Pros and cons of post-a-day&lt;/h2&gt;
&lt;section id="pros"&gt;
&lt;h3&gt;Pros&lt;/h3&gt;
&lt;p&gt;I have certainly enjoyed doing this. It has been a neat personal
challenge, and I think that the quality of my posts hasn’t really
suffered. If anything, it has stayed the same, and I have just been
posting more frequently. I had a couple of “cop out” posts (like
this one), but they never really seemed to be much less popular
than some of the ones I put some time into.&lt;/p&gt;
&lt;p&gt;Having to do a post a day makes you do a lot more! You accomplish
so much because you need something to write about. I think that
this is probably the biggest advantage to doing post a day. You’re
forced to do something interesting each and every day, which is
something that more of us should be doing.&lt;/p&gt;
&lt;p&gt;I also think that it’s interesting what kind of content you end up
writing. I have done a lot more tutorials and things like that. I
have found them to be easy to write, and really valuable for people
to use.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="cons"&gt;
&lt;h3&gt;Cons&lt;/h3&gt;
&lt;p&gt;You write blog posts instead of doing things! I spent a ton of time
writing instead of coding. A lot of my posts took around an hour or
more to write, so that’s a lot of time spent. However, I think that
this is a good thing for the open source community, since the
amount of documentation versus code produced is really unbalanced.&lt;/p&gt;
&lt;p&gt;I really wanted to review some major django reusable apps and write
up howto’s and screencasts for them, but this proved to be really
time consuming. So doing a post a day really limits your drive to
do longer blog posts (because you have to do one again tomorrow!).&lt;/p&gt;
&lt;p&gt;After about 2 weeks I agree with other people, where they say it
turned from being fun into a burden. Not a huge burden, but it was
enough stress (along with all my other real life stuff) that it was
annoying. I missed a bunch of days at the end for this very
reason.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="reflection"&gt;
&lt;h2&gt;Reflection&lt;/h2&gt;
&lt;p&gt;I’m really glad that I did it. I broke down somewhere through, but
I still feel that I accomplished my goal of posting a lot of good
content, and getting shit done. I am so happy that the month is
over, and that Ellington is now running on Django 1.0. My life has
gotten a lot less stressful. I will be taking a lot of time off in
December, so this blog will be a bit more quiet :)&lt;/p&gt;
&lt;p&gt;Going forward, I will try and post at least once a week, and
hopefully some more screencasts and longer form content. I think
that the kind of content that was produced during this shows what’s
hard and what’s not. Simple tutorials are great for things you
know, but doing the research to do a screencast (that doesn’t suck)
or other kind of content like that takes a lot of time!&lt;/p&gt;
&lt;p&gt;Hope everyone enjoyed these posts, and I’ll try and keep up.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://www.ericholscher.com/blog/2008/nov/30/post-day-review/"/>
    <summary>It’s the end of the Post a day for a month. I did pretty well, but
fell off about 3 weeks in because of work. First some stats.</summary>
    <published>2008-11-30T17:29:05+00:00</published>
  </entry>
  <entry>
    <id>https://www.ericholscher.com/blog/2008/nov/27/value-conventions/</id>
    <title>The value of conventions, aka testmaker for template tags.</title>
    <updated>2008-11-27T05:00:00+00:00</updated>
    <content type="html">&lt;section id="the-value-of-conventions-aka-testmaker-for-template-tags"&gt;

&lt;p&gt;A couple
&lt;a class="reference external" href="http://ericholscher.com/blog/2008/nov/20/gentlemans-agreement-django-templates/"&gt;posts ago&lt;/a&gt;,
I talked about how we should have conventions for the names that we
use in Django Template Blocks. Today I will be talking about the
value that is gained from this kind of structure.&lt;/p&gt;
&lt;section id="use-cases"&gt;
&lt;h2&gt;Use Cases&lt;/h2&gt;
&lt;section id="template-tags"&gt;
&lt;h3&gt;Template Tags&lt;/h3&gt;
&lt;p&gt;My use case for Template tags is what started me thinking about
this. Some of you may know that I have created a testmaker
application for Django. This allows you to automatically test your
view code, based on a browser session. Once I got most of the kinks
worked out in this code, I started thinking about what the next
best thing to test would be. I came up with template tags…&lt;/p&gt;
&lt;p&gt;This is where I ran into a problem. With no context associated with
a template tag, there is no way to create a tool which tests
template tags well. At first I simply started out trying to test
the template tags by pulling them out of the template verbatim.&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;load&lt;/span&gt; &lt;span class="n"&gt;blog&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;get_latest_posts&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;blog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;However, when you try and test this, it doesn’t work. That is
because all this code is doing is settings a context variable, and
not outputting anything. You can create tests for trivial template
tags that just output a string, but a lot of template tags set
context variables. So without some kind of convention here, it is
impossible to write a tool that will automatically write a test for
you. That sucks!&lt;/p&gt;
&lt;p&gt;Luckily in Django, the above test is representative of a kind of
convention in django template tags. Most template tags use the
syntax &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;as&lt;/span&gt; &lt;span class="pre"&gt;[context_var]&lt;/span&gt;&lt;/code&gt; to set a variable in the context. So I
went ahead and wrote some code that parses template tags for these
kind of strings.&lt;/p&gt;
&lt;p&gt;This code is valuable for some people, but is worthless if people
use another syntax for defining context variables. This I think is
a really good example of where syntax (or convention) allow you to
do more than you previously could.&lt;/p&gt;
&lt;p&gt;You can take a look at the source code
&lt;a class="reference external" href="http://github.com/ericholscher/django-test-utils/tree/master/test_utils/middleware/testmaker.py#L83"&gt;here&lt;/a&gt;.
It’s still a bit rough, like most of my first releases it is more
of a proof of concept.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="template-blocks"&gt;
&lt;h3&gt;Template Blocks&lt;/h3&gt;
&lt;p&gt;So if we create a convention for Template blocks like I proposed in
my previous post, this gives us some really neat possibilities. We
can now create a base template that “knows” what will be included
in each of it’s sections. So in turn we create a way to provide
skins or themes for Django Sites, that would be portable between
Installations.&lt;/p&gt;
&lt;p&gt;Of course, how far we take these conventions will limit how
portable, powerful, and easy to replicate the designs will be. If
we say that all items in a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;menu&lt;/span&gt;&lt;/code&gt; block have to be
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="pre"&gt;class=menu_item&amp;gt;&lt;/span&gt;&lt;/code&gt;, then we can provide more functionality in
our portable base template. This is a bit too specific though,
because not all menus are lists. However, even with just a simple
structure around your base template, you can create some really
nice portable templates. You can create 1 and 2 column layouts,
simply based on where the menu, content, header, and footer are for
example.&lt;/p&gt;
&lt;p&gt;I think it will be interesting seeing where we can embrace
conventions where possible, for the betterment of all. I think that
having Django Skins would be really neat :). Also, having tests
automagically generated for template tags is a big win. For no
other reason than because it does the boilerplate stuff for you.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="other-places"&gt;
&lt;h3&gt;Other places&lt;/h3&gt;
&lt;p&gt;I think that there are more places where conventions could benefit
us. I think I’m going to create a section in my projects on this
site dedicated to conventions for Django. Hopefully serving as a
reference for other people who are trying to use conventions in
their Django apps.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://www.ericholscher.com/blog/2008/nov/27/value-conventions/"/>
    <summary>A couple
posts ago,
I talked about how we should have conventions for the names that we
use in Django Template Blocks. Today I will be talking about the
value that is gained from this kind of structure.</summary>
    <published>2008-11-27T05:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://www.ericholscher.com/blog/2008/nov/26/testmaker-rewritten-and-improved/</id>
    <title>Testmaker 0.2: Rewritten and improved</title>
    <updated>2008-11-26T20:41:05+00:00</updated>
    <content type="html">&lt;section id="testmaker-0-2-rewritten-and-improved"&gt;

&lt;p&gt;About a week ago, I went ahead and re-wrote
&lt;a class="reference external" href="http://code.google.com/p/django-testmaker/"&gt;testmaker&lt;/a&gt; and moved
it into my
&lt;a class="reference external" href="http://github.com/ericholscher/django-test-utils/tree/master"&gt;django-test-utils&lt;/a&gt;
project on github. The syntax is now a bit different, and the whole
thing is much improved. This is version 0.2. The screencast
from the last release still shows the gist of the project, except
for the changed syntax.&lt;/p&gt;
&lt;p&gt;Also note that my projects have permanent pages for documentation
over at my &lt;a class="reference external" href="http://ericholscher.com/projects/"&gt;projects page&lt;/a&gt;.
This will stay up to date with the most current version of the
software, and basically be a copy of this post for now.&lt;/p&gt;
&lt;section id="id1"&gt;
&lt;h2&gt;Testmaker&lt;/h2&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/home/docs/checkouts/readthedocs.org/user_builds/ericholschercom/checkouts/latest/site/blog/2008/nov/26/testmaker-rewritten-and-improved.rst&lt;/span&gt;, line 21); &lt;em&gt;&lt;a href="#id1"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate implicit target name: “testmaker”.&lt;/p&gt;
&lt;/aside&gt;
&lt;section id="what-is-does"&gt;
&lt;h3&gt;What is does&lt;/h3&gt;
&lt;p&gt;Django testmaker is an application that writes tests for your
Django views for you. You simply run a special development server,
and it records tests for your application into your project for
you. Tests will be in a Unit Test format, and it will create a
separate test for each view that you hit.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="usage"&gt;
&lt;h3&gt;Usage&lt;/h3&gt;
&lt;p&gt;Step 1: Add &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;test_utils&lt;/span&gt;&lt;/code&gt; to your INSTALLED_APPS settings.&lt;/p&gt;
&lt;p&gt;Step 2:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;./&lt;/span&gt;&lt;span class="n"&gt;manage&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;testmaker&lt;/span&gt; &lt;span class="n"&gt;APP&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This will start the development server with testmaker loaded in.
APP must be in installed apps, and it will use Django’s mechanism
for finding it. It should look a little something like this:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;eric@Odin:~/EH$ ./manage.py testmaker mine
Handling app &amp;#39;mine&amp;#39;
Logging tests to /home/eric/Python/EH/mine/tests/mine_testmaker.py
Appending to current log file
Inserting TestMaker logging server...
Validating models...
0 errors found

Django version 1.0.1 final, using settings &amp;#39;EH.settings&amp;#39;
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Then, as you browse around your site it will create unit test files
for you, outputting the context variables and status code for each
view that you visit. The test file used is in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;APP/tests/APP_testmaker.py&lt;/span&gt;&lt;/code&gt;. Once you have your tests written,
you simply have to add them into your &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;__init__.py&lt;/span&gt;&lt;/code&gt;, and then run
your tests.&lt;/p&gt;
&lt;p&gt;Step 3:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;./&lt;/span&gt;&lt;span class="n"&gt;manage&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt; &lt;span class="n"&gt;APP&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;section id="things-to-notice"&gt;
&lt;h3&gt;Things to notice&lt;/h3&gt;
&lt;p&gt;This fixes a lot of complaints that people had about previous
versions of test maker. This allows you to test apps that are
anywhere on your Python Path (and in your INSTALLED_APPS), which
makes life a lot easier. Each view also has it’s own test name,
which is a slugified version of the request path and the time when
you hit it (because I needed something unique :)) You also may
notice that there is rudimentary support for template tags; this
will be explained upon in my
&lt;a class="reference external" href="http://ericholscher.com/blog/2008/nov/27/value-conventions/"&gt;next post&lt;/a&gt;.
However, for now know that it only works for template tags that
don’t set a context variable, or use the format
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;as&lt;/span&gt; &lt;span class="pre"&gt;&amp;lt;context_var&amp;gt;&lt;/span&gt;&lt;/code&gt; to set one.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="improvements-over-0-1"&gt;
&lt;h3&gt;Improvements over 0.1&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Each page request is in its own test, for easier debugging&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It will append tests if your APP_testmaker.py file already
exists.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can now test admin views&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;POST support is improved&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The code is cleaner and more readable&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Git!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="options"&gt;
&lt;h3&gt;Options&lt;/h3&gt;
&lt;section id="f-fixture"&gt;
&lt;h4&gt;-f –fixture&lt;/h4&gt;
&lt;p&gt;If you pass the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-f&lt;/span&gt;&lt;/code&gt; option to testmaker, it will create fixtures
for you. They will be saved in
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;APP/fixtures/APP_fixtures.FORMAT&lt;/span&gt;&lt;/code&gt;. The default format is XML
because I was having problems with JSON.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="format"&gt;
&lt;h4&gt;–format&lt;/h4&gt;
&lt;p&gt;Pass this in with a valid serialization format for Django. Options
are currently json, yaml, or xml.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="addrport"&gt;
&lt;h4&gt;–addrport&lt;/h4&gt;
&lt;p&gt;This allows you to pass in the normal address and post options for
runserver.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="future-improvements"&gt;
&lt;h3&gt;Future improvements&lt;/h3&gt;
&lt;section id="force-app-filtering"&gt;
&lt;h4&gt;Force app filtering&lt;/h4&gt;
&lt;p&gt;I plan on having an option that allows you to restrict the views to
the app that you passed in on the command line. This would inspect
the URLConf for the app, and only output tests matching those URLs.
This would allow you to fine tune your tests so that it is
guaranteed to only test views in the app.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="better-test-naming-scheme"&gt;
&lt;h4&gt;Better test naming scheme&lt;/h4&gt;
&lt;p&gt;The current way of naming tests is a bit hackish, and could be
improved. It works for now, and keeps names unique, so it’s
achieving that goal. Suggestions welcome for a better way to name
things.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="improve-template-tag-testmaker"&gt;
&lt;h4&gt;Improve template tag testmaker&lt;/h4&gt;
&lt;p&gt;It is a total hack at current, but it works. Certainly a first,
rough draft.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://www.ericholscher.com/blog/2008/nov/26/testmaker-rewritten-and-improved/"/>
    <summary>About a week ago, I went ahead and re-wrote
testmaker and moved
it into my
django-test-utils
project on github. The syntax is now a bit different, and the whole
thing is much improved. This is version 0.2. The screencast
from the last release still shows the gist of the project, except
for the changed syntax.</summary>
    <published>2008-11-26T20:41:05+00:00</published>
  </entry>
  <entry>
    <id>https://www.ericholscher.com/blog/2008/nov/22/django-people-v2-now-has-tagging-and-you-can-too/</id>
    <title>Django Aggregator v2 now has tagging, and you should too.</title>
    <updated>2008-11-22T16:09:35+00:00</updated>
    <content type="html">&lt;section id="django-aggregator-v2-now-has-tagging-and-you-should-too"&gt;

&lt;p&gt;I have been doing some more work on my Django Community Aggregator
/ Django People v2 project. A big feature that I want to
incorporate is tagging. I want people to be able to sort data by
tag, among other things. I think that this is a pretty killer
feature.&lt;/p&gt;
&lt;p&gt;This allows someone to say “I want to get all of the data about
&lt;a class="reference external" href="http://ericholscher.com/django/tag/testing/"&gt;testing&lt;/a&gt; or
&lt;a class="reference external" href="http://ericholscher.com/django/tag/debugging/"&gt;debugging&lt;/a&gt; that
the Django community is doing”. However, if nobody is tagging their
posts, then only services that provide tags will be available in
those views. A lot of people are using
&lt;a class="reference external" href="http://django-tagging.googlecode.com/"&gt;django-tagging&lt;/a&gt; on the
backend of their blogs, but they just aren’t exposing that data in
feeds.&lt;/p&gt;
&lt;p&gt;Note: Yes I know the data can’t be edited yet (on the aggregator).
That is because it is a project that is just living on my site for
the moment. Once it gets moved off and the Uber community of Django
gets more off the ground, all of those issues will be solved.&lt;/p&gt;
&lt;p&gt;Luckily, it is really easy to expose your tagging data in your
Django feeds. This assumes you are using Django Tagging, however,
it’s really easy with anything else.&lt;/p&gt;
&lt;p&gt;Say we have our feed class that looks like this.&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;BlogPostsFeed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feed&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;My awesome blog&amp;#39;&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;My awesome blog&amp;quot;&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;link&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;http://mysite.com&amp;quot;&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;published&lt;/span&gt;&lt;span class="p"&gt;()[:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;item_pubdate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;publish&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;That is a pretty basic feed, but much akin to what most people
have. Now lets add some tagging in there! Assuming that you have
the Tag model imported from tagging, you can simply do this:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;item_categories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt;  &lt;span class="n"&gt;Tag&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_for_object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can test to make sure that your feeds are working by using
&lt;a class="reference external" href="http://www.feedparser.org/"&gt;feedparser&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;feedparser&lt;/span&gt;

&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;feedparser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;http://ericholscher.com/feeds/posts/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt;
&lt;span class="n"&gt;Out&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;label&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;scheme&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;term&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;lawrence&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;label&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;scheme&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;term&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;mediaphormedia&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;label&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;scheme&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;term&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;philosophy&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;label&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;scheme&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;term&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;post-a-day&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;label&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;scheme&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;term&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ramblings&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;That’s it! Now everyone go do that to their feeds, so that I can
harvest your tags and make them useful :)&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://www.ericholscher.com/blog/2008/nov/22/django-people-v2-now-has-tagging-and-you-can-too/"/>
    <summary>I have been doing some more work on my Django Community Aggregator
/ Django People v2 project. A big feature that I want to
incorporate is tagging. I want people to be able to sort data by
tag, among other things. I think that this is a pretty killer
feature.</summary>
    <published>2008-11-22T16:09:35+00:00</published>
  </entry>
  <entry>
    <id>https://www.ericholscher.com/blog/2008/nov/21/luck-new-life-lawrence/</id>
    <title>Luck and a New Life in Lawrence</title>
    <updated>2008-11-21T19:58:49+00:00</updated>
    <content type="html">&lt;section id="luck-and-a-new-life-in-lawrence"&gt;

&lt;p&gt;Note: This isn’t a technical post. If you don’t want to be getting
posts like this, you can sign up for just my
&lt;a class="reference external" href="http://feeds.feedburner.com/EricPlanetDjango"&gt;Django feed&lt;/a&gt;. This
is my personal blog, so stuff like this pops up from time to time
:).&lt;/p&gt;
&lt;p&gt;Most people believe in luck. If you believe in luck, presumably the
chance of luck happening is 50/50 on the side of good or bad luck.
Each theoretically has an equal chance of happening, if luck is an
abstract quantity.&lt;/p&gt;
&lt;p&gt;However, a big part of luck is being in the correct position to
embrace it. There are a lot of lucky breaks that people have
encountered that they have said ‘no’ to. Even more where they could
have had an incredibly lucky thing happen but it just wasn’t right.
There are a lot of people who say that they have bad luck, but
perhaps they aren’t setting themselves up to be able to be lucky.&lt;/p&gt;
&lt;p&gt;To take a personal example, I feel incredibly lucky to be where I
am at the moment. There is not a lot of luck involved in it really;
I did a lot to get where I am. First off, I had to do a lot of work
by myself in college. Nobody taught classes in Django or anything
like that. I was incredibly lucky (in the real sense) to have an
adviser and professor who was amazing. He taught a Perl/Python
class, an Ajax class, and lots of other great classes that have
contributed to my knowledge. But if I hadn’t taken those classes
and seized the opportunity to learn about web development, I
wouldn’t be here.&lt;/p&gt;
&lt;p&gt;The next big step was moving to Kansas! From Virginia, by the
ocean, having lots of friends, working in the same town I went to
college in, for a Python shop. That was the offer that I received
after college…Or move to Kansas and work for a Newspaper of all
things! Doing tech at a newspaper, how horrible…But this was no
ordinary newspaper, and this wasn’t Kansas. It was Lawrence, a long
time stronghold for liberals since the Civil war. It was the
newspaper that invented Django, and was one of the first to
integrate the newsroom. A great place to work and a great place to
live.&lt;/p&gt;
&lt;p&gt;Plus I had to be in a place in my life where I could up and move.
Had I had a girlfriend or some other commitment then I probably
would have stayed. There are a million things that could have kept
me from achieving what I know I should. From fear of the unknown,
being a thousand miles away from any family and a beach, to many
other things. But I knew it was the right thing to do, for my
career, and for my personal growth. That was it, and it was
decided, but it certainly wasn’t easy, and a miraculously lucky
event didn’t just fall into my lap. It was brooded over many a
night and weighed against the easy and obvious. Who knows what kind
of Luck I would have had, had I chosen the other path?&lt;/p&gt;
&lt;p&gt;Speaking of moving to Lawrence, it’s amazing how a change in life
(moving, new job, new friends, new everything) sends one’s mind
thinking into the depths of existence. Ever since ending up in
Lawrence without any old friends and lots of time to think, I’ve
been re-evaluating a lot of things in my life, and my mind has been
working overtime.&lt;/p&gt;
&lt;p&gt;Upon dramatic change in life simple assumptions no longer hold
true. I get to choose my entire life all over again. Do I want to
keep the same personality, same type of friends, same type of
lifestyle; or do all of these get changes (for the better, or for
the worse). Who knows, but it will be a hell of a ride trying to
figure it all out. And I’m going to enjoy every second of it,
because that’s all I can do.&lt;/p&gt;
&lt;p&gt;I have a great new group of coworkers that I have been spending a
good amount of time with. Good people, and they have a lot of
similar interests. My co-workers have an amazing depth and breadth
of geek knowledge, while managing to maintain a social ability that
is above par for a lot of geeks. It is quite impressive and says a
lot about the town and people of Lawrence that they are able to
keep such quality programmers employed, inventive, happy, and
productive.&lt;/p&gt;
&lt;p&gt;I think that progressive places have always been the breeding
ground of great ideas. The company that you keep says a lot about
you, and a town with such progressive and forward-thinking ideas
and ideals about the way things should be; allows us to simmer in
the creativity that abounds in many forms.&lt;/p&gt;
&lt;p&gt;I was having a conversation with a new-found friend the other day.
He was talking about the brilliance of the people in Lawrence,
about how you can’t think less of people. A simple example was that
when we were eating he mentioned the server of our food was an
amazing guitarist. In fact, we talked to him about it and
apparently he was playing that night at a venue downtown.&lt;/p&gt;
&lt;p&gt;In most situations and other places that I have lived, I tend to
assume the worse of people. “People tend to suck” is one of my
phrases that I say. Lawrence really gives me an appreciation of the
ability of my common man, and the fact that they are impassioned
and striving for something (anything) is highly inspirational.
Surrounding yourself with people that are passionate about anything
is a great way to develop passion within yourself.&lt;/p&gt;
&lt;p&gt;Is it lucky that I’ve ended up in such a cool place. Or is it
because it is such a cool place that I moved halfway across the
country to live and work here? These are the kinds of things that I
have been pondering as of late…&lt;/p&gt;
&lt;p&gt;Now back to your regularly scheduled geekery.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://www.ericholscher.com/blog/2008/nov/21/luck-new-life-lawrence/"/>
    <summary>Note: This isn’t a technical post. If you don’t want to be getting
posts like this, you can sign up for just my
Django feed. This
is my personal blog, so stuff like this pops up from time to time
:).</summary>
    <published>2008-11-21T19:58:49+00:00</published>
  </entry>
  <entry>
    <id>https://www.ericholscher.com/blog/2008/nov/20/gentlemans-agreement-django-templates/</id>
    <title>Gentlemans agreement on Django templates</title>
    <updated>2008-11-20T20:24:01+00:00</updated>
    <content type="html">&lt;section id="gentlemans-agreement-on-django-templates"&gt;

&lt;p&gt;There are a lot of reusable apps out in the Django Ecosystem. I
wrote a
&lt;a class="reference external" href="http://ericholscher.com/blog/2008/nov/14/should-reusable-apps-have-templates/"&gt;previous post&lt;/a&gt;
about why I think that reusable apps should come with templates.
There is a problem about distributing templates that I want to
address with this post: the problem of Django Template Block
names.&lt;/p&gt;
&lt;p&gt;There are already some unwritten conventions in the community in
regards to block names, and I think that talking about it will
help. I don’t think that we’re going to be able to come up with a
way that everyone will follow, but I think it would be nice if we
could create a way to easily redistribute templates.&lt;/p&gt;
&lt;p&gt;The main reason that I have been thinking about this is because of
&lt;a class="reference external" href="http://pinaxproject.com"&gt;Pinax&lt;/a&gt;, they use some different
template block name than my apps. So in order to use PInax and my
app, I needed to change all of the blocks of my templates! That is
a lot of work that could have been avoided by some
standardization.&lt;/p&gt;
&lt;p&gt;There are a lot of different ways to think about the content of a
page, but I’m going to propose some basic template blocks that most
pages will have, and then talk about some more ‘extended’ blocks
that might be useful.&lt;/p&gt;
&lt;section id="blocks-we-need"&gt;
&lt;h2&gt;Blocks we need.&lt;/h2&gt;
&lt;section id="block-title"&gt;
&lt;h3&gt;{% block title %}&lt;/h3&gt;
&lt;p&gt;This will be the block where you define the title of the page.
Presumably your base.html will define your Site’s name (perhaps
even using the Sites framework) outside of this tag, to be places
on all pages.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="block-extra-head"&gt;
&lt;h3&gt;{% block extra_head %}&lt;/h3&gt;
&lt;p&gt;I think that this is a good one that most people are already using
in some form or another. In your base template you have a set of
things in your &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/code&gt; that every page will have. However, a lot
of other pages need things that they also want to put in the head
of a document, like RSS feeds, Javascript, CSS, and all the other
things that should go in the head. You can and probably will have
other specialized blocks (like title above) that will fill in other
parts of the head too.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="block-body"&gt;
&lt;h3&gt;{% block body %}&lt;/h3&gt;
&lt;p&gt;This tag will be placed around the entire body section of the page.
This allows you to create pages in your app that replace the entire
page, not just the content. This won’t be used a lot, but it’s a
really handy tag to have when you need it. If you haven’t noticed,
I’ve been trying to keep tag names consistent with their html tag
names whenever possible.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="block-menu"&gt;
&lt;h3&gt;{% block menu %}&lt;/h3&gt;
&lt;p&gt;This would be where your menu goes. It would be the site-wide
navigation, and not a per-page type of navigation.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="block-content"&gt;
&lt;h3&gt;{% block content %}&lt;/h3&gt;
&lt;p&gt;This will be the place where you define the content on a page. This
will presumably change on every page. It will not include any site
navigation, headers, footers, or anything else that would belong in
a base template.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="other-possible-blocks"&gt;
&lt;h2&gt;Other possible blocks&lt;/h2&gt;
&lt;section id="block-content-title"&gt;
&lt;h3&gt;{% block content_title %}&lt;/h3&gt;
&lt;p&gt;This would be where the “title” of a content block would be. It
includes the title of a blog. It can also include some kind of
navigation between content, or other things like that. Presumably
something that isn’t the main pages content. I don’t know if this
should go inside the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;content&lt;/span&gt;&lt;/code&gt; tag and have a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;main_content&lt;/span&gt;&lt;/code&gt; as
opposed to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;content&lt;/span&gt;&lt;/code&gt; tag proposed above.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="block-header-block-footer"&gt;
&lt;h3&gt;{% block header %} {% block footer %}&lt;/h3&gt;
&lt;p&gt;Any text area in the header of footer that might change on a
page-by-page basis.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="block-body-id-block-body-class"&gt;
&lt;h3&gt;{% block body_id %} {% block body_class %}&lt;/h3&gt;
&lt;p&gt;This would be used to set the class or id of the body tag in the
document. This is useful to set for styling and other properties.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="block-section-menu-block-page-menu"&gt;
&lt;h3&gt;{% block [section]_menu %} {% block page_menu %}&lt;/h3&gt;
&lt;p&gt;This would be opposed to the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;menu&lt;/span&gt;&lt;/code&gt; block proposed above. It
would be for the section or page.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: Updated back to include _’s. Because I think thats more
pythonic and looks better. The Django Admin isn’t meant to be a
reference implementation of the templates.&lt;/p&gt;
&lt;p&gt;A lot of these ideas have been taken from
&lt;a class="reference external" href="http://playgroundblues.com"&gt;Nathan&lt;/a&gt; and his
&lt;a class="reference external" href="http://code.google.com/p/django-basic-apps/source/browse/trunk/blog/templates/base.html"&gt;base.html&lt;/a&gt;
for basic-blog. I’m sure that he and
&lt;a class="reference external" href="http://mintchaos.com/"&gt;Christian&lt;/a&gt; have put way more thought into
this than I have. I’m just curious what people think, and if
there’s something crazy that I have missed..&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://www.ericholscher.com/blog/2008/nov/20/gentlemans-agreement-django-templates/"/>
    <summary>There are a lot of reusable apps out in the Django Ecosystem. I
wrote a
previous post
about why I think that reusable apps should come with templates.
There is a problem about distributing templates that I want to
address with this post: the problem of Django Template Block
names.</summary>
    <published>2008-11-20T20:24:01+00:00</published>
  </entry>
  <entry>
    <id>https://www.ericholscher.com/blog/2008/nov/17/busy-busy/</id>
    <title>Busy Busy</title>
    <updated>2008-11-17T18:42:55+00:00</updated>
    <content type="html">&lt;section id="busy-busy"&gt;

&lt;p&gt;So at work since I started for
&lt;a class="reference external" href="http://www.mediaphormedia.com/"&gt;Mediaphormedia&lt;/a&gt;, currently World
Online, and the birthplace of Django, I have been tasked with
porting &lt;a class="reference external" href="http://ellingtoncms.com"&gt;Ellington&lt;/a&gt;. Ellington is the
CMS that we create and sell, and is what Django originally was.
Django was pulled out of Ellington and Open Sourced.&lt;/p&gt;
&lt;p&gt;So when I got here, my first job was tasked with porting Ellington.
We have a version running on
&lt;a class="reference external" href="http://code.djangoproject.com/changeset/1290"&gt;Revision 1290&lt;/a&gt; and
.91. Aka, really damn old, pre-magic removal old. We were tasked
with porting this to Django 1.0 (which is around revision 9300).
That is a whole 8000 source code revisions, and 600% more revisions
than the base. That is a whole lot of code.&lt;/p&gt;
&lt;p&gt;So today at work, we are launching our 3 main sites;
&lt;a class="reference external" href="http://ljworld.com"&gt;Ljworld&lt;/a&gt;,
&lt;a class="reference external" href="http://kusports.com"&gt;KU Sports&lt;/a&gt;, and
&lt;a class="reference external" href="http://lawrence.com"&gt;Lawrence.com&lt;/a&gt;. These will be running all on
Django 1.0, which is a monumental task.&lt;/p&gt;
&lt;p&gt;That is the reason today’s post is short. Was bug fixing all day,
and I have to be up at 5am to go in and put out the fires that will
surely happen once users start hitting the site.&lt;/p&gt;
&lt;p&gt;I will have an updated post afterward about the experience.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://www.ericholscher.com/blog/2008/nov/17/busy-busy/"/>
    <summary>So at work since I started for
Mediaphormedia, currently World
Online, and the birthplace of Django, I have been tasked with
porting Ellington. Ellington is the
CMS that we create and sell, and is what Django originally was.
Django was pulled out of Ellington and Open Sourced.</summary>
    <published>2008-11-17T18:42:55+00:00</published>
  </entry>
  <entry>
    <id>https://www.ericholscher.com/blog/2008/nov/16/start-uber-community/</id>
    <title>A start to the uber community</title>
    <updated>2008-11-16T06:34:57+00:00</updated>
    <content type="html">&lt;section id="a-start-to-the-uber-community"&gt;

&lt;p&gt;Well I spent all day Saturday, and all night. Into Sunday morning
hacking on some code. Probably the most productive 24 hours of my
life. I have a couple of announcements, but in the spirit of
post-a-day, I’ll spread them out over a couple days :).&lt;/p&gt;
&lt;p&gt;The big one, is that I basically wrote an entire Django application
last night. You can check it out
&lt;a class="reference external" href="http://ericholscher.com/django/"&gt;over here&lt;/a&gt;. It is basically an
aggregator for the Django Community Feed. I seeded the data with
the people who were on Django’s Community Feed, and then I grabbed
as much of their social networking information as possible.&lt;/p&gt;
&lt;p&gt;All of this code will be shown at some point over the next couple
of days. However, I don’t have the energy to write it up quite yet.
However, please play around with the data, there’s some really neat
possibility in there for something cool…&lt;/p&gt;
&lt;p&gt;At the moment there is..&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;A river of data for every user, all of their services&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A river of data for every user, for each service&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A river of data for each service for all users combined&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A river of data for all services for all users combined&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Atom feeds for all of the above (it says RSS but I lied)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A permalink to every item a user has&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A profile page, listing each users username at each network that
I could find.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Feeds should be updating hourly, but I haven’t tested them. This
model is currently pulling data, and will always have to for some
data. However, I plan to be open for pushing as much of this data
as possible. Most people have tumblelogs on their sites, so it
would be pretty easy for them to push all their data in, with more
metadata than I can apply from outside.&lt;/p&gt;
&lt;p&gt;I’d love to hear some comments, feedback, and ideas for future
directions. With a solid OpenID server and distributed identity, I
think that we could really make something special.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: I also added the ability to combine (only) 2 tags in the
user and everyone views. See
&lt;a class="reference external" href="http://ericholscher.com/django/river/friendfeed+twitter/"&gt;http://ericholscher.com/django/river/friendfeed+twitter/&lt;/a&gt; and
&lt;a class="reference external" href="http://ericholscher.com/django/profile/Eric%20Holscher/friendfeed+twitter/"&gt;http://ericholscher.com/django/profile/Eric%20Holscher/friendfeed+twitter/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PPS&lt;/strong&gt;: If your info isn’t showing up in your page. Add some
rel=”me” links to your profiles on your blog’s homepage. Person
profiles get updated daily.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://www.ericholscher.com/blog/2008/nov/16/start-uber-community/"/>
    <summary>Well I spent all day Saturday, and all night. Into Sunday morning
hacking on some code. Probably the most productive 24 hours of my
life. I have a couple of announcements, but in the spirit of
post-a-day, I’ll spread them out over a couple days :).</summary>
    <published>2008-11-16T06:34:57+00:00</published>
  </entry>
</feed>
