<?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>Talk Unafraid &#187; Charactr</title>
	<atom:link href="http://www.talkunafraid.co.uk/category/projects/charactr/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.talkunafraid.co.uk</link>
	<description>The (occasionally coherent) ramblings of a geek</description>
	<lastBuildDate>Thu, 09 Feb 2012 02:27:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>RiCal and Google Calendar</title>
		<link>http://www.talkunafraid.co.uk/2009/07/rical-and-google-calendar/</link>
		<comments>http://www.talkunafraid.co.uk/2009/07/rical-and-google-calendar/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 00:29:52 +0000</pubDate>
		<dc:creator>James Harrison</dc:creator>
				<category><![CDATA[Charactr]]></category>
		<category><![CDATA[Code Snippets and Examples]]></category>
		<category><![CDATA[EVE Metrics]]></category>
		<category><![CDATA[MMMetrics]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[eve metrics]]></category>
		<category><![CDATA[ical]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.talkunafraid.co.uk/?p=401</guid>
		<description><![CDATA[So, there was a request on Twitter from ChainerCygnus to get Google Calendar support in Charactr, so I went ahead and implemented it. You can now access an iCal feed of skill changes on Charactr on the characters page, and it uses the Charactr API key to authenticate so it works in anything, no need [...]]]></description>
			<content:encoded><![CDATA[<p>So, there was a request on Twitter from <a href="http://twitter.com/chainercygnus/status/2556207281">ChainerCygnus</a> to get Google Calendar support in Charactr, so I went ahead and implemented it. You can now access an iCal feed of skill changes on Charactr on the characters page, and it uses the Charactr API key to authenticate so it works in anything, no need for HTTP Basic authentication support or anything.</p>
<p>Implementing was actually really easy. I grabbed the RiCal gem off Github, threw in the config.gem line in environment.rb, and added this to the characters controller index action:</p>
<div class="geshi no ruby">
<div class="head">respond_to do |format|</div>
<ol>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">format</span>.<span class="me1">html</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">format</span>.<span class="me1">ics</span> <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; rna = <span class="br0">&#91;</span><span class="st0">&#39;(Untrained)&#39;</span>,<span class="st0">&#39;I&#39;</span>,<span class="st0">&#39;II&#39;</span>,<span class="st0">&#39;III&#39;</span>,<span class="st0">&#39;IV&#39;</span>,<span class="st0">&#39;V&#39;</span><span class="br0">&#93;</span> <span class="co1"># Used below for roman numerals</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; cal = RiCal.<span class="me1">Calendar</span> <span class="kw1">do</span> <span class="sy0">|</span>cal<span class="sy0">|</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; cal.<span class="me1">add_x_property</span><span class="br0">&#40;</span><span class="st0">&#39;X-WR-CALNAME&#39;</span>,<span class="st0">&#39;Charactr&#39;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="re1">@characters</span>.<span class="me1">each</span> <span class="kw1">do</span> <span class="sy0">|</span>char<span class="sy0">|</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> char.<span class="me1">skills_in_training</span>.<span class="me1">length</span> <span class="sy0">&amp;</span>gt; <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; char.<span class="me1">skills_in_training</span>.<span class="me1">each</span> <span class="kw1">do</span> <span class="sy0">|</span>s<span class="sy0">|</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cal.<span class="me1">event</span> <span class="kw1">do</span> <span class="sy0">|</span>e<span class="sy0">|</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.<span class="me1">summary</span> <span class="st0">&quot;#{char.name} finishes #{s.type.name} #{rna[s.level]}&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.<span class="me1">description</span> <span class="st0">&quot;#{char.name} finishes #{s.type.name} #{rna[s.level]}&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.<span class="me1">dtstart</span> s.<span class="me1">end_time</span><span class="nu0">-10</span>.<span class="me1">minutes</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.<span class="me1">dtstart</span> s.<span class="me1">end_time</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">end</span><span class="co1"># event</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">end</span> <span class="co1"># skills loop</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">end</span> <span class="co1"># skillintraining &amp;gt; 0</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">end</span> <span class="co1"># char loop</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">end</span> <span class="co1"># calendar</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; render <span class="re3">:text</span><span class="sy0">=&amp;gt;</span>cal.<span class="me1">export</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>So as you can see, it&#8217;s a snap. Rails ships with a preconfigured MIME type for the :ics format, so it&#8217;s handled properly by nginx automatically. Still having some issues making Google Calendar accept the feed&#8217;s name as Charactr, mind you, but the rest works flawlessly and is available for all Charactr users right now.</p>
<p>On a side note, we&#8217;ve set up the <a href="http://twitter.com/mmmetrics">@mmmetrics</a> Twitter account as a shared account between all the MMMetrics team; if you&#8217;re having problems with any of the sites and use Twitter that&#8217;s a pretty good port of call. We&#8217;ll also be using that for announcements and so on, so it might make sense to follow if you&#8217;re interested in what we do.</p>
<p>It&#8217;s been a busy day on EVE Metrics 2, so I leave you with a few teaser screenshots. We&#8217;re almost done with the basic market view pages, and it&#8217;s now a matter of implementing the smaller features- market favourites, map features, and the APIs. EM2 won&#8217;t be an instant fullfilment of every feature promised over the past year or so; we&#8217;re taking the development slowly. EM2 at release won&#8217;t be as feature-packed as EM1, but it&#8217;ll work a whole lot better! Once we&#8217;ve gotten it released (hopefully in just under a week) we&#8217;ll be adding features and maintaining the site continuously to get all the features you want implemented without affecting performance.</p>

<a href='http://www.talkunafraid.co.uk/2009/07/rical-and-google-calendar/2009-07-09_1746/' title='Regional Statistics Overview'><img width="150" height="150" src="http://assets.talkunafraid.co.uk/2009/07/2009-07-09_1746-150x150.png" class="attachment-thumbnail" alt="Regional Statistics Overview" title="Regional Statistics Overview" /></a>
<a href='http://www.talkunafraid.co.uk/2009/07/rical-and-google-calendar/2009-07-09_1653/' title='Price History Graphs'><img width="150" height="150" src="http://assets.talkunafraid.co.uk/2009/07/2009-07-09_1653-150x150.png" class="attachment-thumbnail" alt="Price History Graphs" title="Price History Graphs" /></a>
<a href='http://www.talkunafraid.co.uk/2009/07/rical-and-google-calendar/2009-07-09_1923/' title='Order Lists'><img width="150" height="150" src="http://assets.talkunafraid.co.uk/2009/07/2009-07-09_1923-150x150.png" class="attachment-thumbnail" alt="Order Lists" title="Order Lists" /></a>

]]></content:encoded>
			<wfw:commentRss>http://www.talkunafraid.co.uk/2009/07/rical-and-google-calendar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Rails and nginx/thin</title>
		<link>http://www.talkunafraid.co.uk/2009/06/rails-and-nginxthin/</link>
		<comments>http://www.talkunafraid.co.uk/2009/06/rails-and-nginxthin/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 22:04:09 +0000</pubDate>
		<dc:creator>James Harrison</dc:creator>
				<category><![CDATA[Awesome Stuff]]></category>
		<category><![CDATA[Charactr]]></category>
		<category><![CDATA[Code Snippets and Examples]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[servers]]></category>
		<category><![CDATA[stuffisawesome]]></category>
		<category><![CDATA[thin]]></category>

		<guid isPermaLink="false">http://www.talkunafraid.co.uk/?p=350</guid>
		<description><![CDATA[For the EVE people reading my blog, probably best to skip this one. If you&#8217;re one of my Rails readers, however, then this may interest you. Charactr has been doing quite well. We originally released it deployed on Apache with Passenger (also known as mod_rails). While the performance was tolerable it wasn&#8217;t the snappiest thing [...]]]></description>
			<content:encoded><![CDATA[<p>For the EVE people reading my blog, probably best to skip this one. If you&#8217;re one of my Rails readers, however, then this may interest you.</p>
<p>Charactr has been doing quite well. We originally released it deployed on Apache with Passenger (also known as mod_rails). While the performance was tolerable it wasn&#8217;t the snappiest thing in the world, and on a memory-limited VPS even with Ruby Enterprise Edition we were often running into memory limits. Right now however we&#8217;re on nginx and thin, the first production environment I&#8217;ve used this combination for.</p>
<p>Performance-wise, I&#8217;m impressed. Not only is the static asset hosting snappy as anything, but thin handles remarkably well and does it without chewing up much RAM. I&#8217;m pretty sure Passenger/REE would win on a box with a few gigs of RAM, but on something this small (540 megs, including the db server on the same box) the extra overhead from Passenger&#8217;s spawner was too much.</p>
<p>Configuration is where nginx really wins out, however&#8230;</p>
<p><span id="more-350"></span>There&#8217;s nothing wrong per-se with Apache&#8217;s configuration, but nginx makes life a whole lot easier for hosting Rails apps. First off, many thanks to <a href="http://forum.nginx.org/profile.php?2,47">Igor Sysoev</a> for some recommendations in this config and help debugging an issue with 502 catching (So I can display a pretty page to the users while the cluster restarts; ideally we&#8217;d avoid this entirely but I&#8217;m not sure how I&#8217;d go about doing it on a budget).</p>
<div class="geshi no perl">
<div class="head"># Your thin servers go here</div>
<ol>
<li class="li1">
<div class="de1">upstream charactrapp <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">server <span class="nu0">127.0</span><span class="nu0">.0</span><span class="nu0">.1</span>:<span class="nu0">3000</span>;</div>
</li>
<li class="li1">
<div class="de1">server <span class="nu0">127.0</span><span class="nu0">.0</span><span class="nu0">.1</span>:<span class="nu0">3001</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># The usual server</span></div>
</li>
<li class="li1">
<div class="de1">server <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">listen</span> &nbsp; <span class="nu0">80</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; server_name charactrapp.com www.charactrapp.com;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; access_log <span class="sy0">/</span>opt<span class="sy0">/</span>www<span class="sy0">/</span>charactr<span class="sy0">/</span>access.<span class="kw3">log</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; error_log <span class="sy0">/</span>opt<span class="sy0">/</span>www<span class="sy0">/</span>charactr<span class="sy0">/</span>error.<span class="kw3">log</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; root &nbsp; <span class="sy0">/</span>opt<span class="sy0">/</span>www<span class="sy0">/</span>charactr<span class="sy0">/</span>current<span class="sy0">/</span>public<span class="sy0">/</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">index</span> &nbsp;<span class="kw3">index</span>.html;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># Compress what we can, but make sure msie6 doesn&#39;t get gzip content and don&#39;t gzip tiny stuff</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; on;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip_min_length &nbsp;<span class="nu0">1000</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip_proxied &nbsp; &nbsp; expired no-cache no-store private auth;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip_types &nbsp; &nbsp; &nbsp; text<span class="sy0">/</span>plain application<span class="sy0">/</span>xml text<span class="sy0">/</span>css application<span class="sy0">/</span>javascript;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip_disable &nbsp; &nbsp; msie6;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># Catches anything that isn&#39;t sent to assets. (should catch nothing)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; location ~<span class="sy0">*</span> <span class="br0">&#40;</span>css<span class="sy0">|</span>js<span class="sy0">|</span>png<span class="sy0">|</span>jpe?g<span class="sy0">|</span>gif<span class="sy0">|</span>ico<span class="br0">&#41;</span>$ <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; expires max;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># Will render page caches if they&#39;re there, or redirect to the cluster</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; location <span class="sy0">/</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; try_files <span class="re0">$uri</span><span class="sy0">/</span><span class="kw3">index</span>.html <span class="re0">$uri</span>.html <span class="re0">$uri</span> <span class="re0">@charactrapp</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># The cluster is here</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; location <span class="re0">@charactrapp</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; proxy_pass http:<span class="sy0">//</span>charactrapp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; proxy_set_header X-Real-IP <span class="re0">$remote_addr</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; proxy_set_header X-Forwarded-For <span class="re0">$proxy_add_x_forwarded_for</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; proxy_set_header Host <span class="re0">$http_host</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; proxy_redirect off;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># Catch servers being down and display a message. Has to be a location.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; error_page <span class="nu0">502</span> <span class="sy0">/</span><span class="nu0">502</span>.html;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; location = <span class="sy0">/</span><span class="nu0">502</span>.html <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">server <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">listen</span> &nbsp; <span class="nu0">443</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; server_name charactrapp.com www.charactrapp.com;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; access_log <span class="sy0">/</span>opt<span class="sy0">/</span>www<span class="sy0">/</span>charactr<span class="sy0">/</span>access.<span class="kw3">log</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; error_log <span class="sy0">/</span>opt<span class="sy0">/</span>www<span class="sy0">/</span>charactr<span class="sy0">/</span>error.<span class="kw3">log</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; root &nbsp; <span class="sy0">/</span>opt<span class="sy0">/</span>www<span class="sy0">/</span>charactr<span class="sy0">/</span>current<span class="sy0">/</span>public<span class="sy0">/</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">index</span> &nbsp;<span class="kw3">index</span>.html;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; on;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip_min_length &nbsp;<span class="nu0">1000</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip_proxied &nbsp; &nbsp; expired no-cache no-store private auth;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip_types &nbsp; &nbsp; &nbsp; text<span class="sy0">/</span>plain application<span class="sy0">/</span>xml text<span class="sy0">/</span>css application<span class="sy0">/</span>javascript;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip_disable &nbsp; &nbsp; msie6;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1"># Enable SSL</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ssl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;on;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; ssl_certificate &nbsp; &nbsp; &nbsp;<span class="sy0">/</span>path<span class="sy0">/</span>to<span class="sy0">/</span>chained.crt; <span class="co1"># This actually has the domain&#39;s cert, and the CA&#39;s cert/chain all in one file</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ssl_certificate_key &nbsp;<span class="sy0">/</span>path<span class="sy0">/</span>to<span class="sy0">/</span>app.key; <span class="co1"># Key for the domain&#39;s cert</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; keepalive_timeout &nbsp; &nbsp;<span class="nu0">70</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; location ~<span class="sy0">*</span> <span class="br0">&#40;</span>css<span class="sy0">|</span>js<span class="sy0">|</span>png<span class="sy0">|</span>jpe?g<span class="sy0">|</span>gif<span class="sy0">|</span>ico<span class="br0">&#41;</span>$ <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; expires max;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; location <span class="sy0">/</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; try_files <span class="re0">$uri</span><span class="sy0">/</span><span class="kw3">index</span>.html <span class="re0">$uri</span>.html <span class="re0">$uri</span> <span class="re0">@charactrapp</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; location <span class="re0">@charactrapp</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; proxy_pass http:<span class="sy0">//</span>charactrapp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; proxy_set_header X-FORWARDED_PROTO https; <span class="co1"># Vital for ssl_requirement plugin to function correctly.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; proxy_set_header X-Real-IP <span class="re0">$remote_addr</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; proxy_set_header X-Forwarded-For <span class="re0">$proxy_add_x_forwarded_for</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; proxy_set_header Host <span class="re0">$http_host</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; proxy_redirect off;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; error_page <span class="nu0">502</span> <span class="sy0">/</span><span class="nu0">502</span>.html;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; location = <span class="sy0">/</span><span class="nu0">502</span>.html <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Asset subdomain, just caches everything it serves with public Cache-Control.</span></div>
</li>
<li class="li1">
<div class="de1">server <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">listen</span> &nbsp; <span class="nu0">80</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; server_name assets.charactrapp.com;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; access_log <span class="sy0">/</span>opt<span class="sy0">/</span>www<span class="sy0">/</span>charactr<span class="sy0">/</span>access.<span class="kw3">log</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; error_log <span class="sy0">/</span>opt<span class="sy0">/</span>www<span class="sy0">/</span>charactr<span class="sy0">/</span>error.<span class="kw3">log</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; root &nbsp; <span class="sy0">/</span>opt<span class="sy0">/</span>www<span class="sy0">/</span>charactr<span class="sy0">/</span>current<span class="sy0">/</span>public<span class="sy0">/</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">index</span> &nbsp;<span class="kw3">index</span>.html;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; on;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip_min_length &nbsp;<span class="nu0">1000</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip_proxied &nbsp; &nbsp; expired no-cache no-store private auth;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip_types &nbsp; &nbsp; &nbsp; text<span class="sy0">/</span>plain application<span class="sy0">/</span>xml text<span class="sy0">/</span>css application<span class="sy0">/</span>javascript application<span class="sy0">/</span>x-javascript;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; gzip_disable &nbsp; &nbsp; msie6;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; expires max;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; add_header Cache-Control public;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>See? That&#8217;s all of Charactr&#8217;s configs. Of course, there&#8217;s still the server config but that&#8217;s pretty simple, and the default will do just fine for that.</p>
<p>So, overall I&#8217;m impressed with nginx. Thin I&#8217;ve used before and will be doing so with EVE Metrics 2; the combination of excellent stability with an Evented architecture hasn&#8217;t failed me yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.talkunafraid.co.uk/2009/06/rails-and-nginxthin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Charactr Released!</title>
		<link>http://www.talkunafraid.co.uk/2009/06/charactr-released/</link>
		<comments>http://www.talkunafraid.co.uk/2009/06/charactr-released/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 21:28:40 +0000</pubDate>
		<dc:creator>James Harrison</dc:creator>
				<category><![CDATA[Charactr]]></category>
		<category><![CDATA[MMMetrics]]></category>
		<category><![CDATA[EVE]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[stuffisawesome]]></category>

		<guid isPermaLink="false">http://www.talkunafraid.co.uk/?p=347</guid>
		<description><![CDATA[Well, time to unveil the application that myself, Makurid, flexd and Lilima Zennen have been working on for the past month. The app is Charactr, a web based skill training monitor and planner with both email and SMS notifications. Go check it out! The team (MMMetrics) is the same team who will be attacking the [...]]]></description>
			<content:encoded><![CDATA[<p>Well, time to unveil the application that myself, Makurid, flexd and Lilima Zennen have been working on for the past month.</p>
<p>The app is <a href="http://www.charactrapp.com/">Charactr</a>, a web based skill training monitor and planner with both email and SMS notifications. Go check it out!</p>
<p>The team (MMMetrics) is the same team who will be attacking the problem of EVE Metrics 2. A quick rundown of the features of Charactr:</p>
<ul>
<li>Support for as many API keys as you want</li>
<li> Flexible notification framework
<ul>
<li>Send notifications via text message or email</li>
<li>Get notifications on specific characters, accounts, or everything</li>
<li>Receive daily summaries, messages before or on completion</li>
</ul>
</li>
<li> Powerful skill planner
<ul>
<li>&#8216;New Character&#8217; training speed bonus support</li>
<li>Learning skill suggestions</li>
<li>Reorder, add and delete skills</li>
<li>Training for item/ship</li>
</ul>
</li>
<li>Secure and fast access anywhere in the world</li>
<li>SMS messaging to over 750 networks in over 200 countries</li>
</ul>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.talkunafraid.co.uk/2009/06/charactr-released/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

