<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>This is the tech blog of renooble.com, a startup heping people find renewable energy for their homes and businesses.</description><title>re.nooble</title><generator>Tumblr (3.0; @renooble)</generator><link>http://renooble.tumblr.com/</link><item><title>displaying many to many fields in django with crispy-forms (or multiselect)</title><description>&lt;p&gt;&lt;strong&gt;Das Problem:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/fce1e4d8e70b790883508c3c05c2a287/tumblr_inline_mmrbqo5kUH1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;You have a field with 246 items to chose from &amp;#8230; and you&amp;#8217;re asking your users to scroll through them, hold control down, scroll to the next one, ups, forgot the control, start again &amp;#8230; grrr.  Not pretty.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Do not fret.  &lt;a href="http://django-crispy-forms.readthedocs.org/en/latest/" title="crispy forms" target="_blank"&gt;crispy-forms&lt;/a&gt; and&lt;a href="http://harvesthq.github.io/chosen/" title="chosen.js" target="_blank"&gt; chosen.js&lt;/a&gt; have come to the rescue.  Here&amp;#8217;s how it works and how simple it is:&lt;/p&gt;
&lt;p&gt;1. Check out &lt;a href="http://davidwalsh.name/demo/jquery-chosen.php" title="chosen demo" target="_blank"&gt;a &lt;em&gt;chosen&lt;/em&gt; example&lt;/a&gt; to see how multi select works.&lt;/p&gt;
&lt;p&gt;2. in your crispy form inside your form class add a line like:&lt;/p&gt;

&lt;pre&gt;Field('countries_of_operation', css_class='chosen', ),&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This should render a form that looks something like:&lt;/p&gt;

&lt;pre&gt;&amp;lt;select multiple="multiple" class="selectmultiple chosen" &lt;br/&gt;id="id_countries_of_operation" name="countries_of_operation"&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span&gt;&amp;lt;option value="247"&amp;gt;Antigua and Barbuda&amp;lt;/option&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span&gt;&amp;lt;option value="248"&amp;gt;Algeria&amp;lt;/option&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span&gt;&amp;lt;option value="249"&amp;gt;Azerbaijan&amp;lt;/option&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span&gt;etc ...&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;3. Add a little CSS and JS at the bottom of your page:&lt;/p&gt;
&lt;pre&gt;&amp;lt;script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"&amp;gt;&lt;br/&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;script type="text/javascript" &lt;br/&gt;src="{{ STATIC_URL }}js/chosen/chosen.jquery.min.js"&amp;gt;&lt;br/&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;link rel="stylesheet" href="{{ STATIC_URL }}js/chosen/chosen.css" &lt;br/&gt;type="text/css" media="screen" /&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;span&gt;  $(".chosen").chosen();&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;4. Try it out!&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/d30666092d12737229c40294557ef21b/tumblr_inline_mmrbm8Nfvs1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;</description><link>http://renooble.tumblr.com/post/50369942756</link><guid>http://renooble.tumblr.com/post/50369942756</guid><pubDate>Mon, 13 May 2013 22:56:00 +0100</pubDate><category>django</category><category>multiselect</category><category>manytomany</category><category>jquery</category><category>javascript</category><category>chosen.js</category><category>chosen</category><category>crispy</category><category>crispy-forms</category></item><item><title>From Paul Hudnut’s Bottom of the Pyramid Entrepreneur</title><description>&lt;img src="http://25.media.tumblr.com/39d74a6c9d4f30e11dda478b250efe35/tumblr_mm4wk0JTQQ1qfrdjgo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;From Paul Hudnut’s &lt;a href="http://bopreneur.blogspot.co.uk/2013/05/picture-of-startup.html"&gt;Bottom of the Pyramid Entrepreneur&lt;/a&gt;&lt;/p&gt;</description><link>http://renooble.tumblr.com/post/49376386575</link><guid>http://renooble.tumblr.com/post/49376386575</guid><pubDate>Wed, 01 May 2013 20:24:00 +0100</pubDate><category>startup</category><category>web startup</category><category>lean</category><category>lean startup</category></item><item><title>I don't need to test that. What can possibly go wrong?</title><description>&lt;p&gt;&lt;a href="http://devopsreactions.tumblr.com/post/48511362536/i-dont-need-to-test-that-what-can-possibly-go-wrong" class="tumblr_blog"&gt;devopsreactions&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;img src="http://i.imgur.com/43sf9NL.gif" alt="image"/&gt;&lt;/p&gt;
&lt;p&gt;Image by IceMan1988&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://renooble.tumblr.com/post/48700054558</link><guid>http://renooble.tumblr.com/post/48700054558</guid><pubDate>Tue, 23 Apr 2013 17:29:58 +0100</pubDate><category>testing</category></item><item><title>Reduce your PostgreSQL/PostGIS query time by 99%</title><description>&lt;p&gt;In our search engine for renewables, we are running a bunch of PostGIS queries, e.g. to determine the wind speed at a user&amp;#8217;s location. In our alpha search engine, we noticed that the PostGIS requests caused the longest query time of all 25 queries.&lt;/p&gt;
&lt;p&gt;While experimenting with PostGIS, we discovered a nice time saver: In the alpha version, we translated the CSV data of measurement points (lat, lng, wind speed) into a shapefile with geometry points representing every measurement in the UK. The result looked like below (Southern England with a zoom on the Isle of Wight):&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/b513eab0a4dbfec0aae59ac8330b2448/tumblr_inline_mlapr2s2h11qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;We extracted the data_point for a given location with the raw SQL statement in Django/Python:&lt;/p&gt;
&lt;code id="gist-5388257"&gt;&lt;/code&gt;
&lt;p&gt;We used the raw SQL statement in Django, since it provided the fastest query response. But it was still almost 300ms. Not enough!&lt;/p&gt;
&lt;p&gt;So we looked for an alternative solution based on polygon intersect. Instead of looking for the closest data point to the geographic coordinate of the user&amp;#8217;s location, we are now searching for the polygon which contains the user&amp;#8217;s coordinate. Thanks to the &lt;a href="http://en.wikipedia.org/wiki/Well-known_text" title="Well Known Text (Wikipedia)" target="_blank"&gt;WKT&lt;/a&gt; technology, intersect lookups run amazingly fast - in our case in 3ms.&lt;/p&gt;
&lt;p&gt;If you have a shapefile with the point geometries (you can use &lt;a href="http://www.qgis.org/" title="www.qgis.org" target="_blank"&gt;QGIS&lt;/a&gt; to convert your CVS measurement data into shapefiles), you can use the QGIS geoprocessing function Voronoi Polygon (Vector | Geometry Tools | Voronoi Polygons) to convert the points into polygons for each measurement point/value. The result is a fancy British spider web:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/670c2787bbf04fdbc0f8316856712c33/tumblr_inline_mlas28C0fd1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;PostGIS queries based on the polygon intersects can be done as follows:&lt;/p&gt;
&lt;pre&gt;data_point = WindData.objects.get(geom__intersects = location)&lt;/pre&gt;
&lt;p&gt;Since we do not have to sort the locations of the data points to find the closest data point anymore, the intersect query runs much faster. The &lt;a href="http://en.wikipedia.org/wiki/Well-known_text" title="Well known text" target="_blank"&gt;WKT&lt;/a&gt; technology allows a hash comparison to determine if a point is part of a polygon or not. This amazing development provides the great speed increase.&lt;/p&gt;
&lt;p&gt;The performance comparison in the Django shell says it all:&lt;/p&gt;
&lt;script src="https://gist.github.com/neurix/5388215.js" type="text/javascript"&gt;&lt;/script&gt;&lt;p&gt;Nice reduction of almost 99% in the query time.&lt;/p&gt;</description><link>http://renooble.tumblr.com/post/48039315171</link><guid>http://renooble.tumblr.com/post/48039315171</guid><pubDate>Mon, 15 Apr 2013 14:39:00 +0100</pubDate><category>django</category><category>PostGIS</category><category>postgresql</category><category>PostgreSQL 9</category><category>postgresql9</category><category>query</category><category>optimisation</category><category>point</category><category>polygon</category><category>qgis</category><category>voronoi</category><category>database</category></item><item><title>setting up our wifi antenna before a hackaton in the re.nooble...</title><description>&lt;img src="http://25.media.tumblr.com/328df07f20b864f81f5e7720eee9f0e7/tumblr_ml925z5oxr1qfrdjgo1_r1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;setting up our wifi antenna before a hackaton in the &lt;a href="http://www.renooble.com/" title="find small scale renewable energy" target="_blank"&gt;re.nooble&lt;/a&gt; mountain accelerator :)&lt;/p&gt;</description><link>http://renooble.tumblr.com/post/47954412078</link><guid>http://renooble.tumblr.com/post/47954412078</guid><pubDate>Sun, 14 Apr 2013 15:41:00 +0100</pubDate><category>hack</category><category>hackaton</category><category>wifi</category><category>antenna</category><category>gredos</category><category>sunset</category><category>spain</category></item><item><title>Handy Git tips to stop you getting fired</title><description>&lt;a href="http://blog.apiaxle.com/post/handy-git-tips-to-stop-you-getting-fired/#.UWQ_TRQbtf8.tumblr"&gt;Handy Git tips to stop you getting fired&lt;/a&gt;: &lt;p&gt;Very nice summary of handy and life-saving git tipps!&lt;/p&gt;</description><link>http://renooble.tumblr.com/post/47545471573</link><guid>http://renooble.tumblr.com/post/47545471573</guid><pubDate>Tue, 09 Apr 2013 17:18:58 +0100</pubDate></item><item><title>patch from file using git diff</title><description>&lt;p&gt;Say you want to send a friend a patch, or perhaps you often apply a change back and forth (say like preparing a file for production, and getting it back to testing). In our case base.html uses less.js to render the CSS during development, but in production it calls instead a minified CSS. So to convert base.html between the production and dev versions we created a patch. This is how you do it:&lt;/p&gt;
&lt;p&gt;1. Modify the file&lt;/p&gt;
&lt;pre&gt;git diff dir/thefile.html --no-prefix &amp;gt; patch_thefile_from_dev2prod&lt;/pre&gt;
&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The next time you need to change the file from dev to prod you simply apply the patch:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;patch -p0 &amp;lt; patch_the_file_from_dev2prod&lt;/pre&gt;</description><link>http://renooble.tumblr.com/post/46510007761</link><guid>http://renooble.tumblr.com/post/46510007761</guid><pubDate>Thu, 28 Mar 2013 15:29:00 +0000</pubDate><category>git</category><category>workflow</category><category>patch</category><category>git diff</category><category>django</category><category>version-control</category></item><item><title>git workflow -- emergency fix or how to stash</title><description>&lt;p&gt;You’re plowing away in your feature branch in &lt;em&gt;the zone&lt;/em&gt;, you’ve messed with 10 files and it still doesn’t work. However you think that in four hours your creation will spring to life.&lt;/p&gt;
&lt;p&gt;All of a sudden, you get 20 emails with 500 error reports from production. aaagh! &lt;strong&gt;You need to fix that, Quickly!!&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;$ git checkout master&lt;/pre&gt;
&lt;p&gt;Not so fast!  If you do that, the 10 files you touched will move with you to master.  But you&amp;#8217;re not quite ready to commit anything either.  It is time to &lt;strong&gt;stash&lt;/strong&gt; away your changes.&lt;/p&gt;
&lt;pre&gt;$ git add [some-files]&lt;br/&gt;$ git stash&lt;br/&gt;&lt;br/&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;Now you can&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;$ git checkout master&lt;/pre&gt;

&lt;p&gt;{ FIX THAT BUG, quick!}&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;span&gt;Do your testing, fab update_testing, more testing, fab update_prod, and get back to where you were:&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;$ git checkout feature_branch&lt;br/&gt;$ git stash apply&lt;/pre&gt;
&lt;p&gt;and you can pick up where you left it.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/b5debfcef6f5a180cb97a73722672ca0/tumblr_inline_mk47ef1yy61qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;Note that the part where it says &amp;#8220;bugfix&amp;#8221; could include another branch, and includes testing, deployment, email, etc, etc.&lt;/p&gt;
&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Some references on multiple stashes, selective stashing, listing stashes or clearing them:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; list of &lt;a href="http://gitready.com/beginner/2009/01/10/stashing-your-changes.html"&gt;&lt;a href="http://gitready.com/beginner/2009/01/10/stashing-your-changes.html"&gt;http://gitready.com/beginner/2009/01/10/stashing-your-changes.html&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nathanhoad.net/how-to-git-stash"&gt;&lt;a href="http://nathanhoad.net/how-to-git-stash"&gt;http://nathanhoad.net/how-to-git-stash&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://renooble.tumblr.com/post/46068647968</link><guid>http://renooble.tumblr.com/post/46068647968</guid><pubDate>Sat, 23 Mar 2013 13:20:00 +0000</pubDate><category>git</category><category>git workflow</category><category>rebase</category><category>pop</category><category>stash</category><category>git stash</category><category>git stash pop</category><category>workflow</category><category>python</category><category>illustration</category><category>diagram</category><category>git diagram</category></item><item><title>git workflow to develop a small ( 1 -3 day) feature as a single...</title><description>&lt;img src="http://25.media.tumblr.com/6124abecd2149678e6be58dfed27f9ca/tumblr_mj54ionWIV1qfrdjgo1_r2_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;git workflow to develop a small ( 1 -3 day) feature as a single user (while other users, like &lt;i&gt;Javi&lt;/i&gt; in the example commit to master.
see: &lt;a href="http://renooble.tumblr.com/post/44539828954/git-workflow-part-3"&gt;Git Workflow part 3 &lt;/a&gt;for more details.
note the abbreviations:
&lt;pre&gt;gpu = git pull&lt;/pre&gt;
&lt;pre&gt;gp = git push&lt;/pre&gt;
&lt;pre&gt;co = git checkout&lt;/pre&gt;
&lt;pre&gt;ga = git add&lt;/pre&gt;
&lt;pre&gt;gcm = git commit -m&lt;/pre&gt;&lt;/p&gt;</description><link>http://renooble.tumblr.com/post/44541144897</link><guid>http://renooble.tumblr.com/post/44541144897</guid><pubDate>Mon, 04 Mar 2013 14:35:00 +0000</pubDate><category>git</category><category>workflow</category><category>git workflow</category><category>github</category><category>bitbucket</category><category>dev</category><category>production</category><category>testing</category><category>git add</category><category>git commit</category><category>fabric</category><category>fabfile</category><category>fabfile.py</category><category>team</category><category>renooble</category></item><item><title>git workflow -- part 3</title><description>&lt;p&gt;Ok, so here’s the third part of our series on our git-workflow (see &lt;a href="http://renooble.tumblr.com/post/44069071914/git-workflow-part-1" target="_blank"&gt;part-1&lt;/a&gt;, &lt;a href="http://renooble.tumblr.com/post/44169556442/git-workflow-part-2" target="_blank"&gt;part-2&lt;/a&gt;). We are 3 or 4 people working with &lt;strong&gt;git&lt;/strong&gt; on a django project. So, what happens when one (and just one) of us needs to develope a small feature independently? This could be an extra form, an additional login option, a new field in the model.py or something that one person can tackle in 1 to 3 days.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update the local database:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;with a fab command that will copy the latest &lt;em&gt;prod&lt;/em&gt; database to your local machine (see &lt;a href="http://renooble.tumblr.com/post/44169556442/git-workflow-part-2" target="_blank"&gt;part-2&lt;/a&gt; for details),&lt;/p&gt;
&lt;pre&gt;$ fab db_cp_prod2dev&lt;/pre&gt;

&lt;p&gt;then start a new branch for your feature&lt;/p&gt;
&lt;pre&gt;$ gpu&lt;/pre&gt;
&lt;pre&gt;$ co -b dev_footer_menu_update&lt;/pre&gt;

&lt;p&gt;*remember I’m using the alliases introduced in the last post (&lt;em&gt;gpu = git pull, co = git checkout, &lt;/em&gt;and&lt;em&gt; co -b &lt;/em&gt;is like &lt;em&gt;git branch branchname +&lt;/em&gt; &lt;em&gt;git checkout branchname &lt;/em&gt;all in one). This takes me straight into the new branch as can be seen with:&lt;/p&gt;
&lt;pre&gt;$ git branch &lt;/pre&gt;
&lt;pre&gt;* dev_footer_menu_update&lt;/pre&gt;
&lt;pre&gt;  dev_some_other_feature&lt;/pre&gt;
&lt;pre&gt;  master&lt;/pre&gt;
&lt;p&gt;Great. so you create a wonderful new footer, update the stuff, stage your changes often (with &lt;em&gt;git add -u&lt;/em&gt;) and commit at the end of the day.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;:  If you had some files in &lt;strong&gt;master&lt;/strong&gt; which you didn’t commit (some unfinished quick bugfix) you will need to go back to master and add/commit those before you continue on the branch.  Otherwise, doing rebase, merge, etc can give you problems.  So for example if you&lt;span&gt;’ve worked on &lt;/span&gt;&lt;strong&gt;&lt;em&gt;footer.html&lt;/em&gt;&lt;/strong&gt;&lt;span&gt; only in your branch, but your get:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;$ git status &lt;/pre&gt;
&lt;pre&gt;#&lt;strong&gt; On branch dev_footer_menu_update&lt;/strong&gt;&lt;/pre&gt;
&lt;pre&gt;# Changes not staged for commit:&lt;/pre&gt;
&lt;pre&gt;#   (use "git add ..." to update what will be committed)&lt;/pre&gt;
&lt;pre&gt;#   (use "git checkout -- ..." to discard changes in working directory)&lt;/pre&gt;
&lt;pre&gt;#
#       modified:   fabfile.py&lt;/pre&gt;
&lt;pre&gt;#       modified:   mysite/assets/bootstrap/somestyle.less&lt;/pre&gt;
&lt;pre&gt;#       modified:   mysite/templates/footer/footer.html&lt;/pre&gt;

&lt;p&gt;You should go back to master and finish the &lt;em&gt;&lt;strong&gt;somestyle.less&lt;/strong&gt;&lt;/em&gt; and &lt;em&gt;&lt;strong&gt;fabfile.py&lt;/strong&gt;&lt;/em&gt; first (obviously there are ways around this with git, but it will make it easier to follow these rules).  If it takes longer, it should have been in a branch to insure its independence.  Ok, so we finish the work on &lt;strong&gt;&lt;em&gt;footer.html&lt;/em&gt;&lt;/strong&gt; and:&lt;/p&gt;
&lt;pre&gt;$ git status &lt;/pre&gt;
&lt;pre&gt;#&lt;strong&gt; On branch dev_footer_menu_update&lt;/strong&gt;&lt;/pre&gt;
&lt;pre&gt;# Changes not staged for commit:&lt;/pre&gt;
&lt;pre&gt;#   (use "git add ..." to update what will be committed)&lt;/pre&gt;
&lt;pre&gt;#   (use "git checkout -- ..." to discard changes in working directory)&lt;/pre&gt;
&lt;pre&gt;&lt;span&gt;#       modified:   mysite/templates/footer/footer.html&lt;/span&gt;&lt;/pre&gt;

&lt;pre&gt;$ ga -u # adds the files we modified, here footer.html&lt;/pre&gt;
&lt;pre&gt;$ gcm "added the suppliers in the footer of the home template"&lt;/pre&gt;
&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;You go to bed, wake up in your &lt;/span&gt;&lt;a href="http://six40winks.com/about/"&gt;polyphasic sleep&lt;/a&gt;&lt;span&gt;, back to bed … and back to the computer. Oh! You forgot to style the footer.  Back to work.  Since we work accross 3 timezones, someone probably messed up your feature touching another file. To avert disaster you pull the changes that others have commited before &amp;#160;:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;$ co master   # means: git checkout master&lt;/pre&gt;
&lt;pre&gt;$ gpu   # means: git pull&lt;/pre&gt;
&lt;pre&gt;$ co dev_footer_menu_update&lt;/pre&gt;
&lt;pre&gt;$ git rebase master&lt;br/&gt;First, rewinding head to replay your work on top of it...
Applying: &lt;span&gt;added the suppliers in the footer of the home template&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;Rebase here will merge the stuff from master which other people have done into your branch.  So you can work on a branch that has the latest upstream files.  This may result in some conflicts, but it’s better to resolve those conflicts in your branch than later in master.  Once you’ve done the rebase in your branch, merging your branch into &lt;strong&gt;master&lt;/strong&gt; will be easy and painless (because you already have the latest master in your branch except for your additions).  &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;So for example, after I commited &lt;strong&gt;a27aa52&lt;/strong&gt;, I branched, worked and commited &lt;strong&gt;18b831f&lt;/strong&gt;. Once I rebase, I get the commits from my colleague Djangonaut Hannes into my branch: that is &lt;strong&gt;6d412e8&lt;/strong&gt;, &lt;strong&gt;50c82fa&lt;/strong&gt;, &lt;strong&gt;43645e4&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://i.imgur.com/hwhO82p.png"/&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;by the way, that log is out &amp;#8220;git log pretty&amp;#8221;, &lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;alias glp='git log --pretty=format:"%Cred%h%Creset - %Cgreen%an%Creset, %ar : %s"'&lt;/pre&gt;
&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Ok, so we rebase to get other people’s updates (or merge if there are too many conflicts). Now we work some more on the styles, check we are on the right branch:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;$ gb&lt;br/&gt;* dev_footer_menu_update&lt;/pre&gt;
&lt;pre&gt;&lt;span&gt;dev_some_other_feature&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;master&lt;span&gt; &lt;br/&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;TEST&lt;/b&gt;, add, commit, and merge:&lt;/p&gt;

&lt;pre&gt;$ ga -u  &lt;/pre&gt;
&lt;pre&gt;$ gcm "updated footer, now with classy styles!"&lt;br/&gt;$ co master&lt;br/&gt;$ git merge dev_footer_menu_update&lt;br/&gt;&lt;br/&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;And finally delete the branch:&lt;/span&gt;&lt;/p&gt;

&lt;pre&gt;$ git branch -d dev_footer_menu_update&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;So to recap these are the steps:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;update the database&lt;/li&gt;
&lt;li&gt;pull, finish and commit any work on master&lt;/li&gt;
&lt;li&gt;create a branch, commit often&lt;/li&gt;
&lt;li&gt;rebase our branch in case master is evolving without us&lt;/li&gt;
&lt;li&gt;merge and delete the branch.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Now, that&amp;#8217;s a lot of typing, so let&amp;#8217;s review how we can do this with  aliases and &lt;a href="http://fabfile.org" title="fabric" target="_blank"&gt;fab functions&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;$ gpu&lt;/pre&gt;
&lt;pre&gt;$ fab db_cp_prod2dev&lt;/pre&gt;
&lt;pre&gt;$ co -b dev_footer_menu_update&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;{ WORK GOES HERE}&lt;/p&gt;

&lt;pre&gt;$ ga -u&lt;/pre&gt;
&lt;pre&gt;$ gcm "some interesting commit"&lt;/pre&gt;
&lt;pre&gt;$ fab update_branch&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;{ MORE WORK GOES HERE}&lt;/p&gt;

&lt;pre&gt;$ ga -u&lt;/pre&gt;
&lt;pre&gt;$ gcm "some interesting commit"&lt;/pre&gt;
&lt;pre&gt;$ fab end_branch&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Where &lt;em&gt;update_branc&lt;/em&gt;h and &lt;em&gt;end_branch&lt;/em&gt; do the following:&lt;/p&gt;
&lt;code id="gist-5082286"&gt;&lt;/code&gt;
and
&lt;code id="gist-5082384"&gt;&lt;/code&gt;
&lt;p&gt;When all this is done, we can of course &lt;/p&gt;
&lt;pre&gt;fab update_testing&lt;/pre&gt;
&lt;p&gt;send an email, let the others know, have a look, run tests, and:&lt;/p&gt;
&lt;pre&gt;fab update_dev&lt;/pre&gt;
&lt;p&gt;when ready.  For a graphical representation of the workflow check out &lt;a href="http://renooble.tumblr.com/post/44541144897/git-workflow-to-develop-a-small-1-3-day" target="_blank"&gt;the next post&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Note that sending an email (or hipchat, or equivalent) after &lt;b&gt;testing&lt;/b&gt; is very important.  Otherwise, it could happen that another developer pushes to the repository, updates testing and finds an error. But without communication, if you are unaware of that error you might update master incorporating your last version (and his last version which has errors).  It would be possible to build a more fool-proof workflow to take care of this, but it&amp;#8217;s a complexity tradeoff, and communicating won&amp;#8217;t hurt either!&lt;/p&gt;</description><link>http://renooble.tumblr.com/post/44539828954</link><guid>http://renooble.tumblr.com/post/44539828954</guid><pubDate>Sun, 03 Mar 2013 13:56:00 +0000</pubDate><category>git</category><category>gitflow</category><category>github</category><category>bit</category><category>flow</category><category>workflow</category><category>django</category><category>python</category><category>code</category><category>programming</category><category>pair programming</category><category>branch</category><category>git branch</category><category>feature</category></item><item><title>git workflow - part 2</title><description>&lt;p&gt;Before creating a branch, doing a quick fix or messing with the models, we need to make sure our database is the same as the production one.&lt;/p&gt;
&lt;p&gt;To do so we have a single bash (or fab) script which does:&lt;/p&gt;
&lt;code id="gist-5052252"&gt;&lt;/code&gt;
&lt;p&gt;This can all be summarized in a fab command which takes into account different OS (linux, mac), different absolute directories, and different naming of files (&lt;a href="https://gist.github.com/alphydan/5051943" title="fabfile.py gist for renooble" target="_blank"&gt;see fabfile.py in gist&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Ok, so we have one of those (&lt;strong&gt;Bfx&lt;/strong&gt;), &lt;em&gt;Urgent but simple bugfix&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;If our database is out of date we can,&lt;/p&gt;
&lt;pre&gt;$ fab &lt;span&gt;db_cp_prod2dev&lt;br/&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;in other words “database copy from production to development” (see gist above).  And because it&amp;#8217;s just a quick fix, we&amp;#8217;ll stay on the master branch:&lt;/p&gt;
&lt;pre&gt;$ gb&lt;br/&gt;  dev_some_feature&lt;br/&gt;* master&lt;br/&gt;&lt;br/&gt;&lt;/pre&gt;
&lt;p&gt;Note that I will use a few git aliases to save my typing, in particular I have a ~/.bash_aliases with:&lt;/p&gt;
&lt;code id="gist-5052152"&gt;&lt;/code&gt;
&lt;p&gt;So, work, work, work, fix, fix, fix.&lt;/p&gt;
&lt;pre&gt;$ ga -u&lt;br/&gt;$ gcm "quick fix, the margin in the CSS had gone cookoo, fixed .home-box class"&lt;br/&gt;$ gp&lt;/pre&gt;
&lt;p&gt;&lt;br/&gt;Then send to testing&lt;/p&gt;
&lt;pre&gt;$ fab update_testing&lt;/pre&gt;
which does,
&lt;code id="gist-5076026"&gt;&lt;/code&gt;
&lt;p&gt;and similarly send to production when ready&lt;/p&gt;
&lt;pre&gt;$ fab update_prod&lt;/pre&gt;
&lt;p&gt; Here&amp;#8217;s a graphical overview of the whole thing:&lt;/p&gt;
&lt;img src="http://media.tumblr.com/530c04ad56df9508d1279da7b42b4ad6/tumblr_inline_mk4501zFrM1qz4rgp.png" alt="git workflow for renooble quick bugfix"/&gt;&lt;p&gt;And that&amp;#8217;s it for bug-fixing alone.  Next part, developing a small feature in a branch.&lt;/p&gt;</description><link>http://renooble.tumblr.com/post/44169556442</link><guid>http://renooble.tumblr.com/post/44169556442</guid><pubDate>Sun, 03 Mar 2013 01:42:00 +0000</pubDate><category>database</category><category>workflow</category><category>git</category><category>postgresql</category><category>PostgreSQL 9</category><category>fabfile.py</category><category>fab</category><category>fabscript</category><category>script</category><category>bash</category><category>fabfile</category><category>python</category><category>django</category><category>bash_aliases</category><category>aliases</category></item><item><title>git workflow - part 1</title><description>&lt;p&gt;This will be a series of exploratory articles on how to do django development in a team of 3 using &lt;a href="http://git-scm.com/" title="git" target="_blank"&gt;git&lt;/a&gt;.  Suggestions from the readers are more than welcome, but the solutions have to be cheap and fast as we&amp;#8217;re a bootstraped startup.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Setting the stage:&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.example.com"&gt;&lt;a href="http://www.example.com"&gt;www.example.com&lt;/a&gt;&lt;/a&gt; (production)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;em&gt;prod_db&lt;/em&gt; backed up automatically and regularly to dropbox and to a git repository with a cron job.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;media files, served by a static nginx app and lives in a sub directory /media/ of the above nginx.  Also compressed and backed up regularly to a dropbox account. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;git repository of the django app, and dedicated virtual environment with requirements.txt tracked in the git repository.&lt;/li&gt;
&lt;li&gt;static files (fonts, img, css, js) are in the django project under mysite/assets/ and are served by an nginx static app which has symbolic links to mysite/assets/.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.top-secret-testing-url.com"&gt;&lt;a href="http://www.top-secret-testing-url.com"&gt;www.top-secret-testing-url.com&lt;/a&gt;&lt;/a&gt; (testing)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;em&gt;testing_db&lt;span&gt;&lt;/span&gt;&lt;/em&gt;  is regularly copied from &lt;em&gt;prod_db&lt;strong&gt;, &lt;/strong&gt;&lt;/em&gt;but sometimes diverges for testing. It is also added regularly to the db_backup git repository with a cron job.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;media files, served by a static nginx app and lives in a sub directory testing/media/ of the above nginx. This is so we don’t pollute the /media/ production directory with testing uploads.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;git repository of the django app, and dedicated virtual environment with requirements.txt tracked in the git repository.&lt;/li&gt;
&lt;li&gt;static files (fonts, img, css, js) are in the django project under my_testing_site/assets/ and are served by an nginx static app which has symbolic links from /testing/ to my_testing_site/assets/.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;localhost (local)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;em&gt;dev_db&lt;/em&gt;  is regularly wiped out and a new copy is loaded from &lt;em&gt;prod_db&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;media files, served by django locally, can be loaded using the gziped backup file.&lt;/li&gt;
&lt;li&gt;git repository of the django app, and dedicated virtual environment with requirements.txt tracked in the git repository.&lt;/li&gt;
&lt;li&gt;static files (fonts, img, css, js) are in the django project under assets/ and are served by django.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;strong&gt;The user cases:&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;We will explore a few cases that arise often:&lt;/p&gt;
&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;(Bfx)&lt;/strong&gt;&lt;a href="http://renooble.tumblr.com/post/44169556442/git-workflow-part-2"&gt; Urgent but simple bugfix&lt;/a&gt;.  &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;font end: wrong color, typo, simple css fix&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;minor typo leading to 404 or 500&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Obvious isolated things that can be fixed in 5mn - 2h&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;(ft)&lt;/strong&gt; Small feature branch (single dev). &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;adding a small extra functionality: ex login with fb when twitter and gmail login already work, or one extra field in a model.py.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;can be done/tested by one person in 1-2 days&lt;/li&gt;
&lt;li&gt;&lt;span&gt;is a tick in a trello list&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;(FT)&lt;/strong&gt; Feature branch. &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;adding a full functionality: ex. new model with templates and views, integrating a new django-package, solving deep performance issues, etc &amp;#8230;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;could require collaboration of 2-3 people in 1 or 2 branches.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Is a full trello card.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;can take 2 - 10 days.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Along this exploration we need to remember how to keep our databases in sync with each other (including south migrations in testing and dev branches), how to sync our work when we work in different or common git branches at different speeds, how to backup everything, and how to create simple &lt;/span&gt;&lt;a href="http://docs.fabfile.org/en/1.5/" title="fabric" target="_blank"&gt;fabric&lt;/a&gt;&lt;span&gt; scripts to simplify our life&lt;/span&gt;&lt;/p&gt;</description><link>http://renooble.tumblr.com/post/44069071914</link><guid>http://renooble.tumblr.com/post/44069071914</guid><pubDate>Sun, 03 Mar 2013 01:05:00 +0000</pubDate><category>flow</category><category>work</category><category>workflow</category><category>git</category><category>trello</category><category>python</category><category>django</category><category>deve</category><category>development</category><category>code</category><category>coding</category><category>dev</category><category>production</category><category>localhost</category><category>local</category><category>bitbucket</category><category>github</category><category>deploy</category><category>deployment</category><category>fabric</category></item><item><title>Interesting Django Error Messages: 'function' object has no attribute 'as_view'</title><description>&lt;p&gt;Django&amp;#8217;s debug error messages are usually helpful and provide a good level of description. However, sometimes we encounter error messages, which &amp;#8220;amaze&amp;#8221; us. We would like to take the chance to summarise the results of our solutions here on this blog.&lt;/p&gt;

&lt;p&gt;Today, we worked on a new online feature for re.nooble&amp;#8217;s customers. While writing some classes in the particular `views.py` (yes, we implement class-based responses), we received a strange error message:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Error: &amp;#8216;function&amp;#8217; object has no attribute &amp;#8216;as_view&amp;#8217;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;That error usually is expressed if you try to override a class. That sometimes happens if you copy&amp;amp;paste code and forget to change e.g. the class name. But that was not the case today.&lt;/p&gt;

&lt;p&gt;After a while of online error digging and code testing, we discovered that the `art` of decorating classes/methods changed with introducing &lt;i&gt;class-based views&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code id="gist-5071777"&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;However, this way of decorating methods can not be applied to classes. &lt;br/&gt;&lt;b&gt;If you apply `@login_required`to a class, you will receive the error message: &amp;#8216;function&amp;#8217; object has no attribute &amp;#8216;as_view&amp;#8217;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt; So, how should you decorate classes in Django now?&lt;br/&gt;
For class-based views, you have two options of decorating your classes.&lt;/p&gt;

&lt;p&gt;1) Decorating the URLconf&lt;br/&gt;
2) Decorating the class&lt;/p&gt;

&lt;p&gt;Both options leads to the same result - restricting the access to a class only for logged users. The difference between the options is how the decorator is applied to the class instance.&lt;/p&gt;

&lt;p&gt;Regarding the detailed implementation and the detailed descriptions, please have a look at the very helpful &lt;a href="https://docs.djangoproject.com/en/1.4/topics/class-based-views/#decorating-class-based-views"&gt;Django documentation for decorating classes&lt;/a&gt;.&lt;/p&gt;</description><link>http://renooble.tumblr.com/post/44378576392</link><guid>http://renooble.tumblr.com/post/44378576392</guid><pubDate>Sat, 02 Mar 2013 16:52:14 +0000</pubDate><category>django</category><category>error</category><category>message</category><category>class-based</category><category>decoration</category></item><item><title>Transferring Django Flatpages from the local Testing Server to Production </title><description>&lt;p&gt;At the moment, we are creating a few flatpages for our re.nooble site. Obviously, they are created on a testing/development machine and need to be transferred to the production environment before the release of the latest code feature.&lt;/p&gt;

&lt;p&gt;The few lines below will manage the transfer easily.&lt;/p&gt;

&lt;p&gt;&lt;code id="gist-5070373"&gt;&lt;/code&gt;&lt;/p&gt;</description><link>http://renooble.tumblr.com/post/44361295362</link><guid>http://renooble.tumblr.com/post/44361295362</guid><pubDate>Sat, 02 Mar 2013 10:17:00 +0000</pubDate><category>django</category><category>flatpages</category><category>production</category><category>testing</category></item><item><title>Create an API for your django models</title><description>&lt;p&gt;&lt;a href="http://www.nerdydork.com/basic-authentication-on-mod_wsgi.html"&gt;http://www.nerdydork.com/basic-authentication-on-mod_wsgi.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In our case we simply added&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;strong&gt;WSGIPassAuthorization On&lt;/strong&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;to &lt;span class="pre"&gt;httpd.conf&lt;/span&gt;&lt;/p&gt;</description><link>http://renooble.tumblr.com/post/43933003470</link><guid>http://renooble.tumblr.com/post/43933003470</guid><pubDate>Sun, 24 Feb 2013 23:11:20 +0000</pubDate></item><item><title>font-awesome, twitter-bootstrap facepalm moment ...</title><description>&lt;p&gt;Ok, so I have some django projects using the now ubiquitous &lt;a href="http://twitter.github.com/bootstrap/" target="_blank"&gt;twitter bootstrap&lt;/a&gt;, together with the fantastish &lt;a href="http://fortawesome.github.com/Font-Awesome/" target="_blank"&gt;Font-Awesome&lt;/a&gt;. No problem.  And I like my css  &lt;a href="http://lesscss.org/" target="_blank"&gt;LESS&lt;/a&gt; flavoured, because &amp;#8230; well, because who likes to write css rules over and over? So this results in a folder structure for the assets which looks something like this:&lt;/p&gt;
&lt;pre&gt;
├── assets
│   ├── bootstrap
│   │   ├── docs
│   │   ├── img
│   │   ├── js
│   │   └── less
│   ├── css
│   ├── font
│   ├── img
│   └── js
&lt;/pre&gt;

&lt;p&gt;To enable font-awesome you&amp;#8217;ll have inside the &lt;b&gt;less&lt;/b&gt; directory a file called &lt;i&gt;font-awesome.less&lt;/i&gt; indicating the relative path to the &lt;b&gt;font&lt;/b&gt; folder:&lt;/p&gt;

&lt;pre&gt;
@FontAwesomePath:   "../../font";
&lt;/pre&gt;

&lt;p&gt;because the font file lives two levels out.  So during development I would call the less files from base.html simply as:&lt;/p&gt;

&lt;code id="gist-5026050"&gt;&lt;/code&gt;

&lt;p&gt;But when I ran the Makefile&lt;/p&gt;

&lt;pre&gt;
lessc --compress ${BOOTSTRAP_LESS} &amp;gt; ${BOOTSTRAP_MIN}                                                                                                                               
&lt;/pre&gt;

&lt;p&gt;This would keep the relative path&lt;/p&gt;

&lt;pre&gt;
@FontAwesomePath:   "../../font";
&lt;/pre&gt;

&lt;p&gt;however, the minified css file now lived only one level away from the font directory (as you can see above).  So what was the obvious solution? Well &amp;#8230; here&amp;#8217;s my dumb way out:  modify the Makefile&lt;/p&gt;

&lt;code id="gist-5026124"&gt;&lt;/code&gt;

&lt;p&gt;So to solve this problem, I modify the Makefile, use &lt;i&gt;sed&lt;/i&gt;, test some regex, test regex some more, break, crash burn &amp;#8230; and finally make it work.  Was this a good solution?  Well, two weeks later I realized there&amp;#8217;s a much, much simpler solution: make a copy of the &lt;b&gt;font/&lt;/b&gt; directory in the &lt;b&gt;bootstrap/&lt;/b&gt; directory &amp;#8230; like so:&lt;/p&gt;

&lt;pre&gt;
├── assets
│   ├── bootstrap
│   │   ├── docs
│   │   ├── img
│   │   ├── font
│   │   ├── js
│   │   └── less
│   ├── css
│   ├── font
│   ├── img
│   └── js
&lt;/pre&gt;

&lt;p&gt;so that:&lt;/p&gt;

&lt;pre&gt;
@FontAwesomePath:   "../../font";
&lt;/pre&gt;

is always 

&lt;pre&gt;
@FontAwesomePath:   "../font";
&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;DUUUHH!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Anyway.  I just thought I would share this in case some unsuspecting n00b is looking for regex-es to solve this little issue&lt;/p&gt;</description><link>http://renooble.tumblr.com/post/43932738345</link><guid>http://renooble.tumblr.com/post/43932738345</guid><pubDate>Sun, 24 Feb 2013 23:08:06 +0000</pubDate><category>font-awesome</category><category>fontawesome</category><category>bootstrap</category><category>twitter-bootstrap</category><category>twitter</category><category>twitterbootstrap</category><category>directories</category><category>tree</category><category>dumb</category><category>facepalm</category><category>silly</category><category>101</category><category>css</category><category>less</category><category>font</category><category>directory</category><category>makefile</category><category>make</category><category>unix</category><category>django</category></item><item><title>Complex regexp worked exactly as expected</title><description>&lt;p&gt;&lt;a href="http://devopsreactions.tumblr.com/post/43636741338/complex-regexp-worked-exactly-as-expected" class="tumblr_blog"&gt;devopsreactions&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;img src="http://i.imgur.com/GcrIkeh.gif" alt="image"/&gt;&lt;/p&gt;
&lt;p&gt;Submitted by Leprosy&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://renooble.tumblr.com/post/43716492432</link><guid>http://renooble.tumblr.com/post/43716492432</guid><pubDate>Fri, 22 Feb 2013 11:12:13 +0000</pubDate></item><item><title>Perpetual To-Do List</title><description>&lt;p&gt;&lt;a href="http://facuberte.tumblr.com/post/21515370567/perpetual-to-do-list" class="tumblr_blog"&gt;facuberte&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;div style="margin: auto;"&gt;
&lt;p&gt;&lt;strong&gt;Don’t ignore your dreams&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Don’t work too much&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Say what you think&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cultivate friendships&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be happy&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;By Paul Graham&lt;/p&gt;
&lt;p&gt;&lt;a href="http://paulgraham.com/todo.html"&gt;&lt;a href="http://paulgraham.com/todo.html"&gt;http://paulgraham.com/todo.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://renooble.tumblr.com/post/43489020417</link><guid>http://renooble.tumblr.com/post/43489020417</guid><pubDate>Tue, 19 Feb 2013 15:44:36 +0000</pubDate></item><item><title>django, mysql and ubuntu</title><description>&lt;p&gt;Here&amp;#8217;s the setup from 0 to 127.0.0.1:8000 in 30 seconds:&lt;/p&gt;

&lt;p&gt;I assume you already have python (below version 3.0) in your machine. You also have &lt;a href="http://www.virtualenv.org/en/latest/" title="virtualenv documentation" target="_blank"&gt;virtualenv&lt;/a&gt; (you can &lt;strong&gt; apt-get install python-virtualenv &lt;/strong&gt;) and &lt;a href="http://www.saltycrane.com/blog/2010/02/how-install-pip-ubuntu/" title="pip install from salty crane" target="_blank"&gt;pip&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;code id="gist-4986501"&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After that it&amp;#8217;s the usual: create some models, runserver and syncdb&lt;/p&gt;</description><link>http://renooble.tumblr.com/post/43487545033</link><guid>http://renooble.tumblr.com/post/43487545033</guid><pubDate>Tue, 19 Feb 2013 15:11:00 +0000</pubDate><category>pip</category><category>virtualenv</category><category>python</category><category>python-django</category><category>django</category><category>ubuntu</category><category>mysql</category><category>install</category><category>installation</category><category>how-to</category><category>howto</category><category>instruction</category></item><item><title>femalesoftwareeng:

When I finally get up after 12 hours of...</title><description>&lt;img src="http://25.media.tumblr.com/769f0734a6625c5b235763e8a4f82e86/tumblr_mi51rksZ0Z1s410g9o1_250.gif"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a class="tumblr_blog" href="http://femalesoftwareeng.tumblr.com/post/43012369444/when-i-finally-get-up-after-12-hours-of-coding"&gt;femalesoftwareeng&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When I finally get up after 12 hours of coding&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://renooble.tumblr.com/post/43258191138</link><guid>http://renooble.tumblr.com/post/43258191138</guid><pubDate>Sat, 16 Feb 2013 22:14:00 +0000</pubDate><category>coding</category><category>programming</category></item></channel></rss>
