<?xml version="1.0" encoding="utf-8"?>
<!-- generator="wordpress/1.5.2" -->
<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/"
>

<channel>
	<title>from __future__ import *</title>
	<link>http://bob.pythonmac.org</link>
	<description>Bob's Rants</description>
	<pubDate>Sun, 18 Mar 2007 22:31:57 +0000</pubDate>
	<generator>http://wordpress.org/?v=1.5.2</generator>
	<language>en</language>

		<item>
		<title>simplejson 1.7</title>
		<link>http://bob.pythonmac.org/archives/2007/03/18/simplejson-17/</link>
		<comments>http://bob.pythonmac.org/archives/2007/03/18/simplejson-17/#comments</comments>
		<pubDate>Sun, 18 Mar 2007 22:31:57 +0000</pubDate>
		<dc:creator>bob</dc:creator>
		
	<category>python</category>
	<category>simplejson</category>
		<guid>http://bob.pythonmac.org/archives/2007/03/18/simplejson-17/</guid>
		<description><![CDATA[


simplejson is a simple, fast, complete, correct and extensible JSON (RFC 4627) encoder/decoder for Python 2.3+.  It is pure Python code with no dependencies.
simplejson 1.7 is a minor update that improves encoding performance with an optional C extension to speed up str/unicode encoding (by 10-150x or so), which yields an overall speed boost of [...]]]></description>
			<content:encoded><![CDATA[
<div class="document">
<!-- -*- mode: rst -*- -->
<p><a class="reference" href="http://undefined.org/python/#simplejson">simplejson</a> is a simple, fast, complete, correct and extensible <a class="reference" href="http://json.org/">JSON</a> (<a class="reference" href="http://www.ietf.org/rfc/rfc4627.txt">RFC 4627</a>) encoder/decoder for Python 2.3+.  It is pure Python code with no dependencies.</p>
<p><a class="reference" href="http://undefined.org/python/#simplejson">simplejson</a> 1.7 is a minor update that improves encoding performance with an optional C extension to speed up str/unicode encoding (by 10-150x or so), which yields an overall speed boost of 2x+ (JSON is string-heavy). Additionally 1.7 adds support for encoding unicode code points outside the BMP to UTF-16 surrogate code pairs (specified by the Strings section of <a class="reference" href="http://www.ietf.org/rfc/rfc4627.txt">RFC 4627</a>).</p>
</div>
]]></content:encoded>
			<wfw:commentRSS>http://bob.pythonmac.org/archives/2007/03/18/simplejson-17/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Distel and Erlang mode for Emacs, on Mac OS X</title>
		<link>http://bob.pythonmac.org/archives/2007/03/16/distel-and-erlang-mode-for-emacs-on-mac-os-x/</link>
		<comments>http://bob.pythonmac.org/archives/2007/03/16/distel-and-erlang-mode-for-emacs-on-mac-os-x/#comments</comments>
		<pubDate>Sat, 17 Mar 2007 02:19:23 +0000</pubDate>
		<dc:creator>bob</dc:creator>
		
	<category>erlang</category>
		<guid>http://bob.pythonmac.org/archives/2007/03/16/distel-and-erlang-mode-for-emacs-on-mac-os-x/</guid>
		<description><![CDATA[


In the comments of my post on Erlang Mode for Emacs Tobbe pointed me at the new Distel repository for Distel. I had originally tried to install Distel last year when I began with Erlang but it didn't work. It works now! Here's the deal.

Check out Distel. In my case I'm going to check it [...]]]></description>
			<content:encoded><![CDATA[
<div class="document">
<!-- -*- mode: rst -*- -->
<p>In the comments of my post on <a class="reference" href="http://bob.pythonmac.org/archives/2007/03/14/erlang-mode-for-emacs/">Erlang Mode for Emacs</a> Tobbe pointed me at the <a class="reference" href="http://code.google.com/p/distel/">new Distel repository</a> for <a class="reference" href="http://fresh.homeunix.net/~luke/distel/">Distel</a>. I had originally tried to install <a class="reference" href="http://fresh.homeunix.net/~luke/distel/">Distel</a> last year when I began with <a class="reference" href="http://www.erlang.org/">Erlang</a> but it didn't work. It works now! Here's the deal.</p>
<ol class="arabic">
<li><p class="first">Check out <a class="reference" href="http://fresh.homeunix.net/~luke/distel/">Distel</a>. In my case I'm going to check it out to <tt class="docutils literal"><span class="pre">/Users/bob/src/distel</span></tt>:</p>
<pre class="literal-block">
$ cd /Users/bob/src
$ svn co http://distel.googlecode.com/svn/trunk distel
</pre>
</li>
<li><p class="first">Configure and compile <a class="reference" href="http://fresh.homeunix.net/~luke/distel/">Distel</a>:</p>
<pre class="literal-block">
$ ./configure
$ make
</pre>
</li>
<li><p class="first">Configure <a class="reference" href="http://fresh.homeunix.net/~luke/distel/">Distel</a> and configure <a class="reference" href="http://erlang.se/doc/doc-5.5.3/lib/tools-2.5.3/doc/html/erlang_mode.html">Erlang mode</a>, ensure that the inferior <a class="reference" href="http://www.erlang.org/">Erlang</a> shell has an explicit node name of <tt class="docutils literal"><span class="pre">emacs</span></tt> so that <a class="reference" href="http://fresh.homeunix.net/~luke/distel/">Distel</a> can connect to the. Here's my full <tt class="docutils literal"><span class="pre">.emacs</span></tt>:</p>
<pre class="literal-block">
(add-to-list 'load-path  &quot;/usr/local/lib/erlang/lib/tools-2.5.3/emacs&quot;)
      (setq erlang-root-dir &quot;/usr/local/lib/erlang&quot;)
      (setq exec-path (cons &quot;/usr/local/lib/erlang/bin&quot; exec-path))
      (require 'erlang-start)
(add-to-list 'load-path &quot;/Users/bob/src/distel/elisp&quot;)
      (require 'distel)
      (distel-setup)

;; prevent annoying hang-on-compile
(defvar inferior-erlang-prompt-timeout t)
;; default node name to emacs&#64;localhost
(setq inferior-erlang-machine-options '(&quot;-sname&quot; &quot;emacs&quot;))
;; tell distel to default to that node
(setq erl-nodename-cache
      (make-symbol
       (concat
        &quot;emacs&#64;&quot;
        ;; Mac OS X uses &quot;name.local&quot; instead of &quot;name&quot;, this should work
        ;; pretty much anywhere without having to muck with NetInfo
        ;; ... but I only tested it on Mac OS X.
        (car (split-string (shell-command-to-string &quot;hostname&quot;))))))
</pre>
</li>
<li><p class="first">Add <a class="reference" href="http://fresh.homeunix.net/~luke/distel/">Distel</a> to your <tt class="docutils literal"><span class="pre">~/.erlang</span></tt> so that it's on your <a class="reference" href="http://www.erlang.org/">Erlang</a> code path:</p>
<pre class="literal-block">
$ echo 'code:add_pathsz([&quot;/Users/bob/src/distel/ebin&quot;]).' &gt;&gt; ~/.erlang
</pre>
</li>
</ol>
<p>If the <a class="reference" href="http://fresh.homeunix.net/~luke/distel/">Distel</a> installation was done properly your Emacs mode line will be displayed as <tt class="docutils literal"><span class="pre">(Erlang</span> <span class="pre">EXT)</span></tt> next time you're editing an <a class="reference" href="http://www.erlang.org/">Erlang</a> module. If you get a &quot;nodedown: ...&quot; message when executing a <a class="reference" href="http://fresh.homeunix.net/~luke/distel/">Distel</a> command that means you haven't started a shell yet (<tt class="docutils literal"><span class="pre">C-c</span> <span class="pre">C-z</span></tt>). A good test is to stick your insertion point at a function name and hit <tt class="docutils literal"><span class="pre">M-.</span></tt> to get to its definition. <tt class="docutils literal"><span class="pre">M-TAB</span></tt> is auto-completion. I haven't used too much else from it yet.</p>
<p>(Now here's to hoping I don't have to learn any more elisp, ever).</p>
</div>
]]></content:encoded>
			<wfw:commentRSS>http://bob.pythonmac.org/archives/2007/03/16/distel-and-erlang-mode-for-emacs-on-mac-os-x/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Erlang Mode for Emacs</title>
		<link>http://bob.pythonmac.org/archives/2007/03/14/erlang-mode-for-emacs/</link>
		<comments>http://bob.pythonmac.org/archives/2007/03/14/erlang-mode-for-emacs/#comments</comments>
		<pubDate>Thu, 15 Mar 2007 00:51:38 +0000</pubDate>
		<dc:creator>bob</dc:creator>
		
	<category>erlang</category>
		<guid>http://bob.pythonmac.org/archives/2007/03/14/erlang-mode-for-emacs/</guid>
		<description><![CDATA[


Erlang ships with a quite nice Erlang mode for Emacs. Editing Erlang code is actually the only thing I ever use Emacs for.
Setting it up is only slightly painful. For a default R11B-3 installation your .emacs will look like this:

(setq load-path (cons  &#34;/usr/local/lib/erlang/lib/tools-2.5.3/emacs&#34;
      load-path))
      [...]]]></description>
			<content:encoded><![CDATA[
<div class="document">
<!-- -*- mode: rst -*- -->
<p><a class="reference" href="http://www.erlang.org/">Erlang</a> ships with a quite nice <a class="reference" href="http://erlang.se/doc/doc-5.5.3/lib/tools-2.5.3/doc/html/erlang_mode.html">Erlang mode</a> for <a class="reference" href="http://www.gnu.org/software/emacs/">Emacs</a>. Editing <a class="reference" href="http://www.erlang.org/">Erlang</a> code is actually the <em>only</em> thing I ever use <a class="reference" href="http://www.gnu.org/software/emacs/">Emacs</a> for.</p>
<p>Setting it up is only slightly painful. For a default R11B-3 installation your <tt class="docutils literal"><span class="pre">.emacs</span></tt> will look like this:</p>
<pre class="literal-block">
(setq load-path (cons  &quot;/usr/local/lib/erlang/lib/tools-2.5.3/emacs&quot;
      load-path))
      (setq erlang-root-dir &quot;/usr/local/lib/erlang&quot;)
      (setq exec-path (cons &quot;/usr/local/lib/erlang/bin&quot; exec-path))
      (require 'erlang-start)
(defvar inferior-erlang-prompt-timeout t)
</pre>
<p>The first set of expressions sets up <a class="reference" href="http://www.gnu.org/software/emacs/">Emacs</a> to find <tt class="docutils literal"><span class="pre">erlang.el</span></tt> and the path to your <a class="reference" href="http://www.erlang.org/">Erlang</a> installation.</p>
<p>The second expression tells the emacs mode not to wait for an <a class="reference" href="http://www.erlang.org/">Erlang</a> prompt. This is my only annoyance with the mode. Without this defvar, when you send a command from Emacs to Erlang it'll hang for 60 seconds (or until you hit Ctrl-G) if there was any IO since the last prompt (e.g. an error_logger report or an io:format call). The caveat with this setting is that the first command you issue (the one that causes the inferior shell to get started) will get sent before Erlang is started and get lost. Issuing the first command twice is a small price to pay in this case, because the lock-up is annoying as all hell when you're in the middle of the compile/play cycle.</p>
<p>Using the Erlang mode is pretty straightforward. Tab does the right thing for indentation and is a good way to check to see if your code makes sense syntactically. If it doesn't indent to the right place, you probably screwed up. The electric stuff like comma and semicolon are great and save you a good deal of typing. The only command I really use is C-c C-k which compiles and reloads the current module into the running Erlang inferior shell. It will start one if one isn't already running (C-c C-z just starts the shell).</p>
<p>The other gripe I have is that when you get compiler errors sometimes clicking the line numbers takes you to the wrong line in the source file, but that's a relatively minor annoyance for me. Restarting seems to fix that (until it breaks again) and normally I'm not fighting too many compiler errors :)</p>
</div>
]]></content:encoded>
			<wfw:commentRSS>http://bob.pythonmac.org/archives/2007/03/14/erlang-mode-for-emacs/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Erlang in Print (almost)</title>
		<link>http://bob.pythonmac.org/archives/2007/03/04/erlang-in-print-almost/</link>
		<comments>http://bob.pythonmac.org/archives/2007/03/04/erlang-in-print-almost/#comments</comments>
		<pubDate>Sun, 04 Mar 2007 21:34:41 +0000</pubDate>
		<dc:creator>bob</dc:creator>
		
	<category>erlang</category>
		<guid>http://bob.pythonmac.org/archives/2007/03/04/erlang-in-print-almost/</guid>
		<description><![CDATA[


Erlang finally has a book out in print again (almost): Programming Erlang, written by Joe Armstrong. The best part of the story is that the publisher is allowing a combo purchase of a beta PDF plus the print book when it's available. How cool is that? I think this model makes a lot of sense [...]]]></description>
			<content:encoded><![CDATA[
<div class="document">
<!-- -*- mode: rst -*- -->
<p><a class="reference" href="http://erlang.org/">Erlang</a> finally has a book out in print again (almost): <a class="reference" href="http://www.pragmaticprogrammer.com/titles/jaerlang/">Programming Erlang</a>, written by <a class="reference" href="http://www.sics.se/~joe/index.html">Joe Armstrong</a>. The best part of the story is that the publisher is allowing a combo purchase of a beta PDF plus the print book when it's available. How cool is that? I think this model makes a <em>lot</em> of sense with the speed that technologies move these days. Imagine how much they could have made riding the Ruby on Rails hype train a few months earlier than any other publisher with a 70% finished beta PDF plus a print book when available?</p>
<p>I've purchased the book and read through what's available in the beta PDF so far. It definitely does not disappoint: this is <em>the</em> <a class="reference" href="http://erlang.org/">Erlang</a> book and it will be for some time to come.</p>
<p>If you're particularly interested I also highly recommend reading <a class="reference" href="http://www.sics.se/~joe/index.html">Joe Armstrong</a>'s doctoral thesis paper (<a class="reference" href="http://www.sics.se/~joe/thesis/armstrong_thesis_2003.pdf">Making Reliable Systems in the Presence of Software Errors</a>), which has a lot of overlap with what the beta PDF covers and what the book will cover when it's finished. There's also a lot of interesting information in the thesis that may or may not end up in the book such as the history and evolution of <a class="reference" href="http://erlang.org/">Erlang</a> and some interesting case studies.</p>
</div>
]]></content:encoded>
			<wfw:commentRSS>http://bob.pythonmac.org/archives/2007/03/04/erlang-in-print-almost/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>simplejson 1.6</title>
		<link>http://bob.pythonmac.org/archives/2007/03/03/simplejson-16/</link>
		<comments>http://bob.pythonmac.org/archives/2007/03/03/simplejson-16/#comments</comments>
		<pubDate>Sun, 04 Mar 2007 05:40:17 +0000</pubDate>
		<dc:creator>bob</dc:creator>
		
	<category>python</category>
	<category>simplejson</category>
		<guid>http://bob.pythonmac.org/archives/2007/03/03/simplejson-16/</guid>
		<description><![CDATA[


simplejson is a simple, fast, complete, correct and extensible JSON encoder/decoder for Python 2.3+.  It is pure Python code with no dependencies.
simplejson 1.6 is a minor update that improves str support for encoding. Previous versions of simplejson integrated strings directly into the output stream, this version ensures they're of a particular encoding (default is [...]]]></description>
			<content:encoded><![CDATA[
<div class="document">
<!-- -*- mode: rst -*- -->
<p><a class="reference" href="http://undefined.org/python/#simplejson">simplejson</a> is a simple, fast, complete, correct and extensible <a class="reference" href="http://json.org/">JSON</a> encoder/decoder for Python 2.3+.  It is pure Python code with no dependencies.</p>
<p><a class="reference" href="http://undefined.org/python/#simplejson">simplejson</a> 1.6 is a minor update that improves <tt class="docutils literal"><span class="pre">str</span></tt> support for encoding. Previous versions of simplejson integrated strings directly into the output stream, this version ensures they're of a particular encoding (default is UTF-8) so that the output stream is valid. See the <a class="reference" href="http://svn.red-bean.com/bob/simplejson/trunk/docs/index.html">documentation</a> for more information.</p>
</div>
]]></content:encoded>
			<wfw:commentRSS>http://bob.pythonmac.org/archives/2007/03/03/simplejson-16/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Mochi Media interview with PodTech&#8217;s LunchMeet</title>
		<link>http://bob.pythonmac.org/archives/2007/01/31/mochi-media-interview-with-podtechs-lunchmeet/</link>
		<comments>http://bob.pythonmac.org/archives/2007/01/31/mochi-media-interview-with-podtechs-lunchmeet/#comments</comments>
		<pubDate>Wed, 31 Jan 2007 21:18:38 +0000</pubDate>
		<dc:creator>bob</dc:creator>
		
	<category>General</category>
		<guid>http://bob.pythonmac.org/archives/2007/01/31/mochi-media-interview-with-podtechs-lunchmeet/</guid>
		<description><![CDATA[


Jameson and I did an interview with Irina and Eddie from PodTech's LunchMeet yesterday at our office. Twenty minutes of video podcasty goodness right here:
LunchMeet: Fueling Creativity with Mochi Media
Before anyone asks about the shirt, it's from the xkcd store (inspired by #54).

]]></description>
			<content:encoded><![CDATA[
<div class="document">
<!-- -*- mode: rst -*- -->
<p>Jameson and I did an interview with <a class="reference" href="http://heresmybyline.typepad.com/">Irina</a> and <a class="reference" href="http://www.eddie.com/">Eddie</a> from PodTech's LunchMeet yesterday at our office. Twenty minutes of video podcasty goodness right here:
<a class="reference" href="http://www.podtech.net/lunchmeet/technology/1813/lunchmeet-fueling-creativity-with-mochi-media">LunchMeet: Fueling Creativity with Mochi Media</a></p>
<p>Before anyone asks about the shirt, it's from the <a class="reference" href="http://xkcd.com/store/">xkcd store</a> (inspired by <a class="reference" href="http://xkcd.com/c54.html">#54</a>).</p>
</div>
]]></content:encoded>
			<wfw:commentRSS>http://bob.pythonmac.org/archives/2007/01/31/mochi-media-interview-with-podtechs-lunchmeet/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>simplejson 1.5</title>
		<link>http://bob.pythonmac.org/archives/2007/01/18/simplejson-15/</link>
		<comments>http://bob.pythonmac.org/archives/2007/01/18/simplejson-15/#comments</comments>
		<pubDate>Thu, 18 Jan 2007 08:23:53 +0000</pubDate>
		<dc:creator>bob</dc:creator>
		
	<category>python</category>
	<category>simplejson</category>
		<guid>http://bob.pythonmac.org/archives/2007/01/18/simplejson-15/</guid>
		<description><![CDATA[


simplejson is a simple, fast, complete, correct and extensible JSON encoder/decoder for Python 2.3+.  It is pure Python code with no dependencies.
simplejson 1.5 is a major update that provides better Python 2.5 and Windows compatibility, and two new features that control encoding (indent for pretty-printing, and separators for generating optimally compact JSON). See the [...]]]></description>
			<content:encoded><![CDATA[
<div class="document">
<!-- -*- mode: rst -*- -->
<p><a class="reference" href="http://undefined.org/python/#simplejson">simplejson</a> is a simple, fast, complete, correct and extensible <a class="reference" href="http://json.org/">JSON</a> encoder/decoder for Python 2.3+.  It is pure Python code with no dependencies.</p>
<p><a class="reference" href="http://undefined.org/python/#simplejson">simplejson</a> 1.5 is a major update that provides better Python 2.5 and Windows compatibility, and two new features that control encoding (<tt class="docutils literal"><span class="pre">indent</span></tt> for pretty-printing, and <tt class="docutils literal"><span class="pre">separators</span></tt> for generating optimally compact JSON). See the <a class="reference" href="http://svn.red-bean.com/bob/simplejson/trunk/docs/index.html">documentation</a> for more information.</p>
</div>
]]></content:encoded>
			<wfw:commentRSS>http://bob.pythonmac.org/archives/2007/01/18/simplejson-15/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Lessons learned in Asia</title>
		<link>http://bob.pythonmac.org/archives/2007/01/01/lessons-learned-in-asia/</link>
		<comments>http://bob.pythonmac.org/archives/2007/01/01/lessons-learned-in-asia/#comments</comments>
		<pubDate>Mon, 01 Jan 2007 11:42:08 +0000</pubDate>
		<dc:creator>bob</dc:creator>
		
	<category>General</category>
		<guid>http://bob.pythonmac.org/archives/2007/01/01/lessons-learned-in-asia/</guid>
		<description><![CDATA[



Food is cheap in Taipei and Shanghai
Alcohol isn't
US internet connectivity in Taipei is kinda slow and high latency
US internet connectivity in Shanghai is even worse; barely usable
An earthquake in Taiwan can make Shanghai's US connectivity completely unusable for days. Going on 6 now; still slower than dial-up 10 years ago.
The great firewall blocking sites like [...]]]></description>
			<content:encoded><![CDATA[
<div class="document">
<!-- -*- mode: rst -*- -->
<ul class="simple">
<li>Food is cheap in Taipei and Shanghai</li>
<li>Alcohol isn't</li>
<li>US internet connectivity in Taipei is kinda slow and high latency</li>
<li>US internet connectivity in Shanghai is even worse; barely usable</li>
<li>An earthquake in Taiwan can make Shanghai's US connectivity completely unusable for days. Going on 6 now; still slower than dial-up 10 years ago.</li>
<li>The great firewall blocking sites like wikipedia, google's cache and wordpress can get annoying. It's also hard to tell if a site is just unreachable or is blocked by the great firewall.</li>
<li>Google knows what the hell they're doing (and nobody else seems to). They're the only US company I've found that has maintained a usable infrastructure in Shanghai through this whole mess. Not Yahoo, not Microsoft, just Google. If Google had a proxy, I could've gotten by pretty nicely.</li>
<li>Localized sites for US companies work fine because they're hosted domestically, but I can't read them (e.g. apple.com.cn).</li>
<li>MacBook Pro power supplies really do melt, and they cost twice as much in Shanghai than <em>retail</em> from Apple in the US. No wonder people outside the US don't buy Apple!</li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRSS>http://bob.pythonmac.org/archives/2007/01/01/lessons-learned-in-asia/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>CacheFly vs. Amazon S3</title>
		<link>http://bob.pythonmac.org/archives/2006/12/06/cachefly-vs-amazon-s3/</link>
		<comments>http://bob.pythonmac.org/archives/2006/12/06/cachefly-vs-amazon-s3/#comments</comments>
		<pubDate>Wed, 06 Dec 2006 09:50:36 +0000</pubDate>
		<dc:creator>bob</dc:creator>
		
	<category>General</category>
		<guid>http://bob.pythonmac.org/archives/2006/12/06/cachefly-vs-amazon-s3/</guid>
		<description><![CDATA[


We've been looking at solutions for hosting and serving large amounts of (small) static content to a global audience and are currently in the process of evaluating all of the CDNs out there.
One might think that Amazon S3 would be good for this purpose, but it's absolutely not. We tried it for a while, and [...]]]></description>
			<content:encoded><![CDATA[
<div class="document">
<!-- -*- mode: rst -*- -->
<p>We've been looking at solutions for hosting and serving large amounts of (small) static content to a global audience and are currently in the process of evaluating all of the <a class="reference" href="http://en.wikipedia.org/wiki/Content_Delivery_Network">CDNs</a> out there.</p>
<p>One might think that <a class="reference" href="http://aws.amazon.com/s3">Amazon S3</a> would be good for this purpose, but it's absolutely not. We tried it for a while, and it really only has two things going for it:</p>
<ul class="simple">
<li>It's very cheap</li>
<li>Everything is automated and easy to set up</li>
</ul>
<p>Aside from that, the performance is absolutely terrible outside of the US, which I really noticed since I've been in Taipei. In addition to that, it's simply not reliable. There are extended and unannounced periods of downtime, so you shouldn't be using it in production (except maybe for redundancy or backup purposes).</p>
<p>After we experienced some unacceptably long downtime I scoured the internet for a real <a class="reference" href="http://en.wikipedia.org/wiki/Content_Delivery_Network">CDN</a> solution. There are a bunch out there, but only one of them is open enough to publish prices and allow you to sign up without doing a sales call: <a class="reference" href="http://www.cachefly.com/">CacheFly</a>. So far our experience with <a class="reference" href="http://www.cachefly.com/">CacheFly</a> has been pleasant. It's a little more expensive than <a class="reference" href="http://aws.amazon.com/s3">Amazon S3</a>, but you're paying for a far better service. Plus, there's a 30 day free trial. The trial appears to be &quot;only available if you sign up before tomorrow&quot;, but it seems to be following the calendar.</p>
<p>There have been a few small snags with the <a class="reference" href="http://www.cachefly.com/">CacheFly</a> service so far:</p>
<ul class="simple">
<li>In order to use rsync/scp/sftp uploads you must file a support ticket; ftp is the only service enabled by default</li>
<li>After that support ticket was resolved, scp was broken so I had to file another ticket (rsync and sftp worked)</li>
<li>In order to use your own DNS you must file a support ticket, otherwise you're stuck with <tt class="docutils literal"><span class="pre">accountname.cachefly.net</span></tt></li>
<li>Their <a class="reference" href="http://en.wikipedia.org/wiki/Point_of_presence">POP</a> distribution technology seems suboptimal; they're serving the lion's share of our traffic from the US when most of it isn't coming from there (though still massively better than <a class="reference" href="http://aws.amazon.com/s3">Amazon S3</a>)</li>
</ul>
<p>On the flip side, the experience has been good overall:</p>
<ul class="simple">
<li>Latency is MUCH better than <a class="reference" href="http://aws.amazon.com/s3">Amazon S3</a> in our experience</li>
<li>They give you pretty good reports about your traffic, without having to parse your own logs</li>
<li>Responses to support tickets have been prompt</li>
<li>It's the only real <a class="reference" href="http://en.wikipedia.org/wiki/Content_Delivery_Network">CDN</a> with published prices that allows you to sign up without dealing with a sales department</li>
</ul>
<p>All that said, <a class="reference" href="http://www.cachefly.com/">CacheFly</a> is the smallest fish in the <a class="reference" href="http://en.wikipedia.org/wiki/Content_Delivery_Network">CDN</a> pond. It only has 5 <a class="reference" href="http://en.wikipedia.org/wiki/Point_of_presence">POPs</a> and we'll probably outgrow it within the next year and move over to one of the &quot;Tier 1&quot; providers such as <a class="reference" href="http://www.akamai.com/">Akamai</a> or <a class="reference" href="http://www.bitgravity.com/">BitGravity</a> . I still <em>highly</em> recommend <a class="reference" href="http://www.cachefly.com/">CacheFly</a> as a first step for anyone looking to improve their site's reliability and performance by using a <a class="reference" href="http://en.wikipedia.org/wiki/Content_Delivery_Network">CDN</a>.</p>
</div>
]]></content:encoded>
			<wfw:commentRSS>http://bob.pythonmac.org/archives/2006/12/06/cachefly-vs-amazon-s3/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>MochiAds - Flash Game Ad Network</title>
		<link>http://bob.pythonmac.org/archives/2006/11/21/mochiads-flash-game-ad-network/</link>
		<comments>http://bob.pythonmac.org/archives/2006/11/21/mochiads-flash-game-ad-network/#comments</comments>
		<pubDate>Tue, 21 Nov 2006 22:00:35 +0000</pubDate>
		<dc:creator>bob</dc:creator>
		
	<category>python</category>
	<category>flash</category>
	<category>actionscript</category>
	<category>erlang</category>
	<category>Pylons</category>
	<category>Genshi</category>
	<category>SQLAlchemy</category>
	<category>MTASC</category>
	<category>nginx</category>
		<guid>http://bob.pythonmac.org/archives/2006/11/21/mochiads-flash-game-ad-network/</guid>
		<description><![CDATA[


MochiAds is finally out the door! There's a pretty good summary of what we're doing on TechCrunch.
For the technically inclined, the UI for MochiAds is built with Pylons, Genshi and SQLAlchemy. The secret sauce is a combination of Python and Erlang code, and we've got Nginx as the gatekeeper. I've got nothing but good things [...]]]></description>
			<content:encoded><![CDATA[
<div class="document">
<!-- -*- mode: rst -*- -->
<p><a class="reference" href="http://www.mochiads.com/">MochiAds</a> is finally out the door! There's a pretty good summary of what we're doing on <a class="reference" href="http://www.techcrunch.com/2006/11/20/mochimedia-introduces-ad-network-for-flash-games/">TechCrunch</a>.</p>
<p>For the technically inclined, the UI for <a class="reference" href="http://www.mochiads.com/">MochiAds</a> is built with <a class="reference" href="http://pylonshq.com/">Pylons</a>, <a class="reference" href="http://genshi.edgewall.org/">Genshi</a> and <a class="reference" href="http://www.sqlalchemy.org/">SQLAlchemy</a>. The secret sauce is a combination of <a class="reference" href="http://www.python.org/">Python</a> and <a class="reference" href="http://www.erlang.org/">Erlang</a> code, and we've got <a class="reference" href="http://nginx.net/">Nginx</a> as the gatekeeper. I've got nothing but good things to say about this whole stack. <a class="reference" href="http://www.erlang.org/">Erlang</a>'s module reloading, concurrency oriented programming model, and pattern matching has really been a dream.</p>
<p>For Flash game developers, we support ActionScript 1, ActionScript 2, and <a class="reference" href="http://www.mtasc.org/">MTASC</a>. Flash movies must be published in Flash 6 or later. Currently we support two ad formats: preloaders and interstitial ads. Either way it's just one line of code to toss in the movie.</p>
<p>The really Big Deal is that Flash game developers can make money off of their work throughout the entire lifespan of the project, especially if it spreads virally. It's no longer a bad thing if a portal &quot;steals&quot; the game without paying a licensing fee, the developer still gets paid!</p>
</div>
]]></content:encoded>
			<wfw:commentRSS>http://bob.pythonmac.org/archives/2006/11/21/mochiads-flash-game-ad-network/feed/</wfw:commentRSS>
	</item>
	</channel>
</rss>
