<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Noss Media</title>
	<atom:link href="http://www.nossmedia.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nossmedia.com</link>
	<description>@landongn</description>
	<lastBuildDate>Wed, 21 Sep 2011 16:35:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Diablo 3 Beta is out.</title>
		<link>http://www.nossmedia.com/2011/09/diablo-3-beta-is-out/</link>
		<comments>http://www.nossmedia.com/2011/09/diablo-3-beta-is-out/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 16:34:59 +0000</pubDate>
		<dc:creator>@landongn</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[blizzard]]></category>
		<category><![CDATA[gaming]]></category>

		<guid isPermaLink="false">http://www.nossmedia.com/?p=35</guid>
		<description><![CDATA[Apparently, overnight press and certain people started getting keys for the Diablo 3 Closed beta.    The things I would do for an invite into that thing would probably end my professional and personal lives.  Maybe it&#8217;s a good thing that I don&#8217;t have a key?   here&#8217;s Rock Paper Shotgun&#8217;s incredibly early preview notes: http://www.rockpapershotgun.com/2011/09/21/diablo-iii-incredibly-early-impressions/ ...]]></description>
			<content:encoded><![CDATA[<p>Apparently, overnight press and certain people started getting keys for the Diablo 3 Closed beta.    The things I would do for an invite into that thing would probably end my professional and personal lives.  Maybe it&#8217;s a good thing that I don&#8217;t have a key?</p>
<p> </p>
<p>here&#8217;s Rock Paper Shotgun&#8217;s incredibly early preview notes: <a href="http://www.rockpapershotgun.com/2011/09/21/diablo-iii-incredibly-early-impressions/">http://www.rockpapershotgun.com/2011/09/21/diablo-iii-incredibly-early-impressions/</a></p>
<p> </p>
<blockquote>
<p><span style="color: #1d1d1d; font-family: Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; background-color: #ffffff; display: inline !important; float: none;">What I’m noticing most of all is just how </span><em style="color: #1d1d1d; font-family: Arial, sans-serif; font-size: 14px; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; background-color: #ffffff; padding: 0px; margin: 0px; border: 0px initial initial;">right</em><span style="color: #1d1d1d; font-family: Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; background-color: #ffffff; display: inline !important; float: none;"> everything feels. In my experience, dungeon crawling hackfests (as I believe the genre should be known) tend to frustrate in a few niggly ways. Perhaps they make loot gathering a chore, or forget to let you usefully compare items. Sometimes it’s simply the screen furniture, or the frustration of having to read so much in a game focused on frantic fighting. But Blizzard, perhaps not too surprisingly, really are getting it right here.</span></p>
</blockquote>
<p>Damn it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nossmedia.com/2011/09/diablo-3-beta-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a custom Tornado decorator with functools</title>
		<link>http://www.nossmedia.com/2011/08/create-a-custom-tornado-decorator-with-functools/</link>
		<comments>http://www.nossmedia.com/2011/08/create-a-custom-tornado-decorator-with-functools/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 03:29:10 +0000</pubDate>
		<dc:creator>@landongn</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Tornado]]></category>
		<category><![CDATA[Decorators]]></category>
		<category><![CDATA[Functools]]></category>

		<guid isPermaLink="false">http://www.nossmedia.com/?p=14</guid>
		<description><![CDATA[Decorators are neat.  They let you do things in much the same way javascript&#8217;s anonymous functions work. So why use a decorator? Why not create an override (or overload, depending on your vernacular) to accomplish the same sort of goal? I had a problem today where I needed to ensure a specific variable was coming ...]]></description>
			<content:encoded><![CDATA[<p>Decorators are neat.  They let you do things in much the same way javascript&#8217;s anonymous functions work.</p>
<p>So why use a decorator? Why not create an override (or overload, depending on your vernacular) to accomplish the same sort of goal?</p>
<p>I had a problem today where I needed to ensure a specific variable was coming over in a query string argument in the wonderful tornado framework.  I didn&#8217;t want to have to reinvent the wheel, or have to overwrite the concept of simplicity in the Web class in the framework.  Programmers in general are lazy people, and like doing a lot with a little, so I decided to see how tornado handled it&#8217;s decorators.</p>
<p>&nbsp;</p>
<p>Before I dig into the code, a few notes:</p>
<blockquote><p> A decorator is the name used for a software design pattern. Decorators dynamically alter the functionality of a function, method, or class without having to directly use subclasses or change the source code of the function being decorated.</p></blockquote>
<p>Make sense? It wasn&#8217;t really clear to me either.  But I&#8217;ve used anonymous functions in javascript to alter a function without interfering with the global object, so why can&#8217;t we do something similar in Python?  Well- It turns out; We can.</p>
<p>Here&#8217;s what tornado does to handle their @authenticated decorator. (for authenticating a user before executing the route)</p>
<div class="codecolorer-container python twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> authenticated<span style="color: black;">&#40;</span>method<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #483d8b;">&quot;&quot;&quot;Decorate methods with this to require that the user be logged in.&quot;&quot;&quot;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">@</span>functools.<span style="color: black;">wraps</span><span style="color: black;">&#40;</span>method<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> wrapper<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> *args<span style="color: #66cc66;">,</span> **kwargs<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #008000;">self</span>.<span style="color: black;">current_user</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">request</span>.<span style="color: black;">method</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;GET&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;HEAD&quot;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; url <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">get_login_url</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #483d8b;">&quot;?&quot;</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> url:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">urlparse</span>.<span style="color: black;">urlsplit</span><span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>.<span style="color: black;">scheme</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># if login url is absolute, make next absolute too</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; next_url <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">request</span>.<span style="color: black;">full_url</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; next_url <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">request</span>.<span style="color: black;">uri</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; url +<span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;?&quot;</span> + <span style="color: #dc143c;">urllib</span>.<span style="color: black;">urlencode</span><span style="color: black;">&#40;</span><span style="color: #008000;">dict</span><span style="color: black;">&#40;</span>next<span style="color: #66cc66;">=</span>next_url<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">redirect</span><span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">raise</span> HTTPError<span style="color: black;">&#40;</span><span style="color: #ff4500;">403</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> method<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> *args<span style="color: #66cc66;">,</span> **kwargs<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> wrapper</div></td></tr></tbody></table></div>
<p>Whoa. tons of stuff going on here. Lets break it down.</p>
<p>First, it&#8217;s important to note that this lives OUTSIDE of any particular class.</p>
<div class="codecolorer-container python twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> authenticated<span style="color: black;">&#40;</span>method<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #483d8b;">&quot;&quot;&quot;Decorate methods with this to require that the user be logged in.&quot;&quot;&quot;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">@</span>functools.<span style="color: black;">wraps</span><span style="color: black;">&#40;</span>method<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> wrapper<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> *args<span style="color: #66cc66;">,</span> **kwargs<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; implementation_details<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> method<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> *args<span style="color: #66cc66;">,</span> **kwargs<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> wrapper</div></td></tr></tbody></table></div>
<p>Wait, what? @functools? </p>
<blockquote><p>The <tt>functools</tt> module is for higher-order functions: functions that act on or return other functions. In general, any callable object can be treated as a function for the purposes of this module.</p></blockquote>
<p>Get that?  for any javascript developers, this may seem familar.  This is somewhat similar to setting up an anonymous function, right? </p>
<p>The most important thing to remember here is that .wraps() is being fed another method and spitting out that method if conditions or whatever is met during the wrappers execution.  You don&#8217;t necessarily have to return the function (as explained below) but you probably should.  </p>
<p>In the implementation I built for my app, I needed an easy way to throw an error when a condition wasn&#8217;t met during the request&#8217;s execution. Since tornado kind of already does this through it&#8217;s @authenticated decorator, it makes sense to reuse that bit of magic for my own purposes. </p>
<p>Lets go over some boilerplate to defining our own methods for use in tornado.   </p>
<p>For this example, I&#8217;ve built a simple request blocker that returns some json if a user isn&#8217;t allowed to hit an API call.</p>
<div class="codecolorer-container python twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> block_jerks<span style="color: black;">&#40;</span>method<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #483d8b;">&quot;&quot;&quot;The black knight always triumphs!&quot;&quot;&quot;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">@</span>functools.<span style="color: black;">wraps</span><span style="color: black;">&#40;</span>method<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> wrapper<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> *args<span style="color: #66cc66;">,</span> **kwargs<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; should_i_block_this_request <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">check_if_i_should</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> should_i_block_this_request:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.<span style="color: black;">you_have_been_blocked</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> method<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> *args<span style="color: #66cc66;">,</span> **kwargs<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> wrapper</div></td></tr></tbody></table></div>
<p>Then later on, when i want to actually use this decorator, I do the following:</p>
<div class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">class SomeHandler(WebRequest):<br />
&nbsp; @block_jerks<br />
&nbsp; def get(self, param):<br />
&nbsp; &nbsp; self.write('tis but a scratch')</div></td></tr></tbody></table></div>
<p>Of course, this assumes that you have a global subclass of tornado.web.RequestHandler (WebRequest above) somewhere in your project.  You should probably do that to avoid violating DRY.  When you have something of that sort, just import the decorator like you would a class in your file and you&#8217;re good to go.</p>
<div class="codecolorer-container python twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">import</span> functools<br />
<span style="color: #ff7700;font-weight:bold;">import</span> tornado.<span style="color: black;">web</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> block_jerks<span style="color: black;">&#40;</span>method<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #483d8b;">&quot;&quot;&quot;The black knight always triumphs!&quot;&quot;&quot;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">@</span>functools.<span style="color: black;">wraps</span><span style="color: black;">&#40;</span>method<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> wrapper<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> *args<span style="color: #66cc66;">,</span> **kwargs<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; should_i_block_this_request <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">check_if_i_should</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> should_i_block_this_request:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.<span style="color: black;">you_have_been_blocked</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> method<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> *args<span style="color: #66cc66;">,</span> **kwargs<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> wrapper<br />
&nbsp; &nbsp; <br />
<span style="color: #ff7700;font-weight:bold;">class</span> WebRequest<span style="color: black;">&#40;</span>tornado.<span style="color: black;">web</span>.<span style="color: black;">RequestHandler</span><span style="color: black;">&#41;</span>:<br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">pass</span><br />
&nbsp; <br />
<span style="color: #ff7700;font-weight:bold;">class</span> SomeHandler<span style="color: black;">&#40;</span>WebRequest<span style="color: black;">&#41;</span>:<br />
&nbsp; <span style="color: #66cc66;">@</span>block_jerks<br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> get<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> param<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'tis but a scratch'</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
<p>That&#8217;s really it.  We now have a decorator in place that we can use anywhere in our routes.  (because we&#8217;re using a project-wide subclass of RequestHandler, right?)</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nossmedia.com/2011/08/create-a-custom-tornado-decorator-with-functools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aah.  That&#8217;s better.</title>
		<link>http://www.nossmedia.com/2011/08/aah-thats-better/</link>
		<comments>http://www.nossmedia.com/2011/08/aah-thats-better/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 18:32:36 +0000</pubDate>
		<dc:creator>@landongn</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Kickoff]]></category>
		<category><![CDATA[Woosah]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://www.nossmedia.com/?p=5</guid>
		<description><![CDATA[It&#8217;s been a while since I&#8217;ve done nearly any writing.  I&#8217;m embarking on what would seem to be a completely insane task:  Build a world class Javascript and HTML application for use on one of the largest consumer facing websites in the known universe (relatively, anyway). &#160; This will be the chronicle of those efforts. ...]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a while since I&#8217;ve done nearly any writing.  I&#8217;m embarking on what would seem to be a completely insane task:  Build a world class Javascript and HTML application for use on one of the largest consumer facing websites in the known universe (relatively, anyway).</p>
<p>&nbsp;</p>
<p>This will be the chronicle of those efforts.  Any tweak, fix, tool, or trick that I come across will be posted here, along with daily updates on the projects status.</p>
<p>&nbsp;</p>
<p>I hope you&#8217;ll find it useful, at least.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nossmedia.com/2011/08/aah-thats-better/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

