<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Monty Lounge Blog feed</title><link>http://blog.montylounge.com/</link><description>Monty Lounge Blog posts feed.</description><language>en-us</language><lastBuildDate>Thu, 04 Aug 2011 08:15:59 -0400</lastBuildDate><item><title>In Review of Sass</title><link>http://blog.montylounge.com/2011/08/4/review-sass/</link><description>
&lt;p&gt;
Four months ago I presented "Quickstart to Sass/Less.js CSS" at the Jersey Shore Tech meetup and it's about time to share my thoughts. Although my talk covered both Sass and Less.js today we will only cover Sass as it's the tool I use more often. If you're interested in Less.js I did recently post &lt;a href="http://blog.montylounge.com/2011/07/31/one-thing-about-lessjs/" target="_blank"&gt;one thing about Less.js&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
To learn more about the Sass project go check out the project site &lt;a href="http://sass-lang.com"&gt;Sass-lang.com&lt;/a&gt; and make sure to follow &lt;a href="http://twitter.com/#!/TheSassWay" target="_blank"&gt;TheSassWay&lt;/a&gt; and &lt;a href="http://twitter.com/#!/compass" target="_blank"&gt;Compass&lt;/a&gt; on Twitter to keep up-to-date with Sass and Compass news. We'll dicsuss Compass in a bit.
&lt;/p&gt;
&lt;h3&gt;Overview of Sass&lt;/h3&gt;
&lt;p&gt;
Sass is an extension of CSS, and as its tagline says, it "... makes CSS fun again".
&lt;/p&gt;
&lt;p&gt;
But what does that really mean? It means Sass and provides additional features on top of CSS helping organize your CSS into cleaner, more manageable code and promotes reuse through @mixins, @extends, @includes. Together these help reinforce the &lt;a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself"&gt;DRY&lt;/a&gt; principle. Sass executes these features by compiling your source .scss/.Sass files and producing valid .css files.
&lt;/p&gt;
&lt;h3&gt;Compilation huh what?&lt;/h3&gt;
&lt;p&gt;
The thought of compilation may be foreign to you, and if it is then here's a brief description as to why it needs to happen.
&lt;/p&gt;
&lt;p&gt;
As we discussed, Sass adds extensions to CSS. Something as simple as a variable is not known to CSS. In Sass it's as simple as...
&lt;/p&gt;
&lt;pre class="prettyprint lang-sass"&gt;
//source app.scss file
$button-buy-color: #ff0000;
&lt;/pre&gt;
&lt;p&gt;
Then for all the styles you want to reference `$button-buy-color`. Here's a very basic example:
&lt;/p&gt;
&lt;pre class="prettyprint lang-sass"&gt;
// source app.scss file
#sale button
{
  background-color: $button-buy-color;
}

#special button
{
  background-color: $button-buy-color;
}
&lt;/pre&gt;
&lt;p&gt;
To get the above to render the correct CSS you need to let Sass compile it using the `sass app.scss app.css'. command. The compilation would generate:
&lt;/p&gt;
&lt;pre class="prettyprint lang-css"&gt;
// resulting app.css file
#sale button
{
  background-color: #ff0000;
}

#special button
{
  background-color: #ff0000;
}
&lt;/pre&gt;
&lt;p&gt;
The end result of Sass compiling your .scss file is a .css file. In the above example if we wanted to change the color for all "buy buttons" we would just have to change the value in one location.
&lt;/p&gt;
&lt;p&gt;
Actually, another way to think about compilation — you &lt;i&gt;could&lt;/i&gt; create a valid CSS file, using &lt;b&gt;no&lt;/b&gt; Sass features, but save your file with the .scss extension and it would still be a valid Sass file when compiled. You don't need to use features of Sass in your .scss files for them to compile correctly, but if you're doing that then just create `.css` files.
&lt;/p&gt;
&lt;p&gt;
So, Sass files &lt;b&gt;must&lt;/b&gt; be compiled prior to deployment. You can compile them on your local machine, as part of your build/deploy process, etc. Referencing a .scss file in the &lt;head&gt; of you HTML templates will do you no good. This is incorrect...
&lt;/head&gt;&lt;/p&gt;
&lt;pre class="prettyprint lang-html"&gt;
&amp;lt;link rel="stylesheet" href="/css/whatever.scss" media="screen" /&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
The end the goal we're all aiming for is to produce quality CSS and Sass helps you get there and beyond. It just may take one additional step to get you there... compilation.
&lt;/p&gt;
&lt;h3&gt;Sass Features&lt;/h3&gt;
&lt;p&gt;
What are these killer features? The ones I use most often are &lt;a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#mixins" target="_blank"&gt;mixins&lt;/a&gt;, &lt;a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#functions" target="_blank"&gt;functions&lt;/a&gt;(), &lt;a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#variables_" target="_blank"&gt;variables&lt;/a&gt;, &lt;a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#nested_rules" target="_blank"&gt;nested rules&lt;/a&gt; various &lt;a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#directives" target="_blank"&gt;@-rules and directives&lt;/a&gt;, &lt;a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#referencing_parent_selectors_"&gt;parent selectors&lt;/a&gt; and sometimes &lt;a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#operations" target="_blank"&gt;operations&lt;/a&gt;. We'll discuss some of these in a bit along with some code examples, but before we go any further serving up pints of the Sass Cool Aid let's discuss why you may not want to use Sass, and some of the reasons I initially didn't buy into it.
&lt;/p&gt;
&lt;h3&gt;Why not Sass?&lt;/h3&gt;
&lt;p&gt;
For noobs being introduced to Sass I can easily see why you might think this is an over-engineering for something as simple as CSS. Why add a compilation step to render CSS? This isn't server side code! The argument has some weight, but I'd argue you can't really begin to grasp the utility of these tools until you &lt;a href="http://blog.montylounge.com/2009/07/9/getting-your-hands-dirty/" target="_blank"&gt;get your hands dirty&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
My initial introduction to these CSS extensions was actually &lt;a href="http://sandbox.pocoo.org/clevercss/" target="_blank"&gt;CleverCSS&lt;/a&gt;. This and my curiosity in similar solutions eventually led me over to Sass, which at the time only offered the indented syntax. As a reminder the indented syntax looks like this...
&lt;/p&gt;
&lt;pre class="prettyprint lang-sass"&gt;
@mixin table-base
  th
  text-align: center
  font-weight: bold
  td, th
  padding: 2px
&lt;/pre&gt;
&lt;p&gt;
No semicolons? White-space sensitivity in CSS!? What is this "@mixin" directive? I was immediately turned off. Here's why...
&lt;/p&gt;
&lt;p&gt;
First, Sass's original, unindented syntax was a bit too foreign to me. It's just CSS, why are we breaking convention? If I'm going to use this or my team is going to use this, or a new hire is going to use this, then it should be familiar. The updated "Sassy" syntax resolves this concern.
&lt;/p&gt;
&lt;p&gt;
Next, the idea of a pseudo programming language intertwined with CSS seemed over-engineered. Mixins, variable, control directives, oh my! Such things aren't meant for CSS!  CSS is about style, not programing. Right? Boy was I wrong. These "complexities", as I initially viewed them, are powerful features for making CSS organized, reusable, concise, and in the end... simple.
&lt;/p&gt;
&lt;p&gt;
Then there's the introduction to yet another dependency... Ruby. There's no way around this one. You will need to add it to your stack to compile your Sass source files.
&lt;/p&gt;
&lt;p&gt;
Next, there's the new step/disruption to your existing workflow - compilation. This one is hard to avoid as well. You can't just edit your css file and view the resulting CSS changes locally without compilation. You have to edit the .scss and then compile it. It's not as difficult as it sounds though, and Sass comes with a handy `--watch` option which makes this esentially painless. Again, this is a trade-off I'm willing to make.
&lt;/p&gt;
&lt;p&gt;
Finally, probably the largest obstacle with these CSS extentions is debugging. Sass itself provides a terrific debugger — if there are syntax errors with your .sass/.scss files then Sass will display what file and line raised the exception. This is great. But if your trying to figure out why something isn't displaying in the browser correctly then the features offered by Sass (i.e. mixins, includes, extends, etc) come at the expense of the pre-processing compilation of your Sass source files, and result in a less forgiving debugging process. For example, a style defined on line #32 of one of your .scss files may render on line #153 of a resulting .css file. This one hurts the most.
&lt;/p&gt;
&lt;p&gt;
All of the above and you still think we need Sass? We've gone so long without these features why do we need them now? Let's be honest we all know you don't *need* them.
&lt;/p&gt;
&lt;p&gt;
Nathan Borror, creator of &lt;a href="http://readernaut.com" target="_blank"&gt;Readernaut&lt;/a&gt;, shares some of my same concerns discussed above. His post from 2009, "Sass isn't for me" is a great critique especially for the comments discussion. Some of his issues have been resolved since the post (sassy syntax and whitespace sensitivity, for example). Nathan later posted "Less.js is more", a follow up where he details his Less.js impressions. Sadly both of these posts no longer exist. I followed up with Nathan recently and he no longer uses either much these days. He added, "I really do respect and admire what people are trying to do in this space and it's up to the developer to decide what's right for their situation. I kind of regret the two blog posts because, while I tried to be constructive and spark an intelligent discussion, it ultimately comes down to deciding which tool helps make your product great."
&lt;/p&gt;
&lt;p&gt;
I couldn't agree more with Nathan.
&lt;/p&gt;
&lt;h3&gt;So Why Sass then?&lt;/h3&gt;
&lt;p&gt;
For me, Sass's features provide a more reusable and more easily maintainable code base and therefore the benefits outweight any of the above changes to my process.
&lt;/p&gt;
&lt;p&gt;
My favorites features of Sass is the @mixin, arguably the most powerful feature. It allows the developer to encapsulate display code into reusable components, keeping your code concise, reusable, and easily maintained. Here's a basic example. The below mixin provides base functionality for a standard message UI element on a website.
&lt;/p&gt;
&lt;pre class="prettyprint lang-sass"&gt;
@mixin user_message($bgcolor: #CCC, $color: #FFF, $border: left){
padding: 20px;
background-color: $bgcolor;
border-#{$border}: solid 2px darken($bgcolor, 40%); 
color: $color;
margin-bottom: 10px
}
&lt;/pre&gt;
&lt;p&gt;
The above is a Sass mixin with a bunch of Sass features employed. It uses arguments `($bgcolor: #CCC, $color: #FFF, $border: left)` with default values to allow the developer to specify various properties. If you notice `border-#{$border}:` I'm using interpolation to inject the variable value into the style definition. I'm also using &lt;a href="http://Sass-lang.com/docs/yardoc/Sass/Script/Functions.html#darken-instance_method" target="_blank"&gt;darken()&lt;/a&gt; which is an HSL function to dynamically set the color of the border I specify.
&lt;/p&gt;
&lt;p&gt;
I can then implement the below for 3 various message elements (server error is a bit contrived). Here's my app.scss snippet:
&lt;/p&gt;
&lt;pre class="prettyprint lang-sass"&gt;
@import "message";


// this uses the default arg values

.message{
  @include user_message();
}

//this overrides all the args

.error{
  @include user_message(#F5F5F5, #FF0000, right);
}

// this extends the above error style with some additions
.server-error
{
  @extend .error;
  font-size: 220%;
  border: solid 5px red;
}
&lt;/pre&gt;
&lt;p&gt;
In the above I've used the &lt;a href="http://Sass-lang.com/docs/yardoc/file.Sass_REFERENCE.html#import" target="_blank"&gt;@import&lt;/a&gt; directive, the &lt;a href="http://Sass-lang.com/docs/yardoc/file.Sass_REFERENCE.html#including_a_mixin" target="_blank"&gt;@include&lt;/a&gt; directive, referenced the `user_message` mixin, and the &lt;a href="http://Sass-lang.com/docs/yardoc/file.Sass_REFERENCE.html#extend" target="_blank"&gt;@extend&lt;/a&gt; directive. These are the core methods used in reusing code throughot your project. Read the docs to get more familiar with them, or better yet try them out yourself and break things to learn.
&lt;/p&gt;
&lt;p&gt;
Back to the code. The above results in this after the app.scss is compiled:
&lt;/p&gt;
&lt;pre class="prettyprint lang-css"&gt;
.message {
  padding: 20px;
  background-color: #cccccc;
  border-left: solid 2px #666666;
  color: white;
  margin-bottom: 10px;
}

.error, .server-error {
  padding: 20px;
  background-color: #cccccc;
  border-left: solid 2px #666666;
  color: red;
  margin-bottom: 10px;
}

.server-error {
  font-size: 220%;
  border: solid 5px red;
}
&lt;/pre&gt;
&lt;p&gt;
As you can see my source .scss file is more concise. I've created a reusable message mixin. From there I've reused this mixin on the `.message` and `.error` classes and then again on `.server-error` where I've gone and extended the `.error` class which is reusing the message mixin above. And if I ever want to change the structure or style of all my user message UI elements on my site I just update the user_message @mixin in one place. 
&lt;/p&gt;
&lt;p&gt;
Let's take it a bit further and review the popular rounded corners example by making it reusable and easily maintainable.
&lt;/p&gt;
&lt;p&gt;
Here's what it would take to style a rounded corners class in CSS today:
&lt;/p&gt;
&lt;pre class="prettyprint lang-css"&gt;
.multi-rounded-corners{
  -webkit-border-top-left-radius: 5px;
  -webkit-border-top-right-radius: 5px;
  -webkit-border-bottom-right-radius: 5px;
  -webkit-border-bottom-left-radius: 5px;
  -moz-border-radius-topleft: 5px;
  -moz-border-radius-topright: 5px;
  -moz-border-radius-bottomright: 5px;
  -moz-border-radius-bottomleft: 5px;
  border-top-left-radius: 5px;
  border-top-right-radius: 5px;
  border-bottom-right-radius: 5px;
  border-bottom-left-radius: 5px;
}
&lt;/pre&gt;
&lt;p&gt;
Writing this often becomes redundant and time consuming. &lt;a href="http://simplebits.com/"&gt;Dan Cederholm&lt;/a&gt;, author of &lt;a href="http://books.alistapart.com/products/css3-for-web-designers" target="_blank"&gt;CSS3 for Web Designers&lt;/a&gt; recently &lt;a href="http://twitter.com/#!/simplebits/status/64029376269918208" target="_blank"&gt;tweeted&lt;/a&gt;, "Crafting Sass mixins for oft-used CSS3 stacks. The time-saver of all time-savers. Native variable/mixin suport for CSS4 please thanks.""
&lt;/p&gt;
&lt;p&gt;
I agree! Using Sass we can create one mixin and then reuse this as often as we like. Then, if we need to add a change to support another browser, for example, we just edit this one mixin and the rest of our code is updated as well. Here's the mixin and Sass implementation that also provides arguments for specifying the corner radius values:
&lt;/p&gt;
&lt;pre class="prettyprint lang-sass"&gt;
@mixin multi-rounded-corners($topLeft: 5px, $topRight: 5px, $bottomRight: 5px, $bottomLeft: 5px) {
  -webkit-border-top-left-radius: $topLeft;
  -webkit-border-top-right-radius: $topRight;
  -webkit-border-bottom-right-radius: $bottomRight;
  -webkit-border-bottom-left-radius: $bottomLeft;
  -moz-border-radius-topleft: $topLeft;
  -moz-border-radius-topright: $topRight;
  -moz-border-radius-bottomright: $bottomRight;
  -moz-border-radius-bottomleft: $bottomLeft;
  border-top-left-radius: $topLeft;
  border-top-right-radius: $topRight;
  border-bottom-right-radius: $bottomRight;
  border-bottom-left-radius: $bottomLeft;
}
&lt;/pre&gt;
&lt;p&gt;
Hey, why don't we make our message element have rounded corners as well! To reuse the @multi-rounded-corners in our application's .scss file we just add one line to reference the `multi-rounded-corners()` mixin.
&lt;/p&gt;
&lt;pre class="prettyprint lang-sass"&gt;
@import "message";

.success{
  @include user_message();
  @include multi-rounded-corners();
}
&lt;/pre&gt;
&lt;p&gt;
And whala! We now have a "success" style that reuses both our @user_message and @multi-rounded-corners mixins. Code is now organized. Simpler to read. Simpler to update. Go take that long lunch break.
&lt;/p&gt;
&lt;h3&gt;Learning Sass&lt;/h3&gt;
&lt;p&gt;
The first thing you want to know is how to use this thing. The official &lt;a href="http://Sass-lang.com/tutorial.html" target="_blank"&gt;Sass tutorial&lt;/a&gt; is a great place to start.
&lt;/p&gt;
&lt;p&gt;
If you like screencasts the people over at ThinkVitamin are producing an entire series on the subject. You can watch the first episode &lt;a href="http://membership.thinkvitamin.com/library/html-css/css-frameworks-tutorial/Sass-introduction" target="_blank"&gt;Sass Introduction&lt;/a&gt; for free.
&lt;/p&gt;
&lt;p&gt;
I highly recommend watching the below, &lt;b&gt;terrific&lt;/b&gt; screencast as well, titled &lt;a href="http://blog.nathos.com/kicking-ass-taking-names-with-sass-compass"&gt;Kicking Ass and Taking names with Sass and Compass&lt;/a&gt;. Seriously, make sure you watch this as Nathan created a very well produced screencast with a handful of great examples and code review. We haven't discussed Compass yet, we do briefly below, but I suggest familiarizing yourself with in your next step along the SassWay.
&lt;/p&gt;
&lt;div class="post-img clearfix"&gt;
&lt;iframe style="margin-left: 55px" src="http://player.vimeo.com/video/24278115?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="400" height="225" frameborder="0"&gt;&lt;/iframe&gt;&lt;p&gt;&lt;a href="http://vimeo.com/24278115"&gt;Kicking Ass + Taking Names with Sass &amp; Compass&lt;/a&gt; from &lt;a href="http://vimeo.com/nathos"&gt;Nathan Henderson&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
So there's plenty information out there already if you're looking to learn, and more and more being published each day. Check out &lt;a href="http://www.forrst.com"&gt;Forrst&lt;/a&gt; and &lt;a href="https://github.com/search?langOverride=&amp;amp;q=sass&amp;amp;repo=&amp;amp;start_value=1&amp;amp;type=Repositories"&gt;Github&lt;/a&gt; for more Sass examples.
&lt;/p&gt;
&lt;h3&gt;Is Sass a Framework?&lt;/h3&gt;
&lt;p&gt;
I often hear this question asked. Sass is not a framework. It's an extension of CSS. Sass offers the interface to execute these extensions. &lt;a href="http://compass-style.org" target="_blank"&gt;Compass&lt;/a&gt; is a framework. From their docs... &lt;/p&gt;
&lt;p&gt;
"Compass, at its heart, is a framework upon which Sass-based stylesheet frameworks are built. It provides the tools for building, installing and using reusable stylesheets that provide anything from full-fledged layout frameworks to designs for widgets or even full page designs. All using the power of Sass to keep the semantic meaning of the html pages clear and free of design details."
&lt;/p&gt;
&lt;p&gt; 
For those familiar with Django or Rails, here's a good analogy (via &lt;a href="http://blog.gazit.me/" target="_blank"&gt;Idan Gazit&lt;/a&gt;) between Sass and Compass — "Compass is the Django, Sass is the Python or Compass is the Rails, Sass is the Ruby."
&lt;/p&gt;
&lt;p&gt;
Just like the above, Python and Ruby are the core languages that make Django and Rails frameworks possible. You can write Sass without Compass, but you can't build a Compass extension without Sass. And just like these web frameworks Compass also provides additional utility, conventions, best practices, documentation, community contributed libraries, and is continuously developed and tested (Go fork it on Github now!). For example, take a look at Compass &lt;a href="http://compass-style.org/reference/compass/" target="_blank"&gt;core&lt;/a&gt; for various helpers/utilities. Checkout Compass &lt;a href="http://compass-style.org/reference/blueprint/" target="_blank"&gt;blueprint&lt;/a&gt; for your layout needs. Want some fancy buttons? You can install the &lt;a href="https://github.com/imathis/fancy-buttons" target="_blank"&gt;fancy buttons&lt;/a&gt; Compass plugin the community created, or if you want to get on the responsive design train hook the Less Framework (not Less.js) check out &lt;a href="https://github.com/idangazit/compass-less-plugin" target="_blank"&gt;compass-less-plugin&lt;/a&gt;. There's also Idan Gazit's &lt;a href="https://github.com/idangazit/sinter"&gt;Sinter&lt;/a&gt; for a minimal approach to responsive design for Compass. So you get the idea - the open source community is contributing and building a community of this plugins. 
&lt;/p&gt;
&lt;p&gt;
Diving full into Compass and all its features requires an additional, lengthier discussion (for example a Compass extension can include JS files and Images). Make sure to check it out though because it's extremely powerful.
&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;
The above code snippets are very basic examples but I hope communicate the concepts of how and why you would want to include Sass in your projects. One large project that employs Sass and makes its code freely available is &lt;a href="http://www.sencha.com/products/touch/"&gt;Sencha Touch&lt;/a&gt;. If you want to take a look at how a large, publicy available project integrates Sass then Sencha Touch is a good place to start. In fact, they recently published an advanced Sass implementation &lt;a href="http://www.sencha.com/learn/touch-charts-styling/"&gt;Touch Charts Styling&lt;/a&gt; which makes for a good read just to see how far you can push Sass with a little creativity. If you know of others please drop them in the comments below.
&lt;/p&gt;
&lt;p&gt;
As I mentioned, you don't begin to appreciated the utility of Sass until you use Sass in your projects. The project site and documentation for both Sass and Compass are terrific which lessens the barrier to entry. And although there are some learning curves along the way, once you get passed those little bumps, just like many others have already, you'll find yourself not wanting to look back. 
&lt;/p&gt;
&lt;p&gt;
Before we leave, Sass 3.0 introduced a new command line utility `sass-convert` which makes converting existing CSS to Sass a breeze, even converting some of your existing styles into Sass compliant nested rules where appropriate. Someone also created a web UI to do this over at &lt;a href="http://css2sass.heroku.com/" target="_blank"&gt;CSS 2 Sass&lt;/a&gt;. So what are you waiting for?
&lt;/p&gt;
</description><pubDate>Thu, 04 Aug 2011 08:15:59 -0400</pubDate><guid>http://blog.montylounge.com/2011/08/4/review-sass/</guid></item><item><title>One thing about Less.js</title><link>http://blog.montylounge.com/2011/07/31/one-thing-about-lessjs/</link><description>
&lt;p&gt;
I don't use Less.js on any projects, but I have used it to create prototypes just to familiarize myself with Less.js while I was researching both Sass and Less.js.&lt;/p&gt;
&lt;p&gt;
Node.js isn't in my current development stack, so server side pre-processing of my .less files isn't an option (Node.js is required to pre-process your .less files before deployment). Therefore, I leveraged my favorite feature of Less.js, client side processing, which is actually pretty awesome for one main reason &amp;mdash; you don't have to interrupt your current development workflow with any pre-deploy processing steps.
&lt;/p&gt;
&lt;p&gt;
This addition of a pre-processing step in your workflow isn't a &lt;b&gt;huge&lt;/b&gt; deal to many but for those not looking to add additional requirements to their stack (i.e. Node.js for Less.js or Ruby if you're using Sass) then this is any easy way to start playing around with this popular CSS extension.
&lt;/p&gt;
&lt;p&gt;
So, Less.js processes your `.less` files client side, supporting IE 6+, Webkit, and Firefox, leaving it to the browser to handle the processing. You may love that idea, or you may not. To see what I'm talking about visit the Less.js project site &lt;a href="http://lesscss.org" target="_blank"&gt;lesscss.org&lt;/a&gt; and make sure to view source. 
&lt;/p&gt;
&lt;pre class="prettyprint lang-html"&gt;
&amp;lt;link rel="stylesheet/less" type="text/css" href="less/main.less"&amp;gt;
&amp;lt;script src="less.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
You'll notice a reference to `main.less` using a link tag with a `rel` attribute with the value 'stylesheet/less'. This is then processed by `less.js` on the client side generating valid CSS. That's it. That's the implementation. Pretty darn cool, no?
&lt;/p&gt;
&lt;p&gt;
So if you're not comfortable with any of the server side pre-processing requirements, try using Less.js client-side to familiarize yourself with the features of these CSS pre-processors (mixing, variables, functions, etc).
&lt;/p&gt;
</description><pubDate>Sun, 31 Jul 2011 21:34:47 -0400</pubDate><guid>http://blog.montylounge.com/2011/07/31/one-thing-about-lessjs/</guid></item><item><title>My Django Advent Article</title><link>http://blog.montylounge.com/2010/02/13/my-django-advent-article/</link><description>
&lt;p&gt;I was honored to be invited to post an article for a special series &lt;a href="http://djangoadvent.com/"&gt;Django Advent&lt;/a&gt; created by Rob Hudson and Idan Gazit. The title of my article is &lt;a href="http://djangoadvent.com/1.2/everything-i-hate-about-mingus/"&gt;"Everything I hate about Mingus"&lt;/a&gt; and in it I discuss:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"... obstacles faced and lessons learned managing an application that relies on so many reusable apps, and experiences in managing a small, open source project."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The Django Advent project is only a week old and already has a handful of terrific articles, from various authors, covering the new features in Django 1.2 which is the next stable release expected to ship in early March. &lt;/p&gt;
&lt;p&gt;Django Advent also features one non-1.2 related article every Friday (which is how I snuck in). There are more than 10 articles left in the queue, with more being added I believe. Make sure to &lt;a href="http://djangoadvent.com/feed/"&gt;check it out&lt;/a&gt; and subscribe to the - &lt;a href="http://djangoadvent.com/feed/"&gt;Django Advent RSS feed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thanks Rob and Idan for inviting me. It was a pleasure.&lt;/p&gt;</description><pubDate>Sat, 13 Feb 2010 11:11:05 -0400</pubDate><guid>http://blog.montylounge.com/2010/02/13/my-django-advent-article/</guid></item><item><title>Integrating mongoDB and Django</title><link>http://blog.montylounge.com/2010/02/11/integrating-mongodb-and-django/</link><description>
&lt;p&gt;After listening to Mike Dirolf talk about mongoDB at a recent Django-NYC meetup I was left wanting to learn more about mongoDB and how I could integrate it into my Django projects.&lt;/p&gt;
&lt;h3&gt;Overview&lt;/h3&gt;
&lt;p&gt;This screencast will quickly review places to learn more about mongoDB, and a few available Python APIs for working with mongoDB, particularly &lt;a href="http://hmarr.com/mongoengine/"&gt;mongoengine&lt;/a&gt;. It also discuss a project that shows us how to leverage all the great things about Django and also integrate a NOSQL database into the mix.&lt;/p&gt;
&lt;p&gt;I stumbled onto the mongoEngine project about a month ago and have been meaning to post this screencast since then. What I like most about mongoEngine is that the classes structure looks and feels a lot like Django's models. I also really like its query API which also looks and feels a lot like Django's QuerySet API. &lt;/p&gt;
&lt;p&gt;Finally, I take a look at a Django powered tumblog project that uses mongoDB in the backend. This particular project leverages a custom authentication backend for handling application authentication, Django forms, Django views, templates, urls, etc. Essentially it uses everything but the ORM.&lt;/p&gt;
&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; an extremely detailed tutorial -- my goal is to open up the discussion around a topic I'm not very unfamiliar with myself (NOSQL databases). What you see in the screencast is the result of about one hour of playing around with the various projects I discuss. &lt;/p&gt;
&lt;p&gt;What brought it all together for me was finding a project that integrates both mongoDB and Django. I found that in &lt;a href="http://github.com/hmarr/django-mumblr"&gt;Django-Mumblr&lt;/a&gt;, which I discuss in the screencast.&lt;/p&gt;
&lt;p&gt;One thing I didn't mention in the screencast is the Django authentication support built into mongoEngine. I had planned to review it, but because of the length of the video I decided to leave it out. So, make sure to check that out if you're interested in integrating Django and mongoDB.&lt;/p&gt;
&lt;p&gt;I've included the video below, but it's much better viewed full-screen or over at the blip.tv -- &lt;a href="http://blip.tv/file/3203765"&gt;check it out&lt;/a&gt;. And special thanks to Harry Marr for both the mongoEngine and Django-Mumblr projects.&lt;/p&gt;
&lt;p&gt;Links referenced in the screencast:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.djangonyc.org/"&gt;Django-NYC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://twitter.com/mdirolf"&gt;Mike Dirolf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://hmarr.com/2010/jan/19/making-virtualenv-play-nice-with-git/"&gt;Making Virtualenv Play Nice with Git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://hmarr.com/2010/feb/04/introducing-mongoengine/"&gt;Introducing MongoEngine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://hmarr.com/mongoengine/"&gt;MongoEngine Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://github.com/hmarr/django-mumblr"&gt;Django-Mumblr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://github.com/hmarr/mongoengine"&gt;MongoEngine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Python+Language+Center"&gt;PyMongo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bitbucket.org/namlook/mongokit/wiki/Home"&gt;MongoKit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;embed src="http://blip.tv/play/AYHE3igA" type="application/x-shockwave-flash" width="560" height="345" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;
&lt;/p&gt;</description><pubDate>Thu, 11 Feb 2010 12:21:26 -0400</pubDate><guid>http://blog.montylounge.com/2010/02/11/integrating-mongodb-and-django/</guid></item><item><title>Eleven Django blog engines you should know</title><link>http://blog.montylounge.com/2010/02/10/eleven-django-blog-engines-you-should-know/</link><description>
&lt;p&gt;About two years ago &lt;a href="http://michaeltrier.com/"&gt;Michael Trier&lt;/a&gt; blogged "Where's the Django Blog?". &lt;a href="http://b-list.org"&gt;James Bennett&lt;/a&gt; later followed up with &lt;a href="http://www.b-list.org/weblog/2007/nov/29/django-blog/"&gt;Where is the Django Blog Application&lt;/a&gt; in which he discusess why there is no "definitive" Django blog engine. More recently &lt;a href="http://pydanny.blogspot.com/"&gt;Daniel Greenfeld&lt;/a&gt; asked &lt;a href="http://pydanny.blogspot.com/2009/04/show-me-your-open-source-django-blog.html"&gt;Show me your open source Django blog&lt;/a&gt; in which he defines various requirements needed for a project. Ever since reading that post I've been meaning to write &lt;em&gt;this&lt;/em&gt; post. &lt;/p&gt;
&lt;p&gt;Below are a few blog engines I selected that I believe you should be aware of, sorted by most recently updated. If the author provided a description I used that. If not, I summarized what I know about the project. If you have your own blog engine we should be aware of, please post the name and url in the comments.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://byteflow.su/"&gt;Byteflow&lt;/a&gt; is not included because the project site is down at the time of this post.&lt;/p&gt;
&lt;h3&gt;Biblion&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Tagline:&lt;/em&gt; The eldarion.com blog app intended to be suitable for site-level company and project blogs.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://github.com/eldarion/biblion"&gt;http://github.com/eldarion/biblion&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Last updated&lt;/em&gt;: Feb 9, 2010&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Live example:&lt;/em&gt;&lt;a href="http://eldarion.com/blog/"&gt;http://eldarion.com/blog/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description&lt;/em&gt;: Biblion was the eldarion.com blog which we've extracted and open sourced. It is currently positioned as being used for site/project blogs such as eldarion.com and pinaxproject.com. We intend for this app to replace the internal Pinax blog app once we've made it feature complete.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notable features:&lt;/em&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;support for multiple channels (e.g. technical vs business)&lt;/li&gt;
&lt;li&gt;use of Creole as markup format&lt;/li&gt;
&lt;li&gt;Atom feeds&lt;/li&gt;
&lt;li&gt;previewing of blog posts before publishing&lt;/li&gt;
&lt;li&gt;optional ability to announce new posts on twitter&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Django-article&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Tagline:&lt;/em&gt; Sophisticated blogging engine for Django-powered sites.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://bitbucket.org/codekoala/django-articles/"&gt;http://bitbucket.org/codekoala/django-articles/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Last updated&lt;/em&gt;: February 08, 2010 &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Live example:&lt;/em&gt;&lt;a href="http://codekoala.com"&gt;codekoala.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description&lt;/em&gt;: Author Josh VanderLinden. Sophisticated blogging engine for Django-powered sites.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notable features:&lt;/em&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tags for articles, with a tag cloud template tag&lt;/li&gt;
&lt;li&gt;Auto-completion for tags in the Django admin&lt;/li&gt;
&lt;li&gt;Ability to post in the future&lt;/li&gt;
&lt;li&gt;Article expiration facilities&lt;/li&gt;
&lt;li&gt;Allows articles to be written in plain text/HTML or using Markdown, ReStructured Text, or Textile markup&lt;/li&gt;
&lt;li&gt;Related articles&lt;/li&gt;
&lt;li&gt;Follow-up articles&lt;/li&gt;
&lt;li&gt;Disqus comments&lt;/li&gt;
&lt;li&gt;Article archive, with pagination&lt;/li&gt;
&lt;li&gt;Internationalization-ready&lt;/li&gt;
&lt;li&gt;Detects links in articles and creates a per-article index for you&lt;/li&gt;
&lt;li&gt;Word count&lt;/li&gt;
&lt;li&gt;RSS feeds for the latest articles&lt;/li&gt;
&lt;li&gt;RSS feeds for the latest articles by tag&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Flother&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Tagline:&lt;/em&gt; The Python- and Django-based code for the website running &lt;a href="http://flother.com"&gt;flother.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://github.com/flother/flother"&gt;http://github.com/flother/flother&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Last updated&lt;/em&gt;: February 01, 2010&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Live example:&lt;/em&gt;&lt;a href="http://www.flother.com/blog/"&gt;http://www.flother.com/blog/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description&lt;/em&gt;: Flother is the personal web site for Matt Riggott.  It's been through many
iterations but now it runs on Python 2.5 and Django 1.1 and is in active
development.  This is the complete source code, released under the GPL v3.0.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notable features:&lt;/em&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;six main apps within the project&lt;/li&gt;
&lt;li&gt;Akismet-moderated comments&lt;/li&gt;
&lt;li&gt;Entries are formatted using Markdown and can be public, private, or draft.&lt;/li&gt;
&lt;li&gt;Draft entries can be previewed on the site by admin users.&lt;/li&gt;
&lt;li&gt;photos and places apps ( currently in active development and will see a full geocoded photo library with an option to import from Flickr.)&lt;/li&gt;
&lt;li&gt;Thumbnails of images are created and displayed in the admin. A Javascript-based interface for using files in blog entries is provided&lt;/li&gt;
&lt;li&gt;Google's AJAX API is used (server-side) to perform a site-wide search and return results on the site itself.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Basic-Blog&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Tagline:&lt;/em&gt; Simple prebuilt applications. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://github.com/nathanborror/django-basic-apps"&gt;http://github.com/nathanborror/django-basic-apps&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Last updated&lt;/em&gt;: February 01, 2010&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Live example:&lt;/em&gt; &lt;a href="http://nathanborror.com/"&gt;http://nathanborror.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description&lt;/em&gt;: A terrific example of a basic blog engine. The basic-apps project is a great demonstration in creating reusable apps. When taking into consideration the larger "basic-apps" project there are even more features available that integrate with the basic-blog app. Django-Mingus uses the basic-blog, basic-media, and basic-inlines apps for its core blogging engine.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notable features:&lt;/em&gt; This app provides posts, categories, tags, comments, markdown support, and a basic template system.&lt;/p&gt;
&lt;h3&gt;Hello-Newman&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Tagline:&lt;/em&gt; na.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://github.com/gregnewman/hello-newman"&gt;http://github.com/gregnewman/hello-newman&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Last updated&lt;/em&gt;: January 24, 2010&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Live example:&lt;/em&gt; &lt;a href="http://gregnewman.org/"&gt;http://gregnewman.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description&lt;/em&gt;: My segregated blog platform that replaced 20seven.org under the new domain gregnewman.org. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notable features:&lt;/em&gt; Since there isn't a list to pull from, here's what I pulled from a quick review of Newman's site and the code - entries, categories, "distractions", hit tracking, and a concept of "journals".&lt;/p&gt;
&lt;h3&gt;Banjo&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Tagline:&lt;/em&gt; Banjo is a blogging application with bells and whistles, written using the Django framework.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://getbanjo.com/"&gt;http://getbanjo.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Last updated&lt;/em&gt;: January 2010&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Live example:&lt;/em&gt; &lt;a href="http://getbanjo.com/blog/"&gt;getbanjo.com/blog/&lt;/a&gt; ... I assume.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description&lt;/em&gt;: Banjo is suitable for any blog, but is most appropriate for people who wish to integrate a blog into an existing Django application, such as a Satchmo store or a forum.&lt;/p&gt;
&lt;p&gt;We have released Banjo as an open-source application with extremely liberal "BSD" licensing. So you can use it for business or personal sites with no concerns.""&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notable features:&lt;/em&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multiblog capable from the start. &lt;/li&gt;
&lt;li&gt;Skinning is built in. &lt;/li&gt;
&lt;li&gt;Trackback and Pingback are supported. &lt;/li&gt;
&lt;li&gt;Posting via XML-RPC.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;djangotechblog&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Tagline:&lt;/em&gt; A blogging engine for django, with techies in mind.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://code.google.com/p/djangotechblog/"&gt;http://code.google.com/p/djangotechblog/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Last updated&lt;/em&gt;: Dec 21, 2009&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Live example:&lt;/em&gt; &lt;a href="http://www.willmcgugan.com/"&gt;http://www.willmcgugan.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description&lt;/em&gt;: A versatile blogging engine aimed at coders. Author Will McGugan.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notable features:&lt;/em&gt;  Read &lt;a href="http://www.willmcgugan.com/tag/techblog/"&gt;Lowdown on Django-Techblog&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Django-YABA&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Tagline:&lt;/em&gt; Yet Another Blog Application.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://github.com/f4nt/django-yaba/"&gt;http://github.com/f4nt/django-yaba/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Last updated&lt;/em&gt;: November 03, 2009&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Live example:&lt;/em&gt; &lt;a href="http://www.f4ntasmic.com"&gt;http://www.f4ntasmic.com&lt;/a&gt; - this is now a blogspot blog. You should read the author's post &lt;a href="http://www.f4ntasmic.com/2010/01/more-changes.html"&gt;More Changes&lt;/a&gt; which details some updates regarding the YABA project.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description&lt;/em&gt;: From the author, " I wanted something 
a bit more flexible though, so I decided to build it with the idea of being able to plug it anywhere with minimal 
configuration. I'm going to leverage YAML ( http://www.yaml.de/en/ ) for the theme of the blog, so that you can have a 
fairly pretty blog out of the box within minutes. Anyways, let me know if you have any questions."&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notable features:&lt;/em&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dynamic Themes&lt;/li&gt;
&lt;li&gt;WYSIWG Editor&lt;/li&gt;
&lt;li&gt;Blog Posts&lt;/li&gt;
&lt;li&gt;RSS Feed&lt;/li&gt;
&lt;li&gt;BlogRoll&lt;/li&gt;
&lt;li&gt;Articles&lt;/li&gt;
&lt;li&gt;Comments&lt;/li&gt;
&lt;li&gt;Social Media&lt;/li&gt;
&lt;li&gt;Search&lt;/li&gt;
&lt;li&gt;Galleries&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Shifting Bits&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Tagline:&lt;/em&gt; A Django Based Blog.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://github.com/paltman/shiftingbits/"&gt;http://github.com/paltman/shiftingbits/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Last updated&lt;/em&gt;:November 01, 2009&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Live example:&lt;/em&gt; &lt;a href="http://paltman.com/"&gt;http://paltman.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description&lt;/em&gt;: Read: &lt;a href="http://paltman.com/2008/sep/08/shifting-bits-another-django-blog-engine/"&gt;Shifting Bits - Another Blog Engine&lt;/a&gt; and &lt;a href="http://paltman.com/2008/oct/13/shifting-bits-makes-progress/"&gt;Sifting Bits Makes Progress&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notable features:&lt;/em&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Basic blog post mode driven using generic date based views with redirects so that the WordPress url date format (numbered month versus the prettier and django default of short month name) get mapped properly so that none of your links break.&lt;/li&gt;
&lt;li&gt;WordPress to Django Migration Script&lt;/li&gt;
&lt;li&gt;Tagging via django-tagging&lt;/li&gt;
&lt;li&gt;Comments via the new django.contrib.comments and using the live markdown preview editor, wmd.&lt;/li&gt;
&lt;li&gt;Full RSS feeds (both latest feeds and by tag)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Mighty Lemon&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Tagline:&lt;/em&gt; A Django blog. Formerly Oebfare by brosner.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://github.com/mightylemon/mightylemon"&gt;http://github.com/mightylemon/mightylemon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Last updated&lt;/em&gt;: April 20,2009&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Live example:&lt;/em&gt; &lt;a href="http://www.willmcgugan.com/"&gt;http://www.willmcgugan.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description&lt;/em&gt;: &lt;strike&gt;oebfare&lt;/strike&gt;Mighty Lemon is the source code that runs the blog at &lt;strike&gt;http://oebfare.com&lt;/strike&gt;&lt;a href="http://justinlilly.com"&gt;justinlilly.com&lt;/a&gt;(?). The code
is freely available for you to use however you want.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notable features:&lt;/em&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;markdown support&lt;/li&gt;
&lt;li&gt;pygments (code highlighting)&lt;/li&gt;
&lt;li&gt;django-comment-utils (commenting)&lt;/li&gt;
&lt;li&gt;django-tagging (tagging)&lt;/li&gt;
&lt;li&gt;django-mailer (mailing)&lt;/li&gt;
&lt;li&gt;django-gravatar (gravatars for comments)&lt;/li&gt;
&lt;li&gt;django-elsewhere (social networks)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Coltrane&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Tagline:&lt;/em&gt; Coltrane.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://code.google.com/p/coltrane-blog/"&gt;http://code.google.com/p/coltrane-blog/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Last updated&lt;/em&gt;: Oct 12, 2008&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Live example:&lt;/em&gt; &lt;a href="http://b-list.org"&gt;b-list.org&lt;/a&gt; ... I may be wrong.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description&lt;/em&gt;:  This is the project referenced throughout the excellent &lt;a href="http://readernaut.com/books/1590599969/"&gt;Practical Django Projects&lt;/a&gt;. James Bennett is the author of both the book and the blog engine.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notable features:&lt;/em&gt; Since there isn't a list to pull from, here's what I pulled from a quick review of the code - posts, tagging, categories, and comments.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;So when asking "where is the Django blog engine" today, there are a few choices available to you. Will there ever be a "defacto" Django blog engine? I don't think so. Is there room for one? I do think so, but it would take an collective effort to create it, and support it. What the team is doing with &lt;a href="http://www.django-cms.org/"&gt;Django-CMS&lt;/a&gt; is the level of effort that is needed. And that's a lot of work. As the author of &lt;a href="http://github.com/montylounge/django-mingus"&gt;Mingus&lt;/a&gt; (make sure to check out the &lt;a href="http://github.com/montylounge/django-mingus/blob/master/AUTHORS"&gt;contributors&lt;/a&gt;) I enjoy hacking on it. But Mingus is and always be a concept project; a hobby.&lt;/p&gt;
&lt;p&gt;So take a look at the above. There's a ton of terrific stuff in there. If you were looking to start a Django powered blog, now you have at least the eleven Django powered blog engines mentioned above, and Mingus :). Thanks to the authors for their contributions to open source.&lt;/p&gt;</description><pubDate>Wed, 10 Feb 2010 12:15:17 -0400</pubDate><guid>http://blog.montylounge.com/2010/02/10/eleven-django-blog-engines-you-should-know/</guid></item><item><title>That apps that power Mingus 0.9</title><link>http://blog.montylounge.com/2010/02/8/apps-power-mingus-09/</link><description>
&lt;p&gt;Extending my previous post &lt;a href="http://blog.montylounge.com/2009/09/24/apps-that-power-django-mingus/" title="The apps that power Django-Mingus"&gt;The apps that power Django-Mingus&lt;/a&gt;, the best way to discuss what has changed in Mingus is to discuss the new apps.&lt;/p&gt;
&lt;h3&gt;Well, wait just one second&lt;/h3&gt;
&lt;p&gt;Ok, maybe the best way to begin is to quickly discuss a few higher level updates. The first, and one I'm very proud of, is that Mingus was recently added to &lt;a href="http://www.transifex.net/"&gt;Transifix&lt;/a&gt; and now has both Spanish and French translations included thus far. To be honest, Transifix wasn't the reason these two languages were added (two developers contributed them before Transifix came into the picture), but I can see it helping in getting the rest. Getting Mingus translated probably wouldn't have been possible if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I didn't focus on providing at least the basic pipeline for internationalization (templates, admin/models where possible)&lt;/li&gt;
&lt;li&gt;And if &lt;a href="http://github.com/pmarti"&gt;Pablo Marti&lt;/a&gt; and &lt;a href="http://apluggedinlife.com/"&gt;Florent Messa&lt;/a&gt; didn't come in and clean up where I left off. Thanks to those two Mingus now has Spanish and French translations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The fact is that so many apps (and I'm to blame here for some of my apps in the past as well) just don't do the basic i18n legwork that gets your app 80-90% of the way there. It's so easy, so go read up on &lt;a href="http://docs.djangoproject.com/en/dev/topics/i18n/"&gt;Django Internationalization&lt;/a&gt; now before you forget. I won't produce an open source Django app without doing so ever again. &lt;/p&gt;
&lt;p&gt;The most evasive change, believe it or not, was adding WYSIWYG support to blog posts. It was only invasive in that I sat on the fence on whether or not I thought this feature should be added to Mingus or just handled by the employing developer. I gave into the demands (those one or two people) and added support now for TinyMCE, CKEditor, YUI, Markdown, Textile, restructuredText, and raw HTML. All of this can be set dynamically via the admin (no settings.py changes!). &lt;a href="http://github.com/bartTC/django-markup"&gt;Django-Markup&lt;/a&gt; was the first app I integrated to help with this feature, and then added &lt;a href="http://github.com/pydanny/django-wysiwyg"&gt;Django-WYSIWYG&lt;/a&gt;, and then &lt;a href="http://code.google.com/p/django-tinymce/"&gt;Django-TinyMCE&lt;/a&gt; borrowing some ideas from &lt;a href="http://www.sk3vy.com/"&gt;skevy&lt;/a&gt;. The funnies part about it all, Github now &lt;a href="http://github.com/montylounge/django-mingus/graphs/languages"&gt;graphs&lt;/a&gt; my project as 98% javascript because of simply adding WYSIWYG support. The rest is 1% Python and 1% PHP (wtf?). Anyway...&lt;/p&gt;
&lt;p&gt;Probably the best thing to come out of Mingus 0.9 is the community that helped get it there. Developers (handles) like acdha, richleland, hotsyk, danfairs, mikl, scelis, pmarti and thoas, as well as skevy, and jefftriplett, and the others helped make Mingus a better product by forking it on their own, adding features, forking a reusable app it uses and updating those, etc. Speaking of those other reusable apps, of course we can't forget to thank all the authors of those reusable apps as well. And finally, &lt;a href="http://github.com/"&gt;github&lt;/a&gt; made following commits, forks, branches, and merging updates a cake.&lt;/p&gt;
&lt;p&gt;Other than that there were a slew of changes, but nothing too horrible if you're looking to upgrade on your own. A few apps we'll discuss soon have been added, the location/handling of static media in the project has been updated -- I discuss that below when reviewing &lt;a href="http://bitbucket.org/jezdez/django-staticfiles/src/"&gt;Django-StaticFile&lt;/a&gt;. I've begun maintaing a &lt;code&gt;docs/CHANGELOG&lt;/code&gt; file for these types of details, something I should have done since day one -- lesson learned. You can always reference the project's git commit log for the finer details. For anyone looking to migrate from an already existing, older version of Mingus there are three key changes to note:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Two new columns have been added to &lt;code&gt;basic.blog.models.Settings&lt;/code&gt; and Mingus provides postgres SQL migrations for these (no South yet, sorry)&lt;/li&gt;
&lt;li&gt;Permalinks have been updated to be more international friendly (previously the month was a character sequence and now is a digit sequence). The detail view has logic to support legacy urls with raising a 404 but your Disqus comments won't be smart enough to know the difference between the new and the old URL (disqus uses the URL as a key look for your comments). So if your comments disappear on you then you know why. A solution to fix this is to write a Disqus migration, or fork the basic-apps code Mingus uses and revert back to the older pattern, or update the templates where they populate the url, or do like I did and add a "My url scheme changed, if you'd like to see older comments click here" type solution. Not pretty, but works for me. So you have a few options available to you.&lt;/li&gt;
&lt;li&gt;Static media directory move mentioned above, but you may have customized that anyway.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For those coders out there looking to syntax highlight your code well Django-Markup &lt;a href="http://docs.mahner.org/django-markup/bundled_filter/markdown.html?highlight=pygment"&gt;pygmentizes your text&lt;/a&gt; by default (not knowing that though I had previously added a pygmentize filter to the templates but that has been removed to reduce redundancy). If you're using the Django-Markup editors (markdown or reStructuredTex) this should work for you.&lt;/p&gt;
&lt;p&gt;I also added &lt;a href="http://code.google.com/p/google-code-prettify/"&gt;Google Code's prettify highlighter&lt;/a&gt; as an alternative. To enjoy the benefits of google-code highlighting your markup needs to specify a &lt;code&gt;class="prettyprint"&lt;/code&gt; attribute. It uses the Google CDN to deliver the JS so if you don't have access to the internets you won't see any highlighting. The related CSS is included in Mingus if you'd like to customize it to you compliment your templates.&lt;/p&gt;
&lt;p&gt;To help better understand Mingus, and the references above, I plan on screencasting/posting these tidbits asmy schedule provides. The rest of the updates were mostly harmless refactoring of code, template updates, some i18n love, regular maintenance, bug support, and what have you. So let's see what goodies we have now...&lt;/p&gt;
&lt;h3&gt;The new digs&lt;/h3&gt;
&lt;p&gt;Without further ado, here are Mingus 0.9 additions (and one removal):&lt;/p&gt;
&lt;h3&gt;Django-StaticFiles&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://bitbucket.org/jezdez/django-staticfiles/"&gt;Django-StaticFiles&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description:&lt;/em&gt; A Django app that provides helpers for serving static files, used in Pinax.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notes:&lt;/em&gt; How to handle serving static media in your project is always a good way to fire up a discussion. Managing them in a Django reusable app even more so. This project exists to resolve all those headaches. &lt;a href=""&gt;Jannis Leidel&lt;/a&gt; created this project in reflex to these static media management woes the Pinax team dealt with. It's one of those projects I believe should be considered for a &lt;code&gt;contrib&lt;/code&gt; app as it resolves a common issue every Django project will most likely run into.&lt;/p&gt;
&lt;h3&gt;Django-DbTemplates&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://bitbucket.org/jezdez/django-dbtemplates/wiki/Home"&gt;Django-DbTemplates&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description:&lt;/em&gt; Django template loader for database stored templates with extensible cache backend.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notes:&lt;/em&gt; Yet another project created by &lt;a href=""&gt;Jannis Leidel&lt;/a&gt;. The name is self-explanatory -- DbTemplates allows you to create templates in your database instead of the the file system, which allows editing via the Django admin. DbTemplates also allows you to override existing templates on the file-system by creating a new Template record. The benefit here is that you can allow edit access to those users who should not have access to the server. The negative is that source control is lost. Leveraging &lt;a href="http://packages.python.org/django-dbtemplates/overview.html#versionizing-your-templates"&gt;Django-Reversion&lt;/a&gt; is the suggestion solution to solve that versioning issue. I guess you'll see that in Mingus 1.0 :)&lt;/p&gt;
&lt;p&gt;Currently Mingus does not have this enabled in the TEMPLATE_LOADERS settings, but the application is installed with Mingus by default. I'll most likely change this in HEAD so it's enabled by default. To enable this yourself all you need to do is specify the TEMPLATE_LOADER. Below is an example:&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.load_template_source',
    'django.template.loaders.app_directories.load_template_source',
    'dbtemplates.loader.load_template_source',
)
&lt;/pre&gt;
&lt;h3&gt;Django-Slimmer&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://github.com/hbussell/django-slimmer/"&gt;Django-Slimmer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description:&lt;/em&gt; Html compression as middleware and view decorators. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notes:&lt;/em&gt; Middleware that slims down your HTTPResponse by removing extra white-space. This module is a django conversion of &lt;a href="http://zope.org/Members/peterbe/CheckoutableTemplates"&gt;CheckoutableTemplates&lt;/a&gt; Zope package. Related, David Cramer published a post &lt;a href="http://www.davidcramer.net/code/369/spaceless-html-in-django.html"&gt;Spaceless HTML in Django&lt;/a&gt; which details his solution using Django Middleware for a similar perforance enhancement. You'll note that in the comments some readers noted alternative solutions as well. So far Django-Slimmer hasn't introduced anything but great results.&lt;/p&gt;
&lt;h3&gt;Django-Cropper&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://github.com/montylounge/django_cropper/"&gt;Django-Cropper&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description&lt;/em&gt;: Integration of jCrop with the Django admin.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notes:&lt;/em&gt; &lt;a href="http://simonwillison.net/"&gt;Simon Willison&lt;/a&gt; initially released this nice little reusable to make image cropping in the admin easy. It's a terrific tool that allows you to easily crop images in the admin using &lt;a href=""&gt;JQuery&lt;/a&gt; and &lt;a href=""&gt;JQuery-Crop&lt;/a&gt;. I tried to integrate it with the Mingus project, and it worked well, but there were two issue I ran into so I forked it. First, Willison raised the issue I mentioned above regarding what to do with your static files when releasing a reusable app, &lt;a href="http://github.com/montylounge/django_cropper/commit/ef9e5334a333f40668dccfb9d6d00ef9ce72e0a2"&gt;"... no idea what 
I should do with the static file dependencies though."&lt;/a&gt;. The second was the location of the ImageField "uploads" parameter which I like to set, if possible, in my project's &lt;code&gt;media/uploads/[projectname]&lt;/code&gt; directory. I forked the repo to include these changes. Willison noted that this project was not a complete project and it's even highlighted &lt;a href="http://github.com/montylounge/django_cropper/blob/master/cropper/models.py#L16"&gt;here&lt;/a&gt;. Maybe Chris Adams post &lt;a href="http://chris.improbable.org/2010/01/26/django-reliably-saving-urls-file-field/"&gt;Django: reliably saving URLs to a file field&lt;/a&gt; provides the answer? &lt;/p&gt;
&lt;h3&gt;Django-Request&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Project site:&lt;/em&gt; &lt;a href="http://kylefuller.co.uk/projects/django-request/"&gt;Django-Request&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description:&lt;/em&gt; A statistics module for django. It stores requests in a database for admins to see, it can also be used to get statistics on who is online etc.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notes:&lt;/em&gt; Created by &lt;a href="http://kylefuller.co.uk"&gt;Kyle Fuller&lt;/a&gt;, Django-Request is the one app I'm most concerned about including is also one of the &lt;em&gt;kewlest&lt;/em&gt;. Django-request provides analytics on (you guessed it) any http request your application handles. It provides a lot of customization (I setup a few ignore rules that live in local_settings.py), and integrates &lt;a href="http://code.google.com/p/flot/"&gt;Flot&lt;/a&gt; graphical plots. The "overview" view looks really amazing and is a great example on how you can customize the Django admin to fit your needs. The reason I'm concerned about using Django-Request is that it's database write intense, plus the overview page executes analytics on all your request records which unless kept tidy could become very expensive. But for a blog like mine, I'm not concerned just yet. To remove it all you need to do is comment out the middleware reference. It also provides a few management commands to dump old records. So, it's nice like that.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; Mingus and Django-Request have had a love/hate relationship. I'm mostly kidding here, but there have a been a few bumps in the road, all of which I've submitted patches (via my own fork) for or logged issues. Kyle has been terrific about getting the fixes in. If you're detailed you'll note that as of 0.9.5 I removed django-request from Mingus altogether. Then when 0.9.6 was announced we found another bug. So you'll see the updated migration SQL in the 0.9.7 tag. Anyway, it's a really interesting app that shows off some of the many cool things you can do with Django itself (management commands, admin customization, etc). So it's back in Mingus for your enjoyment. This is what happens though when you're running beta software -- It's part of the game. Thanks Kyle for your work, and thanks for those users who helped track down the bugs.&lt;/p&gt;
&lt;h3&gt;Django-Memcache-Status&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://github.com/bartTC/django-memcache-status"&gt;Django-Memcache-Status&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description:&lt;/em&gt; Django admin extension that displays statistics about your memcached instances.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notes:&lt;/em&gt; &lt;a href="http://www.mahner.org/"&gt;Martin Mahner&lt;/a&gt; is the author of this project. He provides a perfect, concise &lt;a href="http://github.com/bartTC/django-memcache-status/blob/master/README.rst"&gt;README&lt;/a&gt; file that details exactly what this project provides, so go check that out since it has nice screenshots and all that jazz.&lt;/p&gt;
&lt;h3&gt;Django-Bitly&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://bitbucket.org/discovery/django-bitly/#egg=django-bitly"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description:&lt;/em&gt; A Django app that manages bit.ly links to local objects.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notes:&lt;/em&gt; This is the app used by django-twitter (below) to create &lt;a href="http://bit.ly"&gt;bit.ly&lt;/a&gt; short urls when posting to twitter (Mingus allows you to fire off a twitter message when publishing a new blog post). The project provides additional features as well, so make sure to check it out. The &lt;a href="http://creative.discovery.com/"&gt;Discovery Creative&lt;/a&gt; team is the author.&lt;/p&gt;
&lt;h3&gt;Django-WYSIWYG&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://github.com/pydanny/django-wysiwyg/"&gt;Django-WYSIWYG&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description:&lt;/em&gt; A Django application for making Django textareas rich text editors. Certainly as a template tag and possibly as a form widget.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notes:&lt;/em&gt; &lt;a href="http://pydanny.blogspot.com/"&gt;Daniel Greenfield&lt;/a&gt; is the author of this project. Because I'm a masochist I wanted to not only support Textile, Markdown, reStructureText, raw HTML, and TinyMCE so I added Django-WYSIWYG. By default the app renders the &lt;a href="http://developer.yahoo.com/yui/editor/"&gt;YUI WYSIWYG editor&lt;/a&gt; editor via the yahoo CDN. I've added the configuration settings to &lt;code&gt;settings.py&lt;/code&gt; so it defaults &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;. If you'd like for it to render the &lt;a href="http://developer.yahoo.com/yui/editor/"&gt;YUI WYSIWYG editor&lt;/a&gt; then just remove the &lt;a href="http://github.com/montylounge/django-mingus/blob/master/mingus/settings.py#L108"&gt;DJANGO_WYSIWYG settings&lt;/a&gt; from &lt;code&gt;settings.py&lt;/code&gt;. &lt;/p&gt;
&lt;h3&gt;Django-TinyMCE&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://code.google.com/p/django-tinymce/"&gt;Django-TinyMCE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notes:&lt;/em&gt; The first request I received for a WYSIWYG editor was for TinyMCE. It's a very successful project, and has numerous extensions and customization features. Some people just love their TinyMCE so it was hard to ignore it even knowing that it's younger, sexier competitor (CKEditor) was already included with Django-WYSIWYG. Mingus provides the basic implementation only, and that's all it will ever support. There appears to be multiple authors, so thanks to all of them.&lt;/p&gt;
&lt;h3&gt;Django-Twitter&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://github.com/skevy/django-twitter/"&gt;Django-Twitter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description&lt;/em&gt;: Twitter Django Integration.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notes:&lt;/em&gt; &lt;a href="http://www.adammiskiewicz.com/"&gt;Adam Miskiewicz&lt;/a&gt; is the author of this little utility app. I'm pretty sure he created it for a Mingus blog that has not yet launched. I'm itchin to see it though when it does. The application itself provides a model for adding your twitter auth via the Django admin and a signal for creating the bit.ly url for your object, and then the posting to twitter as well. Django-Twitter is &lt;a href="http://github.com/skevy/django-twitter/blob/master/django_twitter/signals.py#L18"&gt;tightly coupled&lt;/a&gt; to django-bitly and if you haven't set the required bit.ly settings values in your &lt;code&gt;settings.py&lt;/code&gt; file then publishing tweets post publishing won't work. Also, now that I think of it (and I just checked this out to confirm) it will post a tweet regardless of whether your post is set to Public or not. So yea, there's that as well :/ &lt;/p&gt;
&lt;p&gt;As I'm writing this I can't allow myself to complete this post without fixing the above issue so I've gone and created 0.9.2 tag for a fix, which includes a new signal in basic.blog to handle the posting, and it also decouples the need for bit.ly configuration. If you don't set your bit.ly credentials in &lt;code&gt;settings.py&lt;/code&gt; it will then revert to using &lt;code&gt;Site.domain + get_absolute_url()&lt;/code&gt; of the instance itself. At this point I'm considering refactoring django-twitter out of the mix in a later Mingus version as it now feels more like a basic-twitter app could handle this and is better suited as an addition to basic apps. That being said, Adam did a great job getting the initial legwork done. Thanks adam.&lt;/p&gt;
&lt;h3&gt;Python-Twitter&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://code.google.com/p/python-twitter/"&gt;Python-Twitter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description:&lt;/em&gt; A python wrapper around the Twitter API.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notes:&lt;/em&gt; Used by django-twitter to post the tweets, of course. There appears to be multiple authors, so thanks to all of them.&lt;/p&gt;
&lt;h3&gt;South&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Source:&lt;/em&gt; &lt;a href="http://south.aeracode.org/browser"&gt;South&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Description:&lt;/em&gt; Intelligent schema migrations for Django apps.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Notes:&lt;/em&gt; I removed South as a requirement, not added it. None of the apps used in Mingus use South as their default migration tool, if they provide any migrations at all. It's sad actually. It should be the defacto Django migration solution. Does anyone disagree?&lt;/p&gt;
&lt;h3&gt;What's next?&lt;/h3&gt;
&lt;p&gt;Well, before we can talk about 1.0 we need to discuss the near future, which includes supporting bug fixes and producing screencast tutorials. For now, those are the things I'm going to focus on. I'm thinking a "5 Days of Mingus" series, or something like that. For the near future, that's my goal. What is &lt;em&gt;not&lt;/em&gt; next is adding anymore text editors to the project :)&lt;/p&gt;
&lt;h3&gt;What's up for 1.0?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;mobile theme&lt;/li&gt;
&lt;li&gt;docs site (more docs) reST/sphinx&lt;/li&gt;
&lt;li&gt;more test/test runner&lt;/li&gt;
&lt;li&gt;theme support (switching via admin)&lt;/li&gt;
&lt;li&gt;template update/clean up css&lt;/li&gt;
&lt;li&gt;project site&lt;/li&gt;
&lt;li&gt;pylint/code quality&lt;/li&gt;
&lt;li&gt;fabric/deploy helper&lt;/li&gt;
&lt;li&gt;1.2 support&lt;/li&gt;
&lt;li&gt;A select few app additions that make sense (Django-Reversion, Django-DataTrans maybe, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;How can you contribute?&lt;/h3&gt;
&lt;p&gt;Just keep forking baby... just keep forking. It's as simple as that. Fork, feature branch, test, merge, pull request. Repeat.&lt;/p&gt;
&lt;h3&gt;When will this all happen?&lt;/h3&gt;
&lt;p&gt;There will be no rush on pushing out a 1.0 release. Heck, if 1.0 were released by DjangoCon 2010 I'd be happy. I'm not ditching Mingus (it's the blog engine I use for my own personal site so I'm eating my own dog food), but as of recent my evenings and weekend schedule got plenty busy (new baby and home).  It will be a "get to it when I can (or if others do)" type thing. &lt;/p&gt;
&lt;p&gt;If you follow this project already you know I try very hard to resolve any issue that are filed as quickly as possible given my schedule. And I'll work with the rest of the contributors (who continue to develop on it) to progress the project as best as possible. Take a look at Mingus &lt;a href="http://github.com/montylounge/django-mingus/network"&gt;Network&lt;/a&gt; if you'd like to see who else is actively hacking on Mingus; there's some great stuff going on there. &lt;/p&gt;
&lt;p&gt;With Mingus already being as feature rich as it probably will ever need to be, despite the few todo items listed above, the 1.0 release will be focused on stabilization, and proper project packaging.&lt;/p&gt;
&lt;h3&gt;Sites using Mingus today&lt;/h3&gt;
&lt;p&gt;One of the most motivating aspects of Mingus is seeing Mingus powered blogs go live in the wild. Below is a list of the blogs I'm aware of that are currently running Mingus (in no order). I'm sure I've missed a few. If so please comment with the URL of your Mingus powered blog:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://lukehatcher.com/blog/"&gt;lukehatcher.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.roseman.org.uk/"&gt;blog.roseman.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codysoyland.com/"&gt;codysoyland.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.stereoplex.com/2010/jan/14/migrating-django-mingus/"&gt;www.stereoplex.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://chris.improbable.org/"&gt;chris.improbable.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mathematism.com/"&gt;mathematism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://rickyrosario.com/"&gt;rickyrosario.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mikkel.hoegh.org/"&gt;mikkel.hoegh.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ofbrooklyn.com/"&gt;ofbrooklyn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.gsiegman.com/"&gt;gsiegman.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://baratrion.org/"&gt;baratrion.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stfnkhlr.de/"&gt;stfnkhlr.de&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.luismontiel.com/"&gt;blog.luismontiel.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mingus.flaper87.org/"&gt;mingus.flaper87.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://googletorp.com/"&gt;googletorp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sebastiancelis.com/"&gt;sebastiancelis.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://oswco.com/"&gt;oswco.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.terraquis.net/"&gt;terraquis.net&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://serotoninstorm.com/blog/"&gt;serotoninstorm.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lifeaszenos.com/"&gt;lifeaszenos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://1inday.com/"&gt;1inday.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; Additions to my original list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://libby.tuzig.com/"&gt;libby.tuzig.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://multitasked.net/"&gt;multitasked.net&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks to everyone who has launched a Mingus blog on their own. I hope it's been an enjoyable experience. &lt;/p&gt;
&lt;h3&gt;Thanks again&lt;/h3&gt;
&lt;p&gt;Finally, thanks to all those people who submitted issues, suggested ideas, committed code, evolved their own fork, etc. Your contributions in whatever form are greatly appreciated. I've added as many people as I could to the AUTHORS file that is packaged with Mingus. If you feel you were missed, just ping me and I'll make sure to add you. In the bigger picture of things I realize Mingus is an itsy, bitsy, tiny blip on the map but it's a fun project and I'm very happy to have passionate contributors and users of the project -- Django makes it easy doesn't it? Thanks again!&lt;/p&gt;</description><pubDate>Mon, 08 Feb 2010 11:18:33 -0400</pubDate><guid>http://blog.montylounge.com/2010/02/8/apps-power-mingus-09/</guid></item><item><title>Mingus 0.9 Released</title><link>http://blog.montylounge.com/2010/02/7/mingus-09-released/</link><description>
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Well, there's no QA like opening something up to the wild. Thanks to reader feedback we've tracked down a bug in one of the new reusable apps that Mingus employs. I've contacted the author and I assume a 0.9.7 release will be out shortly. For now, feel free to play around with 0.9.6(HEAD).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; I've bumped Mingus up to &lt;a href="http://github.com/montylounge/django-mingus/tree/0.9.7"&gt;0.9.7&lt;/a&gt; tag which resolves the related issue. So both 0.9.7 and HEAD are "stable". Details to come in tomorrow's roundup post.&lt;/p&gt;
&lt;p&gt;As I noted above, I'll have a more detailed post coming shortly, but the &lt;a href="http://github.com/montylounge/django-mingus"&gt;Django-Mingus&lt;/a&gt; 0.9 release is now available on Github. There have been some fixes since 0.9 was tagged, so &lt;strike&gt;version 0.9.6&lt;/strike&gt; &lt;a href="http://github.com/montylounge/django-mingus/tree/0.9.7"&gt;0.9.7&lt;/a&gt; is the current stable release. Please submit any issues you find to the Mingus issues section. &lt;/p&gt;
&lt;p&gt;If you can't wait for the forthcoming blog post that will detail the updates, there's the new &lt;a href="http://github.com/montylounge/django-mingus/blob/0.9.7/docs/CHANGELOG.txt"&gt;CHANGELOG&lt;/a&gt; and of course there's always the git log you can peruse for all the finer details. Enjoy!&lt;/p&gt;</description><pubDate>Sun, 07 Feb 2010 13:43:20 -0400</pubDate><guid>http://blog.montylounge.com/2010/02/7/mingus-09-released/</guid></item><item><title>Hello Claire</title><link>http://blog.montylounge.com/2010/01/9/hello-claire/</link><description>
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: I migrating to a new URL scheme, so legacy comments are available &lt;a href="http://blog.montylounge.com:8080/2010/jan/9/hello-claire/"&gt;here&lt;/a&gt;.
&lt;/p&gt;


&lt;div class="post-img clearfix"&gt;
&lt;img src="/media/photos/claire-xmas-tree_JPG_580x500_crop_q85_jpg_580x500_crop_q85.jpg" alt="Claire Xmas" title="Claire Xmas"&gt;
&lt;p&gt;
  Introducing Claire Paige Fricovsky, 11/30/09.
&lt;/p&gt;
&lt;/div&gt;
</description><pubDate>Sat, 09 Jan 2010 21:54:45 -0400</pubDate><guid>http://blog.montylounge.com/2010/01/9/hello-claire/</guid></item><item><title>South and Reusable Apps</title><link>http://blog.montylounge.com/2009/10/21/south-and-reusable-apps/</link><description>
&lt;p&gt;
&lt;strong&gt;Note&lt;/strong&gt;: I migrating to a new URL scheme, so legacy comments are available &lt;a href="http://blog.montylounge.com/2009/oct/21/south-and-reusable-apps/"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt; 
I was honored to be invited to participate in a recent &lt;a href="http://djangodose.com/"&gt;DjangoDose&lt;/a&gt; panel covering &lt;a href="http://djangodose.com/blog/2009/10/reusable-application-panel/"&gt;Reusable Apps in Django&lt;/a&gt; which featured &lt;a href="http://oebfare.com"&gt;Brian Rosner&lt;/a&gt;, &lt;a href="http://www.eflorenzano.com/"&gt;Eric Florenzano&lt;/a&gt;, &lt;a href="http://lazypython.blogspot.com/"&gt;Alex Gaynor&lt;/a&gt;, &lt;a href="http://www.b-list.org/"&gt;James Bennett&lt;/a&gt;, &lt;a href="http://jtauber.com/"&gt;James Tauber&lt;/a&gt; and &lt;a href="http://jannisleidel.com/"&gt;Jannis Leidel&lt;/a&gt;. After listening to the episode I realized I offered up a "brain fart" when responding to &lt;a href="
http://twitter.com/theseanoc"&gt;@TheSeanOC&lt;/a&gt;'s question &lt;a href="http://moderator.appspot.com/#11/e=ddb37&amp;amp;t=agltb2RlcmF0b3JyLwsSCERvcnlVc2VyIiF1Mzk5YjYwM2VlNjBiYWQzZTNlN2MxNmM1YTIyYWM0MTgM"&gt;"How should schema migrations be handled in reusable apps?"&lt;/a&gt;.
&lt;/p&gt;
&lt;h3&gt;Let's review the brain fart&lt;/h3&gt;
&lt;p&gt; 
I jumped in to answer the question quickly but my answer to this question was essentially "use South." Wow, great. Very enlightening. But I forgot to elaborate on the concept I've had in my head for a long time but have yet documented. As the callcast discussion related to this question continued the panel ended up agreeing that the best solution was making the use of South a convention. But in hindsight I wanted to offer something more. I had what I believe is an answer, or at least a suggestion for a solution. Remember in &lt;a href="http://www.imdb.com/title/tt0085334/"&gt;"A Christmas Story"&lt;/a&gt; when Ralphie went to the mall to ask Santa for his Christmas present wish? (No? &lt;a href="http://www.youtube.com/watch?v=ppOXpyhM2wA"&gt;Watch it.&lt;/a&gt;). He froze up when he was on Santa's lap and asked for a football. After he was removed from Santa's lap, and pushed down the slide, he quickly realized that's not what he wanted at all. He wanted an official &lt;a href="http://en.wikipedia.org/wiki/Red_Ryder_BB_Gun"&gt;Red Rider BB Gun&lt;/a&gt;. This is my Red Rider BB gun request.
&lt;/p&gt;
&lt;h3&gt;South and reusable apps&lt;/h3&gt;
&lt;p&gt; 
First, &lt;a href="http://south.aeracode.org/"&gt;South&lt;/a&gt; is an amazing migration solution for Django. I can't imagine developing without it. I include it in Django-Mingus only because I want to use South but Mingus itself, as a "project", defines no models and therefor South doesn't care about it :( Working on Mingus and the 28+ apps it includes I came to wanting this feature some time ago. So here's the gist of it all...
&lt;/p&gt;
&lt;p&gt; 
Mingus uses a collection of reusable Django apps to build a blog engine. I noted this in my &lt;a href="http://www.slideshare.net/montylounge/how-to-name-your-django-project-after-a-famous-jazz-musician-and-concepts-behind-djangomingus"&gt;DjangoCon 09 how-to&lt;/a&gt;, but this concept isn't new. In fact, in researching my DjangoCon presentation I came across a James Bennett post where he answers &lt;a href="http://www.b-list.org/weblog/2007/nov/29/django-blog/"&gt;"Where is the Django blog application"&lt;/a&gt; and he suggested exactly what Mingus set out to do - leverage the awesome reusable apps feature to piece together a blog engine. That was psted &lt;b&gt;2 years ago&lt;/b&gt;! I thought only &lt;a href="http://twitter.com/gregnewman"&gt;@gregnewman&lt;/a&gt; could see in into the future. Anyway, I'd love to offer migrations along with Mingus but sadly we're not there yet.
&lt;/p&gt;
&lt;p&gt; 
Today if you were to run a local version of &lt;a href="http://github.com/montylounge/django-mingus/"&gt;Django-Mingus&lt;/a&gt; and test the app locally using runserver after you followed the &lt;a href="http://github.com/montylounge/django-mingus/blob/master/docs/INSTALL.textile"&gt;quickstart documentation&lt;/a&gt; you would notice some of the Django reusable apps required in the pip requirements.txt file included with Mingus found a home in the &lt;code&gt;[Root]/src&lt;/code&gt; directory, while others found their home in &lt;code&gt;/lib/python2.5/site-packges&lt;/code&gt; (that's all related to how they were packaged and referenced in the requirements file). Anyway, here's a screenshot below.
&lt;/p&gt;
&lt;div class="post-img clearfix"&gt;
&lt;img src="/media/photos/src-dir_jpg_580x500_crop_q85.jpg" /&gt;
&lt;p&gt; 
	Default Django-Mingus project directoy structure.
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt; 
In the above screenshot the directory &lt;code&gt;django-mingus&lt;/code&gt; is my git repository root, not the above. Now what I want is the ability to easily include migrations from my initial project start, and ongoing into the future (&lt;a href="http://twitter.com/gregnewman"&gt;@gregnewman&lt;/a&gt; knows all about the future.) so I can evolve my project along with these reusable apps code base. So what I would like to do here is (you need to have some familiarity with South to recognize these commands) the below pseudo code:
&lt;/p&gt;
&lt;p&gt;
&lt;pre&gt; 
./manage.py startmigration django-mingus
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt; 
South would then create a &lt;code&gt;migrations&lt;/code&gt; directory in my project's root (or wherever I specify it via a settings variable) and then iterate through all the apps in INSTALLED_APPS and create directories for each reusable app and initial migration scripts. Then moving forward any time I update the reusable apps, I could easily create migrations, evolve my project database, and have it safely encapsulated in my project's repository.  Right now this is not possible. This is what would happen now if I tried to create an initial migration for &lt;a href="http://github.com/zerok/django-flatblocks"&gt;django-flatblocks&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;pre&gt; 
./manage.py startmigration flatblocks --initial
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt; 
The below is the resulting directory structure. 
&lt;/p&gt;
&lt;div class="post-img clearfix"&gt;
&lt;img src="/media/photos/flatblocks_jpg_580x500_crop_q85.jpg" /&gt;
&lt;p&gt; 
	Djang-flatblocks initial migration.
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt; 
You'll see the migration directory was created in the root directory for the django-flatblocks project which in the Django-Mingus project is located here &lt;code&gt;/testproj/src/django-flatblocks/flatblocks/migrations&lt;/code&gt;. My issue with this is it's not encapsulated in my project root, which means it's outside my repository (therefor no version control) and depending on how the developer is installing the project, the migration script could end up anywhere on the filesystem he/she feels best fit to install the related reusable apps for the Mingus project. The last point is a bit weak, because we're using virtualenv and pip which helps us out in that regard. But I do see the need for South migrations related to reusable apps being included in the projects root versus off the applications root, and I think this may be the solution.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Updated: I should have initially added a visual to detail what I'm  suggesting. It's now below.&lt;/b&gt;&lt;/p&gt;
&lt;div class="post-img clearfix"&gt;
&lt;img src="/media/photos/alt-view-south_jpg_580x500_crop_q85.jpg" /&gt;
&lt;p&gt; 
	Alternative project view with South included reusable app migrations on the project level.
&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt; 
Whether this is the best idea or not I'm not 100% sure. But I've been meaning to throw it out there for quite some time. So it's my Redrider BB-Gun, or my South pony. Whatever you want to call it. I'd love to hear your thoughts or how you handle this in your own projects - leave a comment below. Thanks.
&lt;/p&gt; </description><pubDate>Wed, 21 Oct 2009 22:02:31 -0400</pubDate><guid>http://blog.montylounge.com/2009/10/21/south-and-reusable-apps/</guid></item><item><title>Screencast - Basic-Inlines and AdminImageWidget</title><link>http://blog.montylounge.com/2009/10/1/screencast-basic-inlines-and-adminphotowidget/</link><description>
&lt;p&gt;
Note: I migrating to a new URL scheme, so legacy comments are available &lt;a href="http://blog.montylounge.com/2009/oct/1/screencast-basic-inlines-and-adminphotowidget/"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt; 
Below is quick &lt;a href="http://screenr.com/8BH"&gt;screencast&lt;/a&gt;, thanks to &lt;a href="http://screenr.com"&gt;screenr&lt;/a&gt;, I published in response to some questions I received about how/why Mingus uses Nathan Borror's excellent basic-inlines application which integrates nicely with basic-blog. I also took the opportunity to show off &lt;a href="http://www.djangosnippets.org/snippets/934/"&gt;AdminImageWidget&lt;/a&gt; which was contributed by Peter Baumgartner over on &lt;a href="http://www.djangosnippets.org/snippets/934/"&gt;djangosnippets.org&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0" width="560" height="345"&gt;&lt;param name="movie" value="http://screenr.com/Content/assets/screenr_0817090731.swf"&gt;&lt;/param&gt;&lt;param name="flashvars" value="i=15750"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://screenr.com/Content/assets/screenr_0817090731.swf" flashvars="i=15750" allowfullscreen="true" width="560" height="345" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/p&gt; </description><pubDate>Thu, 01 Oct 2009 22:21:40 -0400</pubDate><guid>http://blog.montylounge.com/2009/10/1/screencast-basic-inlines-and-adminphotowidget/</guid></item></channel></rss>