<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments for NIL: .to write(1) ~ help:about</title>
	<atom:link href="http://tech.blog.aknin.name/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://tech.blog.aknin.name</link>
	<description>Glossolalia about technology by @aknin</description>
	<lastBuildDate>Tue, 31 Jan 2012 18:23:15 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>Comment on I wish someone wrote django-static-upstream&#8230; maybe even&#8230; me! by seo</title>
		<link>http://tech.blog.aknin.name/2011/12/28/i-wish-someone-wrote-django-static-upstream-maybe-even-me/#comment-1464</link>
		<dc:creator><![CDATA[seo]]></dc:creator>
		<pubDate>Tue, 31 Jan 2012 18:23:15 +0000</pubDate>
		<guid isPermaLink="false">http://tech.blog.aknin.name/?p=1210#comment-1464</guid>
		<description><![CDATA[Hi there just wanted to give you a quick heads up. The text in your content seem to be running off the screen in Internet explorer. I&#039;m not sure if this is a formatting issue or something to do with internet browser compatibility but I thought I&#039;d post to let you know. The design look great though! Hope you get the problem resolved soon. Kudos]]></description>
		<content:encoded><![CDATA[<p>Hi there just wanted to give you a quick heads up. The text in your content seem to be running off the screen in Internet explorer. I&#8217;m not sure if this is a formatting issue or something to do with internet browser compatibility but I thought I&#8217;d post to let you know. The design look great though! Hope you get the problem resolved soon. Kudos</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on I wish someone wrote django-static-upstream&#8230; maybe even&#8230; me! by George (@rogueleaderr)</title>
		<link>http://tech.blog.aknin.name/2011/12/28/i-wish-someone-wrote-django-static-upstream-maybe-even-me/#comment-1442</link>
		<dc:creator><![CDATA[George (@rogueleaderr)]]></dc:creator>
		<pubDate>Tue, 17 Jan 2012 17:25:30 +0000</pubDate>
		<guid isPermaLink="false">http://tech.blog.aknin.name/?p=1210#comment-1442</guid>
		<description><![CDATA[I would use this if it existed.]]></description>
		<content:encoded><![CDATA[<p>I would use this if it existed.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on I wish someone wrote django-static-upstream&#8230; maybe even&#8230; me! by Ben Timby</title>
		<link>http://tech.blog.aknin.name/2011/12/28/i-wish-someone-wrote-django-static-upstream-maybe-even-me/#comment-1352</link>
		<dc:creator><![CDATA[Ben Timby]]></dc:creator>
		<pubDate>Fri, 30 Dec 2011 19:36:31 +0000</pubDate>
		<guid isPermaLink="false">http://tech.blog.aknin.name/?p=1210#comment-1352</guid>
		<description><![CDATA[Sorry, a couple other points. We deploy our production and beta assets differently. So the deploy command actually takes an environment parameter so that it can invoke the correct deployment method.

python manage.py media --deploy=production
- or -
python manage.py media --deploy=beta

Currenly my deployment is built around lftp, which syncs all the assets to the server via FTP. But this is configuable in settings.py:

MEDIA_DEPLOY_COMMANDS = {
    &#039;production&#039;: &#039;lftp ...&#039;,
    &#039;beta&#039;: &#039;lftp ...&#039;,
}

I have not yet automated deploying of the app itself, but when I do, then pushing to production will be just two management commands... I will probably end up using fab for that.

I do agree with the others concerning re-inventing the wheel, but for me it was easier to write what I needed than to piece together a solution from various parts then fix all the parts for my requirements. I did not open source my code because I did not want to pollute the Django ecosystem with another wheel written specifically for my requirements.

However, if you feel the same way I did, perhaps the code is useful outside my walls.]]></description>
		<content:encoded><![CDATA[<p>Sorry, a couple other points. We deploy our production and beta assets differently. So the deploy command actually takes an environment parameter so that it can invoke the correct deployment method.</p>
<p>python manage.py media &#8211;deploy=production<br />
- or -<br />
python manage.py media &#8211;deploy=beta</p>
<p>Currenly my deployment is built around lftp, which syncs all the assets to the server via FTP. But this is configuable in settings.py:</p>
<p>MEDIA_DEPLOY_COMMANDS = {<br />
    &#8216;production&#8217;: &#8216;lftp &#8230;&#8217;,<br />
    &#8216;beta&#8217;: &#8216;lftp &#8230;&#8217;,<br />
}</p>
<p>I have not yet automated deploying of the app itself, but when I do, then pushing to production will be just two management commands&#8230; I will probably end up using fab for that.</p>
<p>I do agree with the others concerning re-inventing the wheel, but for me it was easier to write what I needed than to piece together a solution from various parts then fix all the parts for my requirements. I did not open source my code because I did not want to pollute the Django ecosystem with another wheel written specifically for my requirements.</p>
<p>However, if you feel the same way I did, perhaps the code is useful outside my walls.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on I wish someone wrote django-static-upstream&#8230; maybe even&#8230; me! by Ben Timby</title>
		<link>http://tech.blog.aknin.name/2011/12/28/i-wish-someone-wrote-django-static-upstream-maybe-even-me/#comment-1351</link>
		<dc:creator><![CDATA[Ben Timby]]></dc:creator>
		<pubDate>Fri, 30 Dec 2011 19:28:33 +0000</pubDate>
		<guid isPermaLink="false">http://tech.blog.aknin.name/?p=1210#comment-1351</guid>
		<description><![CDATA[I would love to work with you on this. I have a media manager I wrote with exactly the same motivations in mind.

I would be willing to put it out on GitHub and share it if you think it is a good basis for what you want.

Literally all of your requirements are the same as mine. We do media serving via Django for development, but we serve from a cookieless domain for production. In the future this might be a CDN, but for now is just a dedicated machine.

Static files are pre-processed, I currently do minification and gzipping (so Apache can serve pre-compressed files where appropriate). I also do an additional step, which is to combine javascript files that are used together into bundles.

This is all done by a management command that scans your templates. It finds instances of the {% media %} template tag and extracts the contents to build up a list of media files. Once it has this list, it groups files by type and by template. Then it groups all combinations of files that are used together (that don&#039;t contain other smaller groups). These bundles are concatenated, and compiled.

The {% media %} then serves the bundle in production, or individual files in development mode. It also uses the .min flavor for production, but the non-minified version for development.

Deploying to the CDN is also handled by my media management command. So the process is:

python manage.py media --compress --minify --combine --deploy

Which preps and uploads everything to the CDN. Versioning is handled differently than you describe, but I like your method better (hash before filename which is ignored by media server).

I provided my email with this comment, and will monitor it for follow-ups. If you are interested, I will put this on GitHub and we can continue there.]]></description>
		<content:encoded><![CDATA[<p>I would love to work with you on this. I have a media manager I wrote with exactly the same motivations in mind.</p>
<p>I would be willing to put it out on GitHub and share it if you think it is a good basis for what you want.</p>
<p>Literally all of your requirements are the same as mine. We do media serving via Django for development, but we serve from a cookieless domain for production. In the future this might be a CDN, but for now is just a dedicated machine.</p>
<p>Static files are pre-processed, I currently do minification and gzipping (so Apache can serve pre-compressed files where appropriate). I also do an additional step, which is to combine javascript files that are used together into bundles.</p>
<p>This is all done by a management command that scans your templates. It finds instances of the {% media %} template tag and extracts the contents to build up a list of media files. Once it has this list, it groups files by type and by template. Then it groups all combinations of files that are used together (that don&#8217;t contain other smaller groups). These bundles are concatenated, and compiled.</p>
<p>The {% media %} then serves the bundle in production, or individual files in development mode. It also uses the .min flavor for production, but the non-minified version for development.</p>
<p>Deploying to the CDN is also handled by my media management command. So the process is:</p>
<p>python manage.py media &#8211;compress &#8211;minify &#8211;combine &#8211;deploy</p>
<p>Which preps and uploads everything to the CDN. Versioning is handled differently than you describe, but I like your method better (hash before filename which is ignored by media server).</p>
<p>I provided my email with this comment, and will monitor it for follow-ups. If you are interested, I will put this on GitHub and we can continue there.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Walking Python objects recursively by Yaniv Aknin</title>
		<link>http://tech.blog.aknin.name/2011/12/11/walking-python-objects-recursively/#comment-1348</link>
		<dc:creator><![CDATA[Yaniv Aknin]]></dc:creator>
		<pubDate>Fri, 30 Dec 2011 15:09:02 +0000</pubDate>
		<guid isPermaLink="false">http://niltowrite.wordpress.com/?p=1187#comment-1348</guid>
		<description><![CDATA[Yes, I&#039;ve considered it, but opted to go with PEP 3119&#039;s &lt;a href=&quot;http://www.python.org/dev/peps/pep-3119/#rationale&quot; rel=&quot;nofollow&quot;&gt;rationale&lt;/a&gt;. All in all, I think it&#039;s the best approach.]]></description>
		<content:encoded><![CDATA[<p>Yes, I&#8217;ve considered it, but opted to go with PEP 3119&#8242;s <a href="http://www.python.org/dev/peps/pep-3119/#rationale" rel="nofollow">rationale</a>. All in all, I think it&#8217;s the best approach.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Walking Python objects recursively by Ionel M</title>
		<link>http://tech.blog.aknin.name/2011/12/11/walking-python-objects-recursively/#comment-1347</link>
		<dc:creator><![CDATA[Ionel M]]></dc:creator>
		<pubDate>Fri, 30 Dec 2011 14:29:18 +0000</pubDate>
		<guid isPermaLink="false">http://niltowrite.wordpress.com/?p=1187#comment-1347</guid>
		<description><![CDATA[It&#039;s best to have interface checks (eg: hasattr(obj, &#039;__iter__&#039;) ) instead of isinstance checks (for portability).]]></description>
		<content:encoded><![CDATA[<p>It&#8217;s best to have interface checks (eg: hasattr(obj, &#8216;__iter__&#8217;) ) instead of isinstance checks (for portability).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on I wish someone wrote django-static-upstream&#8230; maybe even&#8230; me! by Tame</title>
		<link>http://tech.blog.aknin.name/2011/12/28/i-wish-someone-wrote-django-static-upstream-maybe-even-me/#comment-1338</link>
		<dc:creator><![CDATA[Tame]]></dc:creator>
		<pubDate>Thu, 29 Dec 2011 15:03:30 +0000</pubDate>
		<guid isPermaLink="false">http://tech.blog.aknin.name/?p=1210#comment-1338</guid>
		<description><![CDATA[I just use django-storages and django-compressor (with offline mode enabled for production). Everything is automatically minified/compressed without having to configure much, and it just works. Some people mix it with django-staticfiles to gain the {% static %} tag you mention, or just to have collectstatic to gather their files when they are scattered all over the place.

IMHO, it would be better to fix the flaws/missing stuff in the existing apps if possible. There are already too many django assets management apps already!.]]></description>
		<content:encoded><![CDATA[<p>I just use django-storages and django-compressor (with offline mode enabled for production). Everything is automatically minified/compressed without having to configure much, and it just works. Some people mix it with django-staticfiles to gain the {% static %} tag you mention, or just to have collectstatic to gather their files when they are scattered all over the place.</p>
<p>IMHO, it would be better to fix the flaws/missing stuff in the existing apps if possible. There are already too many django assets management apps already!.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on I wish someone wrote django-static-upstream&#8230; maybe even&#8230; me! by Wolfgang Schnerring</title>
		<link>http://tech.blog.aknin.name/2011/12/28/i-wish-someone-wrote-django-static-upstream-maybe-even-me/#comment-1332</link>
		<dc:creator><![CDATA[Wolfgang Schnerring]]></dc:creator>
		<pubDate>Thu, 29 Dec 2011 08:58:35 +0000</pubDate>
		<guid isPermaLink="false">http://tech.blog.aknin.name/?p=1210#comment-1332</guid>
		<description><![CDATA[I&#039;m not very familiar with the Django ecosystem, but you might want to take a look at http://fanstatic.org, an asset management system that hooks up to the WSGI pipeline.]]></description>
		<content:encoded><![CDATA[<p>I&#8217;m not very familiar with the Django ecosystem, but you might want to take a look at <a href="http://fanstatic.org" rel="nofollow">http://fanstatic.org</a>, an asset management system that hooks up to the WSGI pipeline.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on I wish someone wrote django-static-upstream&#8230; maybe even&#8230; me! by Matt Austin</title>
		<link>http://tech.blog.aknin.name/2011/12/28/i-wish-someone-wrote-django-static-upstream-maybe-even-me/#comment-1329</link>
		<dc:creator><![CDATA[Matt Austin]]></dc:creator>
		<pubDate>Thu, 29 Dec 2011 02:37:45 +0000</pubDate>
		<guid isPermaLink="false">http://tech.blog.aknin.name/?p=1210#comment-1329</guid>
		<description><![CDATA[I find that using boto, django-storages, and Amazon S3/Cloudfront works very well for me, and is pretty easy to set-up, configure and provide custom headers to set caching max-age etc. I just configure a storage instance with the custom domain, headers, access policy and then set the STATICFILES_STORAGE setting to use this in my production environment.

Using Django 1.3&#039;s &#039;collectstatic&#039; command with &#039;--settings project.productionsettings&#039; allows for easy upload of static files to S3 before I then push changes to the production server.

Invalidation/compilation is still an issue. Haven&#039;t really used compilation/minification much, and I rename my css files when I update then to include the date/time in the file name - this is a bit of a pain.]]></description>
		<content:encoded><![CDATA[<p>I find that using boto, django-storages, and Amazon S3/Cloudfront works very well for me, and is pretty easy to set-up, configure and provide custom headers to set caching max-age etc. I just configure a storage instance with the custom domain, headers, access policy and then set the STATICFILES_STORAGE setting to use this in my production environment.</p>
<p>Using Django 1.3&#8242;s &#8216;collectstatic&#8217; command with &#8216;&#8211;settings project.productionsettings&#8217; allows for easy upload of static files to S3 before I then push changes to the production server.</p>
<p>Invalidation/compilation is still an issue. Haven&#8217;t really used compilation/minification much, and I rename my css files when I update then to include the date/time in the file name &#8211; this is a bit of a pain.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on zsh and virtualenv by Dan Crosta</title>
		<link>http://tech.blog.aknin.name/2010/10/14/zsh-and-virtualenv/#comment-1315</link>
		<dc:creator><![CDATA[Dan Crosta]]></dc:creator>
		<pubDate>Fri, 23 Dec 2011 01:46:20 +0000</pubDate>
		<guid isPermaLink="false">http://tech.blog.aknin.name/?p=1023#comment-1315</guid>
		<description><![CDATA[I&#039;ve recently spent a bit of time customizing virtualenvwrapper through its hooks, and just documented it on my blog: http://late.am/post/2011/12/22/customize-virtualenvwrapper-for-fun-and-profit as a sort of reply to your post.]]></description>
		<content:encoded><![CDATA[<p>I&#8217;ve recently spent a bit of time customizing virtualenvwrapper through its hooks, and just documented it on my blog: <a href="http://late.am/post/2011/12/22/customize-virtualenvwrapper-for-fun-and-profit" rel="nofollow">http://late.am/post/2011/12/22/customize-virtualenvwrapper-for-fun-and-profit</a> as a sort of reply to your post.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

