<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Big Sky</title>
    <link>http://mattn.kaoriya.net/</link>
    <description>システム開発屋がひっそり語るぼやき</description>
    <language>ja</language>
    <generator>blosxom/2.1.2+dev</generator>
    <atom:link rel="self" href="http://mattn.kaoriya.net/index.rss" type="application/rss+xml" />
    <atom:link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
   <item>
     <title>Vim scriptはウェブアプリケーション記述言語やったんやー</title>
     <pubDate>Fri, 27 Jan 2012 21:00:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/vim/20120127204609.htm</link>
     <category>vim</category><category>plack</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/vim/20120127204609.htm</guid>
     <description>
こんにちわ。昨今、ウェブ開発の進化はすざましいですね。PythonやPerlやJava、色んな言語で書かれていると思います。&lt;br /&gt;
もちろん編集にはVimを使っているかと思います。&lt;br /&gt;
でも編集だけ？&lt;br /&gt;
&lt;br /&gt;
違うよね！&lt;br /&gt;
Vim scriptはウェブアプリケーション記述言語なんだよ！&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Plack::App::Vim&lt;/b&gt;&lt;br /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
&lt;span class=&quot;Statement&quot;&gt;package&lt;/span&gt;&lt;span class=&quot;Type&quot;&gt;&amp;nbsp;Plack::App::Vim&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;use strict&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;use warnings&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;use parent&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;qw/&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;Plack::Component&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;/&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;use&amp;nbsp;&lt;/span&gt;Plack::Request;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;use&amp;nbsp;&lt;/span&gt;Encode;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;use&amp;nbsp;&lt;/span&gt;JSON::PP;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;sub&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;prepare_app&amp;nbsp;&lt;/span&gt;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;my&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;shift&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;vim&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;}&lt;/span&gt;&amp;nbsp;||=&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;vim&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;(!&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;}&lt;/span&gt;) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;open&lt;/span&gt;(&lt;span class=&quot;Statement&quot;&gt;my&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$f&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;vim --serverlist|&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;my&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$server&lt;/span&gt;&amp;nbsp;= &amp;lt;&lt;span class=&quot;Identifier&quot;&gt;$f&lt;/span&gt;&amp;gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;close&lt;/span&gt;(&lt;span class=&quot;Identifier&quot;&gt;$f&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;chomp&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$server&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;}&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$server&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;(!&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;}&lt;/span&gt;) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;open&lt;/span&gt;(&lt;span class=&quot;Statement&quot;&gt;my&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$f&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;sprintf&lt;/span&gt;(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;%s --servername %s --remote-expr&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;amp;encoding&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;vim&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;}&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;}&lt;/span&gt;));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;my&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$encoding&lt;/span&gt;&amp;nbsp;= &amp;lt;&lt;span class=&quot;Identifier&quot;&gt;$f&lt;/span&gt;&amp;gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;close&lt;/span&gt;(&lt;span class=&quot;Identifier&quot;&gt;$f&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;chomp&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$encoding&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;}&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$encoding&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;sub&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;call&amp;nbsp;&lt;/span&gt;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;my&lt;/span&gt;&amp;nbsp;(&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$env&lt;/span&gt;) =&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;@_&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;my&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$req&lt;/span&gt;&amp;nbsp;= Plack::Request-&amp;gt;new(&lt;span class=&quot;Identifier&quot;&gt;$env&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;my&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$json&lt;/span&gt;&amp;nbsp;= JSON::PP-&amp;gt;new-&amp;gt;ascii&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;allow_singlequote-&amp;gt;allow_blessed-&amp;gt;allow_nonref;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;my&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$str&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$json&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;encode&lt;/span&gt;({&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;uri&lt;/span&gt;&amp;nbsp;=&amp;gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$env&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;PATH_INFO&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;}&lt;/span&gt;||&lt;span class=&quot;Constant&quot;&gt;&apos;&apos;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;method&lt;/span&gt;&amp;nbsp;=&amp;gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$req&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;method&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;headers&lt;/span&gt;&amp;nbsp;=&amp;gt; [&lt;span class=&quot;Statement&quot;&gt;split&lt;/span&gt;(&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;/&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$req&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;headers-&amp;gt;as_string&lt;/span&gt;)],&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;content&lt;/span&gt;&amp;nbsp;=&amp;gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$req&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;content&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$str&lt;/span&gt;&amp;nbsp;=~&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;s!&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;x22&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;!g&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;my&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$command&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span class=&quot;Identifier&quot;&gt;$&lt;/span&gt;^O&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;eq&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;MSWin32&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$command&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;sprintf&lt;/span&gt;(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;%s --servername %s --remote-expr &amp;quot;vimplack#handle(&amp;quot;&amp;quot;&amp;quot;%s&amp;quot;&amp;quot;&amp;quot;)&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;vim&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;}&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;}&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;encode(&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;}&lt;/span&gt;&amp;nbsp;||&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;utf8&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$str&lt;/span&gt;));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$command&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;sprintf&lt;/span&gt;(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;%s --servername %s --remote-expr &apos;vimplack#handle(&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;%s&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;)&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;vim&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;}&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;}&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;encode(&lt;span class=&quot;Identifier&quot;&gt;$self&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;}&lt;/span&gt;&amp;nbsp;||&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;utf8&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$str&lt;/span&gt;));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;open&lt;/span&gt;(&lt;span class=&quot;Statement&quot;&gt;my&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$f&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;$command&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;binmode&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$f&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;:utf8&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;my&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$out&lt;/span&gt;&amp;nbsp;= &amp;lt;&lt;span class=&quot;Identifier&quot;&gt;$f&lt;/span&gt;&amp;gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;close&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$f&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;my&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$res&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$json&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;-&amp;gt;decode&lt;/span&gt;(&lt;span class=&quot;Identifier&quot;&gt;$out&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$res-&amp;gt;[&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;]&lt;/span&gt;&amp;nbsp;= encode_utf8&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$res-&amp;gt;[&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;]&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$res&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$res&lt;/span&gt;&amp;nbsp;|| [&lt;span class=&quot;Constant&quot;&gt;500&lt;/span&gt;, [&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;Content-Type&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&amp;nbsp;=&amp;gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;text/plain&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;], [&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;Internal Server Error&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;]];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;__END__&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;=head1 NAME&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;Plack::App::Vim - The Vim App in Plack&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;=head1 SYNOPSIS&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp;use Plack::Builder;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp;use Plack::App::Vim;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp;builder {&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mount &amp;quot;/&amp;quot; =&amp;gt; Plack::App::Vim-&amp;gt;new(server =&amp;gt; &apos;VIM&apos;);&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp;};&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;=head1 DESCRIPTION&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;Plack::App::Vim allows you to write web application with Vim script.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;=head1 AUTHOR&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;Yasuhiro Matsumoto&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;=head1 SEE ALSO&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;L&amp;lt;Plack&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;=cut&lt;/span&gt;&lt;br /&gt;
&lt;/blockquote&gt;
&lt;code&gt;Plack::App&lt;/code&gt;のアプリケーションハンドラを書いたよ。これを起動するpsgiファイルを用意するよ！&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;app.psgi&lt;/b&gt;&lt;br /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
&lt;span class=&quot;PreProc&quot;&gt;#!perl&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;use lib&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;qw/&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;lib&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;/&lt;/span&gt;;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;use&amp;nbsp;&lt;/span&gt;Plack::Builder;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;use&amp;nbsp;&lt;/span&gt;Plack::App::Vim;&lt;br /&gt;
&lt;br /&gt;
builder {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mount&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;&amp;nbsp;=&amp;gt; Plack::App::Vim-&amp;gt;new(&lt;span class=&quot;Constant&quot;&gt;server&lt;/span&gt;&amp;nbsp;=&amp;gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;VIM&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;);&lt;br /&gt;
};&lt;br /&gt;
&lt;/blockquote&gt;
引数の&lt;code&gt;server&lt;/code&gt;にはclientserver機能が使えるVimを立ち上げ、そのサーバIDを指定しておく必要があるよ！&lt;br /&gt;
そしてVim側にハンドラを書くよ！&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;autoload/vimplack.vim&lt;/b&gt;&lt;br /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
&lt;span class=&quot;Statement&quot;&gt;scriptencoding&lt;/span&gt;&amp;nbsp;utf&lt;span class=&quot;Statement&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;8&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;function&lt;/span&gt;! vimplack#handle&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;req&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;req&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;=&lt;/span&gt;&amp;nbsp;json#&lt;span class=&quot;Normal&quot;&gt;decode&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;a:req&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;res&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;span class=&quot;Constant&quot;&gt;200&lt;/span&gt;, {}, [&lt;span class=&quot;Constant&quot;&gt;&amp;quot;hello world&amp;quot;&lt;/span&gt;]]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;json#&lt;span class=&quot;Normal&quot;&gt;encode&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;res&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;endfunction&lt;/span&gt;&lt;br /&gt;
&lt;/blockquote&gt;
PSGIプロトコルそのままですね！便利！&lt;br /&gt;
&lt;br /&gt;
起動しよう！&lt;br /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
# plackup app.psgi&lt;br /&gt;
HTTP::Server::PSGI: Accepting connections at http://0:5000/&lt;br /&gt;
&lt;/blockquote&gt;
ブラウザで&lt;code&gt;http://localhost:5000&lt;/code&gt;を開こう！&lt;br /&gt;
&lt;blockquote&gt;
&lt;img src=&quot;http://go-gyazo.appspot.com/6266a87ce3893313.png&quot; alt=&quot;Vim on PSGI&quot; /&gt;
&lt;/blockquote&gt;
やたー！&lt;br /&gt;
あとはアプリケーション書き放題ですね！&lt;br /&gt;
試しに掲示板書いてみるよ！&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;autoload/vimplack.vim&lt;/b&gt;&lt;br /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
&lt;span class=&quot;Statement&quot;&gt;scriptencoding&lt;/span&gt;&amp;nbsp;utf&lt;span class=&quot;Statement&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;8&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;s&lt;/span&gt;:comments&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;s:,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;comments&apos;&lt;/span&gt;, []&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;function&lt;/span&gt;! vimplack#handle&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;req&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;req&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;=&lt;/span&gt;&amp;nbsp;json#decode&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;a:req&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;req&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;uri&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;==&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;res&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;span class=&quot;Constant&quot;&gt;200&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;Content-Type&amp;quot;&lt;/span&gt;:&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;text/html; charset=utf-8&amp;quot;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;}&lt;/span&gt;, [&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;lt;html&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;lt;link rel=&apos;shortcut icon&apos; href=&apos;/static/favicon.ico&apos;&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;lt;title&amp;gt;comment board&amp;lt;/title&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;lt;body&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;lt;form action=&apos;/regist&apos; method=&apos;post&apos;&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;コメント:&amp;lt;input type=&apos;text&apos; name=&apos;comment&apos; value=&apos;&apos; /&amp;gt;&amp;lt;br /&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;lt;input type=&apos;submit&apos; value=&apos;登録&apos; /&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;lt;/form&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;copy&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;s:comments&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;html#encodeEntityReference(v:val)&apos;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&amp;lt;br /&amp;gt;&apos;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;lt;/body&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;lt;/html&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;\&lt;/span&gt;]]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;elseif&lt;/span&gt;&amp;nbsp;req&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;uri&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;==&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;/regist&apos;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&amp;nbsp;req&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;method&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;==&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;POST&apos;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;params&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;{}&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;for&lt;/span&gt;&amp;nbsp;_&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;req&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;content,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&amp;amp;&apos;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;split(v:val,&amp;quot;=&amp;quot;)&apos;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;params&lt;/span&gt;[_[&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;]]&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;iconv&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;http#decodeURI&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;_[&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;]&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;utf-8&apos;&lt;/span&gt;, &amp;amp;encoding&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;endfor&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;has_key&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;params,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;comment&apos;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;s:comments, params[&lt;span class=&quot;Constant&quot;&gt;&apos;comment&apos;&lt;/span&gt;]&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;res&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;span class=&quot;Constant&quot;&gt;302&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;Location&amp;quot;&lt;/span&gt;:&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;}&lt;/span&gt;, [&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;]]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;res&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;span class=&quot;Constant&quot;&gt;404&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;{}&lt;/span&gt;, [&lt;span class=&quot;Constant&quot;&gt;&amp;quot;404 Dan Not Found&amp;quot;&lt;/span&gt;]]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;json#encode&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;res&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;endfunction&lt;/span&gt;&lt;br /&gt;
&lt;/blockquote&gt;
アプリケーションの更新はVimを再起動するか&lt;code&gt;autoload/vimplack.vim&lt;/code&gt;を開いている常態なら
&lt;blockquote class=&quot;code&quot;&gt;
:so %&lt;br /&gt;
&lt;/blockquote&gt;
で行けるよ！&lt;br /
よしブラウザでF5だ！&lt;br /&gt;
&lt;blockquote&gt;
&lt;img src=&quot;http://go-gyazo.appspot.com/5ba20ac7c5e430e7.png&quot; alt=&quot;Vim on PSGI&quot; /&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
知らんかったー&lt;br /&gt;
Vim scriptはウェブアプリケーション記述言語やったんやー&lt;br /&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
 &lt;a href=&quot;https://github.com/mattn/p5-Plack-App-Vim&quot;&gt;mattn/p5-Plack-App-Vim - GitHub&lt;/a&gt;&lt;br /&gt;
 &lt;p&gt;Vim Application Handler for PSGI&lt;/p&gt;
 &lt;cite&gt;https://github.com/mattn/p5-Plack-App-Vim&lt;/cite&gt;
&lt;/blockquote&gt;
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>新言語rustでhello world</title>
     <pubDate>Wed, 25 Jan 2012 20:06:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/lang/rust/20120125195418.htm</link>
     <category>rust</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/lang/rust/20120125195418.htm</guid>
     <description>
やっぱり最初はhello worldって事で...&lt;br /&gt;
&lt;br /&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
 &lt;a href=&quot;http://www.rust-lang.org/&quot;&gt;Rust&lt;/a&gt;&lt;br /&gt;
 &lt;p&gt;&lt;img src=&quot;http://www.rust-lang.org/logos/rust-logo-128x128-blk.png&quot; alt=&quot;Rust&quot; align=&quot;right&quot; /&gt;Rust a safe, concurrent, practical language Rust is a curly-brace, block-structured expression langu...&lt;br /&gt;Rust is a curly-brace, block-structured expression language. It visually resembles the C language family, but differs significantly in syntactic and semantic details. Its design is oriented toward concerns of “programming in the large”, that is, of creating and maintaining boundaries – both abstract and operational – that preserve large-system integrity, availability and concurrency.&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;
 &lt;cite&gt;http://www.rust-lang.org/&lt;/cite&gt;
&lt;/blockquote&gt;

windowsのインストーラがダウンロード出来なかったのでgithubからダウンロードしてビルドした。&lt;br /&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
 &lt;a href=&quot;https://github.com/mozilla/rust&quot;&gt;mozilla/rust - GitHub&lt;/a&gt;&lt;br /&gt;
 &lt;p&gt;a safe, concurrent, practical language&lt;/p&gt;
 &lt;cite&gt;https://github.com/mozilla/rust&lt;/cite&gt;
&lt;/blockquote&gt;

ビルドはmingw/msysで&lt;code&gt;./configure &amp;amp;&amp;amp; make install&lt;/code&gt;。&lt;br /&gt;
LLVM上のコンパイラなのでビルドは結構リソースを食う。かなり食う。&lt;br /&gt;
&lt;br /&gt;
ただ単にfizzbuzz出しても&lt;a href=&quot;http://blog.livedoor.jp/dankogai/archives/51767615.html&quot; class=&quot;external&quot; target=&quot;_blank&quot;&gt;danさん&lt;/a&gt;の真似になって面白く無かったのでメッセージボックス出してみた。&lt;br /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
&lt;span class=&quot;Statement&quot;&gt;use&lt;/span&gt;&amp;nbsp;std;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;import&lt;/span&gt;&amp;nbsp;std::io;&lt;br /&gt;
&lt;br /&gt;
#[abi&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;stdcall&amp;quot;&lt;/span&gt;]&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;native&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;mod&lt;/span&gt;&amp;nbsp;user32&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;fn&lt;/span&gt;&amp;nbsp;MessageBoxA(h:&amp;nbsp;ctypes::c_uint,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message:&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;str&lt;/span&gt;::sbuf,&amp;nbsp;title:&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;str&lt;/span&gt;::sbuf,&amp;nbsp;flag:&amp;nbsp;ctypes::c_uint)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;&amp;nbsp;ctypes::c_uint;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;fn&lt;/span&gt;&amp;nbsp;main() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;str&lt;/span&gt;::as_buf(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;, { |message|&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;str&lt;/span&gt;::as_buf(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;world&amp;quot;&lt;/span&gt;, { |title|&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;user32::MessageBoxA(0u,&amp;nbsp;message,&amp;nbsp;title,&amp;nbsp;0u);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;})&lt;br /&gt;
&amp;nbsp;&amp;nbsp;})&lt;br /&gt;
}&lt;br /&gt;
&lt;/blockquote&gt;
abiとしてcdeclやstdcallが指定出切る。&lt;code&gt;rustc&lt;/code&gt;コマンドはuser32に対してちゃんと&lt;code&gt;-luser32&lt;/code&gt;というリンクオプションを足してくれるので、コマンドラインでガチャガチャやるイメージはあまりない。&lt;br /&gt;
なお、&lt;code&gt;CARGO_ROOT&lt;/code&gt;という環境変数に&lt;code&gt;c:/rust/bin&lt;/code&gt;や&lt;code&gt;c:/rust/lib&lt;/code&gt;でいう所の&lt;code&gt;c:/rust&lt;/code&gt;を指定しておくと、ちゃんとリンカが判断してファイルを探してくれる。&lt;br /&gt;

vim編集中に簡単に実行出切る様に、quickrunにもプルリクエストを送っておいた。(マージされた)&lt;br /&gt;
&lt;blockquote class=&quot;quote&quot;&gt;
 &lt;a href=&quot;https://github.com/thinca/vim-quickrun/pull/22&quot;&gt;#22: support mozilla rust. by mattn for thinca/vim-quickrun - Pull Request - GitHub&lt;/a&gt;&lt;br /&gt;
 &lt;cite&gt;https://github.com/thinca/vim-quickrun/pull/22&lt;/cite&gt;
&lt;/blockquote&gt;
&lt;br /&gt;

環境が揃うユーザならば、vimでファイル開いて&lt;code&gt;&amp;lt;leader&amp;gt;r&lt;/code&gt;とタイプすればメッセージボックスが出る様になります。&lt;br /&gt;

&lt;blockquote&gt;
&lt;img src=&quot;http://go-gyazo.appspot.com/1028b5efd45895cc.png&quot; alt=&quot;rust-win32&quot; /&gt;
&lt;/blockquote&gt;

所感としては、&lt;code&gt;str::as_buf&lt;/code&gt;がブロック式なので、rubyっぽく思えると同時に引数2つの場合めんどくさ過ぎる！と思った。言語というか、仕組み的にはGo言語が近いなーとか思ってたら、Dubheadさんから教えてもらったリンクに既に書いてあった。&lt;br /&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
 &lt;a href=&quot;https://github.com/mozilla/rust/wiki/Doc-language-FAQ&quot;&gt;Doc language FAQ - GitHub&lt;/a&gt;&lt;br /&gt;
 &lt;p&gt;Have you seen this Google language, Go? How does Rust compare?&lt;/p&gt;
&lt;/blockquote&gt;
面白そうなのでしばらく触ってみる。
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>trie_tree書いてみた。</title>
     <pubDate>Tue, 17 Jan 2012 13:52:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/lang/c/20120117135034.htm</link>
     <category>c</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/lang/c/20120117135034.htm</guid>
     <description>
trieなんたらが話題になってたのでなんとなく書いてみた。&lt;br /&gt;
ベンチとかはやってない。&lt;br /&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
 &lt;a href=&quot;http://blog.livedoor.jp/dankogai/archives/51765855.html&quot;&gt;404 Blog Not Found:Algorithm - 連想配列の実装としてのハッシュはオワコン?&lt;/a&gt;&lt;br /&gt;
 &lt;p&gt;そのデータ構造は、君の魂を差し出すに足るものかい? 連想配列( Associative array )がコレクション( Collection )、すなわち数多のデータ構造をまとめるデータ構造としての覇...&lt;/p&gt;
 &lt;cite&gt;http://blog.livedoor.jp/dankogai/archives/51765855.html&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;blockquote class=&quot;code&quot;&gt;
&lt;span class=&quot;PreProc&quot;&gt;#include&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;PreProc&quot;&gt;#include&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;typedef&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;struct&lt;/span&gt;&amp;nbsp;_trie {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;char&lt;/span&gt;&amp;nbsp;c;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;unsigned&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;int&lt;/span&gt;&amp;nbsp;n;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;struct&lt;/span&gt;&amp;nbsp;_trie** next;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;void&lt;/span&gt;* value;&lt;br /&gt;
} trie;&lt;br /&gt;
&lt;br /&gt;
trie*&lt;br /&gt;
trie_new() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;trie* p = (trie*) malloc(&lt;span class=&quot;Statement&quot;&gt;sizeof&lt;/span&gt;(trie));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;p-&amp;gt;c =&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;p-&amp;gt;n =&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;p-&amp;gt;next =&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;NULL&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;p;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;void&lt;/span&gt;&lt;br /&gt;
trie_free(trie* p) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;unsigned&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;int&lt;/span&gt;&amp;nbsp;i;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;for&lt;/span&gt;&amp;nbsp;(i =&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;; i &amp;lt; p-&amp;gt;n; i++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trie_free(p-&amp;gt;next[i]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;(p-&amp;gt;n)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;free(p-&amp;gt;next);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;free(p);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
trie*&lt;br /&gt;
trie_put(trie* p,&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;char&lt;/span&gt;* key,&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;void&lt;/span&gt;* value) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;(*key ==&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p-&amp;gt;value = (&lt;span class=&quot;Type&quot;&gt;void&lt;/span&gt;*) value;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;p;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;trie* next =&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;NULL&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;int&lt;/span&gt;&amp;nbsp;i;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;for&lt;/span&gt;&amp;nbsp;(i =&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;; i &amp;lt; p-&amp;gt;n; i++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;(p-&amp;gt;next[i]-&amp;gt;c == *key) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;next = p;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;break&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;(!next) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;(!(next = trie_new()))&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;NULL&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trie** children = (trie**) realloc(p-&amp;gt;next, p-&amp;gt;n *&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;sizeof&lt;/span&gt;(trie*));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;(!children)&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;NULL&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p-&amp;gt;next = children;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;next-&amp;gt;c = *key;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p-&amp;gt;next[p-&amp;gt;n] = next;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p-&amp;gt;n++;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;trie_put(next, key+&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;, value);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
trie*&lt;br /&gt;
trie_get(trie* p,&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;char&lt;/span&gt;* key) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;(p-&amp;gt;c) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;(p-&amp;gt;c != *key)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;NULL&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;(p-&amp;gt;c == *key &amp;amp;&amp;amp; *(key+&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;) ==&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;p;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;key++;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;int&lt;/span&gt;&amp;nbsp;i;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;trie* value =&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;NULL&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;for&lt;/span&gt;&amp;nbsp;(i =&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;; i &amp;lt; p-&amp;gt;n; i++) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;((value = trie_get(p-&amp;gt;next[i], key)))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;value;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;NULL&lt;/span&gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;void&lt;/span&gt;&lt;br /&gt;
safe_puts(&lt;span class=&quot;Type&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;char&lt;/span&gt;* key,&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;const&lt;/span&gt;&amp;nbsp;trie* p) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;(!p)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;%s&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;nbsp;not found&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;, key);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;(!p-&amp;gt;value)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;%s&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;: null&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;, key);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;%s&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;%s&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;, key, (&lt;span class=&quot;Type&quot;&gt;char&lt;/span&gt;*) p-&amp;gt;value);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;int&lt;/span&gt;&lt;br /&gt;
main(&lt;span class=&quot;Type&quot;&gt;int&lt;/span&gt;&amp;nbsp;argc,&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;char&lt;/span&gt;* argv[]) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;trie* p = trie_new();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;trie* v;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;trie_put(p,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;bar&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;trie_put(p,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;bar&amp;quot;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;baz&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;v = trie_get(p,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;baz&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;safe_puts(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;baz&amp;quot;&lt;/span&gt;, v);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;v = trie_get(p,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;safe_puts(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;, v);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;v = trie_get(p,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;bar&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;safe_puts(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;bar&amp;quot;&lt;/span&gt;, v);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;trie_put(p,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;うんこ&amp;quot;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;うんこっこー&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;v = trie_get(p,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;うんこ&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;safe_puts(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;うんこ&amp;quot;&lt;/span&gt;, v);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;v = trie_get(p,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;404 blog&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;safe_puts(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;404 blog&amp;quot;&lt;/span&gt;, v);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;trie_free(p);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;/blockquote&gt;


&lt;blockquote class=&quot;code&quot;&gt;
baz not found&lt;br /&gt;
foo: bar&lt;br /&gt;
bar: baz&lt;br /&gt;
うんこ: うんこっこー&lt;br /&gt;
404 blog not found&lt;br /&gt;
&lt;/blockquote&gt;
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>Lingr Radar For Linuxってのを書いた</title>
     <pubDate>Sat, 14 Jan 2012 23:33:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/lang/python/20120114230825.htm</link>
     <category>lingr</category><category>linux</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/lang/python/20120114230825.htm</guid>
     <description>
といっても2ヶ月程前の話なんだけど。

&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;https://github.com/mattn/lingr-radar-linux&quot;&gt;mattn/lingr-radar-linux - GitHub&lt;/a&gt;&lt;br /&gt;
  &lt;p&gt;notify messages in lingr. should be work well for linux/windows&lt;/p&gt;
  &lt;cite&gt;https://github.com/mattn/lingr-radar-linux&lt;/cite&gt;
&lt;/blockquote&gt;

ujihisaさんに「ちゃんと動いた」ぽい様な事を報告してもらって、そう言えば紹介してなかったなーと思ったので。&lt;br /&gt;
要はオフィシャルが提供しているLingr Radar For MacのLinux版。pythonで書かれています。&lt;br /&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;http://radar.lingr.com/&quot;&gt;Lingr Tools&lt;/a&gt;&lt;br /&gt;
  &lt;cite&gt;http://radar.lingr.com/&lt;/cite&gt;
&lt;/blockquote&gt;

動作にはyoshioriさんのpyLingrとpit、gntpが必要。pyLingrはpipなんかでは入らないので手作業が必要。&lt;br /&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;https://github.com/yoshiori/pyLingr&quot;&gt;yoshiori/pyLingr - GitHub&lt;/a&gt;&lt;br /&gt;
  &lt;cite&gt;https://github.com/yoshiori/pyLingr&lt;/cite&gt;
&lt;/blockquote&gt;

リポジトリ内の&lt;code&gt;pylingr.py&lt;/code&gt;を&lt;code&gt;lingr-radar.py&lt;/code&gt;と同じディレクトリに置いて動かせばOK。&lt;br /&gt;
pitとgntpはpipなんかで入れる。&lt;br /&gt;
起動するとlingrのユーザとパスワードを求められるのでエディタで編集して保存、終了。参加しているルームの通知がGNTPプロトコルのGrowlに通知される。linuxだとgrowl-for-linuxで可能。&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
&lt;img src=&quot;http://go-gyazo.appspot.com/6515343685252026.png&quot; alt=&quot;lingr-radar-for-linux&quot; /&gt;
&lt;/blockquote&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;http://mattn.github.com/growl-for-linux/&quot;&gt;mattn/growl-for-linux @ GitHub&lt;/a&gt;&lt;br /&gt;
  &lt;p&gt;Introduction: Growl For Linux is Linux-compatible of Growl. Growl is a notification system for Mac O...&lt;/p&gt;
  &lt;cite&gt;http://mattn.github.com/growl-for-linux/&lt;/cite&gt;
&lt;/blockquote&gt;

ちなみにどれもwindowsで動作するのでGrowl For Windows入れてる人やgrowl-for-linuxをwindowsでビルド出来る人はwindowsでも実現可能。&lt;br /&gt;
よかったらどうぞ。
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>勝手に添削 - strncpyの罠</title>
     <pubDate>Fri, 13 Jan 2012 10:13:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/lang/c/20120113100918.htm</link>
     <category>c</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/lang/c/20120113100918.htm</guid>
     <description>
&lt;em&gt;追記: 良く見たらstrncpyの罠でもなんでもなく、バッファがクリアされてないのが原因だった。って事であとでpullreqでも送っとくかな。&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;

まぁソート関数自身の問題じゃないので控えめに。&lt;br /&gt;
&lt;br /&gt;
strncpyは必ず &lt;code&gt;\0&lt;/code&gt; で埋めてくれるとは限らない。

&lt;blockquote class=&quot;quote&quot;&gt;
 &lt;a href=&quot;http://blog.livedoor.jp/dankogai/archives/51764911.html&quot;&gt;404 Blog Not Found:algorithm - bucketsort.[ch] - 汎用かつlibcの*sortより高速な&lt;/a&gt;&lt;br /&gt;
 &lt;p&gt;dankogai/c-bucketsort - GitHub&lt;/p&gt;
 &lt;cite&gt;http://blog.livedoor.jp/dankogai/archives/51764911.html&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
 &lt;a href=&quot;https://github.com/dankogai/c-bucketsort&quot;&gt;dankogai/c-bucketsort - GitHub&lt;/a&gt;&lt;br /&gt;
 &lt;p&gt;bucketsort - bucket sort that can be used for general purpose&lt;/p&gt;
 &lt;cite&gt;https://github.com/dankogai/c-bucketsort&lt;/cite&gt;
&lt;/blockquote&gt;

strncpy(3)のmanページにはこう書いてある。

&lt;blockquote class=&quot;quote&quot;&gt;
&lt;p&gt;The strcpy() function copies the string pointed to by src, including the terminating null byte (&apos;\0&apos;), to the buffer pointed to by dest. The strings may not overlap, and the destination string dest must be large enough to receive the copy.&lt;/p&gt;
&lt;p&gt;The strncpy() function is similar, except that at most n bytes of src are copied. &lt;em&gt;Warning: If there is no null byte among the first n bytes of src, the string placed in dest will not be null-terminated.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

なので...

&lt;blockquote class=&quot;code&quot;&gt;
# ./bucketsort README
&lt;/blockquote&gt;

とかするとNULストップしてないバッファで画面が賑やかになり、時にはけたたましいビープ音で心躍る。&lt;br /&gt;
&lt;br /&gt;
サンプルプログラムの仕様が最終行の改行コードなしでも動く様にすべきなのかどうなのかが分からないので

&lt;blockquote class=&quot;code&quot;&gt;
&lt;span class=&quot;Type&quot;&gt;diff --git a/main.c b/main.c&lt;/span&gt;&lt;br /&gt;
index 67e4e00..48391b4 100644&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;--- a/main.c&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;+++ b/main.c&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;@@ -74,6 +74,7 @@&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;&amp;nbsp;int main(int argc, char **argv)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!lines[lcur])&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EXIT(&amp;quot;malloc failed&amp;quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strncpy(lines[lcur], buf, slen - 1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// do not copy \n&lt;br /&gt;
&lt;span class=&quot;Identifier&quot;&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lines[lcur][slen - 1] = 0;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; size_t i;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // for (i = 0; i &amp;lt; lcur; i++) printf(&amp;quot;%s\n&amp;quot;, lines[i]);&lt;br /&gt;
&lt;/blockquote&gt;

こういうワークアラウンドでもOKなのかもしれないが(そういう点でfork/pullreqはやめた)、おそらくツールとして扱うなら改行コードがあった場合には削除...という動きが望ましいのでstrpbrk(3)やstrchr(3)と使ったり、自作strchrぽい処理を入れていくと他のsortと比較しておられる状況も少し変わったりするのかもしれませんね。確認してないけど。&lt;br /&gt;
sort(1)とはやってる事が違いすぎるのでそもそもな気もしなくない。どこを比較したんだろう...。&lt;br /&gt;
&lt;br /&gt;
ちなみに全然オフトピだけど、GNU textutilsに入ってるsort(1)にはコア数によって動的にスレッドを生成してソートする処理が入ってるのでそういうの興味ある人はコード読むといいと思います。
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
  </channel>
</rss>

