<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
    <title>bulknews.typepad.com</title>
    
    <link rel="hub" href="http://hubbub.api.typepad.com/" />
    <link rel="alternate" type="text/html" href="http://bulknews.typepad.com/blog/" />
    <id>tag:typepad.com,2003:weblog-11218</id>
    <updated>2009-12-21T16:45:40-08:00</updated>
    <subtitle>Tatsuhiko Miyagawa's blog to discuss mostly tech and nerdy stuff.</subtitle>
    <generator uri="http://www.typepad.com/">TypePad</generator>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/typepad/blog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
        <title>Obama vaccinated</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/sD5wREQLL20/obama-vaccinated.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/12/obama-vaccinated.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e20120a76fb120970b</id>
        <published>2009-12-21T16:45:40-08:00</published>
        <updated>2009-12-21T16:45:40-08:00</updated>
        <summary>via www.flickr.com "This is the best-dressed nurse I've ever seen. "</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><img alt="P122009PS-0001" height="333" src="http://farm3.static.flickr.com/2696/4204626110_56b9128669.jpg" width="500" />
<p><small>via <a href="http://www.flickr.com/photos/whitehouse/4204626110/">www.flickr.com</a></small></p>

<p>"This is the best-dressed nurse I've ever seen. "</p></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/12/obama-vaccinated.html</feedburner:origLink></entry>
    <entry>
        <title>Request! What kind of Request?</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/FgRYufTeHug/request-what-kind-of-request.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/12/request-what-kind-of-request.html" thr:count="2" thr:updated="2009-12-20T10:17:04-08:00" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e20128766cdc67970c</id>
        <published>2009-12-20T05:49:37-08:00</published>
        <updated>2009-12-20T05:57:36-08:00</updated>
        <summary>So, Plack::Request is probably the most useful class/utility in the Plack/PSGI ecosystem but at the same time confuses people to think that Plack is more of a framework or a library for end users rather than for an application framework developer. xSGI/Rack Request classes Rack has Rack::Request which is a base class for Sinatra::Request and also is used in many Rack middleware components. WSGI doesn't have one unified implementation, so most middleware components are implemented in each framework, but there is also WebOb.py that is a parser for WSGI requests and provides Request objects. Plack::Request is supposed to fit this layer as it's clearly documented in its POD. But it misses some functionalities like a) not being able to write...</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>So, Plack::Request is probably the most <em>useful</em> class/utility in <a href="http://bulknews.typepad.com/blog/2009/12/plackpsgi-ecosystem.html">the Plack/PSGI ecosystem</a> but at the same time confuses people to think that Plack is more of a framework or a library for <em>end users </em>rather than for an application framework developer.</p>

<p><span style="font-size: 15px; line-height: 18px; font-weight: bold; ">xSGI/Rack Request classes</span></p>

<p />

<p>Rack has <a href="http://api.rubyonrails.org/classes/ActionController/AbstractRequest.html">Rack::Request</a> which is a base class for <a href="http://www.sinatrarb.com/api/classes/Sinatra/Request.html">Sinatra::Request</a> and also is used in many <a href="http://github.com/rack/rack-contrib">Rack middleware components</a>. WSGI doesn't have one unified implementation, so most middleware components are implemented in each framework, but there is also <a href="http://pythonpaste.org/webob/reference.html">WebOb.py</a> that is a parser for WSGI requests and provides Request objects.</p>

<p>Plack::Request is supposed to fit this layer as it's <a href="http://search.cpan.org/~miyagawa/Plack-Request-0.09/lib/Plack/Request.pm#CAVEAT">clearly documented in its POD</a>. But it misses some functionalities like a) not being able to write new attributes through an accessor and b) there's no way to rewind psgi.input for later read. They are bugs, and should be fixed, but it's important to note that Request objects on this layer should be generic enough so it can work with any upstream frameworks, and it'd be nice if it can be subclassed in a new framework that doesn't have their own Request objects, such as Tatsumaki.</p>

<p /><h3>Framework Request classes</h3><p>Most frameworks have their own Request classes: <a href="http://docs.djangoproject.com/en/dev/ref/request-response/">django</a>, <a href="http://api.rubyonrails.org/classes/ActionController/AbstractRequest.html">Rails</a>, <a href="http://merbdoc.com/classes/Merb/Request.html">Merb</a>, <a href="http://www.sinatrarb.com/api/classes/Sinatra/Request.html">Sinatra</a>, <a href="http://search.cpan.org/~yappo/HTTP-Engine-0.03003/lib/HTTP/Engine/Request.pm">HTTP::Engine</a>, and <a href="http://search.cpan.org/~bobtfish/Catalyst-Runtime-5.80016/lib/Catalyst/Request.pm">Catalyst</a>. They can define their own methods and have nothing to do with xSGI Request classes but when you develop a new Perl web framework with PSGI/Plack then it's nice to have Plack::Request as a base class to add methods to it.</p>

<p /><h3>So what?</h3><p />

<p>Currently, the name Plack::Request, and the fact that you can use it directly to write PSGI apps "suggests" that it is <em>the</em> way to write Plack apps. Actually, I see some examples and blog posts explaining <em>"How to convert your Catalyst applications to Plack"</em> using Plack::Request, which totally doesn't make sense.</p><p>Also, if a new framework uses Plack::Request and inherits from it, end users, sometimes as well as authors think that the framework depends on Plack (as a server) and can't run it on other PSGI server implementations such as mod_psgi, which is totally not true.</p>

<p>Plack and PSGI avoided having one implementation and interface (like Rack) and separated the interface and implementations like Python WSGI does. Considering that, does it make more sense to have different names for a) Request libraries to write Plack middleware and b) Request object you can extend in frameworks?</p>

<p>If so, I'd merge Plack::Request back to Plack core dist, strip some misused features such as param (!), and provide another Request class (that probably <em>uses</em> Plack::Request inside) and is fully extensible. We'll see...</p>

<p /></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/12/request-what-kind-of-request.html</feedburner:origLink></entry>
    <entry>
        <title>Hash::MultiValue now has -&gt;from_mixed</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/MGeOG5RafG4/hashmultivalue-now-has-from_mixed.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/12/hashmultivalue-now-has-from_mixed.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e20120a7612e24970b</id>
        <published>2009-12-17T17:13:01-08:00</published>
        <updated>2009-12-17T17:36:59-08:00</updated>
        <summary>So I blogged [why params() sucks](http://bulknews.typepad.com/blog/2009/12/perl-why-parameters-sucks-and-what-we-can-do.html) but there're already applications and libraries that do this: Catalyst and CGI::Deurl for instance. Changing the behavior of these libraries or core framework would break the existing code, even worse, mostly silently (because `ref $params-&gt;{foo} eq 'ARRAY'` would silently return false). Hash::MultiValue 0.03 is now shipped with `from_mixed` method, so you can easily create the MultiValue hash out of those objects: use CGI::Deurl; use Hash::MultiValue; my $params = CGI::Deurl::parse_query_string($query_string); $params = Hash::MultiValue-&gt;from_mixed($params); my $foo = $params-&gt;{foo}; # last entry my @foo = $params-&gt;get_all('foo'); # all</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>So I blogged <a href="http://bulknews.typepad.com/blog/2009/12/perl-why-parameters-sucks-and-what-we-can-do.html">why params() sucks</a> but there're already applications and libraries that do this: Catalyst and CGI::Deurl for instance. Changing the behavior of these libraries or core framework would break the existing code, even worse, mostly silently (because <code>ref $params-&gt;{foo} eq 'ARRAY'</code> would silently return false).</p>

<p>Hash::MultiValue 0.03 is now shipped with <code>from_mixed</code> method, so you can easily create the MultiValue hash out of those objects:</p>

<pre><code>use CGI::Deurl;
use Hash::MultiValue;

my $params = CGI::Deurl::parse_query_string($query_string);
$params = Hash::MultiValue-&gt;from_mixed($params);

my $foo = $params-&gt;{foo}; # last entry
my @foo = $params-&gt;get_all('foo'); # all
</code></pre>
</div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/12/hashmultivalue-now-has-from_mixed.html</feedburner:origLink></entry>
    <entry>
        <title>Perl: Why parameters() sucks and what we can do</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/OA7EjEgce6k/perl-why-parameters-sucks-and-what-we-can-do.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/12/perl-why-parameters-sucks-and-what-we-can-do.html" thr:count="5" thr:updated="2009-12-16T08:20:07-08:00" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e20120a75580bd970b</id>
        <published>2009-12-15T14:46:36-08:00</published>
        <updated>2009-12-16T08:37:44-08:00</updated>
        <summary>In a typical web application the most frequently occurring task is to get parameters from a request. Perl community and popular frameworks have been having two interfaces to this: `param()` and `parameters()`. And there's a few issues. ### param() Good old CGI.pm has a convenient `param()` method, which behaves differently based on a context: my $q = CGI-&gt;new; my @keys = $q-&gt;param(); # get the list of param names my $name = $q-&gt;param('name'); # scalar context: always get single my @names = $q-&gt;param('name'); # list context: get multiple (if any) This is quite nice, since your code says *how you want values* by explicitly stating the context (whether a scalar context or a list context). The only place it bites...</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>In a typical web application the most frequently occurring task is to get parameters from a request. Perl community and popular frameworks have been having two interfaces to this: <code>param()</code> and <code>parameters()</code>. And there's a few issues.</p>

<h3>param()</h3>

<p>Good old CGI.pm has a convenient <code>param()</code> method, which behaves differently based on a context:</p>

<pre><code>my $q = CGI-&gt;new;
my @keys  = $q-&gt;param();       # get the list of param names
my $name  = $q-&gt;param('name'); # scalar context: always get single
my @names = $q-&gt;param('name'); # list context: get multiple (if any)
</code></pre>

<p>This is quite nice, since your code says <em>how you want values</em> by explicitly stating the context (whether a scalar context or a list context). The only place it bites is that there are cases where you accidentally force a list context, such as when assigning it to a hash or pass to a method call:</p>

<pre><code>my $vars = {
    name  =&gt; $q-&gt;param('name'),         # Oops, it's a list context!
    email =&gt; scalar $q-&gt;param('email'), # this is correct
};
</code></pre>

<p>This code quite doesn't work if there are multiple (and even number of ) <code>name</code> parameters, or even worse, injects some unintentional parameters to <code>$vars</code> that could be seriously dangerous if you inject that to an internal utilities or databases.</p>

<p>So, <code>param()</code> is quite nice but only if you are really careful for this list context gotcha.</p>

<h3>parameters()</h3>

<p>Catalyst has added <code>parameters()</code> to its Catalyst::Request object and it allows you to get values in an array ref if there are multiple.</p>

<pre><code> my $form = $c-&gt;request-&gt;parameters;

 # ?a=b&amp;b=c
 # $form = { a =&gt; 'b', b =&gt; 'c' }     
 # ?a=b&amp;a=c&amp;b=c
 # $form = { a =&gt; [ 'b', 'c' ], b =&gt; 'c' };
</code></pre>

<p>This might look <em>intuitive</em> but wait a minute. The data structure gets different per <em>user input</em> rather than how you code it, and that sucks. This means you have to <em>always</em> check if the value is an array ref or not, since:</p>

<pre><code> my $v  = $c-&gt;request-&gt;parameters;
 my $query = $v-&gt;{query};
 my @names = @{$v-&gt;{name}};
</code></pre>

<p><code>$query</code> might become <code>ARRAY(0xabcdef)</code> if there are multiple <code>query=</code> parameters in the query. <code>@names</code> line might cause <code>Can't use string as an ARRAY ref</code> error if there's only one (or zero) <code>name</code> parameter. This causes horrible issues when using standard HTML elements like <code>option</code> or <code>checkbox</code> forms, or tools like jQuery's <code>serialize()</code>.</p>

<p>The correct way to write that would be:</p>

<pre><code> my $v = $c-&gt;request-&gt;parameters;
 my $query = ref $v-&gt;{query} eq 'ARRAY' ? $v-&gt;{query}-&gt;[0] : $v-&gt;{query};
 my @names = ref $v-&gt;{name} eq 'ARRAY' ? @{$v-&gt;{name}} : ($v-&gt;{name});
</code></pre>

<p>and it is tedious and gross.</p>

<h3>Rack::Request</h3>

<p>Let's see how other languages try to solve this problem. First, <a href="http://rack.rubyforge.org/doc/classes/Rack/Request.html">Rack::Request</a>.</p>

<p>Rack::Request has <code>params</code> method which always returns a Hash object. They have their own rule for multiple values. If there are multiple values for the same key (like <code>foo</code>), the value is always the last value. By naming the key in a special way, like <code>foo[]</code>, you can state that "This key might have multiple values", and <code>req.params['foo']</code> would return Array instead of the String value.</p>

<p>Although it kind of hurts that you have to force this behavior in the low level library like Rack, but I think this is a good middle ground, since you can name your parameters in your templates and the request handler code to specify whether you want an Array or a String. This technique has been actually ported to Perl as modules like <a href="http://search.cpan.org/~nuffin/Catalyst-Plugin-Params-Nested-0.02/">Catalyst::Plugin::Params::Nested</a></p>

<h3>WebOb.py</h3>

<p><a href="http://pythonpaste.org/webob/">WebOb</a> is a Python paste library to handle WSGI request parameters and such and is used in Python frameworks such as <a href="http://pylonshq.com/">Pylons</a>. WebOb document explicitly <a href="http://pythonpaste.org/webob/#multidict">talks about</a> this <em>may-or-may-not-be-multiple</em> params problem very clearly:</p>

<blockquote>
  <p>Several parts of WebOb use a “multidict”; this is a dictionary where a key can have multiple values. The quintessential example is a query string like ?pref=red&amp;pref=blue; the pref variable has two values: red and blue.</p>
  
  <p>In a multidict, when you do request.GET['pref'] you’ll get back only 'blue' (the last value of pref). Sometimes returning a string, and sometimes returning a list, is the cause of frequent exceptions. If you want all the values back, use request.GET.getall('pref'). If you want to be sure there is one and only one value, use request.GET.getone('pref'), which will raise an exception if there is zero or more than one value for pref.</p>
</blockquote>

<p>and I like it. It does the right thing if you handle as a normal hash but provides a method like <code>getall</code> to explicitly demand list instead of a string.</p>

<h3>Hash::MultiValue</h3>

<p>So, I was thinking of stealing this idea for our <a href="http://advent.plackperl.org/2009/12/day-14-use-plackrequest.html">Plack::Request</a> which currently inherits this sucky parameters() from HTTP::Engine and then Catalyst::Request, which most of the Plack gang agree is a bad idea.</p>

<p>Last night I was sketching the initial implementation of WebOb's MultiDict into Perl: <a href="http://github.com/miyagawa/Hash-MultiValue">Hash::MultiValue</a>. It uses <code>tie</code> to behave like a normal hash with a single entry, but with an API to get multiple values if you want:</p>

<pre><code>use Hash::MultiValue;

my $hash = Hash::MultiValue-&gt;new(
    foo =&gt; 'a', foo =&gt; 'b', bar =&gt; 'baz',
);

# $hash is an object, but can be used as a hashref and DWIMs!
my $a = $hash-&gt;{foo};        # 'b' (the last entry)
my @k = keys %$hash;         # ('foo', 'bar') not guaranteed to be ordered
</code></pre>

<p>You can use the object just like a normal hash reference, and the value always returns the last element (if there are multiple). And you can also use the OO API call on the object to get multiple values, just like WebOb's MultiDict:</p>

<pre><code>my $foo = $hash-&gt;get('foo');     # always single (regardless of context)
my @bar = $hash-&gt;get_all('bar'); # always multi
my @keys = $hash-&gt;keys;  # Ordered keys
</code></pre>

<p>You should always use this <code>get_all</code> if you want multiple values. Being explicit is a good thing, right? There is also no list context gotcha like you see with CGI.pm style param().</p>

<h3>Performance concern</h3>

<p>There is a <a href="http://github.com/miyagawa/Hash-MultiValue/blob/master/benchmark.pl">benchmark script</a> attached because it used to do some tie/overload stuff which should definitely affect the performance.</p>

<p><strong>UPDATE</strong>: this module does not use tie nor overload anymore, but uses inside-out object approach, thank to Michael Peters and Aristotle for the suggestion! The post content is updated appropriately.</p>

<p>With my quick test, the inside-out object based approarch, in a typical web request where there's only a few (~10) keys the performance is like 21,000 QPS (Hash::MultiValue) vs 32,000 QPS (normal hash). So, it is just like 80% of the overhead.</p>

<p>Whether this would become a critical overhead depends how fast your web application is: Plack standalone server runs like 1500 QPS and most framework gives an overhead to make it 500 QPS or less, so I think the overhead would be eventually &lt; 1% of your web application, so maybe it doesn't really matter.</p>

<p>I'll probably spend some time soon on Plack-Request repository by creating a branch for this type of thing. Any input would be highly welcome ;)</p>
</div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/12/perl-why-parameters-sucks-and-what-we-can-do.html</feedburner:origLink></entry>
    <entry>
        <title>Plack/PSGI Ecosystem</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/sFmq0Kcw23U/plackpsgi-ecosystem.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/12/plackpsgi-ecosystem.html" thr:count="4" thr:updated="2009-12-14T14:42:04-08:00" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e20120a745cd14970b</id>
        <published>2009-12-11T18:22:37-08:00</published>
        <updated>2009-12-14T11:13:40-08:00</updated>
        <summary>via www.flickr.com Some people still seems do not "get" Plack/PSGI, so here's the overview. The important bit is that Plack is an implementation but is also a namespace for utilities, and things like Plack::Middleware and Plack::Request should be thought of more like a library. Plack::Server, ::Middleware, ::Request can be both used independently. And No, Plack is not a framework and as you see, the closest thing to a framework is Plack::Request which can be used as a request/response library to build a new framework. Also, the picture might scare you like "holy cow that's a lot of layers!" but actually, No, PSGI interface is a Perl code reference that's executed inline, and a framework adapter is just a few lines...</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><img alt="Plack/PSGI Ecosystem" height="401" src="http://farm3.static.flickr.com/2763/4177260769_3ff8c0eb90.jpg" width="500" />
<p><small>via <a href="http://www.flickr.com/photos/bulknews/4177260769/">www.flickr.com</a></small></p>

<p>Some people still seems do not "get" Plack/PSGI, so here's the overview. </p><p>The important bit is that Plack is an implementation but is also a namespace for utilities, and things like Plack::Middleware and Plack::Request should be thought of more like a library. Plack::Server, ::Middleware, ::Request can be both used independently. And No, Plack is not a framework and as you see, the closest thing to a framework is Plack::Request which can be used as a request/response library to build a new framework.</p>

<p>Also, the picture might scare you like "holy cow that's a lot of layers!" but actually, No, PSGI interface is a Perl code reference that's executed inline, and a framework adapter is just a few lines of changes from their native CGI/mod_perl adapters. So it's usually an extra one or two method call stack and that could never be an overhead.</p><p>Oh, and yes, Plack supports IE and Chrome :)</p></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/12/plackpsgi-ecosystem.html</feedburner:origLink></entry>
    <entry>
        <title>CDD and carbon efficiency</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/W5mYQ-9HALg/cdd-and-carbon-effectiveness.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/12/cdd-and-carbon-effectiveness.html" thr:count="1" thr:updated="2009-12-08T06:37:05-08:00" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e2012876305484970c</id>
        <published>2009-12-08T06:02:28-08:00</published>
        <updated>2009-12-08T06:23:49-08:00</updated>
        <summary>During it, he commented "while I was on the plane from San Francisco to Japan I hacked on ...", and then "while I was on the plane here I hacked on ...", and I wondered what is the carbon footprint of miyagawa's modules? via use.perl.org Nicholas asked me this at the pub after LPW 2009, and it indeed was an interesting question! I guess the fact that lots of my code is written on the plane reflects that many of my software is written (and is improved) using the CDD methodology - Conference Driven Development in the first place. We submit a talk proposal to a conference, assuming we could make the software actually implemented and usable between now and...</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><blockquote>During it, he commented "while I was on the plane from San Francisco to Japan I hacked on ...", and then "while I was on the plane here I hacked on ...", and I wondered what is the carbon footprint of miyagawa's modules?</blockquote>

<p><small>via <a href="http://use.perl.org/~nicholas/journal/39989">use.perl.org</a></small></p>

<p>Nicholas asked me this at the pub after LPW 2009, and it indeed was an interesting question!</p>

<p>I guess the fact that lots of my code is written on the plane reflects that many of my software is written (and is improved) using the CDD methodology - Conference Driven Development in the first place.</p>

<p>We submit a talk proposal to a conference, assuming we could make the software actually implemented and usable between now and a time when a conference happens, and it definitely forces us to actually write the software. Speaking about vaporware in a conference is embarrassing!</p>

<p>Also, by speaking about the same software multiple times in multiple conferences, we're forced to update the talk so as not to get bored by ourselves, and that helps us to improve the software, again.</p>

<p>So now let's call it ICDD, Iterative Conference Driven Development.</p></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/12/cdd-and-carbon-effectiveness.html</feedburner:origLink></entry>
    <entry>
        <title>London Photos</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/FVjqctzrr2w/london-photos.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/12/london-photos.html" thr:count="2" thr:updated="2009-12-08T07:32:25-08:00" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e20128762e3637970c</id>
        <published>2009-12-07T18:13:31-08:00</published>
        <updated>2009-12-07T18:14:37-08:00</updated>
        <summary>Full set on Flickr with Maps (Eye-Fi++).</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://www.flickr.com/photos/bulknews/4167057173/" title="P1000420.JPG by miyagawa, on Flickr"><img src="http://farm3.static.flickr.com/2791/4167057173_c8ab073ec6.jpg" width="500" height="375" alt="P1000420.JPG" /></a></p>

<p><a href="http://www.flickr.com/photos/bulknews/4167852892/" title="P1000499.JPG by miyagawa, on Flickr"><img alt="P1000499.JPG" height="375" src="http://farm3.static.flickr.com/2520/4167852892_6d917e75cc.jpg" width="500" /></a></p>

<p><a href="http://www.flickr.com/photos/bulknews/4167099553/" title="P1000517.JPG by miyagawa, on Flickr"><img alt="P1000517.JPG" height="375" src="http://farm3.static.flickr.com/2535/4167099553_a7b8ef5952.jpg" width="500" /></a></p>

<p><a href="http://www.flickr.com/photos/bulknews/4167877244/" title="P1000571.JPG by miyagawa, on Flickr"><img alt="P1000571.JPG" height="375" src="http://farm3.static.flickr.com/2731/4167877244_5a517d3b3e.jpg" width="500" /></a></p>

<p><a href="http://www.flickr.com/photos/bulknews/4167119363/" title="P1000574.JPG by miyagawa, on Flickr"><img alt="P1000574.JPG" height="375" src="http://farm3.static.flickr.com/2583/4167119363_ce05c75f37.jpg" width="500" /></a></p>

<p><a href="http://www.flickr.com/photos/bulknews/4167866100/" title="P1000530.JPG by miyagawa, on Flickr"><img alt="P1000530.JPG" height="375" src="http://farm3.static.flickr.com/2634/4167866100_55640f766a.jpg" width="500" /></a></p>

<p><a href="http://www.flickr.com/photos/bulknews/4167081531/" title="P1000472.JPG by miyagawa, on Flickr"><img alt="P1000472.JPG" height="375" src="http://farm3.static.flickr.com/2550/4167081531_c91c0294a0.jpg" width="500" /></a></p>

<p><a href="http://www.flickr.com/photos/bulknews/4167897070/" title="P1000623.JPG by miyagawa, on Flickr"><img alt="P1000623.JPG" height="375" src="http://farm3.static.flickr.com/2794/4167897070_bb9d900918.jpg" width="500" /></a></p>

<p>Full set on <a href="http://www.flickr.com/photos/bulknews/sets/72157622957284180/">Flickr</a> with <a href="http://www.flickr.com/photos/bulknews/sets/72157622957284180/map/">Maps</a> (Eye-Fi++).</p></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/12/london-photos.html</feedburner:origLink></entry>
    <entry>
        <title>Plack - LPW 2009</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/TNFKrGbh--g/plack---lpw-2009.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/12/plack---lpw-2009.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e2012876222991970c</id>
        <published>2009-12-06T22:36:02-08:00</published>
        <updated>2009-12-06T22:36:49-08:00</updated>
        <summary>via www.slideshare.net LPW 2009 was fantastic. Meeting great people, mostly from #london.pm was so refreshing and there were lots of lots of quality talks, lovely lightning talks (especially by mst and pdcawley) and a too-much-beer-involved social at a pub after the event, which is awesome. I did a replay of my now favorite PSGI/Plack intro talk with some updates that I made recently. The talk went really well, and got great feedbacks again. And the biggest surprise was that Plack got "the module of 2009" prize at the wrap-up. Last year it went to Tim Bunce's awesome NYTProf, and the competitors this year were rafl's MooseX::Declare and ashb's TryCatch. Awesome company! Thanks everyone who has contributed to PSGI and Plack...</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><embed allowfullscreen="true" allowscriptaccess="always" bgcolor="#FFFFFF" flashvars="sessid=BAhDOh9BY3RpdmVTdXBwb3J0OjpPcmRlcmVkSGFzaFsJWwc6CXVzZXJ7BiIJ%250AdXNlcmkCZmpbBzoNbGFuZ3VhZ2UiByoqWwc6CmluYm94aRZbBzoSbm90aWZp%250AY19jb3VudGkBvg%253D%253D--4de4ebb9902f8f529316ad9b868db5f9f582a940&amp;pvt=0&amp;doc=plack-lpw2009-091206154528-phpapp01&amp;version_no=1260136034&amp;presentationId=2661784&amp;totalSlides=93&amp;startSlide=1&amp;inContest=0&amp;preview=no&amp;stitle=plack-lpw-2009&amp;userName=miyagawa&amp;has_form=null&amp;form_after_slide_number=null&amp;form_is_blocking=false&amp;hostedIn=slideshare&amp;useHttp=1&amp;autoplay=0" height="415" id="player" name="player" quality="high" src="http://static.slidesharecdn.com/swf/player.swf" type="application/x-shockwave-flash" width="510" />

<p><small>via <a href="http://www.slideshare.net/miyagawa/plack-lpw-2009">www.slideshare.net</a></small></p>

<p>LPW 2009 was fantastic. Meeting great people, mostly from #london.pm was so refreshing and there were lots of lots of quality talks, lovely lightning talks (especially by mst and pdcawley) and a too-much-beer-involved social at a pub after the event, which is awesome.</p>

<p>I did a replay of my now favorite PSGI/Plack intro talk with some updates that I made recently. The talk went really well, and got great feedbacks again.</p>

<p>And the biggest surprise was that Plack got "the module of 2009" prize at the wrap-up. Last year it went to Tim Bunce's awesome NYTProf, and the competitors this year were rafl's MooseX::Declare and ashb's TryCatch. Awesome company!</p>

<p>Thanks everyone who has contributed to PSGI and Plack in any ways. It's a great honor to receive the prize, and the actual gift was "Map of London" book, so another reason to come back soon :)<br />
</p></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/12/plack---lpw-2009.html</feedburner:origLink></entry>
    <entry>
        <title>Flying Between Stars (livetune remix)</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/HuIoidIZBKI/flying-between-stars-livetune-remix.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/12/flying-between-stars-livetune-remix.html" thr:count="2" thr:updated="2009-12-08T12:06:55-08:00" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e20120a71bc23a970b</id>
        <published>2009-12-06T01:53:34-08:00</published>
        <updated>2009-12-06T01:53:34-08:00</updated>
        <summary>via www.youtube.com wondering how I missed this: Flying Between Stars (Macross Frontier) remix by livetune kz. He has more remixes on his youtube channel now. Joy!</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><object height="340" width="560"><param name="movie" value="http://www.youtube.com/v/_DK5NhcXEps&amp;fs=1" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed allowfullscreen="true" allowscriptaccess="always" height="340" src="http://www.youtube.com/v/_DK5NhcXEps&amp;fs=1" type="application/x-shockwave-flash" width="560" /></object><p><small>via <a href="http://www.youtube.com/watch?v=_DK5NhcXEps">www.youtube.com</a></small></p>

<p>wondering how I missed this: Flying Between Stars (Macross Frontier) remix by livetune kz. He has more remixes on his youtube channel now. Joy!</p></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/12/flying-between-stars-livetune-remix.html</feedburner:origLink></entry>
    <entry>
        <title>I heart Panasonic DMC-GF1</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/_FmnQikEMt0/i-heart-panasonic-dmc-gf1.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/12/i-heart-panasonic-dmc-gf1.html" thr:count="3" thr:updated="2009-12-03T19:30:27-08:00" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e20120a704269c970b</id>
        <published>2009-12-03T01:19:32-08:00</published>
        <updated>2009-12-03T01:26:22-08:00</updated>
        <summary>via www.flickr.com A week since I bought Panasonic GF1 ... I absolutely love this camera, and the default pancake lens is so awesome. It gives you a pretty good contrast and colors with a night shot (you might need some tweaks to make it look darker), Great bokeh when you take macro shots, and reasonably good 720p HD videos, with manual focus control (or auto-focus as well, but i like the manual control better!). And it is lighter than a DSLR camera because it's a micro four-thirds model. What else do you need? :)</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><img alt="P1000107.JPG" height="375" src="http://farm3.static.flickr.com/2803/4139742545_98b27ce265.jpg" width="500" />
<p><small>via <a href="http://www.flickr.com/photos/bulknews/4139742545/">www.flickr.com</a></small></p>

<p>A week since I bought <a href="http://bulknews.typepad.com/blog/2009/11/purchased-this-gf1.html">Panasonic GF1</a> ... I absolutely love this camera, and the default pancake lens is so awesome. </p>

<p><a href="http://www.flickr.com/photos/bulknews/4154433595/" title="P1000363.JPG by miyagawa, on Flickr"><img alt="P1000363.JPG" height="281" src="http://farm3.static.flickr.com/2584/4154433595_8a1cedeaa3.jpg" width="500" /></a></p><p>It gives you a pretty good contrast and colors with a night shot (you might need some tweaks to make it look darker),</p>

<p><a href="http://www.flickr.com/photos/bulknews/4154429177/" title="P1000332.JPG by miyagawa, on Flickr"><img alt="P1000332.JPG" height="375" src="http://farm3.static.flickr.com/2749/4154429177_842d84b293.jpg" width="500" /></a></p>

<p><a href="http://www.flickr.com/photos/bulknews/4140503790/" title="P1000110.JPG by miyagawa, on Flickr"><img alt="P1000110.JPG" height="375" src="http://farm3.static.flickr.com/2736/4140503790_4cfe173173.jpg" width="500" /></a></p><p>Great bokeh when you take macro shots,</p>

<p><object height="281" width="500"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7936001&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1" /><embed allowfullscreen="true" allowscriptaccess="always" height="281" src="http://vimeo.com/moogaloop.swf?clip_id=7936001&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" width="500" /></object></p><p>and reasonably good 720p HD videos, with manual focus control (or auto-focus as well, but i like the manual control better!).</p><p>And it is lighter than a DSLR camera because it's a micro four-thirds model. What else do you need? :)</p></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/12/i-heart-panasonic-dmc-gf1.html</feedburner:origLink></entry>
    <entry>
        <title>Tatsumaki at Shibuya.pm Tech Talks #12</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/FOp995Jc2O4/tatsumaki-at-shibuyapm-tech-talks-12.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/11/tatsumaki-at-shibuyapm-tech-talks-12.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e2012875f1cd09970c</id>
        <published>2009-11-30T08:29:55-08:00</published>
        <updated>2009-11-30T08:29:55-08:00</updated>
        <summary>via vimeo.com The speech is in Japanese. You can also check out the slides at Slideshare. Tatsumaki View more presentations from Tatsuhiko Miyagawa.</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><object data="http://vimeo.com/moogaloop.swf?clip_id=7897566&amp;server=vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF" height="420" type="application/x-shockwave-flash" width="560">
	<param name="quality" value="best" />
	<param name="allowfullscreen" value="true" />
	<param name="scale" value="showAll" />
	<param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7897566&amp;server=vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF" />
</object><p><small>via <a href="http://vimeo.com/7897566">vimeo.com</a></small></p>

<p>The speech is in Japanese. You can also check out the slides at Slideshare.</p>

<div id="__ss_2614870" style="width:425px;text-align:left"><a href="http://www.slideshare.net/miyagawa/tatsumaki" style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Tatsumaki">Tatsumaki</a><object height="355" style="margin:0px" width="425"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tatsumaki-091130091648-phpapp01&amp;stripped_title=tatsumaki" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed allowfullscreen="true" allowscriptaccess="always" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tatsumaki-091130091648-phpapp01&amp;stripped_title=tatsumaki" type="application/x-shockwave-flash" width="425" /></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a href="http://www.slideshare.net/" style="text-decoration:underline;">presentations</a> from <a href="http://www.slideshare.net/miyagawa" style="text-decoration:underline;">Tatsuhiko Miyagawa</a>.</div></div></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/11/tatsumaki-at-shibuyapm-tech-talks-12.html</feedburner:origLink></entry>
    <entry>
        <title>Wanted: CPAN Changelog diff service</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/8IT6oHqnALo/wanted-cpan-changelog-diff-service.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/11/wanted-cpan-changelog-diff-service.html" thr:count="1" thr:updated="2009-11-27T01:50:25-08:00" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e2012875e27443970c</id>
        <published>2009-11-27T01:39:39-08:00</published>
        <updated>2009-11-27T01:56:29-08:00</updated>
        <summary>Something I've been thinking of implementing myself, but i have other exciting things to work on these days, so I just free up this idea to the lazyweb: WANTED We really need a web API service that gives you the changelog entry, given a distribution name and version(s). Say the service lives on changes.cpan.org: (of course it could be something else) API: http://changes.cpan.org/changes.json?distribution=Plack&amp;from=0.9010&amp;to=0.9015 ("to" can be omitted, in which case the latest CPAN version is used) Response: JSON with the following keys: from, to, distribution: echo the request changes: plain text of what's new, extracted from Changes file That's it. Extracting the changes as a data structure, like identifying RT ticket numbers, would be neat but that could be built...</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>Something I've been thinking of implementing myself, but i have other exciting things to work on these days, so I just free up this idea to the lazyweb:</p><p /><h3>WANTED</h3><p /><p>We really need a web API service that gives you the changelog entry, given a distribution name and version(s). Say the service lives on <em>changes.cpan.org</em>: (of course it could be something else)</p><p>API: http://changes.cpan.org/changes.json?distribution=Plack&amp;from=0.9010&amp;to=0.9015 ("to" can be omitted, in which case the latest CPAN version is used)</p><p>Response: JSON with the following keys:</p><p /><ul>
<li>from, to, distribution: echo the request</li>
<li>changes: plain text of what's new, extracted from Changes file</li>
</ul>
<p /><p>That's it. Extracting the changes as a data structure, like identifying RT ticket numbers, would be neat but that could be built as a separate service or a module, so i'd rather want it just serve a plain text view.</p><p /><h3>HOW</h3><p /><p>Daisuke Murase actually created <a href="http://perlbuzz.com/2007/10/a-better-recent-cpan-uploads-feed.html">CPAN Recent Feed</a> for this, but since his server died a couple of weeks ago, the service went down. (Alas, <a href="http://svn.unknownplace.org/public/CPANRecent/trunk/">the source code</a> also is temporary unavailable)</p><p>We could probably use search.cpan.org's <a href="http://search.cpan.org/diff?from=Plack-0.9014&amp;to=Plack-0.9015#Changes">not-very-well-known Diff tool</a> to extract changes, or manually download two tar-balls to peek at Changes file to diff. The other approach would be to parse Changes file to recognize versions. Not all dists use the same formats or filenames to log changes, so we may need some heuristics to recognize it. Some module authors use formats like YAML to log changes, in which case the parsing would be easier.</p><p /><h3>WHY</h3><p>It would be obvious why this should be useful, but just in case: once we build this available as a web API, we could:</p><p /><ul>
<li>write a CPAN.pm (or CPANPLUS) plugin to display changes when you upgrade modules</li>
<li>write a command line tool to check the installed module version and display changes, so you can determine whether you should upgrade</li>
<li><a href="http://bulknews.typepad.com/blog/2009/08/cpan-realtime-updates.html">CPAN realtime updates</a> can now add changes as a comment to the module update entry</li>
<li>etc. etc..</li>
</ul>
So, who wants to write this? :) <br /><p /><p /></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/11/wanted-cpan-changelog-diff-service.html</feedburner:origLink></entry>
    <entry>
        <title>Plack and PSGI screencast and feedbacks</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/friNLBsxYUg/plack-and-psgi-screencast-and-feedbacks.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/11/plack-and-psgi-screencast-and-feedbacks.html" thr:count="2" thr:updated="2009-11-27T07:48:20-08:00" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e20120a6d56588970b</id>
        <published>2009-11-25T00:43:22-08:00</published>
        <updated>2009-11-25T02:06:24-08:00</updated>
        <summary>via vimeo.com Recorded screencast and the rest of the talk in tonight's SF.pm talk. The talk went well with lots of questions and feedbacks! Also, if you come to London Perl Worlshop in two weeks, you probably should avoid watching this movie. It's a spoiler! :) (Note that I was misusing the apachebench command line option to test Catalyst on Plack. The right use will give me 200 QPS rather than 30, which is quite fast)</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><object data="http://vimeo.com/moogaloop.swf?clip_id=7812100&amp;server=vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF" height="420" type="application/x-shockwave-flash" width="560">
	<param name="quality" value="best" />
	<param name="allowfullscreen" value="true" />
	<param name="scale" value="showAll" />
	<param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7812100&amp;server=vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF" />
</object><p><small>via <a href="http://vimeo.com/7812100">vimeo.com</a></small></p>

<p>Recorded screencast and the rest of the talk in tonight's SF.pm talk. The talk went well with lots of questions and feedbacks!</p><p>Also, if you come to London Perl Worlshop in two weeks, you probably should avoid watching this movie. It's a spoiler! :)</p>

<p>(Note that I was misusing the apachebench command line option to test Catalyst on Plack. The right use will give me 200 QPS rather than 30, which is quite fast)</p></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/11/plack-and-psgi-screencast-and-feedbacks.html</feedburner:origLink></entry>
    <entry>
        <title>Comet servers/frameworks collection</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/C17899P1MPg/comet-serversframeworks-collection.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/11/comet-serversframeworks-collection.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e2012875d39ba6970c</id>
        <published>2009-11-24T14:41:56-08:00</published>
        <updated>2009-11-24T16:02:10-08:00</updated>
        <summary>Just a note for myself, but could be useful: Orbited Python, long-poll, XMPP, STOMP, *MQ nginx_push_module nginx module, long-poll, Basic HTTP Push Relay Protocol cometd java, python, perl, Bayeux protocol PoCo-Server-Bayeux perl, POE, Bayeux nodecast javascript, v8, node.js, long-poll webstreamr python, twisted, long-poll Compp Ruby, XMPP Shooting Star Ruby, Rails Stardust Perl, Coro, long-poll Tatsumaki Perl, Plack, AnyEvent, long-poll, MXHR Meteor Perl, long-poll</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>Just a note for myself, but could be useful:</p><p />

<p />

<ul>
<li><a href="http://orbited.org/">Orbited</a> Python, long-poll, XMPP, STOMP, *MQ  </li>
<li><a href="http://pushmodule.slact.net/">nginx_push_module</a> nginx module, long-poll, <a href="http://pushmodule.slact.net/protocol.html">Basic HTTP Push Relay Protocol</a></li>
<li><a href="http://cometdproject.dojotoolkit.org/">cometd</a> java, python, perl, <a href="http://svn.cometd.com/trunk/bayeux/bayeux.html">Bayeux protocol</a></li>
<li><a href="http://search.cpan.org/~ewaters/POE-Component-Server-Bayeux-0.03/">PoCo-Server-Bayeux</a> perl, POE, Bayeux </li>
<li><a href="http://svn.cometd.com/trunk/bayeux/bayeux.html" /><a href="http://github.com/simonw/nodecast">nodecast</a> javascript, v8, node.js, long-poll</li>
<li><a href="http://github.com/progrium/webstreamr">webstreamr</a> python, twisted, long-poll</li>
<li><a href="http://github.com/superfeedr/Compp">Compp</a> Ruby, XMPP</li>
<li><a href="http://rubyforge.org/forum/forum.php?forum_id=16618">Shooting Star</a> Ruby, Rails</li>
<li><a href="http://search.cpan.org/~beppu/Stardust-0.07/">Stardust</a> Perl, Coro, long-poll</li>
<li><a href="http://github.com/miyagawa/Tatsumaki">Tatsumaki</a> Perl, Plack, AnyEvent, long-poll, MXHR</li>
<li><a href="http://meteorserver.org/">Meteor</a> Perl, long-poll</li>
</ul>
<br /><ul>
</ul>
<p /></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/11/comet-serversframeworks-collection.html</feedburner:origLink></entry>
    <entry>
        <title>Man to marry his video game girlfriend this Sunday</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/G_Wrm488dl0/man-to-marry-his-video-game-girlfriend-this-sunday.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/11/man-to-marry-his-video-game-girlfriend-this-sunday.html" thr:count="3" thr:updated="2009-12-02T11:01:58-08:00" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e20120a6cd2282970b</id>
        <published>2009-11-23T19:41:06-08:00</published>
        <updated>2009-11-23T19:41:06-08:00</updated>
        <summary>Last month, I wrote about a Japanese husband who confessed to his wife that he had a virtual girlfriend, a character from an addictive Nintendo DS game called Love Plus. Now, another man is planning to hold a wedding ceremony with his Love Plus girlfriend this coming Sunday. The man, who calls himself SAL9000, was so in love with Nene Anegasaki that he decided to marry her and take her on a honeymoon to Guam. Of course, this means that he literally just took his Nintendo DS to Guam... while there, he took photos, livecast their adventures on popular video-sharing site Nico Nico Douga, and documented their adventures using the augmented reality iPhone app Sekai Camera. In any case, the...</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><blockquote>Last month, I wrote about a Japanese husband who confessed to his wife that he had a virtual girlfriend, a character from an addictive Nintendo DS game called Love Plus. Now, another man is planning to hold a wedding ceremony with his Love Plus girlfriend this coming Sunday. The man, who calls himself SAL9000, was so in love with Nene Anegasaki that he decided to marry her and take her on a honeymoon to Guam. Of course, this means that he literally just took his Nintendo DS to Guam... while there, he took photos, livecast their adventures on popular video-sharing site Nico Nico Douga, and documented their adventures using the augmented reality iPhone app Sekai Camera. In any case, the guy plans on having a public reception in Tokyo this Sunday. It will be livecast on Nico Nico Douga, but in case you miss it, we'll be bringing you an update early next week. Stay tuned! </blockquote>

<p><small>via <a href="http://www.boingboing.net/2009/11/20/man-to-marry-his-vid.html">www.boingboing.net</a></small></p>

<p>This crazy Love Plus phenomenon we've been enjoying for a few months is now being discovered by the internet at large ... i feel it's really embarrassing for some reason i don't know. Disclaimer: I don't have this game, though many of my friends do :)</p></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/11/man-to-marry-his-video-game-girlfriend-this-sunday.html</feedburner:origLink></entry>
    <entry>
        <title>snark's Plack-Middleware-Rewrite at master - GitHub</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/UJH4_FtYfDs/snarks-plack-middleware-rewrite-at-master---github.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/11/snarks-plack-middleware-rewrite-at-master---github.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e2012875ce76b3970c</id>
        <published>2009-11-23T18:55:52-08:00</published>
        <updated>2009-11-23T18:55:52-08:00</updated>
        <summary>snark's Plack-Middleware-Rewrite at master - GitHub Steve has been working on porting Rack's Rack-rewrite over to Plack. Give it a shot, any feedbacks will be welcome on #plack IRC channel on irc.perl.org.</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><a href="http://github.com/snark/Plack-Middleware-Rewrite">snark's Plack-Middleware-Rewrite at master - GitHub</a>

<p>Steve has been working on porting Rack's <a href="http://github.com/jtrupiano/rack-rewrite">Rack-rewrite</a> over to Plack. Give it a shot, any feedbacks will be welcome on #plack IRC channel on irc.perl.org.</p></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/11/snarks-plack-middleware-rewrite-at-master---github.html</feedburner:origLink></entry>
    <entry>
        <title>London Perl Workshop</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/OUsoeQ0GPa4/london-perl-workshop.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/11/london-perl-workshop.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e20120a6bde3f6970b</id>
        <published>2009-11-20T15:02:37-08:00</published>
        <updated>2009-11-20T15:02:37-08:00</updated>
        <summary>The London Perl Workshop is getting closer. It's on Saturday 5th December at the University of Westminster's Cavendish Street Campus (the same place it's been for the last few years).The schedule was announced a couple of days ago and, at always, it looks like a great line-up. via perlhacks.com It's official - I'm flying to London to attend London Perl Workshop and speak about Plack and PSGI. The line-up of the talks looks so great and I can't wait to be there.</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><blockquote> The London Perl Workshop is getting closer. It's on Saturday 5th December at the University of Westminster's Cavendish Street Campus (the same place it's been for the last few years).The schedule was announced a couple of days ago and, at always, it looks like a great line-up.</blockquote>

<p><small>via <a href="http://perlhacks.com/2009/11/london-perl-workshop.php">perlhacks.com</a></small></p>

<p>It's official - I'm flying to London to attend <a href="http://conferences.yapceurope.org/lpw2009/">London Perl Workshop</a> and speak about <a href="http://conferences.yapceurope.org/lpw2009/talk/2455">Plack and PSGI</a>. The <a href="http://conferences.yapceurope.org/lpw2009/schedule">line-up of the talks</a> looks so great and I can't wait to be there.</p></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/11/london-perl-workshop.html</feedburner:origLink></entry>
    <entry>
        <title>Purchased this: GF1</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/-CmE6Yagn0A/purchased-this-gf1.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/11/purchased-this-gf1.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e2012875bbb1ce970c</id>
        <published>2009-11-19T22:37:13-08:00</published>
        <updated>2009-11-19T22:37:13-08:00</updated>
        <summary>via www.amazon.co.jp Panasonic DMC-GF1! It's never been easily available in the North America and the price has been up and down of this couple of days in Japan but amazon.co.jp finally came up with the "Last 2 items" stock a couple of hours ago with the pretty good 65000 JPY deal. I just one-click purchased so I can get it when I'm back there in Japan next week. Exciting!</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><img height="280" src="http://ecx.images-amazon.com/images/I/51UUQmGFlaL._AA280_.jpg" width="280" />

<p><small>via <a href="http://www.amazon.co.jp/gp/product/B002NSO364/ref=s9_wishf_gw_i1?ie=UTF8&amp;coliid=I1RYCUGK075QML&amp;colid=WA5CJ9HHP68Z&amp;pf_rd_m=AN1VRQENFRJN5&amp;pf_rd_s=right-1&amp;pf_rd_r=1GE3S8B78CW28GM5JP5G&amp;pf_rd_t=101&amp;pf_rd_p=467447956&amp;pf_rd_i=489986">www.amazon.co.jp</a></small></p>

<p>Panasonic DMC-GF1!</p>

<p>It's never been easily available in the North America and the price has been up and down of this couple of days in Japan but amazon.co.jp finally came up with the "Last 2 items" stock a couple of hours ago with the pretty good 65000 JPY deal. </p>

<p>I just one-click purchased so I can get it when I'm back there in Japan next week. Exciting!</p></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/11/purchased-this-gf1.html</feedburner:origLink></entry>
    <entry>
        <title>Love SQ available on iTunes US</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/GGn4qwcHX5Y/love-sq-available-on-itunes-us.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/11/love-sq-available-on-itunes-us.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e20120a6b9badc970b</id>
        <published>2009-11-19T22:07:33-08:00</published>
        <updated>2009-11-24T13:19:48-08:00</updated>
        <summary>via itunes.apple.com THANK YOU Square Enix for making the awesome Love SQ compilation (collection of remixes of tracks from Final Fantasy, Chrono Trigger and Romancing Saga) available on iTunes store, first on United States with no freaking DRM! I'm so enjoying this: livetune's to Far Away Times, Pe'z FF Main Theme and De De Mouse's Eternal Wind is so great.</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><img height="170" src="http://a1.phobos.apple.com/us/r30/Music/46/21/36/mzi.wvblyqcx.170x170-75.jpg" width="170" />

<p><small>via <a href="http://itunes.apple.com/us/album/love-sq/id338068045">itunes.apple.com</a></small></p>

<p>THANK YOU Square Enix for making the awesome Love SQ compilation (collection of remixes of tracks from Final Fantasy, Chrono Trigger and Romancing Saga) available on iTunes store, first on United States with no freaking DRM!</p>

<p>I'm so enjoying this: livetune's to Far Away Times, Pe'z FF Main Theme and De De Mouse's Eternal Wind is so great.</p></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/11/love-sq-available-on-itunes-us.html</feedburner:origLink></entry>
    <entry>
        <title>Shibuya.pm Tech Talks #12</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/typepad/blog/~3/Z3SD3zjtlZc/shibuyapm-tech-talks-12.html" />
        <link rel="replies" type="text/html" href="http://bulknews.typepad.com/blog/2009/11/shibuyapm-tech-talks-12.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00d8345206d069e20120a6b4d9be970b</id>
        <published>2009-11-18T22:47:33-08:00</published>
        <updated>2009-11-18T22:47:33-08:00</updated>
        <summary>RDBMS 以外の non-relational なデータベースとして KVS の枠にとどまらない Not only SQL を指向する OSS の実装と運用の実際について語り合います。 一人5分間の持ち時間でライトニングトーク的なプレゼン...</summary>
        <author>
            <name>miyagawa</name>
        </author>
        
        
<content type="xhtml" xml:lang="ja-JP" xml:base="http://bulknews.typepad.com/blog/">
<div xmlns="http://www.w3.org/1999/xhtml"><blockquote> RDBMS 以外の non-relational なデータベースとして KVS の枠にとどまらない Not only SQL を指向する OSS の実装と運用の実際について語り合います。 一人5分間の持ち時間でライトニングトーク的なプレゼンを行なった後、 パネラーの方から10分間のツッコミを行ないます。 最後に総論として会場からの質疑応答を受け付けます。 （※発表タイトル・順・時間はすべて仮です）</blockquote>

<p><small>via <a href="http://shibuya.pm.org/blosxom/techtalks/200911.html">shibuya.pm.org</a></small></p>

<p>I'm going to Japan next week around Thanksgiving holidays (haven't yet booked the flight but I'm 90% positive :)) and asked Takesako-san to setup awesome <a href="http://shibuya.pm.org/">Shibuya.pm</a> meetup. A day later and he's come up with an awesome lineup of talks: Themed #nosql #nokvs #noperl.</p>

<p>I'll talk about <a href="http://github.com/miyagawa/Tatsumaki">Tatsumaki</a>, the I/O bound web frameworks built on top of Plack and AnyEvent. Other speakers include <a href="http://1978th.net/">Mikio Hirabayashi</a> the author of TokyoCabinet and TokyoTyrant, and we'll talk about lots of cool stuff like golang, kumofs, memcached, Redis and RDBMS sharding. </p>

<p>Can't wait to be there!</p></div>
</content>


    <feedburner:origLink>http://bulknews.typepad.com/blog/2009/11/shibuyapm-tech-talks-12.html</feedburner:origLink></entry>
 
</feed><!-- ph=1 --><!-- nhm:dynamic-ssi -->
