<?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>Perl で 逆FizzBuzz</title>
     <pubDate>Thu, 17 May 2012 14:00:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/lang/perl/20120517135954.htm</link>
     <category>perl</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/lang/perl/20120517135954.htm</guid>
     <description>
&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;http://d.hatena.ne.jp/matarillo/20120515/p1&quot;&gt;逆FizzBuzz問題 (Inverse FizzBuzz) - 猫とC#について書くmatarilloの雑記&lt;/a&gt;&lt;br /&gt;
  &lt;p&gt;逆FizzBuzz問題 (Inverse FizzBuzz) General | Inverse Fizzbuzz - just another scala quant を日本語にしました。 ちなみに...&lt;/p&gt;
  &lt;cite&gt;http://d.hatena.ne.jp/matarillo/20120515/p1&lt;/cite&gt;
&lt;/blockquote&gt;

逆FizzBuzzって、オートマトンなので正規表現を使うと楽に出来るはず。

&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 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&amp;nbsp;&lt;/span&gt;Test::More;&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;inv_fizzbuzz&amp;nbsp;&lt;/span&gt;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;my&lt;/span&gt;&amp;nbsp;(&lt;span class=&quot;Identifier&quot;&gt;$fz&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$n&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$pat&lt;/span&gt;) = (&lt;span class=&quot;Constant&quot;&gt;&apos;&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;join&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;,*?&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;@_&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;while&lt;/span&gt;&amp;nbsp;(&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$fz&lt;/span&gt;&amp;nbsp;.=&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$n&lt;/span&gt;&amp;nbsp;%&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;15&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;&amp;nbsp;?&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;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$n&lt;/span&gt;&amp;nbsp;%&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;3&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;&amp;nbsp;?&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$n&lt;/span&gt;&amp;nbsp;%&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;5&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;&amp;nbsp;?&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;&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;,&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;:&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;buzz,&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;:&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizz,&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;:&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizzbuzz,&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;$fz&lt;/span&gt;&amp;nbsp;=~&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;$pat&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;Statement&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;my&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$rhs&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;1&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;my&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$lhs&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;substr&lt;/span&gt;(&lt;span class=&quot;Identifier&quot;&gt;$fz&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;index&lt;/span&gt;(&lt;span class=&quot;Identifier&quot;&gt;$fz&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$rhs&lt;/span&gt;) +&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$lhs&lt;/span&gt;&amp;nbsp;=~&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;s/&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizz|buzz&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;//g&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$rhs&lt;/span&gt;&amp;nbsp;=~&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;s/&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizz|buzz&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;//g&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$lhs&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;length&lt;/span&gt;(&lt;span class=&quot;Identifier&quot;&gt;$lhs&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$rhs&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$lhs&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;length&lt;/span&gt;(&lt;span class=&quot;Identifier&quot;&gt;$rhs&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;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;[&lt;span class=&quot;Identifier&quot;&gt;$lhs&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;$rhs&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;$n&lt;/span&gt;++;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
is_deeply(inv_fizzbuzz(&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;), [&lt;span class=&quot;Constant&quot;&gt;3&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;3&lt;/span&gt;]);&lt;br /&gt;
is_deeply(inv_fizzbuzz(&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;buzz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;), [&lt;span class=&quot;Constant&quot;&gt;5&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;5&lt;/span&gt;]);&lt;br /&gt;
is_deeply(inv_fizzbuzz(&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;buzz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;), [&lt;span class=&quot;Constant&quot;&gt;3&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;5&lt;/span&gt;]);&lt;br /&gt;
is_deeply(inv_fizzbuzz(&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;buzz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;), [&lt;span class=&quot;Constant&quot;&gt;5&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;6&lt;/span&gt;]);&lt;br /&gt;
is_deeply(inv_fizzbuzz(&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;buzz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;), [&lt;span class=&quot;Constant&quot;&gt;6&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;10&lt;/span&gt;]);&lt;br /&gt;
is_deeply(inv_fizzbuzz(&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;), [&lt;span class=&quot;Constant&quot;&gt;6&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;9&lt;/span&gt;]);&lt;br /&gt;
is_deeply(inv_fizzbuzz(&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;buzz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;), [&lt;span class=&quot;Constant&quot;&gt;3&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;6&lt;/span&gt;]);&lt;br /&gt;
is_deeply(inv_fizzbuzz(&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizzbuzz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;fizz&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;&lt;/span&gt;), [&lt;span class=&quot;Constant&quot;&gt;15&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;18&lt;/span&gt;]);&lt;br /&gt;
&lt;br /&gt;
done_testing;&lt;br /&gt;
&lt;/blockquote&gt;


&lt;b&gt;追記&lt;/b&gt;&lt;br /&gt;
Vimだとこうか？&lt;br /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
&lt;span class=&quot;Statement&quot;&gt;function&lt;/span&gt;!&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;s:&lt;/span&gt;inv_fizzbuzz&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;...&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;[fz,&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;n&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;p&lt;/span&gt;]&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;=&lt;/span&gt;&amp;nbsp;[&lt;span class=&quot;Constant&quot;&gt;&apos;&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;,&amp;nbsp;&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;a:000&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;,\{-}&apos;&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;while&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;1&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;fz&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;.=&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;n&lt;/span&gt;%&lt;span class=&quot;Constant&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;?&lt;span class=&quot;Statement&quot;&gt;n&lt;/span&gt;%&lt;span class=&quot;Constant&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;?&lt;span class=&quot;Statement&quot;&gt;n&lt;/span&gt;%&lt;span class=&quot;Constant&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;?&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;buzz,&amp;quot;&lt;/span&gt;:&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;fizz,&amp;quot;&lt;/span&gt;:&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;fizzbuzz,&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;m&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;matchstr&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;fz, p&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;if&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;m&lt;span class=&quot;Special&quot;&gt;)&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;&amp;gt;&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;let&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;lhs&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;len&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;fz[:&lt;span class=&quot;Normal&quot;&gt;stridx&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;fz, m&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;1&lt;/span&gt;],&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;,&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;1&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;return&lt;/span&gt;&amp;nbsp;[lhs,&amp;nbsp;lhs&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;len&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;m,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&apos;,&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&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;1&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;n&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;+=&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;endwhile&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;endfunction&lt;/span&gt;&lt;br /&gt;
&lt;/blockquote&gt;
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>Go言語から mruby が操作できる go-mruby 書いた</title>
     <pubDate>Thu, 10 May 2012 19:04:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/lang/ruby/20120510180554.htm</link>
     <category>mruby</category><category>golang</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/lang/ruby/20120510180554.htm</guid>
     <description>
&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;https://github.com/mattn/go-mruby&quot;&gt;mattn/go-mruby - GitHub&lt;/a&gt;&lt;br /&gt;
  &lt;p&gt;go-mruby make interface to embed mruby into go.&lt;/p&gt;
  &lt;cite&gt;https://github.com/mattn/go-mruby&lt;/cite&gt;
&lt;/blockquote&gt;

Matzさんにヒントも貰いながら、さっき出来ました。&lt;br /&gt;
メソッドは &lt;code&gt;Run&lt;/code&gt; と &lt;code&gt;Eval&lt;/code&gt; があり、mrubyの評価値を取得する事が出来ます。Go言語から渡した引数が ARGV になります。なので mruby 上では String とは限りません。&lt;br /&gt;

&lt;blockquote class=&quot;code&quot;&gt;
&lt;span class=&quot;Statement&quot;&gt;package&lt;/span&gt;&amp;nbsp;main&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;import&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;github.com/mattn/go-mruby&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;func&lt;/span&gt;&amp;nbsp;main() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mrb := mruby.New()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;defer&lt;/span&gt;&amp;nbsp;mrb.Close()&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;println&lt;/span&gt;(mrb.Eval(&lt;span class=&quot;Constant&quot;&gt;`&amp;quot;hello &amp;quot; + ARGV[0]`&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;mruby&amp;quot;&lt;/span&gt;).(&lt;span class=&quot;Type&quot;&gt;string&lt;/span&gt;))&lt;br /&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;_, i :=&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;range&lt;/span&gt;&amp;nbsp;mrb.Eval(&lt;span class=&quot;Constant&quot;&gt;`ARGV.map {|x| x + 1}`&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;2&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;3&lt;/span&gt;).([]&lt;span class=&quot;Statement&quot;&gt;interface&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;println&lt;/span&gt;(i.(&lt;span class=&quot;Type&quot;&gt;int32&lt;/span&gt;))&amp;nbsp;&lt;span class=&quot;Comment&quot;&gt;// 2 3 4&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;
&lt;/blockquote&gt;

良かったら遊んでみて下さい。
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>mruby で Sinatra に似せた WAF、Sinatic が動いた。</title>
     <pubDate>Wed, 09 May 2012 21:19:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/lang/ruby/20120509211817.htm</link>
     <category>mruby</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/lang/ruby/20120509211817.htm</guid>
     <description>
&lt;img src=&quot;http://go-gyazo.appspot.com/8d6ba539edc6910d.png&quot; alt=&quot;しなちく&quot; align=&quot;right&quot; /&gt;
「お前それ、シナチクって言いたかっただけやろ」&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&lt;br/ &gt;
「そうですが、何か」&lt;br /&gt;
&lt;br /&gt;
mruby で &lt;a href=&quot;https://github.com/mattn/mruby-http&quot;&gt;mruby-http&lt;/a&gt; と &lt;a href=&quot;https://github.com/mattn/mruby-uv&quot;&gt;mruby-uv&lt;/a&gt; を使い、sinatra ライクなのが動くまでに到った。&lt;br /&gt;
ショボいアプリケーションなら書ける様になったけど、mrubyはまだファイルIOが出来ないのでアプリと呼べる様な物が動くにはまだまだ先。&lt;br clear=&quot;all&quot; /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
&lt;span class=&quot;PreProc&quot;&gt;require&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;HTTP&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;PreProc&quot;&gt;require&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;UV&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;# {{{&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;PreProc&quot;&gt;module&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;Sinatic&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;@routes&lt;/span&gt;&amp;nbsp;=&amp;nbsp;{&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&amp;nbsp;=&amp;gt;&amp;nbsp;[],&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&amp;nbsp;=&amp;gt;&amp;nbsp;[]&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;PreProc&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;Identifier&quot;&gt;route&lt;/span&gt;(method, path, opts, &amp;amp;block)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;@routes&lt;/span&gt;[method] &amp;lt;&amp;lt;&amp;nbsp;[path, opts, block]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;PreProc&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;PreProc&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;Identifier&quot;&gt;do&lt;/span&gt;(r)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;@routes&lt;/span&gt;[r.method].each&amp;nbsp;{|&lt;span class=&quot;Identifier&quot;&gt;path&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;if&lt;/span&gt;&amp;nbsp;path[&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;] == r.path&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;param =&amp;nbsp;{}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.body.split(&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;).each&amp;nbsp;{|&lt;span class=&quot;Identifier&quot;&gt;x&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;tokens = x.split(&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Special&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;param[tokens[&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;]] =&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;HTTP&lt;/span&gt;::&lt;span class=&quot;Type&quot;&gt;URL&lt;/span&gt;::decode(tokens[&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;])&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;body = path[&lt;span class=&quot;Constant&quot;&gt;2&lt;/span&gt;].call(r, param)&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;return&lt;/span&gt;&amp;nbsp;[&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;HTTP/1.0 200 OK&lt;/span&gt;&lt;span class=&quot;Special&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;&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;Content-Type: text/html; charset=utf-8&lt;/span&gt;&lt;span class=&quot;Special&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;&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;Content-Length:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;#{&lt;/span&gt;body.size&lt;span class=&quot;Special&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;Special&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;&lt;span class=&quot;Special&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;].join(&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\r\n&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;) + body&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;end&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;return&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;HTTP/1.0 404 Not Found&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\r\n&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;Content-Length: 10&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\r\n\r\n&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;Not Found&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;PreProc&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;PreProc&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;Identifier&quot;&gt;run&lt;/span&gt;()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s =&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;UV&lt;/span&gt;::&lt;span class=&quot;Type&quot;&gt;TCP&lt;/span&gt;.new()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.bind(&lt;span class=&quot;Type&quot;&gt;UV&lt;/span&gt;::ip4_addr(&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;127.0.0.1&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;8888&lt;/span&gt;))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.data =&amp;nbsp;[]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.listen(&lt;span class=&quot;Constant&quot;&gt;50&lt;/span&gt;)&amp;nbsp;{|&lt;span class=&quot;Identifier&quot;&gt;x&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;&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt;&amp;nbsp;x !=&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;c = s.accept()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.read_start {|&lt;span class=&quot;Identifier&quot;&gt;b&lt;/span&gt;|&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;h =&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;HTTP&lt;/span&gt;::&lt;span class=&quot;Type&quot;&gt;Parser&lt;/span&gt;.new()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;h.parse_request(b) {|&lt;span class=&quot;Identifier&quot;&gt;r&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;i = b.index(&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\r\n\r\n&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;) +&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;4&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;r.body = b.slice(i, b.size - i)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.write(::&lt;span class=&quot;Type&quot;&gt;Sinatic&lt;/span&gt;.do(r)) {|&lt;span class=&quot;Identifier&quot;&gt;x&lt;/span&gt;|&amp;nbsp;c.close }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.data &amp;lt;&amp;lt; c&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;while&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;do&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Comment&quot;&gt;#&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Todo&quot;&gt;NOTE&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;: must be call run_once to run GC.&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;UV&lt;/span&gt;::run_once()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;PreProc&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;PreProc&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;PreProc&quot;&gt;module&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;Kernel&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;PreProc&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;get&lt;/span&gt;(path, opts={}, &amp;amp;block)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;::&lt;span class=&quot;Type&quot;&gt;Sinatic&lt;/span&gt;.route&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;, path, opts, &amp;amp;block&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;PreProc&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;PreProc&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;post&lt;/span&gt;(path, opts={}, &amp;amp;block)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;::&lt;span class=&quot;Type&quot;&gt;Sinatic&lt;/span&gt;.route&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;POST&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;, path, opts, &amp;amp;block&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;PreProc&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;PreProc&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;# }}}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
get&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;/foo.js&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;do&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;$(function() {&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Constant&quot;&gt;&amp;nbsp;&amp;nbsp;$(&amp;quot;#foo&amp;quot;).text(&amp;quot;hello world&amp;quot;);&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Constant&quot;&gt;})&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
get&amp;nbsp;&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;Special&quot;&gt;&amp;quot;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;do&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Constant&quot;&gt;&amp;lt;script src=&amp;quot;&lt;a href=&quot;http://code.jquery.com/jquery-latest.js&quot;&gt;http://code.jquery.com/jquery-latest.js&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Constant&quot;&gt;&amp;lt;script src=&amp;quot;/foo.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Constant&quot;&gt;&amp;lt;div id=&amp;quot;foo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Constant&quot;&gt;&amp;lt;form action=&amp;quot;/add&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Constant&quot;&gt;&amp;lt;label for=&amp;quot;name&amp;quot;/&amp;gt;お名前&amp;lt;/label&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Constant&quot;&gt;&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;name&amp;quot; name=&amp;quot;name&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Constant&quot;&gt;&amp;lt;input type=&amp;quot;submit&amp;quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Constant&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
post&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;/add&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;do&lt;/span&gt;&amp;nbsp;|&lt;span class=&quot;Identifier&quot;&gt;r&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;param&lt;/span&gt;|&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Constant&quot;&gt;&amp;lt;meta http-equiv=refresh content=&apos;2; URL=/&apos;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Constant&quot;&gt;通報しますた「&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;#{&lt;/span&gt;param[&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&apos;&lt;/span&gt;]&lt;span class=&quot;Special&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;」&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Special&quot;&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;Sinatic&lt;/span&gt;.run&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;# vim&amp;#0058; set fdm=marker:&lt;/span&gt;&lt;br /&gt;
&lt;/blockquote&gt;
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>Vim から自分のtwitterパスワードが流出していないか確認出切るプラグイン書いた。</title>
     <pubDate>Wed, 09 May 2012 20:03:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/vim/20120509195638.htm</link>
     <category>vim</category><category>ネタ</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/vim/20120509195638.htm</guid>
     <description>
&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;http://blog.wiwa.jp/entry/4fa9ffa7d6f9fd22a5000002&quot;&gt;WIWA BLOG&lt;/a&gt;&lt;br /&gt;
  &lt;p&gt;
  ...
  これだけ。
  たった数10分で立ち上げられるんです。そう、Pythonならね。
  &lt;/p&gt;
  &lt;cite&gt;http://blog.wiwa.jp/entry/4fa9ffa7d6f9fd22a5000002&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;http://twipass.wiwa.jp/&quot;&gt;Twitterのパスワードが流出していないか確認：WIWA TWIPASS&lt;/a&gt;&lt;br /&gt;
  &lt;cite&gt;http://twipass.wiwa.jp/&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;http://gigazine.net/news/20120509-twipass/&quot;&gt;Twitterの大量流出したパスワードに自分のものが含まれているかどうか一発でわかる「WIWA TWIPASS」 - GIGAZINE&lt;/a&gt;&lt;br /&gt;
  &lt;p&gt;本日明らかになったTwitterのパスワード大量流出（延べ5万5000件、重複しているものを除いて約3万5000件）について、自分のTwitterアカウントのパスワードが漏れていないかどうかが分かるサイトが登場しています。&lt;/p&gt;
  &lt;cite&gt;http://gigazine.net/news/20120509-twipass/&lt;/cite&gt;
&lt;/blockquote&gt;


僕も5分でプラグイン書いた！

&lt;blockquote class=&quot;code&quot;&gt;
&lt;span class=&quot;Statement&quot;&gt;function&lt;/span&gt;!&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;s:&lt;/span&gt;twipass&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;name&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;webapi#http#&lt;span class=&quot;Normal&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;a href=&quot;http://twipass.wiwa.jp/ctrl/get/twipass&quot;&gt;http://twipass.wiwa.jp/ctrl/get/twipass&lt;/a&gt;&amp;quot;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt;:&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;a:name&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;}&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;echo&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;webapi#json#decode&lt;/span&gt;(&lt;span class=&quot;Identifier&quot;&gt;res&lt;/span&gt;.&lt;span class=&quot;Identifier&quot;&gt;content&lt;/span&gt;).&lt;span class=&quot;Identifier&quot;&gt;text&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;endfunction&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;command&lt;/span&gt;!&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;nargs&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Type&quot;&gt;1&lt;/span&gt;&amp;nbsp;TwiPass&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;call&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Normal&quot;&gt;s:twipass&lt;/span&gt;(&lt;span class=&quot;Special&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;q-args&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;&amp;gt;&lt;/span&gt;)&lt;br /&gt;
&lt;/blockquote&gt;

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

これだけ。
たった5分で作れちゃうんです。そう、Vimならね。
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>Windowsへの移植も視野にいれたプログラムを書くなら読んでおいて欲しい事</title>
     <pubDate>Mon, 07 May 2012 13:13:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/20120507131015.htm</link>
     <category>windows</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/20120507131015.htm</guid>
     <description>
&lt;ul&gt;
  &lt;li&gt;絶対パスの先頭に&lt;code&gt;/&lt;/code&gt;が来る事を期待してはいけない&lt;/li&gt;
  &lt;li&gt;しかしながら絶対パスの先頭にドライブレターが来る事を期待してはいけない&lt;/li&gt;
  &lt;li&gt;UNCパスのホスト名やシェア名はディレクトリではないのでファイルシステムAPIは使えない事を意識しておく&lt;/li&gt;
  &lt;li&gt;unixに比べパス内に空白文字が入る可能性が高い事を意識しておく&lt;/li&gt;
  &lt;li&gt;ホームディレクトリを意味するパスの先頭チルダは自前で展開する必要があり、またパスの途中にチルダが混じる事は日常的にある&lt;/li&gt;
  &lt;li&gt;ソケットディスクリプタに対してもread/writeで送受信できる事を期待してはいけない&lt;/li&gt;
  &lt;li&gt;パイプでない標準入力のselectはやっても意味がない&lt;/li&gt;
  &lt;li&gt;ディレクトリ内にあるファイルを開き、ハンドルを保持したままディレクトリを消せるのは当たり前だと思わない&lt;/li&gt;
  &lt;li&gt;パスのセパレータが&lt;code&gt;/&amp;yen;&lt;/code&gt;である事を期待してANSI APIを使ってはいけない&lt;/li&gt;
  &lt;li&gt;Cランタイム(POSIX互換API)とWindows APIを併用する際にはerrnoを信用してはならない&lt;/li&gt;
  &lt;li&gt;PATH環境変数のセパレータが&lt;code&gt;:&lt;/code&gt;であることを期待してはいけない&lt;/li&gt;
  &lt;li&gt;コマンドラインプログラムの引数はシェルにあたるcmd.exeが展開しているのではなく、プログラム自身が展開しているのでワイルドカードが展開される事を期待してはいけない&lt;/li&gt;
  &lt;li&gt;system関数を使う際にコマンドの引数をシングルクォートでクォートしない方が良い&lt;/li&gt;
  &lt;li&gt;エスケープシーケンスはリテラルに埋め込まず切り離し可能にしておく&lt;/li&gt;
  &lt;li&gt;utf-8にしか存在しないグリフは極力使用しない&lt;/li&gt;
  &lt;li&gt;forkは可能な限り使わない&lt;/li&gt;
  &lt;li&gt;fork&amp;amp;execはCreateProcessに置き換わるので、なるべく部品化し置き換え易くしておく&lt;/li&gt;
  &lt;li&gt;テンポラリファイルの削除をランタイムの後処理に期待してはいけない&lt;/li&gt;
  &lt;li&gt;unixドメインソケットや、名前付きパイプファイルは、TCP/IPソケットやWindowsでの名前付きパイプに置き換わるのでファイルシステムを意識した処理を纏めて行い部品化する&lt;/li&gt;
  &lt;li&gt;cygwinで出来るよ→ダウト&lt;/li&gt;
&lt;/ul&gt;
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
  </channel>
</rss>

