<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:image="http://purl.org/rss/1.0/modules/image/"
  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel rdf:about="/rss/en">
    <title>48JIGEN *Reloaded*</title>
    <link>http://rimuru.lunanet.gr.jp/</link>
    <description>@remore's blog feed!</description>
    <items>
      <rdf:Seq>
        <rdf:li resource="http://rimuru.lunanet.gr.jp/blog/rubyconf-2016"/>
        <rdf:li resource="http://rimuru.lunanet.gr.jp/blog/calling-python-and-julia-libraries-from-ruby"/>
        <rdf:li resource="http://rimuru.lunanet.gr.jp/blog/cruby-bytecode-cache-is-experimentally-released"/>
        <rdf:li resource="http://rimuru.lunanet.gr.jp/blog/setting-up-blog-with-octopress-on-github-pages"/>
        <rdf:li resource="http://rimuru.lunanet.gr.jp/blog/mock-object-in-phpunit-rocks"/>
        <rdf:li resource="http://rimuru.lunanet.gr.jp/blog/setting-up-php54-composer-application-on-windows"/>
      </rdf:Seq>
    </items>
    <dc:date>2026-04-15T08:04:11+09:00</dc:date>
  </channel>
  <item rdf:about="http://rimuru.lunanet.gr.jp/blog/rubyconf-2016">
    <title>RubyConf 2016</title>
    <link>http://rimuru.lunanet.gr.jp/blog/rubyconf-2016</link>
    <description>&lt;p&gt;&lt;img src=&quot;/files/rubyconf-2016/badge.jpg&quot; alt=&quot;my RubyConf 2016 badge&quot; style=&quot;display: block; margin-left: auto; margin-right: auto&quot;/&gt;&lt;/p&gt;

&lt;p&gt;I spent the past three days in Cincinnati, OH at RubyConf 2016. I was a first timer and I enjoyed a lot being a part of RubyConf community. To borrow Matz's RINSWAN(Ruby Is Nice So We Are Nice) from his keynote, IMO we were nice not only because Ruby is nice, but more importantly because we all were trying our best to be nice at any time throughout the conference. All things RubyConf community done during the conference such as inclusive attitude or tons of coordinations by both organizers and attendees made my experience great.&lt;/p&gt;

&lt;p&gt;What made me feel most grateful was a few folks just talked to me and gave me some impression about &lt;a href=&quot;https://speakerdeck.com/remore/a-poc-ish-trick-llvm-ir-generation-with-ruby&quot;&gt;my lightning talk&lt;/a&gt;. Despite my spoken English was so awkward I guess, there were many findings to me thanks to their feedbacks.&lt;/p&gt;

&lt;p&gt;Thank you RubyConf. You all are awesome. I hope I can come next time again.&lt;/p&gt;
</description>
    <dc:date>2016-11-12T00:00:00+09:00</dc:date>
  </item>
  <item rdf:about="http://rimuru.lunanet.gr.jp/blog/calling-python-and-julia-libraries-from-ruby">
    <title>Calling Python and Julia libraries from Ruby</title>
    <link>http://rimuru.lunanet.gr.jp/blog/calling-python-and-julia-libraries-from-ruby</link>
    <description>&lt;p&gt;Classifying documents using doc2vec in Python is already easy, but calling doc2vec from Ruby is even easier. Here is an example of preprocessing text data(in this case manpage) with Ruby and classifying them using doc2vec in Python.&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/remore/06457f8b0faa1f8583601767f744ea93.js&quot;&gt;&lt;/script&gt;


&lt;p&gt;One can call not only Python but Julia from Ruby. Following is an another example to perform K-means Clustering using Julia via Ruby (experimentally ported from &lt;a href=&quot;http://clusteringjl.readthedocs.io/en/latest/kmeans.html&quot;&gt;official documentation of Clustering.jl&lt;/a&gt;).&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/remore/084b9170d1ddad9490c7d3c9664b2f3f.js&quot;&gt;&lt;/script&gt;


&lt;p&gt;&lt;a href=&quot;https://github.com/remore/virtual_module&quot;&gt;VirtualModule&lt;/a&gt; on which I've been working lately enable you to call arbitrary Python or Julia code from Ruby. Here is yet another example to perform an SVM classification using cross-validation through scikit-learn from Ruby.&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/remore/54c41811cb2d73f83b101b118448f605.js&quot;&gt;&lt;/script&gt;


&lt;p&gt;It looks perfectly sweet except for the fact that I needed to pass &lt;code&gt;:_&lt;/code&gt; Symbol whenever calling functions which take no arguments. This is required because Ruby syntax allows us to call functions without using parentheses, otherwise VirtualModule will never know if the message sent to the object is calling functions or accessing instance variables.&lt;/p&gt;

&lt;h2&gt;Playing with VirtualModule in REPL&lt;/h2&gt;

&lt;p&gt;In this section, I'm going to try my best to show you what's happening in VirtualModule internally. I'm assuming following are  installed on the system already:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;virtual_module&lt;/code&gt; gem (v0.3.0 or higher)&lt;/li&gt;
&lt;li&gt;Python or Julia environment&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Then here we go. Now we start to run irb on the terminal.&lt;/p&gt;

&lt;div class=&quot;box&quot; style=&quot;background-color:#333333;overflow:scroll;&quot;&gt;&lt;pre style=&quot;color:white; font-size:10pt; line-height:1.3em; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace&quot;&gt;
debussy:~ remore$ irb -r virtual_module
irb(main):001:0&amp;gt; po = VirtualModule.new(:python=&amp;gt;[&quot;sklearn&quot;=&amp;gt;&quot;datasets&quot;])
=&amp;gt; #&amp;lt;Module:0x007fb7e1aee818&amp;gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Once you call &lt;code&gt;VirtualModule#new&lt;/code&gt;, Python or Julia Process will be booted as a background job. If the background job successfully booted, then VirtualModule will return new Module instance, which behaves as a proxy to background job (In the example above, it's assigned to local variable &lt;code&gt;po&lt;/code&gt;). To simplify, in this document we call it PO(Proxy Object).&lt;/p&gt;

&lt;div class=&quot;box&quot; style=&quot;background-color:#333333;overflow:scroll;&quot;&gt;&lt;pre style=&quot;color:white; font-size:10pt; line-height:1.3em; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace&quot;&gt;
irb(main):002:0&amp;gt; py.int(2.3)
=&amp;gt; 2
irb(main):003:0&amp;gt; po.unknown_method(2.3)
RuntimeError: An error occurred while executing the command in python process: &lt;type 'exceptions.NameError'&gt;,name 'unknown_method' is not defined
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;What PO is doing internally is as simple as ABC. In the first example, PO receives &lt;code&gt;int(2.3)&lt;/code&gt; method call and pass through this to the background process using msgpack. Consequently, Fixnum 2 is displayed on the terminal, which value is sent from the background job. If unknown method is called, background job will tell that there is no such method defined. Since data transfer is implemented using msgpack, at this moment only very limited types of data &lt;a href=&quot;https://github.com/msgpack/msgpack/blob/master/spec.md&quot;&gt;defined by msgpack spec&lt;/a&gt; is converted to Ruby's data type.&lt;/p&gt;

&lt;div class=&quot;box&quot; style=&quot;background-color:#333333;overflow:scroll;&quot;&gt;&lt;pre style=&quot;color:white; font-size:10pt; line-height:1.3em; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace&quot;&gt;
irb(main):004:0&amp;gt; po.datasets
=&amp;gt; #&amp;lt;Module:0x007ffd0906c030&amp;gt;
irb(main):005:0&amp;gt; po.datasets.load_iris(:_)
=&amp;gt; #&amp;lt;Module:0x007ffd09074500&amp;gt;
irb(main):006:0&amp;gt; po.datasets.load_iris(:_).vclass
=&amp;gt; &quot;&amp;lt;class 'sklearn.datasets.base.Bunch'&amp;gt;&quot;
irb(main):007:0&amp;gt; po.datasets.load_iris(:_).data[1].to_a
=&amp;gt; [4.9, 3.0, 1.4, 0.2]
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;What will happen if the data conversion by msgpack fails? The example above shows the behavior when one try to access unconvertible data type using msgpack. In the example above, a PO instance(local variable &quot;po&quot;) creates new PO instance(#&amp;lt;Module:0x007ffd0906c030&amp;gt; etc) on every single method call, until the background process return values which are successfully converted to Ruby's data type by msgpack.&lt;/p&gt;

&lt;div class=&quot;box&quot; style=&quot;background-color:#333333;overflow:scroll;&quot;&gt;&lt;pre style=&quot;color:white; font-size:10pt; line-height:1.3em; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace&quot;&gt;
irb(main):008:0&amp;gt; po.datasets.vclass
=&amp;gt; &quot;&amp;lt;type 'module'&amp;gt;&quot;
irb(main):009:0&amp;gt; iris = po.datasets.load_iris(:_)
=&amp;gt; #&amp;lt;Module:0x007ffd09057568&amp;gt;
irb(main):010:0&amp;gt; iris.target.vclass
=&amp;gt; &quot;&amp;lt;type 'numpy.ndarray'&amp;gt;&quot;
irb(main):011:0&amp;gt; iris.target.vmethods
=&amp;gt; [&quot;T&quot;, &quot;__abs__&quot;, &quot;__add__&quot;, &quot;__and__&quot;, &quot;__array__&quot;, &quot;__array_finalize__&quot;, &quot;__array_interface__&quot;, &quot;__array_prepare__&quot;, &quot;__array_priority__&quot;, &quot;__array_struct__&quot;, &quot;__array_wrap__&quot;, &quot;__class__&quot;, &quot;__contains__&quot;, &quot;__copy__&quot;, &quot;__deepcopy__&quot;, &quot;__delattr__&quot;, &quot;__delitem__&quot;, &quot;__delslice__&quot;, &quot;__div__&quot;, &quot;__divmod__&quot;, &quot;__doc__&quot;, &quot;__eq__&quot;, &quot;__float__&quot;, &quot;__floordiv__&quot;, &quot;__format__&quot;, &quot;__ge__&quot;, &quot;__getattribute__&quot;, &quot;__getitem__&quot;, &quot;__getslice__&quot;, &quot;__gt__&quot;, &quot;__hash__&quot;, &quot;__hex__&quot;, &quot;__iadd__&quot;, &quot;__iand__&quot;, &quot;__idiv__&quot;, &quot;__ifloordiv__&quot;, &quot;__ilshift__&quot;, &quot;__imod__&quot;, &quot;__imul__&quot;, &quot;__index__&quot;, &quot;__init__&quot;, &quot;__int__&quot;, &quot;__invert__&quot;, &quot;__ior__&quot;, &quot;__ipow__&quot;, &quot;__irshift__&quot;, &quot;__isub__&quot;, &quot;__iter__&quot;, &quot;__itruediv__&quot;, &quot;__ixor__&quot;, &quot;__le__&quot;, &quot;__len__&quot;, &quot;__long__&quot;, &quot;__lshift__&quot;, &quot;__lt__&quot;, &quot;__mod__&quot;, &quot;__mul__&quot;, &quot;__ne__&quot;, &quot;__neg__&quot;, &quot;__new__&quot;, &quot;__nonzero__&quot;, &quot;__oct__&quot;, &quot;__or__&quot;, &quot;__pos__&quot;, &quot;__pow__&quot;, &quot;__radd__&quot;, &quot;__rand__&quot;, &quot;__rdiv__&quot;, &quot;__rdivmod__&quot;, &quot;__reduce__&quot;, &quot;__reduce_ex__&quot;, &quot;__repr__&quot;, &quot;__rfloordiv__&quot;, &quot;__rlshift__&quot;, &quot;__rmod__&quot;, &quot;__rmul__&quot;, &quot;__ror__&quot;, &quot;__rpow__&quot;, &quot;__rrshift__&quot;, &quot;__rshift__&quot;, &quot;__rsub__&quot;, &quot;__rtruediv__&quot;, &quot;__rxor__&quot;, &quot;__setattr__&quot;, &quot;__setitem__&quot;, &quot;__setslice__&quot;, &quot;__setstate__&quot;, &quot;__sizeof__&quot;, &quot;__str__&quot;, &quot;__sub__&quot;, &quot;__subclasshook__&quot;, &quot;__truediv__&quot;, &quot;__xor__&quot;, &quot;all&quot;, &quot;any&quot;, &quot;argmax&quot;, &quot;argmin&quot;, &quot;argpartition&quot;, &quot;argsort&quot;, &quot;astype&quot;, &quot;base&quot;, &quot;byteswap&quot;, &quot;choose&quot;, &quot;clip&quot;, &quot;compress&quot;, &quot;conj&quot;, &quot;conjugate&quot;, &quot;copy&quot;, &quot;ctypes&quot;, &quot;cumprod&quot;, &quot;cumsum&quot;, &quot;data&quot;, &quot;diagonal&quot;, &quot;dot&quot;, &quot;dtype&quot;, &quot;dump&quot;, &quot;dumps&quot;, &quot;fill&quot;, &quot;flags&quot;, &quot;flat&quot;, &quot;flatten&quot;, &quot;getfield&quot;, &quot;imag&quot;, &quot;item&quot;, &quot;itemset&quot;, &quot;itemsize&quot;, &quot;max&quot;, &quot;mean&quot;, &quot;min&quot;, &quot;nbytes&quot;, &quot;ndim&quot;, &quot;newbyteorder&quot;, &quot;nonzero&quot;, &quot;partition&quot;, &quot;prod&quot;, &quot;ptp&quot;, &quot;put&quot;, &quot;ravel&quot;, &quot;real&quot;, &quot;repeat&quot;, &quot;reshape&quot;, &quot;resize&quot;, &quot;round&quot;, &quot;searchsorted&quot;, &quot;setfield&quot;, &quot;setflags&quot;, &quot;shape&quot;, &quot;size&quot;, &quot;sort&quot;, &quot;squeeze&quot;, &quot;std&quot;, &quot;strides&quot;, &quot;sum&quot;, &quot;swapaxes&quot;, &quot;take&quot;, &quot;tobytes&quot;, &quot;tofile&quot;, &quot;tolist&quot;, &quot;tostring&quot;, &quot;trace&quot;, &quot;transpose&quot;, &quot;var&quot;, &quot;view&quot;]
irb(main):012:0&amp;gt; iris.target.to_a
=&amp;gt; [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Just like Object in Ruby provides #class and #methods to know much about object instance, VirtualModule provides corresponding methods - #vclass and #vmethods. #vclass will tell you what data type a proxy object is referring to, and #vmethods will show you a list of functions you can request. If you'd like to see more examples, please consider to visit &lt;a href=&quot;https://github.com/remore/virtual_module/tree/master/example&quot;&gt;my GitHub repo&lt;/a&gt; and refer the other usages. And if you have any question, please feel free to post Issue.&lt;/p&gt;

&lt;p&gt;Currently, VirtualModule has numerous drawbacks, as many other OSS software at the early stage has. For example, VirtualModule cannot handle Julia's good parts very well such as multidimensional arrays and Functions as first-class objects. Although I know this series of attempts to make it possible to call Python and Julia from Ruby are not enough to satisfy data scientist's needs yet, but somehow exciting enough to get my attention in the last few months. Moreover, in my opinion both the environment and the situation around scientific computing in Ruby has started to get improved these days, as some sources &lt;a href=&quot;http://www.infoworld.com/article/3113726/application-development/ruby-picks-up-the-pace-for-scientific-computing.html&quot;&gt;described about this as well&lt;/a&gt;. If you are interested in seeing what's happening these days around Ruby, I strongly recommend joining &lt;a href=&quot;http://sciruby.com/&quot;&gt;SciRuby community&lt;/a&gt;. You will find many other interesting projects and activities there.&lt;/p&gt;
</description>
    <dc:date>2016-10-05T00:00:00+09:00</dc:date>
  </item>
  <item rdf:about="http://rimuru.lunanet.gr.jp/blog/cruby-bytecode-cache-is-experimentally-released">
    <title>Bytecode cache is experimentally released in Ruby2.3</title>
    <link>http://rimuru.lunanet.gr.jp/blog/cruby-bytecode-cache-is-experimentally-released</link>
    <description>&lt;p&gt;In RubyKaigi2015 held at Tokyo last month, Koichi Sasada has announced &lt;a href=&quot;https://bugs.ruby-lang.org/issues/11788&quot;&gt;the experimental release of bytecode cache in Ruby2.3&lt;/a&gt;. You are likely to be able to test this experimental feature as follows for example, by verifying bytecode cache(.yarb file) is generated successfully.&lt;/p&gt;

&lt;div class=&quot;box&quot; style=&quot;background-color:#333333;overflow:scroll;&quot;&gt;&lt;pre style=&quot;color:white; font-size:10pt; line-height:1.3em; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace&quot;&gt;
$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
$ ls /usr/local/lib/ruby/gems/2.3.0/gems/activesupport-4.2.5/lib/
active_support  active_support.rb
$ export RUBYOPT='-ryomikomu' &amp;&amp; export YOMIKOMU_AUTO_COMPILE='true'
$ rails -v
Rails 4.2.5
$ ls /usr/local/lib/ruby/gems/2.3.0/gems/activesupport-4.2.5/lib/
active_support  active_support.rb  active_support.rb.yarb
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;All you need to do to make this feature enabled is just to require &lt;a href=&quot;https://github.com/ko1/yomikomu/&quot;&gt;'yomikomu' rubygem&lt;/a&gt; and set some environmental variables &lt;a href=&quot;https://github.com/ko1/yomikomu#configuration&quot;&gt;introduced at here&lt;/a&gt; as you can find two &lt;code&gt;export&lt;/code&gt; commands in the example above.&lt;/p&gt;

&lt;p&gt;It may look a bit magical why VM-level bytecode cache is enabled only by requiring 'yomikomu' rubygem. Koichi described about this &lt;a href=&quot;https://bugs.ruby-lang.org/issues/11788&quot;&gt;at his ticket&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
The key interface is RubyVM::InstructionSequence.load_iseq(fname).
When MRI try to load any script named fname, then call this method with fname if defined.
The return value is an ISeq object, then MRI use this ISeq object instead of parsing/compiling fname file.
&lt;/blockquote&gt;


&lt;p&gt;In short, 'yomikomu' rubygem defines RubyVM::InstructionSequence.load_iseq while VM(MRI) checks if #load_iseq method is defined at its boot timing and thus VM decides cache is enabled or not. We can find corresponding &lt;a href=&quot;https://github.com/ruby/ruby/blob/v2_3_0_preview2/iseq.c#L479-L490&quot;&gt;lines of code in ruby/iseq.c&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here is a quick benchmark result of current bytecode cache implementation. I used 'bundle version' command with benchmark-ips on Ubuntu machine. &lt;a href=&quot;https://gist.github.com/remore/0f55592ff4a56e2fde69&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;box&quot; style=&quot;background-color:#333333;overflow:scroll;&quot;&gt;&lt;pre style=&quot;color:white; font-size:10pt; line-height:1.3em; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace&quot;&gt;
$ ruby measure.rb
Comparison:
        yomikomu(fs):        5.0 i/s
         yomikomanai:        3.6 i/s - 1.40x slower
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;It may vary depending on what command is used but from my quick check bundler was the most optimized in terms of speed. For more information including more benchmark score, please refer &lt;a href=&quot;http://www.atdot.net/~ko1/activities/2015_RubyKaigi2015.pdf&quot;&gt;Koichi's presentation material presented at RubyKaigi2015&lt;/a&gt; as well as &lt;a href=&quot;http://rubykaigi.org/2015/presentations/ko1&quot;&gt;his speech video&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now is the time to deep-dive for speeding up MRI towards Ruby3.0!&lt;/p&gt;
</description>
    <dc:date>2016-01-05T00:00:00+09:00</dc:date>
  </item>
  <item rdf:about="http://rimuru.lunanet.gr.jp/blog/setting-up-blog-with-octopress-on-github-pages">
    <title>Setting Up Blog With Octopress on Github Pages</title>
    <link>http://rimuru.lunanet.gr.jp/blog/setting-up-blog-with-octopress-on-github-pages</link>
    <description>	&lt;div class=&quot;entry-content&quot;&gt;&lt;p&gt;Here is my command log to setup this this blog with octopress on github pages.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Create new EC2 intance(micro)
yum update
yum install make git ruby-devel gcc rdoc zlib-devel

# Install rvm
curl -L https://get.rvm.io | bash -s stable
source &quot;$HOME/.rvm/scripts/rvm&quot;

# Install ruby1.9.3
rvm get head
rvm install 1.9.3
rvm use 1.9.3

# Install bundler
gem install bundler

# Install octpress
git clone git://github.com/imathis/octopress.git octopress
cd octopress
bundle install --path vendor
rake setup_github_pages # answer your github page url
rake install

# Build and deploy
rake generate
rake deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note that user permission and current folders are not considered carefully.&lt;/p&gt;
&lt;/div&gt;</description>
    <dc:date>2012-11-04T00:00:00+09:00</dc:date>
  </item>
  <item rdf:about="http://rimuru.lunanet.gr.jp/blog/mock-object-in-phpunit-rocks">
    <title>Mock Object in PHPUnit ROCKS</title>
    <link>http://rimuru.lunanet.gr.jp/blog/mock-object-in-phpunit-rocks</link>
    <description>	&lt;div class=&quot;entry-content&quot;&gt;&lt;p&gt;Suppose you fake it like this:&lt;/p&gt;

&lt;div class=&quot;box&quot;&gt;&lt;pre class=&quot;brush: php; gutter: false; toolbar: false&quot;&gt;
class TwitterClient
{
    public function tweet($message)
    {
        return true;
    }
}

$foo = new TwitterClient();
$foo-&amp;gt;tweet('Spot ko!'); // returns true
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;With PHPUnit, you&amp;#8217;re able to use Mock Object instead. Now your code looks like:&lt;/p&gt;

&lt;div class=&quot;box&quot;&gt;&lt;pre class=&quot;brush: php; gutter: false; toolbar: false&quot;&gt;
class ClientContainerTest extends PHPUnit_Framework_TestCase
{
    public function test_MockPractice()
    {
        $foo = $this-&amp;gt;getMock('TwitterClient', array('tweet'));
        $foo-&amp;gt;expects($this-&amp;gt;any())
            -&amp;gt;method('tweet')
            -&amp;gt;will($this-&amp;gt;returnValue(true));

        $foo-&amp;gt;tweet('Spot ko!'); // returns true
    }
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;It&amp;#8217;s quite easy to understand how method(), will() and returnValue() work. How about expects()? It restricts the number of invocation count. Set any() then no restriction will be set. If you would like some method to be invoked only once, then set once() for example.&lt;/p&gt;

&lt;p&gt;This is how you create Mock Object in PHPUnit, however it&amp;#8217;s still hard to find out why Mock Object is useful. Let&amp;#8217;s take another example, which accesses with database server via PDO.&lt;/p&gt;

&lt;p&gt;Supporse you would like to run your test but you can&amp;#8217;t run database server. I&amp;#8217;m showing you a bad example first:&lt;/p&gt;

&lt;div class=&quot;box&quot;&gt;&lt;pre class=&quot;brush: php; gutter: false; toolbar: false&quot;&gt;
class PDO
{
    public function __construct($dsn)
    {
        return true;
    }

    public function query($sql)
    {
        return new PDOStatement();
    }
}

$pdo = new PDO('sqlite:memory'); // Fatal Error
$pdo-&amp;gt;query('SELECT * FROM users;');
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Run the code above, then you will see error message on your display which says &amp;#8220;Cannot redeclare class PDO&amp;#8221;. As PDO is embedded class and declared already, you cannot redeclare PDO. To use sqlite:memory which enable you to create database on memory was pretty neat though.&lt;/p&gt;

&lt;p&gt;This is the case where you should remember Mock Object.&lt;/p&gt;

&lt;div class=&quot;box&quot;&gt;&lt;pre class=&quot;brush: php; gutter: false; toolbar: false&quot;&gt;
class PDOContainerTest extends PHPUnit_Framework_TestCase
{
    public function test_StubQuery()
    {
        $foo = $this-&amp;gt;getMock('PDO', array('query'), array('sqlite:memory'));
        $foo-&amp;gt;expects($this-&amp;gt;any())
            -&amp;gt;method('query')
            -&amp;gt;will($this-&amp;gt;returnValue(new PDOStatement()));

        $foo-&amp;gt;query('SELECT * FROM users;') // instantiated PDOStatement class will be returned
        $foo-&amp;gt;getAvailableDrivers(); // take note that methods originally declared in PDO class is available too
    }
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;With this test code, $foo will have stubbed query() method as well as methods originally declared in PDO class such as getAvailableDrivers() in the example above. This is how Partial Mock is made.&lt;/p&gt;

&lt;p&gt;If you only need to prepare fixture for DB for example, then you have other even better choises like &lt;a href=&quot;http://www.phpunit.de/manual/3.7/en/database.html&quot;&gt;Database Extension of PHPUnit&lt;/a&gt; or &lt;a href=&quot;http://phactory.org/&quot;&gt;Phactory&lt;/a&gt; etc. But how about your legacy code is doing for example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Calling some webservice method(API) and depending on the behavior of the external module&lt;/li&gt;
&lt;li&gt;Depending on the volatile data which memcached keeps at the production environment&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;would you still like to search the web and run out of your limited time?&lt;/p&gt;

&lt;p&gt;To learn mock framework which doesn&amp;#8217;t focus on solving problem in specific domain is pretty useful. Whatever issues you are facing with, mock framework gives you higher testability of the desgin you are making, which means refactoring becomes much easier for you.&lt;/p&gt;

&lt;p&gt;Go on the next chapter and let&amp;#8217;s take a look at the various mock frameworks written in PHP.&lt;/p&gt;

&lt;h1&gt;Mock Frameworks Written in PHP&lt;/h1&gt;

&lt;p&gt;Here is the result of my quick investigation on Oct 2012.&lt;/p&gt;

&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Framework&lt;/th&gt;
    &lt;th&gt;Required PHP Environment&lt;/th&gt;
    &lt;th&gt;Website&lt;/th&gt;
    &lt;th&gt;Note&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;PHPUnit&lt;/td&gt;
    &lt;td&gt;PHPUnit3.7: require PHP 5.3.3 and up(PHP 5.4.7+ is recommended)&lt;br&gt;PHPUnit3.6: require even with PHP 5.2&lt;/td&gt;
    &lt;td&gt;&lt;a href='https://github.com/sebastianbergmann/phpunit'&gt;Website&lt;/a&gt;&lt;/td&gt;
    &lt;td&gt;&lt;a href='http://www.phpunit.de/manual/3.7/en/test-doubles.html'&gt;Sample Code&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Mockery&lt;/td&gt;
    &lt;td&gt;PHP 5.3.2 and up&lt;/td&gt;
    &lt;td&gt;&lt;a href='https://github.com/padraic/mockery'&gt;Website&lt;/a&gt;&lt;/td&gt;
    &lt;td&gt;&lt;a href='https://github.com/padraic/mockery/blob/master/tests/Mockery/ExpectationTest.php'&gt;Sample Code&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Phake&lt;/td&gt;
    &lt;td&gt;PHP 5.2.4 and up&lt;/td&gt;
    &lt;td&gt;&lt;a href='https://github.com/mlively/Phake/'&gt;Website&lt;/a&gt;&lt;/td&gt;
    &lt;td&gt;&lt;a href='https://github.com/mlively/Phake/blob/master/tests/PhakeTest.php'&gt;Sample Code&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;SimpleTest&lt;/td&gt;
    &lt;td&gt;SimpleTest1.1: require PHP 5.0.3 and up&lt;br&gt;Older version of Simpletest work with PHP 4&lt;/td&gt;
    &lt;td&gt;&lt;a href='http://www.simpletest.org/'&gt;Website&lt;/a&gt;&lt;/td&gt;
    &lt;td&gt;&lt;a href='http://simpletest.org/en/mock_objects_documentation.html'&gt;Sample Code&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Phockito&lt;/td&gt;
    &lt;td&gt;(Not Yet Confirmed)&lt;/td&gt;
    &lt;td&gt;&lt;a href='https://github.com/hafriedlander/phockito'&gt;Website&lt;/a&gt;&lt;/td&gt;
    &lt;td&gt;N/A&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;yayMock&lt;/td&gt;
    &lt;td&gt;(Not Yet Confirmed)&lt;/td&gt;
    &lt;td&gt;&lt;a href='http://code.google.com/p/yaymock/'&gt;Website&lt;/a&gt;&lt;/td&gt;
    &lt;td&gt;N/A&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;


&lt;p&gt;From my quick skim, PHPUnit and Mockery look useful enough to me. And then, What is the pros/cons of these two mock frameworks and finally how to pick one?&lt;/p&gt;

&lt;p&gt;The table below shows what feature is simple comparison of mock framework features.&lt;/p&gt;

&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Functionality&lt;/th&gt;
    &lt;th&gt;PHPUnit 3.7&lt;/th&gt;
    &lt;th&gt;Mockery 0.7.2&lt;/th&gt;
    &lt;th&gt;Note&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Invocation Count Constraint&lt;/td&gt;
    &lt;td&gt;OK&lt;/td&gt;
    &lt;td&gt;Love It&lt;/td&gt;
    &lt;td&gt;Mockery is better. atMost() and atLeast() methods are available.&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Partial Mocking&lt;/td&gt;
    &lt;td&gt;OK&lt;/td&gt;
    &lt;td&gt;Very Good&lt;/td&gt;
    &lt;td&gt;&lt;a href='http://blog.sznapka.pl/why-mockery-is-better-than-phpunit-mock-builder-and-how-to-integrate-it-with-symfony2/'&gt;Constructer can be much simpler&lt;/a&gt; in Mockery.&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Argument Matchers&lt;/td&gt;
    &lt;td&gt;OK&lt;/td&gt;
    &lt;td&gt;OK&lt;/td&gt;
    &lt;td&gt;&lt;a href='http://www.phpunit.de/manual/3.6/en/writing-tests-for-phpunit.html'&gt;All mathers at table 4.3&lt;/a&gt; are available in PHPUnit by with() call. About Mockery, refer &lt;a href='https://github.com/padraic/mockery#argument-validation'&gt;README.md&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Cascading Mocks|center&lt;/td&gt;
    &lt;td&gt;OK&lt;/td&gt;
    &lt;td&gt;Excellent&lt;/td&gt;
    &lt;td&gt;Just a bit hustle with PHPUnit &lt;a href='http://artur.ejsmont.org/blog/content/a-great-way-to-mock-chained-calls-in-phpunit'&gt;but doable&lt;/a&gt; or (&lt;a href='http://stackoverflow.com/questions/4232763/mock-objects-which-support-chaining-methods'&gt;like this&lt;/a&gt;). With Mockery, here is example &lt;a href='https://github.com/padraic/mockery#mocking-demeter-chains-and-fluent-interfaces'&gt;in README.md&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Ordered Expectations&lt;/td&gt;
    &lt;td&gt;Can&amp;#8217;t&lt;/td&gt;
    &lt;td&gt;OK&lt;/td&gt;
    &lt;td&gt;With Mockery it&amp;#8217;s possible but not comfortable&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;


&lt;p&gt;As you can see the table, Mockery 0.7.2 is definitely better in terms of functionality. Actually Mockery is better at other aspects as well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/padraic/mockery#mocking-public-properties&quot;&gt;Mocking Public Properties&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/padraic/mockery#preserving-pass-by-reference-method-parameter-behaviour&quot;&gt;Preserving Pass-By-Reference Method Parameter Behaviour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;(Since Mockery supports only PHP5.3 and up so this means closure is available, )&lt;a href=&quot;https://github.com/padraic/mockery#mock-object-recording&quot;&gt;Mock Object Recording&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Then what about PHPUnit3.7? In my opinion, it&amp;#8217;s still useful if you are just newbie on using mock framework.&lt;/p&gt;

&lt;p&gt;Lately PHPUnit is broadly used in PHP development and therefore, once you learn to write mock object then for sure, you will be able to apply your experience to the design issue your team will face.&lt;/p&gt;

&lt;h2&gt;Reference&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Difference between the Mock Object in PHPUnit and Mockery / &lt;a href=&quot;http://jontai.me/blog/2012/04/flexible-mock-objects-with-mockery/&quot;&gt;Why Mockery?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Code exmamples of Mockery, Phake, Phockito and PHPUnit / &lt;a href=&quot;https://gist.github.com/1753804&quot;&gt;gist: 1753804 / Example temperature webservice&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;Code To Learn&lt;/h1&gt;

&lt;p&gt;&lt;img src=&quot;/files/mock-object-in-phpunit-rocks/20121104-goos.jpg&quot; alt=&quot;Goos Book&quot; /&gt;&lt;/p&gt;

&lt;p&gt;You must know about the book &amp;#8220;Growing Object-Oriented Software Guided by Tests&amp;#8221; a.k.a #goos by Steve Freeman and Nat Pryce. And you also know that there was a book Steve and Nat contributed about same topic before goos?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://ep.khbo.be/Projects/TDD4ES/Literature/Mock-Roles-not-Objects&quot;&gt;&amp;#8220;Mock Roles, not Objects&amp;#8221;&lt;/a&gt; is it. The pdf just consists of 11 pages, however the concept and the idea they explained in the book is worth reading. I promise that you will not waste your time to read this book deliberately.&lt;/p&gt;

&lt;h2&gt;Various Sample Codes Are Available&lt;/h2&gt;

&lt;p&gt;I wrote already in both PHPUnit nad Mockery and &lt;a href=&quot;https://github.com/remore/mock-roles-practice&quot;&gt;they are available at my github account&lt;/a&gt;. Kindly feel free to send me pull request if you find something wrong about my code. Other than that, &lt;a href=&quot;https://github.com/iakio/mrno-php&quot;&gt;@iakio seems wrote in PHP as well&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Or if you are Java developer, then &lt;a href=&quot;https://github.com/digitalsoul0124/mock-roles-sample&quot;&gt;the example by @digitalsoul0124&lt;/a&gt; may help. There are tons of example in the world wide web so that you can find your favorite example with your favorite programming language. ( Let me add that in Java &lt;a href=&quot;http://svn.codehaus.org/jmock/trunk/jmock1/examples/timed-cache/src/org/jmock/examples/timedcache/TimedCache.java&quot;&gt;the example in jmock1&lt;/a&gt; and &lt;a href=&quot;http://svn.codehaus.org/jmock/trunk/jmock1/examples/timed-cache/src/test/jmock/examples/timedcache/TimedCacheTest.java&quot;&gt;the test&lt;/a&gt;, or there is also &lt;a href=&quot;http://svn.codehaus.org/jmock/trunk/jmock2/example/org/jmock/example/timedcache/&quot;&gt;example in jmock2&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;Tips On Coding &amp;#8220;Mock Roles, not Objects&amp;#8221;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Better to know basics about OOP and design patterns. Text implies useful and practical idea of OOP such as &amp;#8220;object oriented style based on composition rather than inheritance&amp;#8221; or &amp;#8220;Programming by Composition&amp;#8221; but if you don&amp;#8217;t know OOP, these words will not make sense at all.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To set up PHPUnit environment, &lt;a href=&quot;http://qiita.com/items/81085381c4281e498cde&quot;&gt;tips by suin&lt;/a&gt; works to me.(Sorry it&amp;#8217;s written only in Japanese, but you can guess by reading just commands and source codes;) ) If you would like to use under 5.2 where you can&amp;#8217;t use composer unfortunately, you need to use PEAR instead.
&amp;#8211; Take note that &lt;a href=&quot;http://sebastian-bergmann.de/archives/924-Using-PHPUnit-from-a-PHP-Archive-PHAR.html&quot;&gt;phar(PHP Archive) becomes available&lt;/a&gt; from PHPUnit3.7.5&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It would be small point but let me tell you as It was a bit surprising to me. In PHPUnit, once you call getMock() then it increments number of assertions of final test run result even without calling any expects to the instantiated mock object. Guessing verify() equivalent function would be called at the end of test running. This unexpected things robbed me from a few hours to get understand well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You CANNOT do method chaining with using getMock() instance directly(I found &lt;a href=&quot;http://stackoverflow.com/questions/3221885/phpunit-mock-objects-and-method-type-hinting&quot;&gt;someone at stackoverflow did completely same as me&lt;/a&gt;). For example, this code will cause error:&lt;/p&gt;

&lt;div class=&quot;box&quot;&gt;&lt;pre class=&quot;brush: php; gutter: false; toolbar: false&quot;&gt;
      $foo = $this-&amp;gt;getMock('PDO', array('query'))
          -&amp;gt;expects($this-&amp;gt;any())
          -&amp;gt;method('query')
          -&amp;gt;will($this-&amp;gt;returnValue(array('id'=&amp;gt;7, 'name'=&amp;gt;'Ichiro Suzuki')));
&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;HashMap doesn&amp;#8217;t make sense to most of PHP programmers. In PHP, let&amp;#8217;s say it&amp;#8217;s just a Array.(* I know strictly speaking Hashmap in Java is different from Array in PHP AT ALL but here just let me please explain just for simplification. [[Go stackoverflow&gt;http://stackoverflow.com/questions/6841379/is-there-java-hashmap-equivalent-in-php]] if you would like to keep talking about this)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the original pdf document, you&amp;#8217;ll frequently see verify() method are called, but in PHPUnit, verify() equivalent function will be called automatically at the end of test running, so you do not need to take care about verify() calling in case you would use PHP. ( use mockery_verify in Mockery and verify() in Phake instead)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inner class is used at some code snippet but in PHP inner class is not supported. Just ignore and take those class out of class is enough so far.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;That&amp;#8217;s all for today. Mock object in PHPUnit ROCKS.&lt;/p&gt;
</description>
    <dc:date>2012-11-03T00:00:00+09:00</dc:date>
  </item>
  <item rdf:about="http://rimuru.lunanet.gr.jp/blog/setting-up-php54-composer-application-on-windows">
    <title>Setting Up PHP5.4/Composer Application on Windows With #Chocolatey</title>
    <link>http://rimuru.lunanet.gr.jp/blog/setting-up-php54-composer-application-on-windows</link>
    <description>	&lt;div class=&quot;entry-content&quot;&gt;&lt;p&gt;I liked Chocolatey concept which had been talked at HN two weeks ago: &lt;a href=&quot;http://news.ycombinator.com/item?id=5175483&quot;&gt;&amp;#8220;Kinda like apt-get, but for Windows&amp;#8221;&lt;/a&gt;. But how much is it useful actually?&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s see it by getting PHP5.4 application work on Windows environment.&lt;/p&gt;

&lt;h2&gt;Setting Up PHP5.4 On Windows&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://windows.php.net/download/&quot;&gt;Download zipped PHP 5.4.XX binary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Unzip them and rename the folder(assuming &amp;#8220;C:\php54&amp;#8221; is the folder name)&lt;/li&gt;
&lt;li&gt;Rename &amp;#8220;C:\php54\php.ini-development&amp;#8221; to &amp;#8220;C:\php54\php.ini&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;And lastly, edit C:\php54\php.ini and make following two extensions enable by trimming semicolon:&lt;/p&gt;

&lt;div class=&quot;box&quot;&gt;&lt;pre class=&quot;brush: php; gutter: false; toolbar: false&quot;&gt;
extension=php_curl.dll
extension=php_openssl.dll
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Don&amp;#8217;t forget to set the PATH system variable from system settings. For example:&lt;/p&gt;

&lt;div class=&quot;box&quot;&gt;&lt;pre class=&quot;brush: php; gutter: false; toolbar: false&quot;&gt;
...;C:\php54;
&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Getting Chocolatey And Composer Ready&lt;/h2&gt;

&lt;p&gt;Hit the command to get &lt;a href=&quot;http://chocolatey.org/&quot;&gt;chocolatey&lt;/a&gt; ready:&lt;/p&gt;

&lt;div class=&quot;box&quot;&gt;&lt;pre class=&quot;brush: php; gutter: false; toolbar: false&quot;&gt;
C:\&amp;gt; @powershell -NoProfile -ExecutionPolicy unrestricted -Command &quot;iex ((new-object net.webclient).DownloadString('http://chocolatey.org/install.ps1'))&quot; &amp;amp;&amp;amp; SET PATH=%PATH%;%systemdrive%\chocolatey\bin
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Install curl, git and svn commands &lt;em&gt;with chocolatey&lt;/em&gt;, as applications available on Composer often depend on them.&lt;/p&gt;

&lt;div class=&quot;box&quot;&gt;&lt;pre class=&quot;brush: php; gutter: false; toolbar: false&quot;&gt;
C:\&amp;gt; cinst curl
C:\&amp;gt; cinst git
C:\&amp;gt; cinst svn
&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Here You Go&lt;/h2&gt;

&lt;p&gt;This is just an example to install &lt;a href=&quot;https://github.com/koriym/BEAR.Package&quot;&gt;BEAR.Package&lt;/a&gt;. See &lt;a href=&quot;http://code.google.com/p/bearsunday/wiki/install&quot;&gt;the official wiki&lt;/a&gt; if you need more detailed instruction.&lt;/p&gt;

&lt;div class=&quot;box&quot;&gt;&lt;pre class=&quot;brush: php; gutter: false; toolbar: false&quot;&gt;
C:\tmp&amp;gt; curl -s http://getcomposer.org/installer | php
C:\tmp&amp;gt; php composer.phar create-project -s dev --dev bear/package ./bear
C:\tmp&amp;gt; php .\bear\apps\Helloworld\public\min.php
HelloWorld!
&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Note&lt;/h2&gt;

&lt;p&gt;At this moment(Feb 17th, 2013), Installing PHP5.4 via cinst failed due to 404 error:&lt;/p&gt;

&lt;div class=&quot;box&quot;&gt;&lt;pre class=&quot;brush: php; gutter: false; toolbar: false&quot;&gt;
C:\&amp;gt; cinst curl php5-dev
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Either cinst or php5-dev seems not maintainanced very well. I already commented this to &lt;a href=&quot;http://chocolatey.org/packages/php5-dev&quot;&gt;the owner page of php5-dev&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
</description>
    <dc:date>2011-10-07T00:00:00+09:00</dc:date>
  </item>
</rdf:RDF>