<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>rubinius &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/rubinius/</link>
	<description>Feed of posts on WordPress.com tagged "rubinius"</description>
	<pubDate>Sun, 29 Nov 2009 21:27:17 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Rumors of our Demise are Greatly Exaggerated]]></title>
<link>http://blog.fallingsnow.net/2009/05/28/rumors-of-our-demise-are-greatly-exaggerated/</link>
<pubDate>Fri, 29 May 2009 05:58:06 +0000</pubDate>
<dc:creator>evanphx</dc:creator>
<guid>http://blog.fallingsnow.net/2009/05/28/rumors-of-our-demise-are-greatly-exaggerated/</guid>
<description><![CDATA[We&#8217;ve been pretty quiet with Rubinius developments for a while, so I thought I&#8217;d bring p]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>We&#8217;ve been pretty quiet with Rubinius developments for a while, so I thought I&#8217;d bring people up to speed.</p>
<p>The previous year has seen a lot for the project. We were sad a number of developers were laid off the project, but that has only increased our desire to get the project to a usable state.</p>
<p>Some of the highlights include, but are not limited to:</p>
<ul>
<li>Rewriting the VM in C++</li>
<li>Experimenting and building multiple JIT compilers</li>
<li>Pushing RubySpec completeness and compliance levels</li>
<li>Getting large scale libraries like Rails and RubyGems running</li>
</ul>
<p>All those things are available today in <a href="http://github.com/evanphx/rubinius">our git repo on github</a>.</p>
<p>Recently, Brian Ford and I <a href="http://rubini.us/roadmap.html">published a roadmap</a>, laying out the activities of most importance over the next few months. We&#8217;re going to try and be more vigilant about updating blogs and roadmaps in the coming months, to keep people more up-to-date.</p>
<p>Finally, a lot of people ask me <em>&#8220;How can I help on Rubinius? I don&#8217;t have a lot of time.&#8221;</em> The answer is simple:</p>
<ul>
<li>Download your favorite library</li>
<li>Try it under Rubinius:
<ul>
<li><code>bin/rbx test/test_whatever.rb</code> <big><b>or</b></big></li>
<li><code>bin/rbx gem install rspec; bin/rbx -S spec my_spec_dir</code></li>
</ul>
</li>
<li>Report bugs that you find to <a href="http://github.com/evanphx/rubinius/issues">our github Issue tracker</a>.</li>
</ul>
<p>The more people start to report bugs, the more coverage we get over the vastness of the ruby landscape. So while we&#8217;re hard and work getting the performance up, you can help out getting the compliance up.</p>
<p>Thanks again to the ruby community for all the patience you have shown the team over the years. Rubinius has been a long road, but I really feel like we&#8217;re onto something big.</p>
<p>In the coming months, I&#8217;m going to try and post more posts about technical aspects of Rubinius, so look for those.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Ruby Community Rocks]]></title>
<link>http://blog.fallingsnow.net/2008/12/09/the-ruby-community-rocks/</link>
<pubDate>Tue, 09 Dec 2008 20:16:03 +0000</pubDate>
<dc:creator>evanphx</dc:creator>
<guid>http://blog.fallingsnow.net/2008/12/09/the-ruby-community-rocks/</guid>
<description><![CDATA[The last time we checked in, I was delivering the bad news about having to let a bunch of my team go]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>
The last time we checked in, I was delivering the bad news about having to let a bunch of my team go. I received a lot of kind words of encouragement during the hard time, which I want to thank everyone for.
</p>
<p>
In addition to kind words, a number of people stepped up and indicated they had positions available that my newly unemployed friends would be great fits for.
</p>
<p>
One such offer was from Daniel Yoder and Charles Hornberger at AT&#38;T Interactive in the R&#38;D department, the makers of the <a href="http://www.yellowpages.com">yellowpages.com</a>. I&#8217;m extremely happy to announce that Eero Saynatkari (rue on IRC) has recently been hired by them and even given time to continue work on Rubinius!
</p>
<p>
This development makes me so happy. To see the community pull together in a tough time and even continue to make an external investment in Rubinius.
</p>
<p>
Thanks again guys! You&#8217;re what make me love being a Rubyist.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[A Sad Day]]></title>
<link>http://blog.fallingsnow.net/2008/11/18/a-sad-day/</link>
<pubDate>Tue, 18 Nov 2008 07:25:13 +0000</pubDate>
<dc:creator>evanphx</dc:creator>
<guid>http://blog.fallingsnow.net/2008/11/18/a-sad-day/</guid>
<description><![CDATA[There have been some sad developments within the Engine Yard Rubinius team that I&#8217;d like to ad]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>
There have been some sad developments within the Engine Yard Rubinius team that I&#8217;d like to address head on.
</p>
<p>
Earlier today, I had the unfortunate task of reducing the team size to 2 people, which meant laying off the rest of the team.
</p>
<p>
I&#8217;m sure this comes as a shock to many, as it did to my friends to whom I had to give walking papers. This was certainly never a scenario that I had ever hoped to find myself in when Engine Yard offered me this dream job early in 2007.
</p>
<p>
The reason for the layoffs is not Engine Yard divesting interest in Rubinius,<br />
but rather a necessary reorganization of budget priorities. That&#8217;s a fancy way of saying that EY could no longer afford to sustain the large team we had.
</p>
<p>
This is a sad day for me, one that I&#8217;ve been dreading. It stings not only<br />
because of what it means to Rubinius but also because of what it means to my friends with whom I will no longer be working. They&#8217;ve put blood, sweat, and tears into Rubinius and their everyday presence will be sorely missed. I hope that they do not think badly of me or Engine Yard.
</p>
<p>
When Engine Yard gave me the go ahead to hire a team, they did it with the best<br />
intention: to help Rubinius grow. And we have definitely done that. In the<br />
last year, we&#8217;ve achieved amazing goals within the project:</p>
<ul>
<li>We went from running very little ruby code to running rails.</li>
<li>We got rubygems up and running well.</li>
<li>We got a parser entirely in ruby integrated.</li>
<li>We wrote a whole new VM to build on.</li>
</ul>
<p>
 We&#8217;ve had our fair share of setbacks, but the team has always rallied.
</p>
<p>
Rubinius will continue to move forward, continually bolstered by the awesome group of people who give up their free time to help on the project.
</p>
<p>
Tom Mornini has <a href="http://blog.engineyard.com/">posted on the EY blog</a> as well; you should read his take.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[C++0x is out. Yay.]]></title>
<link>http://rezaprima.wordpress.com/2008/10/31/c0x-is-out-yay/</link>
<pubDate>Fri, 31 Oct 2008 01:17:08 +0000</pubDate>
<dc:creator>Reza Primardiansyah</dc:creator>
<guid>http://rezaprima.wordpress.com/2008/10/31/c0x-is-out-yay/</guid>
<description><![CDATA[Thanks to OSNews, I know that the new standard of C++ is already finalized. Having it at 2008, it do]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Thanks to OSNews, I know that the new <a href="http://osnews.com/comments/20458">standard of C++ is already finalized</a>. Having it at 2008, it doesn&#8217;t need to change base to Hex <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Let&#8217;s wait for the compilers to catch on (GCC, I&#8217;m looking at you). I hope this will bring good news to Rubinius (<a href="http://blog.fallingsnow.net/2008/09/05/rubinius-status/">which nowadays switched to C++ also</a>) as well.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[CPP work branch change]]></title>
<link>http://blog.fallingsnow.net/2008/10/28/cpp-work-branch-change/</link>
<pubDate>Tue, 28 Oct 2008 08:04:13 +0000</pubDate>
<dc:creator>evanphx</dc:creator>
<guid>http://blog.fallingsnow.net/2008/10/28/cpp-work-branch-change/</guid>
<description><![CDATA[Hi everyone. I&#8217;m super happy to announce that we&#8217;ve gotten the C++ branch stable enough ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>
Hi everyone. I&#8217;m super happy to announce that we&#8217;ve gotten the C++ branch stable enough that we&#8217;re making in the default branch. This means that those of you with existing clones are going to likely do a little work to get them sane though.</p>
<p>
Here is what was done:</p>
<ul>
<li>The old master branch was rename shotgun.</li>
<li>The cpp branch was copy to the name master.</li>
<li>The cpp branch was then deleted.</li>
</ul>
<p>
Anyone that has up to now been working on the cpp branch has a couple of options.</p>
<ol>
<li>Delete your clone and re-clone. This is the easiest. The default checkout will be code in the cpp branch and you&#8217;re off and going.</li>
<li>Fix up your current repo. I did this by doing the following commands:
<ol>
<li><code>git checkout master</code></li>
<li><code>git reset --hard origin/master</code></li>
<li><code>git branch -D cpp</code></li>
</ol>
<p>This will get your local master branch repointed and properly checked out. In addition, the old cpp local branch can be deleted.
</li>
</ol>
<p>
Hopefully no one experiences much pain due to this change. It&#8217;s been a long time coming and I&#8217;m really excited.<br />
If you do run into problems, post a comment or stop on by IRC and we&#8217;ll work it out for ya.
</p>
<p>
<b>Thanks!</b></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Ruby with Vistual Studio]]></title>
<link>http://ictsu3.wordpress.com/2008/10/28/ruby-with-vistual-studio/</link>
<pubDate>Tue, 28 Oct 2008 07:42:33 +0000</pubDate>
<dc:creator>AdmOd</dc:creator>
<guid>http://ictsu3.wordpress.com/2008/10/28/ruby-with-vistual-studio/</guid>
<description><![CDATA[เข้าใจว่าทุกคนคงเคยผ่านในรายวิชา Programming in Visual Language มาแล้ว คงจะคุ้นเคยหน้าตาของ Visual S]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>เข้าใจว่าทุกคนคงเคยผ่านในรายวิชา Programming in Visual Language มาแล้ว คงจะคุ้นเคยหน้าตาของ <a class="zem_slink" title="Microsoft Visual Studio" rel="homepage" href="http://msdn.microsoft.com/vstudio/">Visual Studio</a> มากกว่า แต่ก็มีหลายๆคนที่หันไปใช้ภาษา <a class="zem_slink" title="Ruby (programming language)" rel="homepage" href="http://www.ruby-lang.org/">Ruby</a> ซึ่งอาจไม่ค่อยคุ้นเคยกับหน้าตาของโปรแกรมสักเท่าไหร่</p>
<p>เพิ่งไปเจอ <a class="zem_slink" title="Integrated development environment" rel="wikipedia" href="http://en.wikipedia.org/wiki/Integrated_development_environment">IDE</a> ตัวหนึ่งที่เรียกว่า <a href="http://www.sapphiresteel.com/">Ruby in Steel</a> ซึ่งเป็นกลุ่มนักพัฒนาที่พัฒนาเอาตัว Ruby, <a class="zem_slink" title="Ruby on Rails" rel="homepage" href="http://www.rubyonrails.com">Rails</a> เข้ามาใช้ร่วมกับ Visual Studio</p>
<p>มาดูหนังหน้าโปรแกรมกัน (กดเพื่อดูรูปอื่นๆ)</p>
<p><a rel="attachment wp-att-57" href="http://ictsu3.wordpress.com/2008/10/28/ruby-with-vistual-studio/visual-rails-workbench/"><img class="alignnone size-full wp-image-57" title="visual-rails-workbench" src="http://ictsu3.wordpress.com/files/2008/10/visual-rails-workbench.gif" alt="" width="500" height="375" /></a></p>
<p>ซึ่งแน่นอนว่า &#8220;มันไม่ฟรี&#8221;</p>
<p>49$ สำหรับ Text Edition และ<br />
199$ สำหรับ Developer Edition</p>
<p>ความสามารถทั่วไปคล้าย <a class="zem_slink" title="Aptana" rel="homepage" href="http://www.aptana.com">Aptana</a> (<a class="zem_slink" title="RadRails" rel="homepage" href="http://aptana.com/rails/">RadRails</a>) แต่ด้วยหน้าตาที่คุ้นเคยน่าจะทำให้ใช้งานกันได้สะดวกมากกว่า</p>
<p>แต่เดี๋ยวก่อน! ยังมี <a href="http://www.sapphiresteel.com/Ruby-In-Steel-New-Free-Edition">Personal Edition</a> ซึ่งแน่นอนว่า<em>ฟรี</em></p>
<p>สำหรับผู้ที่สนใจ สามารถดาวน์โหลดตัวโปรแกรมได้จากลิงค์ข้างต้น และ</p>
<ul>
<li><a href="http://www.sapphiresteel.com/The-Book-Of-Ruby">ebook</a> เบื้องต้น</li>
<li><a href="http://www.sapphiresteel.com/Learn-Ruby-In-Steel-With-Movies">video</a> เบื้องต้น</li>
</ul>
<p>เพิ่มเติมก็คือหนังสือ Ruby on Rail (RoR) ทั่วๆไปนั่นเอง</p>
<p>เอเมน~~~~~~~~~</p>
<div class="zemanta-pixie" style="margin-top:10px;height:15px;"><a class="zemanta-pixie-a" title="Zemified by Zemanta" href="http://reblog.zemanta.com/zemified/485fb853-8e98-4cae-939b-5e704340cc29/"><img class="zemanta-pixie-img" style="border:medium none;float:right;" src="http://img.zemanta.com/reblog_e.png?x-id=485fb853-8e98-4cae-939b-5e704340cc29" alt="Reblog this post [with Zemanta]" /></a></div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Compiling rubinius c++ VM in Debian lenny]]></title>
<link>http://rezaprima.wordpress.com/2008/09/20/compiling-rubinius-cplusplu-vm-in-debian-lenny/</link>
<pubDate>Sat, 20 Sep 2008 13:15:51 +0000</pubDate>
<dc:creator>Reza Primardiansyah</dc:creator>
<guid>http://rezaprima.wordpress.com/2008/09/20/compiling-rubinius-cplusplu-vm-in-debian-lenny/</guid>
<description><![CDATA[I have a habit to use testing branch of debian. Currently it&#8217;s Lenny. The problem is, gcc pack]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I have a habit to use testing branch of debian. Currently it&#8217;s Lenny.</p>
<p>The problem is, gcc package now is version 4.3. The g++ of that version is stricter (being transitioning to C++-0x), emitting errors when compiling rubinius c++ vm. The solution (workaround, actually) is installing the 4.2 versions, then replacing the gcc and g++ symlinks (prvided by gcc and g++ packages, respectively) to point to gcc-4.2 and g++-4.2, respectively. Yes, it&#8217;s a hack.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Rubinius Status]]></title>
<link>http://blog.fallingsnow.net/2008/09/05/rubinius-status/</link>
<pubDate>Fri, 05 Sep 2008 21:48:12 +0000</pubDate>
<dc:creator>evanphx</dc:creator>
<guid>http://blog.fallingsnow.net/2008/09/05/rubinius-status/</guid>
<description><![CDATA[Hey folks, sorry for the quietness here. Thought I&#8217;d fill everyone in on the current status of]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>
Hey folks, sorry for the quietness here. Thought I&#8217;d fill everyone in on the current status of Rubinius.
</p>
<p>
We (the Rubinius team) have been hard at work on a couple of fronts:</p>
<ul>
<li><b>a new C++ VM</b>: the team has been hard at work getting a new VM up and running back to the level we had the old system at. Our output has slowed to a little bit as the rest of the team has gotten up to speed on this new code base. Now, I&#8217;m sure you&#8217;re wondering why we&#8217;ve begun working on a new VM. Well, there are a few reasons:<br />
</p>
<ul>
<li>
Better organized. We&#8217;ve learned a lot in the building of the last VM about how to structure things. For instance, using C++ lets us model Ruby classes as C++ classes, providing the VM with the same familiar structure and execution as their Ruby counterparts. This lowers the barrier for understanding and using the code base.
</li>
<li>Better tested. The old VM, I&#8217;m ashamed to say, had no unit tests. From day one of the new VM, we&#8217;ve been writing unit and integration tests. This has helped us a lot to keep the code base under control, as everyone who writes unit tests knows.</li>
<li>More potential. One of the big changes is keep a lot of parts of the system open. For example, we&#8217;re actively experimenting with using LLVM to speed up method execution a lot. The old code base, with no tests, was quite tangled and sadly didn&#8217;t provide any easy way forward for a lot of experiments we wanted to do</li>
</ul>
</li>
<li>We&#8217;ve been working a lot of Ryan Davis&#8217;s ruby_parser project lately. We&#8217;re actively looking to use that code base as Rubinius&#8217; internal parser. This is towards our goal of more Ruby code, but as anyone who&#8217;s written a parser will tell ya, it can be a real pain.<br />
Ryan has made great progress getting it working and integrating it with Rubinius&#8217; Compiler.
</li>
<li><b>Conferences</b>: Wilson Bilkovich was just in Berlin, talking technical about Rubinius at RailsConf Europe. I&#8217;m here in Austin, at Lone Star Ruby Conf, finishing up my keynote that I&#8217;ll be giving later today.<br />
The whole team will be at RubyConf in November as well, and a few are likely going to OOPSLA as well.
</li>
</ul>
<p>
I know that a lot of people are eagerly anticipating Rubinius, and I want to thank you all for your patience with me and the rest of the team.
</p>
<p>
This is a dream project, and turns out to be pretty darn hard and a lot of work. I&#8217;ve made the mistake in the past about talking about when I think that we&#8217;ll release 1.0. Something I don&#8217;t think I properly understood a year ago was the level that people are looking for a 1.0 to operate at. If we released a 1.0 that was 10x slower than MRI, we&#8217;d probably be in pretty tough shape.</p>
<p>
At the some time, I know people want to play with Rubinius. We fell off doing monthly releases a while back, and we&#8217;re going to start getting back on that soon. Hopefully that will give people insight into the project&#8217;s progress more.
</p>
<p>
Again, thanks to Engine Yard and everyone else for wonderful support.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Rubinius Summer]]></title>
<link>http://blog.fallingsnow.net/2008/07/28/the-rubinius-summer/</link>
<pubDate>Mon, 28 Jul 2008 23:24:17 +0000</pubDate>
<dc:creator>evanphx</dc:creator>
<guid>http://blog.fallingsnow.net/2008/07/28/the-rubinius-summer/</guid>
<description><![CDATA[Hi everyone. Been too long since the last update, so wanted to get everyone up to speed. Rubinius Th]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>
Hi everyone. Been too long since the last update, so wanted to get everyone up to speed.
</p>
<h3>Rubinius</h3>
<p>
Things have been a little quiet on the Rubinius front, as I&#8217;m sure a lot of you have noticed. We&#8217;re still hard at work, currently getting the new C++ VM into shape.<br />
This new C++ VM fixes a lot of fundamental problems the shotgun VM had (type safety, expression ordering, etc), which is a major reason we&#8217;re migrating our work to it.<br />
<br />
Things have been a little quieter, commit wise, as the rest of the team gets up to speed on the new VM that I&#8217;ve been working on. Shotgun has been put into maintenance mode, with updates to the current main coming mainly in the form of bug fixes to the kernel.<br />
<br />
I know that the advances we&#8217;re making in the new VM everyone will love, from more performance to less crashes to better code organization.
</p>
<p><h3>Comic-Con</h3>
<p>I&#8217;ve just returned from Comic-Con, having spend 4 days in the sun down in San Diego with the rest of nerdom.<br />
It was quite a fun con though quite tiring. We managed to get into some good panels, but didn&#8217;t make it into the Hero&#8217;s and Lost panels. Seems you had to arrive at 6am to even attempt to get a seat. The line to get in was literally a mile long (no really, I&#8217;m not kidding.)<br />

</p>
<p><h3>Conferences</h3>
<p>Since we&#8217;ve been hard at work trying to get Rubinius to 1.0, I haven&#8217;t done too many conferences this summer. The next one I&#8217;ll be at is <a href="http://lonestarrubyconf.com">Lone Star Ruby Conf</a> down in Austin. Should be fun, I&#8217;ve never been to Austin before and people seem to like the city.<br />
</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Ruby,Rubinius,IronRuby,Rails and Merb Group on FaceBook]]></title>
<link>http://rubyworld.wordpress.com/2008/07/05/rubyrubiniusironrubyrails-and-merb-group-on-facebook/</link>
<pubDate>Sat, 05 Jul 2008 08:40:40 +0000</pubDate>
<dc:creator>SoftMind</dc:creator>
<guid>http://rubyworld.wordpress.com/2008/07/05/rubyrubiniusironrubyrails-and-merb-group-on-facebook/</guid>
<description><![CDATA[Hello, I just came across a new group created on FaceBook, which covers major subjects like&#8230; (]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Hello,</p>
<p>I just came across a new group created on FaceBook, which covers major subjects like&#8230; (1) Ruby (2) Rubinius (3) IronRuby (4) Rails and (5) Merb.</p>
<p>The main goal is to discuss all this major topics under on roof. This group is specially created by Indian developers, with a mission to promote Rails and other related languages/frameworks in India.</p>
<p>I would highly recommend joining there.</p>
<p>Thanks</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Rubinius version 0.9.0 released!]]></title>
<link>http://blog.fallingsnow.net/2008/06/20/rubinius-version-090-released/</link>
<pubDate>Fri, 20 Jun 2008 09:02:55 +0000</pubDate>
<dc:creator>evanphx</dc:creator>
<guid>http://blog.fallingsnow.net/2008/06/20/rubinius-version-090-released/</guid>
<description><![CDATA[I&#8217;m super proud to say that we&#8217;ve release version 0.9.0. It&#8217;s a snapshot of the wo]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>
I&#8217;m super proud to say that we&#8217;ve release version 0.9.0. It&#8217;s a snapshot of the work we&#8217;ve already been doing, but we&#8217;re trying to formalize our releases a bit more.
</p>
<p>
We&#8217;re going to be doing another release, 0.10, next month, as well. We&#8217;re working to do more releases, more often.
</p>
<p>
<a href="http://rubini.us/download">Download it now!</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Paquete de debian para rubinius]]></title>
<link>http://gastonramos.wordpress.com/2008/06/15/paquete-de-debian-para-rubinius/</link>
<pubDate>Mon, 16 Jun 2008 02:20:54 +0000</pubDate>
<dc:creator>Gastón Ramos</dc:creator>
<guid>http://gastonramos.wordpress.com/2008/06/15/paquete-de-debian-para-rubinius/</guid>
<description><![CDATA[Hace un tiempo que estoy probando rubunius (una máquina virtual para ruby desarrollada por Evan Phoe]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Hace un tiempo que estoy probando <a href="http://rubini.us/">rubunius</a> (una máquina virtual para ruby desarrollada por Evan Phoenix inspirada en smalltalk-80) y además estoy colaborando con <a href="http://rubyspec.org/">rubyspec</a> un proyecto que nació como parte de rubinius. Rubinius está en proceso de desarrolllo, para probarlo hay que bajarse los fuentes y compilarlo, o&#8230; para los que usan debian o algunos de sus derivados pueden bajarse el siguiente <a href="http://gastonramos.com.ar/downloads/rubinius_0.8.0-1_i386.deb">.deb</a> que cree hace algunos días, que lo disfruten <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[The path towards a language specification for Ruby]]></title>
<link>http://saviorodrigues.wordpress.com/2008/05/29/the-path-towards-a-language-specification-for-ruby/</link>
<pubDate>Thu, 29 May 2008 08:00:04 +0000</pubDate>
<dc:creator>Savio Rodrigues</dc:creator>
<guid>http://saviorodrigues.wordpress.com/2008/05/29/the-path-towards-a-language-specification-for-ruby/</guid>
<description><![CDATA[I&#8217;ve been a little out of touch lately &#8211; crazy accounting project for school &#8211; but]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I&#8217;ve been a little out of touch lately &#8211; crazy accounting project for school &#8211; but was able to carve out a little time to chat with the guys at Engine Yard who are doing some cool things with Ruby.Engine Yard employs Evan Phoenix, the founder of the <a href="http://rubini.us/">Rubinius</a> project.  The project aims to deliver a virtual machine for Ruby and will be previewing <a href="http://www.rubyonrails.org/">Rails</a> running on Rubinius at <a href="http://en.oreilly.com/rails2008">RailsConf 2008</a> later today.</p>
<p>According to Evan, Rubinius is an implementation of a Ruby platform, just like the <a href="http://www.ruby-lang.org/en/downloads/">standard Ruby interpreter</a>, <a href="http://www.ironruby.net/">IronRuby</a>, <a href="http://ruby.macosforge.org/trac/wiki/MacRuby">MacRuby</a>, <a href="http://jruby.codehaus.org/">JRuby</a>, or countless other implementations.  What&#8217;s interesting is that since <a href="http://en.wikipedia.org/wiki/Ruby_programming_language">Ruby doesn&#8217;t really have a specification</a>, it&#8217;s difficult to say that platform xyz is not a compatible implementation of a Ruby runtime.  In response, Rubinius decided to create a test suite that could help standardize Ruby as a language across the growing number of VM implementations for Ruby.  The test suite is available at <a href="http://www.rubyspec.org/">RubSpec.org</a>.  According to Evan, many of the other implementations are using the test suite.  I can see this leading to a formal standards body (a la the JCP, but without one vendor with overwhelming control) to guide the Ruby language.  A standardization process would be good news for enterprise customers that want to reduce vendor lock-in.</p>
<p>As an aside, an interesting thing about the Rubinius project is that anyone can get commit access after submitting one patch.  While the project is sponsored by Engine Yard, they don&#8217;t appear to be controlling commit access (ah, this would make <a href="http://blogs.ittoolbox.com/database/soup/archives/community-destroyers-24309">Josh</a> happy <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .  As a result, there are over 150 committers to Rubinius, some of whom are very active and others who have submitted only a few patches.</p>
<p>It&#8217;ll be interesting to watch the Ruby community mature and see if Rubinius&#8217; truly open governance model will catch on with other early OSS projects (or rather, with the companies that back these projects).</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Code Drive at RailsConf]]></title>
<link>http://blog.fallingsnow.net/2008/05/26/code-drive-at-railsconf/</link>
<pubDate>Tue, 27 May 2008 00:06:00 +0000</pubDate>
<dc:creator>evanphx</dc:creator>
<guid>http://blog.fallingsnow.net/2008/05/26/code-drive-at-railsconf/</guid>
<description><![CDATA[A heads up that I&#8217;ll be participating in the RailsConf Community CodeDrive, hacking on Rubiniu]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>
A heads up that I&#8217;ll be participating in the <a href="http://en.oreilly.com/rails2008/public/schedule/detail/2562">RailsConf Community CodeDrive</a>, hacking on <a href="http://rubini.us">Rubinius</a></p>
<p>
Come hang out with me and other project hackers and share the love!
</p>
<p>
Bring your questions, quandaries, criticisms, and code!
</p>
<p>
See you Thursday morning at 10am!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Rails on Rubinius]]></title>
<link>http://blog.fallingsnow.net/2008/05/17/rails-on-rubinius/</link>
<pubDate>Sat, 17 May 2008 08:22:43 +0000</pubDate>
<dc:creator>evanphx</dc:creator>
<guid>http://blog.fallingsnow.net/2008/05/17/rails-on-rubinius/</guid>
<description><![CDATA[We hit a major milestone tonight. As most people know, we&#8217;ve been working to run Rails on Rubi]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>We hit a major milestone tonight. As most people know, we&#8217;ve been working to run Rails on Rubinius by RailsConf to have something to show off, even if it&#8217;s pretty slow.</p>
<p>Well, I&#8217;m super proud to say that tonight, rails served up both static and dynamic pages under Rubinius. Previous to tonight, we&#8217;d been blocked just trying to get Rails to even load. I decided to just try loading it up and bang on it enough to get it up and going.</p>
<p>In a scary way, it didn&#8217;t take very much code. Which meant we were very close already.</p>
<p>It&#8217;s pretty late, so I&#8217;m going to keep this short. Big thanks to everyone who&#8217;s contributed to Rubinius and had faith in us. Enormous thanks to Engine Yard, without whom I don&#8217;t know if we&#8217;d been able to reach this amazing height.</p>
<p>More updates to come&#8230;<br />
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Welcome to the Club]]></title>
<link>http://blog.fallingsnow.net/2008/05/03/welcome-to-the-club/</link>
<pubDate>Sun, 04 May 2008 06:00:09 +0000</pubDate>
<dc:creator>evanphx</dc:creator>
<guid>http://blog.fallingsnow.net/2008/05/03/welcome-to-the-club/</guid>
<description><![CDATA[I&#8217;ve like to formally welcome the maglev development team over at Gemstone to the Ruby environ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>
I&#8217;ve like to formally welcome the <a href="http://ruby.gemstone.com/">maglev</a> development team over at <a href="http://www.gemstone.com">Gemstone</a> to the Ruby environment club.
</p>
<p>
For those of you that haven&#8217;t yet heard of maglev, it&#8217;s a brand new Ruby VM being developed by the folks over at Gemstone. Gemstone is the makers of probably the most advanced object-oriented database used today, and have traditionally been a Smalltalk shop till recently.<br />
With the tide rising on Ruby, I&#8217;m happy to see another player enter the field. This only means that Ruby is continuing to mature and see that the community is healthy.
</p>
<p>
I was personally excited to read <a href="http://www.infoq.com/news/2008/04/maglev-gemstone-builds-ruby">an interview with Bob Walker and Avi Bryant</a> concerning maglev, because Rubinius is mentioned more than a few times. They&#8217;re looking at Rubinius for a couple of reasons. For one, the RubySpec suite we&#8217;ve developing and are about to spin off. The more people that we see using the suite and depending on it, the more mature it will become. Not having a spec for Ruby is commonly touted as a reason that it&#8217;s a toy, immature language, and anything we can do to dispel that thinking is good for the community.
</p>
<p>
The other reason that I&#8217;m excited about maglev is that they&#8217;re taking a very similar approach to the problem of building a Ruby environment. Like Rubinius, the VM is minimal and most of the kernel is implemented in Ruby.<br />
My hope is that the kernel of Rubinius can be refactored and developed to be generic enough for other environments to use. While I know little about maglev&#8217;s current environment, they&#8217;re a natural build off the work in the Rubinius kernel. I&#8217;d hate to see people develop the code functionality of a ruby environment yet again (I count 5 code bases to this effect currently: MRI, JRuby, Ruby.NET, IronRuby, and Rubinius).
</p>
<p>
Being able to use a generic Ruby kernel is not unique to a smalltalk style VM. With some luck, it could be used by the folks in other environments as well. In my eyes, this is a big win for everyone. For one, this would mean a common code base that consists of the primary Ruby functionality, and thus would mean a vastly reduced worry of fragmentation. Plus it would alleviate the need for this code to be written again, letting future environment developers focus on taking Ruby to the next level in terms of platform integration, performance, etc.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Rubinius Retort]]></title>
<link>http://blog.fallingsnow.net/2008/04/28/rubinius-retort/</link>
<pubDate>Mon, 28 Apr 2008 17:21:41 +0000</pubDate>
<dc:creator>evanphx</dc:creator>
<guid>http://blog.fallingsnow.net/2008/04/28/rubinius-retort/</guid>
<description><![CDATA[By now, a good deal of you have read Charles breakdown of Ruby implementations. If you haven&#8217;t]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>
By now, a good deal of you have read <a href="http://headius.blogspot.com/2008/04/promise-and-peril-for-alternative-ruby.html">Charles breakdown of Ruby implementations.</a><br />
If you haven&#8217;t please go read at least the Rubinius section before reading the rest of this post, as it is largely a response to that.
</p>
<p>Now, on to Charles section on Rubinius:</p>
<blockquote><p>
Evan Phoenix&#8217;s Rubinius project is an effort to implement Ruby using as much Ruby code as possible. It is not, as professed, &#8220;Ruby in Ruby&#8221; anymore. Rubinius started out as a 100% Ruby implementation of Ruby that bootstrapped and ran on top of MatzRuby. Over time, though the &#8220;Ruby in Ruby&#8221; moniker has stuck, Rubinius has become more or less half C and half Ruby. It boasts a stackless bytecode-based VM (compare with Ruby 1.9, which does use the C stack), a &#8220;better&#8221; generational, compacting garbage collector, and a good bit more Ruby code in the core libraries, making several of the core methods easier to understand, maintain, and implement in the first place.
</p></blockquote>
<p>A little background is in order, to put things straight. Rubinius began as a hobby, back in February of 2006 (Same month I got married, that&#8217;s how I recall).<br />
At RubyConf 2006, I gave a presentation on what was then the initial work, which at that point constitute 3 bodies of work.</p>
<ol>
<li>A VM written in ruby, using RubyInline to access some raw operations. More slow that you can imagine.</li>
<li>A VM written in C, created by hand translating the ruby code into C. Parts of this work were originally done using a translator program I&#8217;d written, which tried to convert the VM in ruby into C mechanically. This proved beyond my skill and time level, thus I felt it was more important to have something running.</li>
<li>A kernel of ruby code, implementing 95% of the core library / kernel / class library of 1.8. The terminology for this part has always been fuzzy in the Ruby community. Rubinius calls this the kernel, some call it the standard library, some the class library. It&#8217;s the implementations of the builtin classes such as Array, Hash, etc.
</li>
</ol>
<p>
It&#8217;s plainly true that today, the VM is about 22,000 lines, the kernel 23,000 lines. I&#8217;ve never hidden this fact from anyone; in fact I&#8217;ve put those numbers directly into presentations. That&#8217;s been true for pretty much the entire life of the project in the public. The initial ruby prototype was only even run by me.<br />
<br />
I do though believe that it still can claim &#8220;Ruby in Ruby&#8221;. When I present on Rubinius or am asked about this, the response I give is:<br />
<em>What is Ruby?</em><br /> The typically response is that Ruby is 3 things:</p>
<ul>
<li>A syntax</li>
<li>An execution model</li>
<li>A kernel</li>
</ul>
<p>
Again, lets have some context. When I began this project, there was buzz about improving things like String and Array. In 1.8, this requires diving down into C right off the bat. Plus, consider languages such as C++ and Java. Java largely claims to be written in Java, since almost the entire class library is written in Java. This lets it evolve faster, because there is no mismatch between Java user code and the Java class library.<br />
It is this that we typically talk about &#8220;Ruby in Ruby&#8221;. If I&#8217;ve not explained this well enough in person and in type, I take full responsibility for this misunderstanding.<br />
There is the long term goal of having a VM which is mechanically generated from Ruby code, in the same way Squeak&#8217;s VM is written. But after that RubyConf 2006, there has been no additional work on this, but there is a <b>very</b> good reason for that.</p>
<p>
Rubinius today has <a href="http://www.ohloh.net/projects/rubinius/contributors">around 150</a> people who have received commit rights. The vast, vast majority of their work has been in the kernel, because this is the largest part of the whole system. And probably 95% of that work has been writing Ruby code. This means that for pretty much all contributers, helping with Rubinius means writing Ruby code. And thus to them, it is <b>Ruby in Ruby.</b>
</p>
<blockquote>
<p>The promise of Rubinius is pretty large. If it can be made compatible, and made to run fast, it might represent a better Ruby VM than YARV. Because a fair portion of Rubinius is actually implemented in Ruby, being able to run Ruby code fast would mean all code runs faster. And the improved GC would solve some of the scaling issues Ruby 1.8 and Ruby 1.9 will face.</p>
<p>Rubinius also brings some other innovations. The one most likely to see general visibility is Rubinius&#8217;s Multiple-VM API. JRuby has supported MVM from the beginning, since a JRuby runtime is &#8220;just another Java object&#8221;. But Evan has built simple MVM support in Rubinius and put a pretty nice API on it. That API is the one we&#8217;re currently looking at improving and making standard for user-land MVM in JRuby and Ruby 1.9. Rubinius has also shown that taking a somewhat more Smalltalk-like approach to Ruby implementation is feasible.</p>
<p>But here be dragons.</p>
<p>In the 1.5 years since Rubinius was officially named and born into the Ruby world, it has not yet met any of these promises. It is not generally faster than Ruby 1.8, though it performs pretty well on some low-level microbenchmarks. It is not implemented in Ruby: the current VM is written in C and the codebase hosts as much C code as it does Ruby code. Evan&#8217;s work on a C++ rewrite of the VM will make Rubinius the first C++-based Ruby implementation. It has not reached the Rails singularity yet, though they may achieve it for RailsConf (probably in the same cobbled-together state JRuby did at JavaOne 2006&#8230;or maybe a bit better). And the second Rails inflection point&#8211;running Rails faster than Ruby 1.8&#8211;is still far away.
</p></blockquote>
<p>
Charles once again gets my hackles up, thought his points are true. We&#8217;ve yet to run rails. We&#8217;ve yet to run significant Ruby code faster than 1.8. I am finishing up a C++ rewrite of the VM.
</p>
<p>
I&#8217;ve addressed the <b>Ruby in Ruby</b> phraseology above, so lets move past that.
</p>
<p>
Performance is improving at a slow, regular pace. This is because of 2 factors:</p>
<ul>
<li><em>VM improvements.</em> Adding more caches, more VM logic to make it&#8217;s constructs faster. This happens far more infrequently than:</li>
<li><em>Ruby code improvements.</em> This happens quite often, because we have so many people working in the kernel. These kinds of improvements will get us a long way, but not the entire way to 1.8 performance. That&#8217;s where VM improvements help.</li>
</ul>
<p>
Again, he brings up the sizes of the VM in comparison to the kernel. This will be the last time I address this in this post. Ruby is a dynamic language, which boasts a very rich, featureful kernel. It&#8217;s syntax and constructs allow for short, succinct algorithms.<br />
So while, yes, the kernel is the same number of lines as the VM, it&#8217;s not unreasonable to say that it probably constitutes 10x the functionality. This is because the written Ruby code is shorter and easier to understand. That&#8217;s the whole point of this project, to make the core of it easier to work on and evolve.
</p>
<blockquote>
<p>Compatibility is not going to be a problem for Rubinius. They&#8217;ve worked very hard from the beginning to match Ruby behavior, even launching a Ruby specification suite project to officially test that behavior using Ruby 1.8 as the standard. I have no doubt Rubinius will be able to run Rails and most other Ruby apps people throw at it. And despite Evan&#8217;s frequent cowboy attitude to language compatibility (such as his early refusal to implement left-to-right evaluation ordering, a fatal decision that led to the current VM rework), compatibility is likely to be a simple matter of time and effort, driven by the spec suite and by actual applications, as people start running real code on Rubinius.</p>
</blockquote>
<p>A quick personal response to a personal attack. I never once refused to implement left-to-right evaluation ordering, this is a bald faced lie. It&#8217;s totally true that Rubinius today is right-to-left, because that was much easier to implement way back in the day when the project began. As we started to work on ActiveRecord, we found that there was code that appear to depend on left-to-right ordering, so <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/13810">I brought it up with matz.</a> And now I&#8217;m in the midst of changing it. Truth be told, I should have done my research back when the project started, it would have been easier to fix this then than now.</p>
<p>
But I take issue with Charles statement that I&#8217;m operating fast and loose with language compatibility. We have an awesome team working on RubySpecs, which will end up being a definitive reference for 1.8 behavior. I will always be the first one to defend their behavior, and get Rubinius implementing it properly.<br />
<br />
That&#8217;s not to say that Rubinius in the past has made temporary pragmatic decisions in implementation. We absolutely have, and in time those are corrected.<br />
Perhaps Charles mistakes my pragmatism and Montana upbringing for a cowboy attitude.
</p>
<blockquote>
<p>Performance is going to be a much harder problem for Rubinius. In order for Rubinius to perform well, method invocation must be extremely fast. Not just faster than Ruby 1.8 or Ruby 1.9, but perhaps an order of magnitude faster than the fastest Ruby implementations. The simple reason for this is that with so much of the core classes implemented in Ruby, Rubinius is doing many times more dynamic invocations than any other implementation. If a given String method represents one or two dynamic calls in JRuby or Ruby 1.8, it may represent twenty in Rubinius&#8230;and sometimes more. All that dispatch has a severe cost, and on most benchmarks involving heavily Ruby-based classes Rubinius has absolutely dismal performance&#8211;even with call-site optimizations that finally pushed JRuby&#8217;s performance to Ruby 1.9 levels. A few benchmarks I&#8217;ve run from JRuby&#8217;s suite must be ratcheted down a couple orders of magnitude to even complete.
</p></blockquote>
<p>He&#8217;s absolutely correct. We have a ways to go, but I don&#8217;t believe we can&#8217;t get there. Others before us have made it work, and I think so shall we.</p>
<blockquote>
<p>And the Rubinius team knows this. Over the past few months, more and more core methods have been reimplemented in C as &#8220;primitives&#8221;, sometimes because they have to be to interact with C-level memory and VM constructs, but frequently for performance reasons. So the &#8220;Ruby in Ruby&#8221; implementation has evolved away from that ideal rather than towards it, and performance is still not acceptable for most applications. In theory, none of this should be insurmountable. Smalltalk VMs run significantly faster than most Ruby implementations and still implement all or most of the core in Smalltalk. Even the JVM, largely associated with the statically-typed Java language, is essentially an optimized dynamic language VM, and the majority of Java&#8217;s core is implemented in Java&#8230;often behind interfaces and abstractions that require a good dynamic runtime. But these projects have hundreds of man-years behind them, where Rubinius has only a handful of full-time and part-time enthusiastic Rubyists, most with no experience in implementing high-performance language runtimes. And Evan is still primarily responsible for everything at the VM level.</p>
<p>Of course, it would be folly to suggest that the Rubinius team should focus on performance before compatibility. The &#8220;Ruby in Ruby&#8221; meme needs to die (seriously!), but other than that Rubinius is an extremely promising implementation of Ruby. Its performance is terrible for most apps, but not all that much worse than JRuby&#8217;s performance was when we reached the Rails singularity ourselves. And its design is going to be easier to evolve than comparable C implementations, assuming that people other than Evan learn to really understand the VM core. I believe the promise of Rubinius is certainly great enough to continue the project, even if the perils are going to present some truly epic challenges for Evan and company to overcome.
</p></blockquote>
<p>
Thank you for the kind works of encouragement Charles. We&#8217;re getting there.<br />
I want to say briefly as well that Charles and I are good friends, I just wanted to clear the air slightly and get everyone on the same page.
</p></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Seri Ruby on Rails itu Gampang! Mari Belajar Ruby on Rails: Menyimpan Data Sekaligus Banyak]]></title>
<link>http://ariekusumaatmaja.wordpress.com/2008/04/08/seri-ruby-on-rails-itu-gampang-mari-belajar-ruby-on-rails-menyimpan-data-sekaligus-banyak/</link>
<pubDate>Mon, 07 Apr 2008 17:49:14 +0000</pubDate>
<dc:creator>Arie Kusuma Atmaja</dc:creator>
<guid>http://ariekusumaatmaja.wordpress.com/2008/04/08/seri-ruby-on-rails-itu-gampang-mari-belajar-ruby-on-rails-menyimpan-data-sekaligus-banyak/</guid>
<description><![CDATA[Kali ini saya akan membawakan tutorial Ruby on Rails sederhana tentang bagaimana menyimpan data seka]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Kali ini saya akan membawakan tutorial Ruby on Rails sederhana tentang bagaimana menyimpan data sekaligus banyak. Saya tidak akan membahas sejarah semenjak apa itu ruby, kemudian juga saya tidak akan menjelaskan disini bagaimana cara instalasi ruby maupun ruby on rails itu sendiri, karena semua sudah jelas dibahas di <a href="http://www.ruby-lang.org/id">Situs Resmi Ruby Indonesia</a> maupun bila masih ada yang kurang jelas tentu segala lapisan masyarakat Indonesia berikut seluruh anggota-anggota yang berada di luar negeri pun boleh berdiskusi belajar bersama di <a href="http://groups.yahoo.com/groups/id-ruby">milis ID Ruby</a>.</p>
<p>Baiklah, kita mulai saja. Pertama buka Konsole nya (Kalau Linux), buka Terminalnya (Kalau Mac OS X), buka cmd (klik Start , klik run , ketik cmd , tekan enter &#124; kalau Windows).</p>
<p>Masuklah ke direktori tempat belajar favorit Anda, lalu ketiklah perintah mesra ini:</p>
<p><!--more--></p>
<p><strong>rails countries</strong></p>
<p>Seperti biasa, <strong>selalu tekan enter setelah perintah apa pun juga di komputer ya</strong>.</p>
<p>Kemudian masuk ke direktori countries ataupun nama project yang baru Anda beri nama tadi.</p>
<p><strong>cd countries</strong></p>
<p>Sampai sini Anda bisa periksa dengan perintah <strong>script/about</strong> (bila Anda memakai windows, selalu sertakan <strong>ruby script/about</strong>) saat ini saya sedang memakai gem terbaru, ruby versi 1.8.6 patch ke 111, dan rails 1.2.2 dari gem.</p>
<p>Saya selalu terbiasa berlatih diri dan mengantisipasi teknologi baru dengan menggunakan rails edge, caranya sebagai berikut (ya, Anda ikuti juga ya, prinsipnya semua gampang, tidak ada yang tidak bisa, yang ada, adalah, tidak mau):</p>
<p><strong>rake rails:freeze:edge</strong></p>
<p>Kemudian dari situ Anda tunggulah sebentar, boleh minum minum dulu boleh makan makan dulu sembari menunggu rails versi terbaru banget ini selesai didownload dan dipasangkan otomatis di direktori countries Anda itu. Lama tidaknya bergantung dengan kecepatan koneksi Internet yang Anda punya tentunya.</p>
<p>Sambil nunggu freezing kalo lama, sambil dengar/nonton <a href="http://en.wikipedia.org/wiki/Toxic_(song)">lagu toxic Britney</a> asik juga sambil koding (<a href="http://video.google.com/videoplay?docid=6922360651051072679&#38;q=toxic+britney+spears+site%3Avideo.google.com&#38;total=94&#38;start=0&#38;num=10&#38;so=3&#38;type=search&#38;plindex=4">click for its source</a>). yup, along with its jap translation for friends who also like jap like me. thanks to someone who uploaded it on Google! Domo arigato, omoshiroi na kore.</p>
<p><span style='text-align:center;display:block;'><object width='400' height='330' type='application/x-shockwave-flash' data='http://video.google.com/googleplayer.swf?docId=6922360651051072679'><param name='allowScriptAccess' value='never' /><param name='movie' value='http://video.google.com/googleplayer.swf?docId=6922360651051072679'/><param name='quality' value='best'/><param name='bgcolor' value='#ffffff' /><param name='scale' value='noScale' /><param name='wmode' value='window'/></object></span> </p>
<p>And <a href="http://video.google.com/videoplay?docid=-4280971641749318438&#38;q=numb+linkin+park+site%3Avideo.google.com&#38;total=240&#38;start=0&#38;num=10&#38;so=3&#38;type=search&#38;plindex=1">this one ((AMV) Naruto &#8211; Linking Park &#8211; Numb &#8211; Neji &#38; Hinata) thanks to someone who uploaded it on Google! Merci.. / iya, taunya baru merci doang -_-</a></p>
<p><span style='text-align:center;display:block;'><object width='400' height='330' type='application/x-shockwave-flash' data='http://video.google.com/googleplayer.swf?docId=-4280971641749318438'><param name='allowScriptAccess' value='never' /><param name='movie' value='http://video.google.com/googleplayer.swf?docId=-4280971641749318438'/><param name='quality' value='best'/><param name='bgcolor' value='#ffffff' /><param name='scale' value='noScale' /><param name='wmode' value='window'/></object></span></p>
<p><span style='text-align:center;display:block;'><object width='400' height='330' type='application/x-shockwave-flash' data='http://video.google.com/googleplayer.swf?docId=9104250362143427279'><param name='allowScriptAccess' value='never' /><param name='movie' value='http://video.google.com/googleplayer.swf?docId=9104250362143427279'/><param name='quality' value='best'/><param name='bgcolor' value='#ffffff' /><param name='scale' value='noScale' /><param name='wmode' value='window'/></object></span></p>
<p>Kemudian bila sudah, selalu pasang <a href="http://rspec.info">rspec</a>. Caranya:</p>
<p><strong>script/plugin source svn://rubyforge.org/var/svn/rspec/trunk/</strong></p>
<p><strong>script/plugin install rspec</strong></p>
<p><strong>script/plugin install rspec_on_rails</strong></p>
<p>Awas, sekali lagi, saya disini tidak akan membahas apa dan bagaimana itu rspec, pokoknya kalau tidak jelas dengan rspec ini bisa langsung tanyakan dan belajar langsung bersama teman-temannya juga yang sama-sama sedang belajar di milis <a href="http://groups.yahoo.com/groups/id-ruby">ID Ruby</a>.</p>
<p>Oke. Semua plugin yang biasa saya pakai sekarang sudah ada. Tinggal kita pakai sekarang:</p>
<p><strong>script/generate rspec</strong></p>
<p>Ya, sudah selesai ya, kalau belum atau ada yang salah-salah ada yang error jangan malu bertanya ya, malu bertanya sesat di jalan.</p>
<p>Komputernya sudah berasap asap belum? Sepertinya ada yang kelupaan, apa coba? </p>
<p>svn? Nggak&#8230; Kita pakai git aja <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Caranya gouampang</p>
<p><strong>git init</strong></p>
<p>enter</p>
<p>Awas, kalau dapat error bilang, malu bertanya ya tidak sampai sampai tujuan atau bisa juga sampai tujuan tapi berkelok-kelok sementara ada yang sampai tujuan hanya dalam kurun waktu kurang dari sekejap mata.</p>
<p>Lanjut, ketik lagi:</p>
<p><strong>vim .gitignore</strong></p>
<p>lalu di dalam editor vim tercinta itu ketikkan makhluk makhluk yang ingin dicuekin sebagai berikut:</p>
<p>(sebelum mengetik di vim caranya tekan huruf &#8216;i&#8217; tanpa tanda petik)</p>
<pre>
db/schema.rb
db/*.sqlite3
config/database.template.yml
tmp/*
log/*
public/photos/*
vendor/*
</pre>
<p>cara keluar dari vim ketik</p>
<p><strong> <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' /> </strong> (atau kalau dibaca : &#8216;titik dua&#8217; lalu tekan huruf &#8216;x&#8217;)</p>
<p>sudah. </p>
<p>Kita lanjut</p>
<p>Sekarang setelah diinisiasi, kita masukkan file file project nya ke repo git lokal kita.</p>
<p><strong>git add .</strong></p>
<p>iya, sekarang tinggal kita commit</p>
<p><strong>gca</strong></p>
<p>lalu di dalam editor tercinta Anda itu, ketik </p>
<p><strong>commit pertama!!!</strong></p>
<p>oops, kalau Anda dapat error gara-gara <strong>gca</strong>, ya berarti belum pasang alias di bash Anda. Caranya ya pakai cara panjang saja dengan perintah <strong>git commit -a -m &#8220;commit pertama!!!!&#8221;</strong></p>
<p>Bila sudah. SELAMAT! Anda telah sukses punya repositori lokal git <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Silakan dilanjut untuk selalu testing testing ya untuk kemudian koding.</p>
<p>Ketikkan perintah ini untuk membuatkan kerangka kerja yang akan dipakai untuk model country:</p>
<p><strong>script/generate rspec_model country name:string special:boolean</strong></p>
<p>Kemudian perintah berikut ini untuk otomatis membuatkan tabel countries sesuai dari kerangka kerja yang barusan saja kita berikan di perintah ruby sebelumnya tadi:</p>
<p><strong>rake db:migrate &#8211;trace</strong></p>
<p>duh jangan merinding atau takut macam-macam, ini bukan film suster ngesot ataupun pemblokiran sumber daya sumber daya penting di Indonesia oleh perampok perampok yang insyaf disaat mereka menghembuskan nafas terakhirnya, tapi sengaja membiasakan agar terbiasa dengan pesan-pesan cinta dari rake secara khusus, dan dari ruby secara umum.</p>
<p>Lanjut, kalau sudah boleh Anda periksa status database schema Anda dengan perintah berikut:</p>
<p><strong>script/about</strong></p>
<p>atau kalau mau lebih spesifik caranya dengan perintah sebagai berikut:</p>
<p><strong>rake db:version</strong></p>
<p>Kalau mau intip intip dulu boleh:</p>
<p><strong>ls spec/models</strong></p>
<p><strong>cat spec/models/country_spec.rb</strong></p>
<p>oke, saatnya kita memanggil editor textmate tercinta itu. Cukup ketikkan:</p>
<p><strong>e</strong></p>
<p>Awas, itu shortcut di laptop saya sendiri [-( triknya itu cuma alias aja dari mate kemudian direktori apa yang diperlukan untuk dibuka, supaya tetap ringan (walau biar dibuka semua juga ringan kok, ini karena alasan narsis pribadi penulis saja)</p>
<p>ih</p>
<p>Ada yang kelupaan lagi ya? Ada!</p>
<p><strong>autotest</strong></p>
<p>Nah kalau di background jalan terus autotestnya baru boleh kita balik lagi ke textmate ya, buat yang nggak pakai mac, ya bisa pakai alternatif lain, misalkan radrails ini sih saya taunya ketika zamannya saya dulu belajar rails sih, kalau yang sekarang sedang hot saya sudah kurang mengikuti berhubung saya memang cuma pakai tiga editor aja (ViM, Emacs sama TextMate / disesuaikan mood sama kebutuhan sama kemampuan juga sih). </p>
<p>Nah sekarang kita mau ngapain nih? </p>
<p>Lha ini mbikin tutorial kok pakai nanya-nanya? mungkin gitu kata pengamat yang ingin meralat saya karena perhatian yang sangat. Bukan ...... ini cuma ingin membiasakan pembaca yang memang sedang belajar saat ini untuk berpikir lurus, ehm, bukan berpikir berkelok-kelok dan tersesat.</p>
<p>Berpikir test dulu, baru kemudian codes!</p>
<p>Kalau berpikir test, pasti berpikir tentang requirement spesifikasi apa yang diinginkan bisa berjalan di program.</p>
<p>AHA!! Anda ingin kita bikin tabel countries ini harus punya nama! Kan nggak ada pak, negara tanpa nama, ah itu sih nanti bisa gak habis habis kalau bicara OOT ke politik lagi soal negara tanpa nama tapi mencengkeram sih serahkan pada yang lebih ahli saja daripada penulis yang newbie forever inih. piss. Shi Bubeng Pendekar Tanpa Nama (Nah kalau yang barusan ini asli nama Pendekar Tanpa Nama tulisan Kho Ping Ho, nah kan kita kena virus OOT, huh)</p>
<p>Ayo fokus, kembali lagi ke topik...</p>
<p>Jadi kita akan bikin spesifikasi negara harus punya nama!</p>
<p>Ah dari tadi bicara <strong><font color="red">spesifikasi spesifikasi spesifikasi</font></strong> terus, ayo dong diimplementasikan coding lagi jangan banyak bacot mulu' ... lha, ini supaya terbiasa, kalau mengigau <strong><font color="red">spesifikasi spesifikasi spesifikasi</font></strong> di ruby apa rubinius .... aduuh jangan OOT ke rubinius dulu dong, fokus dong fokus... baru belajar neh! (hajar yang nghajar mainan mulu') langsung ingatnya <strong><font color="red">spec spec spec</font></strong> .... iya, pakainya <a href="http://rspec.info">rspec</a> !</p>
<p>caranya:</p>
<pre>
require File.dirname(__FILE__) + '/../spec_helper'

describe Country do
  before(:each) do
    @country = Country.new
  end

  it "should require a name field" do
    @country.save.should_not be_true
  end
end
</pre>
<p>iya, jadi yang asalnya should be valid itu Anda hapus saja ya. Ganti sama yang Anda perlukan aja. Anda mungkin bertanya, lho kok nggak ada fixture ? Lha memang karena kita tidak butuh.</p>
<p>Sambil simpan file <strong>spec/models/country_spec.rb</strong> tsb Anda boleh sambil intip gerakan gerakan bawah tanah hacker hacker di konsole/terminal Anda (haha ini hanya untuk mendramatisir saja apa apa yang berderau di panggung jengking teruk sangat itu, belajar kalau monoton itu itu saja kurang masuk, malah tidur, kalau ini, kalau pusing, takut tanya sama mas arie, ya alamat dikasih selamat kebingungan sendiri, salah sendiri sudah ditawari tanya lagi kalau masih bingung setelah baca masih sungkan sungkan gak pede mau tanya doang).</p>
<p>ya <strong>autotest</strong> di balik layar Anda itu bergerak gerak menandakan ada yang tidak benar, ya tentu saja, karena memang kita baru menuliskan <strong><font color="red">spesifikasi spesifikasi</font></strong> yang menjadi <strong><font color="red">requirement/kebutuhan</font></strong> si jelita yang ingin dibikinkan oleh Anda sebagai jockey, ehm (ngelirik yang mahasiswa ahyo hari gini nyontek? ama joki?) -_-</p>
<p>Argh sekarang kita lanjut implementasikan satu baris kode validasi harus ada itu tadi. Harus ada apa? Nah lo barusan dibahas udah lupa lagi ... kebanyakan OOT kali neh .. ya harus ada nama buat negara .</p>
<p>ini copy paste dari file <strong>app/models/country.rb</strong></p>
<pre>
class Country &#60; ActiveRecord::Base
  validates_presence_of :name
end
</pre>
<p>Iya, pada kenyataannya Anda hanya butuh menuliskan satu baris validates tersebut saja, ini sengaja saya kopi kan semua supaya Anda yang baru belajar jangan ragu-ragu atau takut salah, karena ragu-ragu dan takut salah itu adalah pangkal dari kegagalan, bila ingin maju dan sukses, harus berpikir positif, maju terusss, pantang mundurrr, jatuh bangkit jatuh bangkit, itu biasa... merdeka!</p>
<p>Nah sembari Anda bergemuruh akan semangat kemerdekaan, jantung Anda pun berdegup ingin menjentik keindahan warna hijau pertana sukses rspec yang ditampakkan oleh autotest yang berjalan di balik layar itu (hidup hacker indonesia!)  Lho? -_-</p>
<p>Oke, sampai disini ada yang ingin ditanyakan dulu nggak?</p>
<p>pokoknya kalau gathering ID Ruby kalo ada saya nggak boleh pasif jadi pendengar setia, harus aktif, jadi tukang protes apalagi kalau bisa menambahkan, pasti bakal disuka sama terutama yang sudah sepah sepah dan jarang turun gunung itu.</p>
<p>Bangsa Indonesia harus belajar untuk berpikiran terbuka, optimis, maju, terus jangan dibiasakan selalu disuapi, dijajah, hingga terbiasa ditarik ditali lubang hidung ibarat kerbau kemanapun kehendak "angin" bertiup. Bangkit Indonesia, berlari mencapai visi hakiki bukan retorika sesat! (Ih, ini paragraf hanya untuk konsumsi diri pribadi Arie saja ini buat bahan introspeksi kayaknya lumayan juga, hmm...) biasa.. belagak bijak -_-</p>
<p>"Pak! Tanya! Kalo saya tanya, nanti mas Arie marah gak?", tanya Sitorus.</p>
<p>Saya: "Ya kalau soal rails yang dibahas tadi ngapain marah Rus... Kan katanya kalau sering marah cepat tua."</p>
<p>...............................................................</p>
<p>Ya sudah titik titik panjang diatas mewakili diskusi yang lagi belajar gitu di kos kos di warung warung di sekolah sekolah di kantin kantin di mana pun teman-teman pemula rails ini sedang belajar dan bercengkerama berdiskusi membahas solusi guna mencapai pencerahan yang ingin didapat.</p>
<p>Ta' lere' wae soko kene.</p>
<p>Lanjut, setelah model sudah lewat kita jamah, sekarang kita mulai menggauli controller. Seperti biasa, kita tentukan dulu lagi <strong><font color="red">spesifikasi spesifikasi spesifikasi</font></strong> apa aja yang ingin dibikin.... Hmmm... coba dipikir-pikir dulu.</p>
<p>Perlu ada :</p>
<ol>
<li>Listing Countries atau Daftar Negara-Negara</li>
<li>Form buat simpan data</li>
<li>Proses penyimpanan data dan melempar alih serta pemberi status apakah sukses atau gagal</li>
</ol>
<p>Nah dari sana, kami belajar untuk berpikir resource atau sumber daya apa yang dibutuhkan?</p>
<p>Bila diterjemahkan dengan Rails dan resource maka jadinya begini:</p>
<ol>
<li>GET /countries</li>
<li>GET /countries/new</li>
<li>POST /countries</li>
</ol>
<p>Jadi langsung saja kita menerkam mangsa kita satu ini yaitu file <strong>spec/controllers/countries_controller_spec.rb</strong></p>
<p>Pada mulanya:</p>
<pre>
require File.dirname(__FILE__) + '/../spec_helper'

describe CountriesController do

  ##
  # GET /countries

  describe "GET 'index'" do
  end # describe "GET 'index'"

  ##
  # GET /

  describe "GET 'new'" do
  end # describe "GET 'new'"

  ##
  # POST /countries

  describe "GET 'create'" do
  end # describe "GET 'create'"
end
</pre>
<p>Kemudian simpan, Bim salabim.... Byur Byur.... Ijo... ijo.... ijo.... (Tanda rspec sukses) Nah ini bukan menganjurkan praktek perdukunan, kami hanya menganjurkan yang positif saja, maksudnya kalau yang lagi belajar termasuk programmer yang nggak suka ato jarang mandi, jangan lupa mandi dulu sana!</p>
<p>Buat yang bukan programmer baca ini, jangan ketawa atau tersinggung lho, emang betul tu ada lumayan lho yang kelakuan saking gak mau pindah meninggalkan komputernya sampai gak mau bangkit dari tempat semedinya hanya untuk mandi sebentar.</p>
<p>Sudah OOT jangan kelamaan, ini tulisan jadi melorot nanti -_- terang aja tadi ijo soalnya memang belum ditulis apa-apa specnya. itu baru kerangka.</p>
<p>Sekarang coba kita mulai isi:</p>
<p>....</p>
<p>Setelah 1/2 detik penulis berpikir barusan, tahap demi tahap copy paste dicancel karena watak penulis yang gak sabaran, jadi langsung di copy paste kan keseluruhan isi file spec, kemudian juga seluruh isi file controller, bila yang ingin bertanya lebih lanjut, bisa didiskusikan kalau memang bertemu dengan Arie sendiri ataupun boleh lewat komentar atau lewat milis terserah.</p>
<pre>
require File.dirname(__FILE__) + '/../spec_helper'

describe CountriesController do

  ##
  # GET /countries

  describe "GET 'index'" do
    before do
      @country   = mock_model(Country)
      @countries = [ @country ]
      Country.stub!(:all).and_return(@countries)
    end

    it &#8220;should render template index&#8221; do
      load_page
      response.should render_template(:index)
    end

    it &#8220;should assign a listing countries&#8221; do
      Country.should_receive(:all).and_return(@countries)
      load_page
    end

    it &#8220;should route for GET /countries&#8221; do
      route_for(:controller =&#62; &#8220;countries&#8221;, :action =&#62; &#8220;index&#8221;).should
        be(&#8220;/countries&#8221;)
    end

    def load_page(params={})
      defaults = {}
      get :index, defaults.merge!(params)
    end
  end # describe &#8220;GET &#8216;index&#8217;&#8221;

  ##
  # GET /

  describe &#8220;GET &#8216;new&#8217;&#8221; do
    it &#8220;should render template new&#8221; do
      load_page
      response.should render_template(:new)
    end

    it &#8220;should route for GET /countries/new&#8221; do
      route_for(:controller =&#62; &#8220;countries&#8221;, :action =&#62; &#8220;new&#8221;).should
        be(&#8220;/countries/new&#8221;)
    end

    def load_page(params={})
      defaults = {}
      get :new, defaults.merge!(params)
    end
  end # describe &#8220;GET &#8216;new&#8217;&#8221;

  ##
  # POST /countries

  describe &#8220;GET &#8216;create&#8217;&#8221; do
    before do
      @params = [
                  { "name" =&#62; "Indonesia" },
                  { "name" =&#62; "Malaysia" },
                  { "name" =&#62; "Filipina" },
                ]
      @country = mock_model(Country)
      Country.stub!(:create!).and_return(true)
    end

    it &#8220;should directly create! (set and save) all countries ready to save&#8221; do
      Country.should_receive(:create!).with(@params).once.and_return(true)
      load_page
    end

    it &#8220;should assign a flash notice and redirect to index upon success&#8221; do
      load_page
      flash[:notice].should_not be_blank
      response.should redirect_to(countries_url)
    end

    it &#8220;should render back template new upon failure&#8221; do
      @country.errors.stub!(:full_messages).and_return([])
      Country.should_receive(:create!).and_raise(ActiveRecord::RecordInvalid.
                                                   new(@country))
      load_page
      response.should render_template(:new)
    end

    it &#8220;should route for POST /countries&#8221; do
      route_for(:controller =&#62; &#8220;countries&#8221;, :action =&#62; &#8220;create&#8221;).should
        be(&#8220;/countries&#8221;)
    end

    def load_page(params={})
      defaults = { :country =&#62; @params }
      post :create, defaults.merge!(params)
    end
  end # describe &#8220;GET &#8216;create&#8217;&#8221;
end
</pre>
<p>Kemudian file controllernya:</p>
<pre>
class CountriesController &#60; ApplicationController

  ##
  # GET /countries/new

  def new
  end

  ##
  # POST /countries

  def create
    Country.create!(params[:country])
  rescue ActiveRecord::RecordInvalid
    render :action =&#62; :new
  else
    flash[:notice] = "Successfully saved!"
    redirect_to countries_url
  end

end
</pre>
<p>Hm, kemudian sekarang spec view-nya new:</p>
<pre>
require File.dirname(__FILE__) + '/../../spec_helper'

describe "/countries/new" do
  it "should display a title New Countries" do
    render 'countries/new'
    response.should have_tag("h1", "New Countries")
  end

  it "should display a form to submit multiple new countries" do
    render 'countries/new'
    response.should have_tag("form[action=?][method=post]", countries_path) do
      20.times do &#124;i&#124;
        with_tag("input[name=?]", "country[][name]")
      end
      with_tag("input[type=submit]")
    end
  end
end
</pre>
<p>Anda Capek nyalin ngetiknya? Kayaknya saya yang sekarang sudah mulai mengantuk setelah dinina bobokan dengan posting blog saya kali ini ... uh. (Lama gak dipijit / pegel2x huhuhu)</p>
<p>Dan ini view new nya. <strong>app/views/countries/new.html.erb</strong></p>
<pre>
&#60;h1&#62;New Countries&#60;/h1&#62;

&#60;%= error_messages_for :country %&#62;

&#60;% form_tag "/countries", :method =&#62; :post do %&#62;
	&#60;ol&#62;
		&#60;% 20.times do &#124;i&#124; %&#62;
			&#60;li&#62;
				Name :
				&#60;%= text_field_tag 'country[][name]' %&#62;
			&#60;/li&#62;
		&#60;% end %&#62;
	&#60;/ol&#62;
	&#60;p&#62;
		&#60;%= submit_tag "Save!" %&#62;
	&#60;/p&#62;
&#60;% end %&#62;
</pre>
<p>Ini sekarang spec viewnya index</p>
<pre>
require File.dirname(__FILE__) + '/../../spec_helper'

describe "/countries/index" do
  before do
    @country = mock_model(Country,
      :name =&#62; "Indonesia")
    @countries = [ @country ]
    assigns[:countries] = @countries
  end

  it "should display a title Listing Countries" do
    render 'countries/index'
    response.should have_tag("h1", "Listing Countries")
  end

  it "should list countries" do
    render 'countries/index'
    response.should have_tag("li", @country.name)
  end

end
</pre>
<p>Dan ini isi dari codes viewnya index <strong>app/views/countries/index.htmlerb</strong></p>
<pre>
&#60;h1&#62;Listing Countries&#60;/h1&#62;

&#60;ol&#62;
	&#60;% @countries.each do &#124;country&#124; %&#62;
		&#60;li&#62;&#60;%= country.name %&#62;&#60;/li&#62;
	&#60;% end %&#62;
&#60;/ol&#62;
</pre>
<p>Lho lho lho? Anda jadi cemberut gitu tadi pada ngikutin dengar sabar postingan ini ngeliat saya ngantuk baru bisa akan tidur? Mustinya ikut senang dong, daripada saya nggak bisa tidur tidur hayo -_- Rasanya nggak enak lho kalo mo tidur musti macem macem dulu...</p>
<p>"Pak Arie! Dari tadi saya selalu lihat code code menakutkan dan konsole/terminal hacker itu pak, kapan saya boleh pegang mouse pak? kapan saya boleh tes di browser langsung untuk melihat apakah aplikasi saya bisa dipakai dan berjalan atau belum", Sitorus protes.</p>
<p>Saya jawab, "Oh iya, ya silakan, tinggal Anda ketik <strong>script/console</strong> lalu buka browser Anda, ketik <strong>localhost:3000/countries/new</strong> . Nah sudah disana Anda tinggal ketik."</p>
<p>Udah saya mau tidur dulu.</p>
<p>ps. Buat para sesepuh penasihat Arie yang sangat mendukung Arie menulis dengan sangat sangat sangat sangat sangat....... dimohon masukannya dan obatnya agar Arie bisa menulis sampai selesai secara step by step (request, tutorial juga, jangan langsung satu malam sekali belajar tapi abis gitu langsung sakit masuk angin trus mencret mencret kalo itu mah bukannya belajar tapi penyiksaan tuh, tapi learning by doing satu per satu yang penuh kasih sayang, please)</p>
<p>ps. Buat yang benar-benar sedang belajar rails, kalau ada kata-kata yang kurang berkenan, kami mohon maaf, itu semua semata-mata hanyalah ilusi seorang gembel sebelum tidur.</p>
<p>GLODAK!</p>
<p>Baru saja kepalaku terantuk ke dinding ! lupa commit dulu git nya. Ayo git, kita commit .. ah mau nonton rake spec dulu ya, boleh:</p>
<pre>
m:spike_multiple_array_form_save arie$ rake spec
(in /Users/arie/spikes/spike_multiple_array_form_save)
...............

Finished in 0.340209 seconds

15 examples, 0 failures
m:spike_multiple_array_form_save arie$ rake stats
(in /Users/arie/spikes/spike_multiple_array_form_save)
+----------------------+-------+-------+---------+---------+-----+-------+
&#124; Name                 &#124; Lines &#124;   LOC &#124; Classes &#124; Methods &#124; M/C &#124; LOC/M &#124;
+----------------------+-------+-------+---------+---------+-----+-------+
&#124; Controllers          &#124;    38 &#124;    19 &#124;       2 &#124;       3 &#124;   1 &#124;     4 &#124;
&#124; Helpers              &#124;     5 &#124;     4 &#124;       0 &#124;       0 &#124;   0 &#124;     0 &#124;
&#124; Models               &#124;     3 &#124;     3 &#124;       1 &#124;       0 &#124;   0 &#124;     0 &#124;
&#124; Libraries            &#124;     0 &#124;     0 &#124;       0 &#124;       0 &#124;   0 &#124;     0 &#124;
&#124; Model specs          &#124;    11 &#124;     9 &#124;       0 &#124;       0 &#124;   0 &#124;     0 &#124;
&#124; View specs           &#124;    39 &#124;    33 &#124;       0 &#124;       0 &#124;   0 &#124;     0 &#124;
&#124; Controller specs     &#124;    99 &#124;    75 &#124;       0 &#124;       3 &#124;   0 &#124;    23 &#124;
&#124; Helper specs         &#124;    11 &#124;     7 &#124;       0 &#124;       0 &#124;   0 &#124;     0 &#124;
+----------------------+-------+-------+---------+---------+-----+-------+
&#124; Total                &#124;   206 &#124;   150 &#124;       3 &#124;       6 &#124;   2 &#124;    23 &#124;
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 26     Test LOC: 124     Code to Test Ratio: 1:4.8

m:spike_multiple_array_form_save arie$
</pre>
<p>Ya sudah ya sudah sekarang betulan mo tidurrr</p>
<p><strong>git commit -a -m "listing countries and adding multiple countries have been added"</strong></p>
<p>ini source code nya ada di laptop ini, nanti kalo dah nggak ngantuk akan saya update buat taroh dimana gitu akan saya update lagi, ah mulai ngaco nih ampe gw nulis sambil mata penuh air. udah oyasumi.</p>
<p>tut.. tuing.. tuing. .. zzzzzzzzzz</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Catatan Acak Arie Gado Gado]]></title>
<link>http://ariekusumaatmaja.wordpress.com/2008/03/07/catatan-acak-arie-gado-gado/</link>
<pubDate>Fri, 07 Mar 2008 09:52:29 +0000</pubDate>
<dc:creator>Arie Kusuma Atmaja</dc:creator>
<guid>http://ariekusumaatmaja.wordpress.com/2008/03/07/catatan-acak-arie-gado-gado/</guid>
<description><![CDATA[[vim] Why I emphasize &#8220;know your editor well, don&#8217;t just use it because of nothing or po]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>[vim] Why I emphasize &#8220;know your editor well, don&#8217;t just use it because of nothing or popularity&#8221;, cos once we &#8220;know&#8221; our editor, it can increase productivity.</p>
<p>The first long one gives me nice status bar, but only if I :split my vim. (I always use :spl and :vspl, ex. my code is at the top and the rspec code at the bottom vim, I probably will do :! to execute command automatically from ViM [Lazy to move around again if I'm already inside ViM])</p>
<pre>
set statusline=%F%m%r%h%w\ [FORMAT=%{&#38;ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\[HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L]
set nowrap
set backspace=indent,eol,start
set nu
set history=50		" keep 50 lines of command line history
set ruler		" show the cursor position all the time
set showcmd		" display incomplete commands
set incsearch		" do incremental searching
</pre>
<p>I got codes below  from vimrc examples, so it&#8217;s easy to do :r or just copy paste if I use Textmate/or emacs (anyway). It&#8217;s handy so vim will detect automatically what type of file currently being edited.</p>
<pre>
" Only do this part when compiled with support for autocommands.
if has("autocmd")

  " Enable file type detection.
  " Use the default filetype settings, so that mail gets 'tw' set to 72,
  " 'cindent' is on in C files, etc.
  " Also load indent files, to automatically do language-dependent indenting.
  filetype plugin indent on

  " Put these in an autocmd group, so that we can delete them easily.
  augroup vimrcEx
  au!

  " For all text files set 'textwidth' to 78 characters.
  autocmd FileType text setlocal textwidth=78

  " When editing a file, always jump to the last known cursor position.
  " Don't do it when the position is invalid or when inside an event handler
  " (happens when dropping a file on gvim).
  autocmd BufReadPost *
    \ if line("'\"") &#62; 0 &#38;&#38; line("'\"") &#60;= line("$") &#124;
    \   exe "normal g`\"" &#124;
    \ endif

  augroup END

else

  set autoindent		" always set autoindenting on

endif " has("autocmd")
</pre>
<p>[rubinius] untuk yang sering lupa akan nama-nama dari simbol simbol di bahasa pemrograman apa aja, terutama ruby dalam hal ini, bisa lurking di bin/name_map.rb . BTW kalau di buku buku tertentu di Indonesia &#8220;lucu&#8221; juga itu comparison disebut-sebut operator &#8220;ufo&#8221; (kalau pernah baca satu dari sekian buku perl disana)</p>
<p>[search from many multiple files at once in vim] it&#8217;s just from my feeling. doing shift command f inside textmate or doing grep on bash just feels the same. running grep from terminal as heavy as inside textmate. cmiiw pls (especially with bin/time and/or any benchmarking numerics result), but this one was fast, whoop&#8230;, i don&#8217;t know why </p>
<p><strong>:vimgrep /redirect_to/ /Users/arie/Projects/eee/app/controllers/*.rb</strong></p>
<p>oh we can do <strong>:clist</strong> to display all of our search results, or just <strong>:cnext</strong> or <strong>:cprevious</strong> to know where the result files are.</p>
<p>[more-vim] haha <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />  now what do you need more arie? instead of that textmate shit? oh, (1) <strong>automatic completion</strong> argh i don&#8217;t know yet about this one, i read blog posts from googling around but i still can&#8217;t get it worked beautifully. oh, i got :rub as well, nice, but i don&#8217;t think i really need that advanced feature so i just disable them (yes, including lisp, tcl, perl, python for executing commands inside vim), maybe just later when I can do scripting heavily in vim. (2) <strong>tab</strong> but not to click as i hate mouse, just call in somehow from command would be nice, i once seen this trick somewhere from rails wikibut after i tried to follow that, i couldn&#8217;t get it worked, don&#8217;t know about the progress nowadays, hey anyone has tried that? just share it with me.</p>
<p>[cross-culture] hm blond people who are surrounding me usually say : &#8220;See you&#8221; without looking in the eyes. Oh Malay also usually say &#8220;Thank you, come again&#8221; in Japanese but with &#8220;weird&#8221; expressions <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  in Japanese restaurant (arigatou gozaimasu&#8230; mata). Weird Meaning they do that while cleaning dishes, bringing plates and glasses, walking around without looking at my eyes but it&#8217;s fine (compared to Melbourne people).</p>
<p>[Indonesian Grammar] whenever we want to put &#8220;ing&#8221; after a verb, like blogging, dancing, dating, we just replace that &#8220;ing&#8221; to be &#8220;nge&#8221; appended before the verb, so the result is : ngeblog, ngedance, ngedate, etc</p>
<p>[non-geek yang kuhormati] dia datang, lalu bertanya, gimana caranya supaya gampang ke revision ke-n, dijawab, coba kalau kamu nggak keberatan pake textmate, kamu bisa tinggal tekan control shift a, lalu diotomatiskan di textmate sana. Ditanya lagi, gimana caranya supaya aku bisa download source code programmu supaya aku bisa edit copy write nya. dijawab kamu buka terminal, trus ketik perintah ini svn co svn://alamate/projectname. kukirim ke skype mu ya. dan dia pun berlalu setelah berterima kasih. beuh&#8230; </p>
<p>[amerikana] duh makin banyak aja londo amrik disini, bahasa inggrisku bisa tambah variasi aja nanti nih[f]</p>
<p>[ruby migration] selain data mapper yg main hapus saat rake dm hingga tetap aja satu satu <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />  peraturan nomor 51 lakukan ini lakukan itu, kapan ngeliat migration yang bersih <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>[ruby migration] walau diawali dengan mencoba mereplika bug di localhost dan fine fine terus dan hati makin kesal berbulu bulu gorila tapi tangan ini juga terasa gatal dan berdarah darah arghghghgh kalau kusabar-sabarkan replikasi dari database di culik boleh juga kalo gak sampe puluhan giga satu tabel -_- (pret!) </p>
<p>[ruby migration] (500 records) boom boom boom boom boom! manisnya&#8230; <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  gini nih kalo kekurangan integration testing! Idealisme seorang tukang koding emang sering gak bersesuaian dengan idealisme kenyataan hidup , sidenote makanya dulu dulu salah sendiri kenapa tolol koding bego gitu, coba pakai yang bersih kan gak ngomel2 gini!</p>
<p>[ruby migration] tambah manis! testing 2 environment, satu jebolan server, satu karangan piktip! rghghgh harakiri!</p>
<p>[ruby migration] jutek butek butek!!! ghrlrlrlr&#8230; </p>
<p>[marketing said?] people use facebook, less and less use email??? argh disagree! i know facebook has been increased rapidly, myspace, but I don&#8217;t think it&#8217;ll change people habit using email. Facebook email thing sucks! you know what, it doesn&#8217;t support draft automatically saved like Gmail. Don&#8217;t say this is a crazy technical thing or something like that (I even don&#8217;t start talking about session or any data sent through the net with ajaxy things yet), imagine this scenario, what if I want to write an email draft first i don&#8217;t want to send that draft immediately, i can&#8217;t do that in facebook! write it in my own happy chappy ViM Editor for email is a big no no cos I&#8217;m always online. Oh you hate Gmail because it doesn&#8217;t support things you had in Yahoo Mail? true! Gmail also sucks =)) I even tend to remove my friendster account, but whenever i want to remove it, i cancel it, because i see many indonesian people over there, but i never used friendster email (friendster email bloody suck!) i don&#8217;t use email on facebook unless i&#8217;m forced/like if i forgot my friend&#8217;s email). Ujung-ujungnya ngomel berlanjut: semuanya suck! =)) loncat &#8211; njengking &#8211; rekursif. Seriously, if you still remember about facebook regulation, it really sucks!! links: go to wikipedia search facebook and trace from there!</p>
<p>[textmate shortcut of the day] command alt zero (yes, 0, not O letter) to fold and unfold.</p>
<p>[ruby open id] jadi ceritanya melakukan penelitian ruby open id selama 2 jam? <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />  kata orang terpintar se Indonesia : Gitu aja repot????? tinggal comot dari beast aja udah tinggal pakai =)) Hus! sama sekali jangan percaya! Blogger kan penipu !! Jadi pokoknya kalo yang curhat nulis di blog = penipu. Trus ada kalo lagi jalan-jalan trus bikin catatan perjalanan = penipu. Ada ahli masak bikin tips masakan enak = penipu. Ada orang belajar bareng temen-temennya di blog biar keliatan jatoh bangun sama salah-salahnya dengan polos = penipu. Aiyyou pandainya yang cakap tu jer.</p>
<p>[plugin VS rubygem] matilah kau plugin, hiduplah kau rubygem. Lho jadi kemarin2x baru belajar itu acts_as_authenticated? duh&#8230; jadi sudah jadi restful_authentication gitu ya? jadi kalo dari file column , trus kan acts as trus jadi attachment fu, trus jadi hula hula. Lha kalo konsep ekstensi di radiant kan bagus toh meningkatkan produktifitas, tinggal tempel 1 jam, jadi, kok jadi rubygem sih&#8230; bah jangan percaya blogger penipu!!! sontoloyo! simelekete! (To Non Indonesian who can guess around the context and read Indonesian news, this is what you&#8217;ve got to Indonesian flavour -_-V Indomie &#8230; seleraku )</p>
<p>[man -M .] <strong>man -M . git-fetch</strong> inside git repo / but remember to <strong>git checkout head/man</strong> first. just like when we play around with <strong>git checkout head/html</strong> so git manual will be available locally</p>
<p>[linggis:ecommerce bandel] ngomong2 soal bandel, bandel itu kalo di Engdonesah artinya bandel bu&#8217;li&#8217; (disono orang-orang nyebutnya bundel) -_-</p>
<p>[linggis:dilit] ya bacanya delete jadi dilit (boso jowo: sedilit = sebentar sinonim sama satu vocab lagi gw lupa tadi barusan uda di lidah padahal). sama kayak login kalo di indo sering banyak yang pronounce lojin. </p>
<p>[<strong>ru</strong>by <strong>sh</strong>ell = <a href="http://rush.heroku.com">rush</a>] wah yang kuat sama networking trus sama yang low low sama operating system bagus nih main ginian! daripada &#8220;turun derajat&#8221; dengan bash ato bermain perl oneliner yang gampang banget ditulis dan tak akan pernah ingin dibaca (kaburrr&#8230;.)</p>
<p>[milis] mo nanya, tapi gak tau cara nanyanya. masalahnya tau, tapi nanti kalo ngomong nggak tau cara nyampaikannya. jadi gak jadi nanya. yaah. ada lagi, mo nanya, tapi gak tau judulnya apa, sama nggak tau namanya apa, pokoknya yang dipengenin tuh gini (sambil demokan di komputer), dah itu, gimana caranya dari gitu sampai jadi gitu. jadi gak jadi nanya. yaah. =)) itulah makanya perlu ada ketemuan offline yang gak selalu online, jadi kan bisa belajar bareng.</p>
<p>[wong ayu ngguyu] ne&#8217; wong ayu ngguyu iso ngono yo -_-</p>
<p>[wong ayu bersin] ciii cii.. beuh bersin batuknya wong ayu ngono yo, kapan jadi jeleknya&#8230;</p>
<p>[ngguyune wong jerman] zukh auf gedebag gedebug yang nguing nguing gedebag gedebug kik kik ngak ngak ngak wuh wah wuh wah (hih nggak berenti2x s/d dipijat2 s/d pulang dari toilet s/d duduk nyambung lagi, bah kehabisan oksigen bisa berabe tuh).</p>
<p>[obat sambil koding sambil cegukan] orang finlandia bukan cuma bakat mbikin hengpon nokia tapi ternyata juga bisa ngajarin supaya bisa sembuh dari cigukan =)) kesian kali tu bule ngeliat gw sambil koding sambil cigukan mulu&#8217; udah smbil minum kopi panas masih juga&#8230; dikasitau caranya tarik napas dalam dalam simpan semua nafas itu trus tahan napas. trus keluarkan/hembuskan perlahan2, udah gitu pas gw praktekin sembuh betulan =)) paten ! =)) linggisnya hickup hikup atau apa gitu deh..</p>
<p>[orang bule gak bisa ribut?] bunyi tut! tut! gempar udah =)) naik lift kalo gw begerak, gempar udah! =)) mungkin belum pernah ketemu banjir sama kalo kebakaran rame rame panik atau pas gempa atau pas mati lampu atau pas ada bom atau pas ada bangunan gede jatoh trus kepalanya putus kayak di Jakarta dulu itu, brakkk&#8230; beuh jadi horor gini. sadis sadis bawaan orang indo -_-</p>
<p>[alias method and alias] alias method must be inside a class. alias could be anywhere, i found there 3 difference about them, now i forgot where i read them &#8230; oh peepcode.. but anyway, here&#8217;s my irb copy paste:</p>
<pre>
m:code arie$ irb
&#62;&#62; def foo; 'hi'; end
=&#62; nil
&#62;&#62; alias :bee :foo
=&#62; nil
&#62;&#62; bee
=&#62; "hi"
&#62;&#62; alias_method :new_foo, :foo
NoMethodError: undefined method `alias_method' for main:Object
	from (irb):4
&#62;&#62; Object.respond_to?("alias_method")
=&#62; false
&#62;&#62; Class.respond_to?("alias_method")
=&#62; false
&#62;&#62; class Coba
&#62;&#62; end
=&#62; nil
&#62;&#62; Kernel.respond_to?("alias_method")
=&#62; false
&#62;&#62; class Coba
&#62;&#62;   def foo; 'hi'; end
&#62;&#62;   alias_method :new_one, :foo
&#62;&#62; end
=&#62; Coba
&#62;&#62; c = Coba.new
=&#62; #
&#62;&#62; c.new_one
=&#62; "hi"
&#62;&#62; exit
m:code arie$ 
</pre>
<p>ya awalnya gw ngotot metode-metode yang ada tsb kan berada dalam Object, lha si Object kan mbahnya si Object di Ruby. Tapi tetap, harus berada di dalam class. Kalau baca manual ri tentang alias method merupakan metode dari Module mixin.</p>
<p>[menghargai waktu] kutanya ke bule eropa, apakah orang-orang di eropa berjalan secepat kamu? dijawab, ya, kisaran gw di peringkat 20 lah, bahkan kalo gw jalan sendiri bisa lebih cepat! # Kalau aku mulai berpikir, beuh dasar orang di negara maju gila, aku akan berpikir/introspeksi dengan cara terbalik, hm, sebetulnya mereka yang cepat atau saya yang lambat -_- busssseeeetttt ni dibelakang begerak kayak Flash gitu sih!!!</p>
<p>[trik menghindar dari yang blank soal IT] inilah obrolan di pelosok ndeso sana (yaitu sebuah desa antah barantah yang sangat tidak tepat untuk seorang yang serba dinamis dan ambisius apalagi bila berdasi dan suka terbang merayap di rel kereta, alah) eh, dia itu kamu tau kerjanya apa di Jawa <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  ternyata kuliahnya tu komputer aja <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  tu liat sekarang dia pengangguran. kuliahnya dulu soalnya cuma komputer! </p>
<p>[mud] nggak sabar nunggu libur biar bisa tidur istirahat lagi , capek. mo ngabisin design pattern lagi.</p>
<p>[mud kemis pagi] hu hu hu seneng banget jadi terharu dikasih &#8220;makasih&#8221; ama dia.</p>
<p>[malay grammar = lah] hm so malay english use &#8220;lah&#8221; <strong>a lot</strong></p>
<p>[borokokok capistrano] <strong><em>cap -S stage=production deploy</em></strong> / kalo default cap deploy doang ke staging misalkan.</p>
<p>[ID Ruby] bali.rb sama bandung.rb ada nggak ya -_- bakal koding bareng tari kecak noh. cak cak cak cak. ho.. hoo.. hoo&#8230; cak cak cak cak&#8230; Lumayan kali bareng temen-temen bule koding bareng yak.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Catatan Acak 3, 3 Poin [bash, jargon ruby, gathering id-ruby], 1 Rencana]]></title>
<link>http://ariekusumaatmaja.wordpress.com/2008/02/29/catatan-acak-3-3-poin-bash-jargon-ruby-gathering-id-ruby-1-rencana/</link>
<pubDate>Fri, 29 Feb 2008 04:54:13 +0000</pubDate>
<dc:creator>Arie Kusuma Atmaja</dc:creator>
<guid>http://ariekusumaatmaja.wordpress.com/2008/02/29/catatan-acak-3-3-poin-bash-jargon-ruby-gathering-id-ruby-1-rencana/</guid>
<description><![CDATA[[bash doang] jadi ceritanya baru seneng seneng lagi aktip sama git nih -_- trus di copy kan ini conf]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>[bash doang] jadi ceritanya baru seneng seneng lagi aktip sama git nih -_- trus di copy kan ini config ke .bash_history di /Users/arie di mac, trus kalang kabut pas mo svn commit kok nggak otomatis lagi SVN_EDITOR ada di PATH, argh di mac ingetin aja kalo bash_profile bisa juga ditaroh di .profile.</p>
<pre>
alias gst='git status'
alias gl='git pull'
alias gp='git push'
alias gd='git diff &#124; mate'
alias gc='git commit -v'
alias gca='git commit -v -a'
alias gb='git branch'
alias gba='git branch -a'
</pre>
<p>[ruby singleton jargon] kalo sering lupa sama jargon <strong>class &#60;&#60; self</strong> di Ruby, ingat aja sama banyaknya teknik-teknik metaprogramming yang dipakai di rails seperti with_options(options) trus yield. Walau tentu perbandingan ini terasa sangat jomplang karna praktik advanced di rails (yg kembangannya bisa punya banyak opsi)</p>
<p><a href="http://tech.groups.yahoo.com/group/id-ruby/message/3359">[Id-Ruby Gathering on March 8th, '08] with Jakarta.rb tag for the second time, it&#8217;s the 6th id-ruby gathering in Indonesia. There will be an announcement on Facebook as well. Reminding date was set at Google. Enjoy!</a> UPDATE: <a href="http://rubyurl.com/Gu23">This is the facebook link for this event</a></p>
<p>[This Weekend] sleeping, continue reading design patterns book (again), continue lurking on rubinius spec files, hopefully will join the roll ASAP, just looking at cute cats in midvalley (but still design patterns + rubinius + new peepcode series are more crucial for me!).</p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
