<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="http://feedproxy.google.com/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feedproxy.google.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Berita Ruby</title>
    <link>http://www.ruby-lang.org/id/id/feeds/news.rss/</link>
    <language>id</language>
    <ttl>40</ttl>
    <description>Berita terhangat dari Ruby-Lang.org.</description>
    
    
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feedproxy.google.com/RubyIndonesia" type="application/rss+xml" /><item>
          <title>DoS vulnerability di REXML</title>
          <description>&lt;p&gt;Terdapat DoS vulnerability di library REXML yang digunakan oleh Rails untuk memparse request XML yang datang. Rentan masalah ini biasa disebut sebagai teknik serangan "XML entity explosion" yang bisa digunakan secara remote untuk membuat aplikasi apa saja tidak bisa memparse XML yang sudah disediakan oleh user. Kebanyakan aplikasi Rails rentan dengan serangan ini.&lt;/p&gt;

&lt;h4&gt;Akibat&lt;/h4&gt;

&lt;p&gt;Penyerang dapat melakuka denial of service yang menyebabkan REXML memparse dokumen yang berisikan entitas bersarang rekursif seperti:&lt;/p&gt;

&lt;p&gt;&lt;nomarkdown&gt;&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="char"&gt;?x&lt;/span&gt;&lt;span class="ident"&gt;ml&lt;/span&gt; &lt;span class="ident"&gt;version&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;1.0&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="ident"&gt;encoding&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;UTF-8&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="char"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="constant"&gt;DOCTYPE&lt;/span&gt; &lt;span class="ident"&gt;member&lt;/span&gt; &lt;span class="punct"&gt;[&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="punct"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="constant"&gt;ENTITY&lt;/span&gt; &lt;span class="ident"&gt;a&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&amp;amp;b;&amp;amp;b;&amp;amp;b;&amp;amp;b;&amp;amp;b;&amp;amp;b;&amp;amp;b;&amp;amp;b;&amp;amp;b;&amp;amp;b;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="punct"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="constant"&gt;ENTITY&lt;/span&gt; &lt;span class="ident"&gt;b&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&amp;amp;c;&amp;amp;c;&amp;amp;c;&amp;amp;c;&amp;amp;c;&amp;amp;c;&amp;amp;c;&amp;amp;c;&amp;amp;c;&amp;amp;c;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="punct"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="constant"&gt;ENTITY&lt;/span&gt; &lt;span class="ident"&gt;c&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&amp;amp;d;&amp;amp;d;&amp;amp;d;&amp;amp;d;&amp;amp;d;&amp;amp;d;&amp;amp;d;&amp;amp;d;&amp;amp;d;&amp;amp;d;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="punct"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="constant"&gt;ENTITY&lt;/span&gt; &lt;span class="ident"&gt;d&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&amp;amp;e;&amp;amp;e;&amp;amp;e;&amp;amp;e;&amp;amp;e;&amp;amp;e;&amp;amp;e;&amp;amp;e;&amp;amp;e;&amp;amp;e;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="punct"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="constant"&gt;ENTITY&lt;/span&gt; &lt;span class="ident"&gt;e&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&amp;amp;f;&amp;amp;f;&amp;amp;f;&amp;amp;f;&amp;amp;f;&amp;amp;f;&amp;amp;f;&amp;amp;f;&amp;amp;f;&amp;amp;f;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="punct"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="constant"&gt;ENTITY&lt;/span&gt; &lt;span class="ident"&gt;f&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&amp;amp;g;&amp;amp;g;&amp;amp;g;&amp;amp;g;&amp;amp;g;&amp;amp;g;&amp;amp;g;&amp;amp;g;&amp;amp;g;&amp;amp;g;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="punct"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="constant"&gt;ENTITY&lt;/span&gt; &lt;span class="ident"&gt;g&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;]&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ident"&gt;member&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ident"&gt;a&lt;/span&gt;&lt;span class="punct"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="regex"&gt;member&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/nomarkdown&gt;&lt;/p&gt;

&lt;h4&gt;Versi Vulnerable&lt;/h4&gt;

&lt;h5&gt;seri 1.8&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;1.8.6-p287 dan semua versi sebelumnya&lt;/li&gt;
&lt;li&gt;1.8.7-p72  dan semua versi sebelumnya&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;seri 1.9&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;semua versi&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Solusi&lt;/h4&gt;

&lt;p&gt;Silakan mendownload monkey patch berikut untuk membenahi masalah ini.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.ruby-lang.org/security/20080823rexml/rexml-expansion-fix.rb"&gt;http://www.ruby-lang.org/security/20080823rexml/rexml-expansion-fix.rb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kemudian benahi aplikasi untuk meload rexml-expansion-fix.rb sebelum menggunakan REXML.&lt;/p&gt;

&lt;p&gt;&lt;nomarkdown&gt;&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;rexml-expansion-fix&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;doc&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;REXML&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Document&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;str&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/nomarkdown&gt;&lt;/p&gt;

&lt;p&gt;Kalau Anda memiliki aplikasi Rails, copy file &lt;code&gt;rexml-expansion-fix.rb&lt;/code&gt; ke direktori yang berada di load path (misalkan di &lt;code&gt;RAILS_ROOT/lib/&lt;/code&gt;), dan tambahkan baris-baris kode berikut ini ke &lt;code&gt;config/environment.rb&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;nomarkdown&gt;&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;rexml-expansion-fix&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/nomarkdown&gt;&lt;/p&gt;

&lt;p&gt;Kalau aplikasi Anda menggunakan Rails 2.1 atau lebih baru, Anda bisa dengan mudah mengcopy file &lt;code&gt;rexml-expansion-fix.rb&lt;/code&gt; ke dalam direktori &lt;code&gt;RAILS_ROOT/config/initializers&lt;/code&gt; dan file monkey patch tersebut akan dipanggil dan disertakan secara otomatis.&lt;/p&gt;

&lt;p&gt;Secara default, batas XML entity expansion adalah 10000. Anda bisa menggantinya dengan cara mengubah &lt;code&gt;REXML::Document.entity_expansion_limit&lt;/code&gt;. Misalkan:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;REXML::Document.entity_expansion_limit = 1000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Pembenahan ini akan tersedia sebagai gem dan digunakan di rails versi berikutnya, tetapi pengguna Ruby termasuk aplikasi terkait (seperti Rails) seharusnya mengambil langkah preventif sesegera mungkin untuk membenahi aplikasinya.&lt;/p&gt;

&lt;h4&gt;Kredit&lt;/h4&gt;

&lt;p&gt;Kredit untuk Luka Treiber dan Mitja Kolsek dari ACROS Security yang telah membeberkan rahasia sekuriti ini ke Tim Sekuriti Ruby dan Rails.&lt;/p&gt;

&lt;p&gt;Kredit untuk &lt;a href="http://feeds.feedburner.com/%7Er/RidingRails/%7E3/372559660/dos-vulnerabilities-in-rexml"&gt;Michael Koziarski&lt;/a&gt; dari Tim Utama Rails yang telah membuatkan monkey patch untuk membenahi vulnerability masalah keamanan ini.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.googleadservices.com/~a/2zfLFb0Ju3G5HuUpN0kChoc6xA0/a"&gt;&lt;img src="http://feedads.googleadservices.com/~a/2zfLFb0Ju3G5HuUpN0kChoc6xA0/i" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feedproxy.google.com/~r/RubyIndonesia/~4/G8q182fSIrg" height="1" width="1"/&gt;</description>
          <pubDate>Sat, 23 Aug 2008 15:56:27 GMT</pubDate>
          <guid isPermaLink="false">http://www.ruby-lang.org/id/news/2008/08/23/dos-vulnerability-di-rexml/</guid>
          <link>http://feedproxy.google.com/~r/RubyIndonesia/~3/G8q182fSIrg/</link>
        <feedburner:origLink>http://www.ruby-lang.org/id/news/2008/08/23/dos-vulnerability-di-rexml/</feedburner:origLink></item>
    
        <item>
          <title>Jalinan Apple dan Ruby Semakin Mesra</title>
          <description>&lt;p&gt;Sejak gempar Mac OS X (Leopard) &lt;a href="http://www.rubyinside.com/ruby-and-rails-in-mac-os-x-leopard-633.html"&gt;dirilis tahun lalu beserta dukungan penuh untuk Ruby dan Ruby on Rails&lt;/a&gt; berupa included dengan Sistem Operasi, sepertinya relasi Apple dan berkelebatnya Ruby semakin melaju dengan mesra.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.infoq.com/news/2008/08/apple-ruby-iphoneutil-sproutcore"&gt;Ada artikel di InfoQ yang menggarisbawahi beberapa cara menggunakan Ruby di Apple&lt;/a&gt; yang mungkin Anda lewatkan adalah sebagai berikut:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.apple.com/support/downloads/iphoneconfigurationutility10formacosx.html"&gt;iPhone Configuration Web Utility&lt;/a&gt; - Sebuah tool yang ditulis dengan Ruby on Rails supaya customer enterprise bisa memanage iPhone.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sproutcore.com/"&gt;SproutCore JavaScript framework&lt;/a&gt; - yang didesain untuk aplikasi-aplikasi yang mirip Desktop untuk Web dan digunakan aplikasi baru Apple &lt;a href="http://www.apple.com/mobileme/"&gt;MobileMe&lt;/a&gt;. SproutCore terinstalasi sebagai gem, menggunakan generator yang ditulis dengan Ruby untuk menciptakan resource-resource dan menggunakan &lt;a href="http://merbivore.com/"&gt;Merb&lt;/a&gt; untuk generate karya HTML.&lt;/li&gt;
&lt;li&gt;Proyek &lt;a href="http://www.macruby.org/trac/wiki/MacRuby"&gt;MacRuby&lt;/a&gt; - Apple port Ruby pada runtime Objective-C - yang membuat integrasi Cocoa untuk pengembangan aplikasi Desktop menjadi semakin mudah.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sudah adakah di antara teman-teman di komunitas Ruby yang sudah mencoba bereksperimen dan menggunakan aplikasi web MobileMe dan SproutCore? Bagaimana pendapat Anda? Silakan ikut serta aktif bersuara lewat blog Anda dan pasang link Anda kesini.&lt;/p&gt;

&lt;p&gt;Sumber Tulisan: &lt;a href="http://feeds.feedburner.com/~r/RubyInside/~3/370503168/apple-and-ruby-the-ongoing-relationship-1016.html"&gt;RubyInside. Apple And Ruby: The Ongoing Relationship&lt;/a&gt; diterjemahkan ke Bahasa Indonesia oleh &lt;a href="http://ariekeren.blogdetik.com"&gt;ariekeren&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.googleadservices.com/~a/pz_gB-o_cBwnlY4jOw4-wGsHFw0/a"&gt;&lt;img src="http://feedads.googleadservices.com/~a/pz_gB-o_cBwnlY4jOw4-wGsHFw0/i" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feedproxy.google.com/~r/RubyIndonesia/~4/wxTj4A9X_-s" height="1" width="1"/&gt;</description>
          <pubDate>Thu, 21 Aug 2008 05:54:58 GMT</pubDate>
          <guid isPermaLink="false">http://www.ruby-lang.org/id/news/2008/08/21/jalinan-apple-dan-ruby-semakin-mesra/</guid>
          <link>http://feedproxy.google.com/~r/RubyIndonesia/~3/wxTj4A9X_-s/</link>
        <feedburner:origLink>http://www.ruby-lang.org/id/news/2008/08/21/jalinan-apple-dan-ruby-semakin-mesra/</feedburner:origLink></item>
    
        <item>
          <title>Bandung Ruby on Rails Workshop, 28 - 29 Juli 2008</title>
          <description>&lt;p style="float:right"&gt;&lt;img src="http://farm4.static.flickr.com/3042/2698474457_59da512fed_o.jpg" style="padding-left:8px;" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;Dengan didukung oleh &lt;a href="http://www.inti.co.id"&gt;&lt;span class="caps"&gt;PT INTI&lt;/span&gt; (PT. Industri Telekomunikasi Indonesia (Persero))&lt;/a&gt;, KlariTI (Klaster Industri Telematika Indonesia), &lt;span class="caps"&gt;RICE&lt;/span&gt; (Regional IT Centre of Excellence) Bandung, &lt;a href="http://www.opensuse.or.id/"&gt;OpenSUSE Indonesia&lt;/a&gt;, &lt;a href="http://groups.google.com/group/klub-linux-bandung"&gt;Klub Linux Bandung&lt;/a&gt;, &lt;a href="http://groups.google.com/group/id-ubuntu"&gt;Ubuntu Indonesia&lt;/a&gt;, dan &lt;a href="http://igoscenter.org/"&gt;IGOSCenter&lt;/a&gt;, &lt;a href="http://www.ruby-lang.org/id"&gt;Komunitas Ruby Indonesia&lt;/a&gt; mengadakan workshop Ruby on Rails Fundamental.&lt;/p&gt;


	&lt;p&gt;Tempat : Gedung Pusat Teknologi &lt;span class="caps"&gt;PT INTI&lt;/span&gt; (Persero), Jl. Moh. Toha 77, Bandung&lt;/p&gt;


	&lt;p&gt;Waktu : 28 &amp;#8211; 29 Juli 2008, pukul 09.00 &amp;#8211; 17.00 Waktu Indonesia Barat&lt;/p&gt;


	&lt;p&gt;Pendaftaran : &lt;a href="mailto:railstraining@narayana.co.id"&gt;railstraining@narayana.co.id&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Tidak dipungut biaya, namun tempat sangat terbatas. Jika semua slot sudah terisi, pendaftaran mungkin tetap dibuka bagi yang benar-benar antusias terhadap Ruby on Rails (konfirmasi terlebih dahulu via email di atas). Peserta tambahan tidak mendapat fasilitas (PC, lunch, sertifikat dll.) seperti para pendaftar pertama, tapi kami coba mungkinkan untuk bisa ikut serta menggali ilmu bersama (kami sarankan membawa laptop sendiri).&lt;/p&gt;


	&lt;p&gt;Pelatihan Workshop Ruby on Rails Fundamental ini langsung dibimbing oleh &lt;a href="http://www.linkedin.com/in/ariekeren"&gt;Arie Kusuma Atmaja&lt;/a&gt; bertindak sebagai mentor.&lt;/p&gt;


	&lt;p&gt;Kegiatan workshop ini adalah untuk menjawab &amp;#8220;kurangnya&amp;#8221; kegiatan Ruby Indonesia terutama dalam bentuk kopdar atau pertemuan offline yang melakukan penekanan terutama pada sessions untuk newbies/pemula agar semua &lt;span class="caps"&gt;SDM&lt;/span&gt; Indonesia bisa maju dan tumbuh kembang bersama.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://flickr.com/photos/ariekusumaatmaja/2768754697/"&gt;&lt;img src="http://farm4.static.flickr.com/3222/2768754697_293128f1b7_o.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Publikasi:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://chickenstrip.wordpress.com/2008/07/24/bandung-ruby-on-rails-workshop/"&gt;Blog Diki &amp;#8211; Bandung Ruby on Rails Workshop&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://ariekusumaatmaja.wordpress.com/2008/07/25/bandung-ruby-on-rails-workshop-28-29-juli-2008-review-and-behind-the-screen/"&gt;Blog Arie &amp;#8211; Review and Behind the screen&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://vavai.com/blog/index.php?/archives/789-Workshop-Ruby-on-Rails-di-Bandung.html"&gt;Blog Vavai &amp;#8211; Workshop Ruby on Rails di Bandung&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://adityakircon.blogsome.com/2008/07/25/pelatihan-ruby-on-rails-di-bandung/"&gt;Blog Aditya Kircon &amp;#8211; Pelatihan Ruby on Rails di Bandung&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://planet-bekasi.web.id/index.php?/archives/1587-Workshop-Ruby-on-Rails-di-Bandung.html"&gt;Planet Bekasi &amp;#8211; Workshop Ruby on Rails di Bandung&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.kabarindonesia.com/berita.php?pil=11&amp;#38;dn=20080729025651"&gt;Kabar Indonesia &amp;#8211; Bandung Ruby on Rails Workshop&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://feedads.googleadservices.com/~a/u-2CQWN9do5bJGXGLmTjXMO1KH8/a"&gt;&lt;img src="http://feedads.googleadservices.com/~a/u-2CQWN9do5bJGXGLmTjXMO1KH8/i" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feedproxy.google.com/~r/RubyIndonesia/~4/llTf0GK0p18" height="1" width="1"/&gt;</description>
          <pubDate>Thu, 24 Jul 2008 18:12:10 GMT</pubDate>
          <guid isPermaLink="false">http://www.ruby-lang.org/id/news/2008/07/24/bandung-ruby-on-rails-workshop-28-29-juli-2008/</guid>
          <link>http://feedproxy.google.com/~r/RubyIndonesia/~3/llTf0GK0p18/</link>
        <feedburner:origLink>http://www.ruby-lang.org/id/news/2008/07/24/bandung-ruby-on-rails-workshop-28-29-juli-2008/</feedburner:origLink></item>
    
        <item>
          <title>21 Trik-Trik Ruby</title>
          <description>&lt;p&gt;Sewaktu mengurus Ruby Inside pengurusnya sering melihat banyak sekali code Ruby. Kebanyakan sih sangat bagus, tetapi kadang-kadang kita lupa kalau sebetulnya ada jalan pintas beserta trik-trik Ruby yang bisa digunakan daripada reinvent the wheel (maksudnya: menemukan sesuatu yang sudah ada). Berikut adalah 21 trik-trik Ruby yang beraneka-ragam, mulai dari yang biasa digunakan sehari-hari oleh Ruby Developer berpengalaman maupun juga yang belum banyak ditemukan. Sebelum menulis posting ini sebenarnya Penulis RubyInside bahkan belum dapat ide buat trik yang nomor 2! Pokoknya apapun level Ruby Anda, semoga dengan penyegaran dan pencerahan posting ini di kemudian hari dapat bermanfaat buat Anda di kemudian hari bila menemukan kasus serupa.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;1 &amp;#8211; Cara Cepat Mengekstraksi hasil match regexp&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Cara yang biasa digunakan untuk mengekstrak data dari teks pakai regexp adalah dengan menggunakan metode match. Nah sebetulnya ada shortcut yang bisa dipakai agar proses hidup lebih sejahtera.&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;email&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Fred Bloggs &amp;lt;fred@bloggs.com&amp;gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;email&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;(/&lt;/span&gt;&lt;span class="regex"&gt;&amp;lt;(.*?)&amp;gt;&lt;/span&gt;&lt;span class="punct"&gt;/)[&lt;/span&gt;&lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt;     &lt;span class="comment"&gt;# =&amp;gt; “fred@bloggs.com”&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;email&lt;/span&gt;&lt;span class="punct"&gt;[/&lt;/span&gt;&lt;span class="regex"&gt;&amp;lt;(.*?)&amp;gt;&lt;/span&gt;&lt;span class="punct"&gt;/,&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt;           &lt;span class="comment"&gt;# =&amp;gt; “fred@bloggs.com”&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;email&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;(/&lt;/span&gt;&lt;span class="regex"&gt;(x)&lt;/span&gt;&lt;span class="punct"&gt;/)[&lt;/span&gt;&lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt;         &lt;span class="comment"&gt;# =&amp;gt; NoMethodError [:(]&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;email&lt;/span&gt;&lt;span class="punct"&gt;[/&lt;/span&gt;&lt;span class="regex"&gt;(x)&lt;/span&gt;&lt;span class="punct"&gt;/,&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt;               &lt;span class="comment"&gt;# =&amp;gt; nil&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;email&lt;/span&gt;&lt;span class="punct"&gt;[/&lt;/span&gt;&lt;span class="regex"&gt;([bcd]).*?([fgh])&lt;/span&gt;&lt;span class="punct"&gt;/,&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="comment"&gt;# =&amp;gt; “g”&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;2 &amp;#8211; Shortcut buat Array#join&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Sudah mafhum bagi kebanyakan kita Rubyist bila menggunakan Array#* dengan angka, untuk memproses kali dari besarnya array banyak elemen, tetapi jarang diketahui kalau sebenarnya kita bisa menggunakan Array#* buat string ketimbang memakai Array#join!&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="punct"&gt;%w{&lt;/span&gt;&lt;span class="string"&gt;ariekeren lagi ngetes&lt;/span&gt;&lt;span class="punct"&gt;}&lt;/span&gt; &lt;span class="punct"&gt;*&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;, &lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;          &lt;span class="comment"&gt;# =&amp;gt; &amp;quot;ariekeren, lagi, ngetes&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;h&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;ArieKeren“, :age =&amp;gt; 27 }&lt;br /&gt;h.map { |i| i * &lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt; } * &lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;\&lt;/span&gt;&lt;span class="ident"&gt;n&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;              # =&amp;gt; “age=27&lt;span class="escape"&gt;\n&lt;/span&gt;name=ArieKeren”&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;3 &amp;#8211; Cara Cepat Memformat Angka Desimal&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Memformat angka float ke bentuk yang biasa digunakan untuk harga bisa dicapai dengan sprintf atau bisa juga dengan cara alternatif, yaitu dengan formatting interpolation:&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;duit&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="number"&gt;9.5&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;%.2f&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;%&lt;/span&gt; &lt;span class="ident"&gt;duit&lt;/span&gt; &lt;span class="comment"&gt;# =&amp;gt; “9.50″&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;4 &amp;#8211; Cara Cepat Mengapit Teks&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Teknik formatting interpolation dari nomor ketiga keluar lagi, kali ini adalah bagaimana menyisipkan suatu string ke string yang lain:&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;[%s]&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;%&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;stringnya pindah doang&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="comment"&gt;# =&amp;gt; “[stringnya pindah doang]”&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Anda juga bisa menggunakan elemen-elemen dari array untuk mengganti penempatan string tersebut:&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;x&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;%w{&lt;/span&gt;&lt;span class="string"&gt;p ketemulagi p&lt;/span&gt;&lt;span class="punct"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&amp;lt;%s&amp;gt;%s&amp;lt;/%s&amp;gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;%&lt;/span&gt; &lt;span class="ident"&gt;x&lt;/span&gt; &lt;span class="comment"&gt;# =&amp;gt; “&amp;lt;p&amp;gt;ketemulagi&amp;lt;/p&amp;gt;&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;5 &amp;#8211; Menghapus direktori beserta seluruh isinya&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Jangan sortir ulang dengan menggunakan shell. Ruby punya library file utilities yang nyaman dipakai untuk operasi file seperti menghapus direktori berikut seluruh isinya:&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;fileutils&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;span class="constant"&gt;FileUtils&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;rm_r&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;somedir&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Hati-hati kalau Anda menggunakan cara ini!&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;6 &amp;#8211; Menyatukan dan Memisahkan enumerable&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Tanda bintang juga bisa digunakan untuk menyatukan dan memisahkan enumerable (berfungsi untuk array maupun hash) daripada menggunakan metode flatten. Kita akan langsung lihat dari contoh berikut bicara ini saja biar jelas:&lt;/p&gt;


	&lt;p&gt;Contah dengan Array:&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;a&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;%w{&lt;/span&gt;&lt;span class="string"&gt;a b&lt;/span&gt;&lt;span class="punct"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;b&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;%w{&lt;/span&gt;&lt;span class="string"&gt;c d&lt;/span&gt;&lt;span class="punct"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;[&lt;/span&gt; &lt;span class="ident"&gt;a&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="ident"&gt;b&lt;/span&gt; &lt;span class="punct"&gt;]&lt;/span&gt;   &lt;span class="comment"&gt;# =&amp;gt; [[”a”, “b”, “c”, “d”]]&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;[&lt;/span&gt; &lt;span class="punct"&gt;*&lt;/span&gt;&lt;span class="ident"&gt;a&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="ident"&gt;b&lt;/span&gt; &lt;span class="punct"&gt;]&lt;/span&gt;  &lt;span class="comment"&gt;# =&amp;gt; [”a”, “b”, “c”, “d”]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Contoh dengan Hash:&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;a&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;ArieKeren&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="symbol"&gt;:age&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;27&lt;/span&gt; &lt;span class="punct"&gt;}&lt;/span&gt; &lt;br /&gt;&lt;span class="comment"&gt;# =&amp;gt; {:name=&amp;gt;&amp;quot;ArieKeren&amp;quot;, :age=&amp;gt;27}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="ident"&gt;a&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# =&amp;gt; [{:name=&amp;gt;&amp;quot;ArieKeren&amp;quot;, :age=&amp;gt;27}]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="punct"&gt;[*&lt;/span&gt;&lt;span class="ident"&gt;a&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# =&amp;gt; [[:name, &amp;quot;ArieKeren&amp;quot;], [:age, 27]]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Contoh dengan tangkapan parameter paralel:&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;a&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;%w{&lt;/span&gt;&lt;span class="string"&gt;a b c d e f g h&lt;/span&gt;&lt;span class="punct"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# =&amp;gt; [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot;, &amp;quot;f&amp;quot;, &amp;quot;g&amp;quot;, &amp;quot;h&amp;quot;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ident"&gt;b&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;5&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;6&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# =&amp;gt; [0, 5, 6]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ident"&gt;a&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;values_at&lt;/span&gt;&lt;span class="punct"&gt;(*&lt;/span&gt;&lt;span class="ident"&gt;b&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# =&amp;gt; [&amp;quot;a&amp;quot;, &amp;quot;f&amp;quot;, &amp;quot;g&amp;quot;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;7 &amp;#8211; Persingkat definisi variabel lokal&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Daripada mendefinisikan variabel lokal dengan beragam konten awal (sering hanya berupa hash kosong ataupun array kosong), Anda sebenarnya bisa langsung mendefinisikan variabel lokal &amp;#8220;sekaligus&amp;#8221; ketika operasi sedang berlangsung:&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;z&lt;/span&gt; &lt;span class="punct"&gt;||=&lt;/span&gt; &lt;span class="punct"&gt;[])&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;coba&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;8 &amp;#8211; Penggunaan yang-bukan-string maupun yang-bukan-simbol sebagai hash key&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Sangat jarang kita lihat seseorang menggunakan yang-bukan-string maupun yang-bukan-simbol sebagai hash key. Padahal itu semua bisa dilakukan, dan kadang-kadang berguna (dan, tidak, contoh berikut bukan contoh yang dahsyat):&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;does&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;is&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="constant"&gt;true&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Yes&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="constant"&gt;false&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;No&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="punct"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;does&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="number"&gt;10&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="number"&gt;50&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;br /&gt;&lt;span class="comment"&gt;# =&amp;gt; “No”&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ident"&gt;is&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="number"&gt;10&lt;/span&gt; &lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;5&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# =&amp;gt; “Yes”&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;9 &amp;#8211; Gunakan &amp;#8216;and&amp;#8217; dan &amp;#8216;or&amp;#8217; untuk mengelompokkan operasi satu baris&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Trik ini adalah trik yang biasa dipakai oleh Ruby Developer dengan penuh percaya diri untuk memperpadat, mempersingkat, dan menghilangkan terlalu banyaknya baris-baris kode yang sebetulnya berisikan statement-statement yang pendek-pendek:&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;queue&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;[]&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;%w{&lt;/span&gt;&lt;span class="string"&gt;hello x world&lt;/span&gt;&lt;span class="punct"&gt;}.&lt;/span&gt;&lt;span class="ident"&gt;each&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;word&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="ident"&gt;queue&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="ident"&gt;word&lt;/span&gt; &lt;span class="keyword"&gt;and&lt;/span&gt; &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Added to queue&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="keyword"&gt;unless&lt;/span&gt; &lt;span class="ident"&gt;word&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;length&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;  &lt;span class="number"&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="ident"&gt;queue&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;inspect&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# Output:&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;#   Added to queue&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;#   Added to queue&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;#   [”hello”, “world”]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;10 &amp;#8211; Menentukan eksekusi kode&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Trik berikut merupakan pattern yang biasa digunakan Ruby Developer berpengalaman. Kalau Anda menulis Ruby script yang dapat digunakan sebagai library maupun langsung dari command line, Anda bisa menggunakan trik ini untuk menentukan apakah Anda sedang menjalankan script langsung atau tidak:&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="constant"&gt;__FILE__&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="global"&gt;$0&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;# Do something.. run tests, call a method, etc. We're direct.&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;11 &amp;#8211; Mempercepat assignment sekaligus (mass assignment)&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Mass assignment merupakan trik yang Ruby Developer pelajari dari awal-awal ya, tetapi adalah sesuatu yang amazing dan menyenangkan betapa jarang trik ini digunakan:&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;a&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;b&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;c&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;d&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;4&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Trik ini bisa dipakai di banyak kasus seperti menangkap parameter argumen suatu metode yang berupa array dengan tanda * (bintang) :&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;my_method&lt;/span&gt;&lt;span class="punct"&gt;(*&lt;/span&gt;&lt;span class="ident"&gt;args&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="ident"&gt;a&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;b&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;c&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;d&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;args&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;12 &amp;#8211; Gunakan range daripada perbandingan rumit untuk angka&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Tidak ada lagi kode omong kosong seperti if x &amp;gt; 1000 &amp;#38;&amp;#38; x &amp;lt; 2000.&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;year&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="number"&gt;1972&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;puts&lt;/span&gt;  &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="ident"&gt;year&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;when&lt;/span&gt; &lt;span class="number"&gt;1970&lt;/span&gt;&lt;span class="punct"&gt;..&lt;/span&gt;&lt;span class="number"&gt;1979&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Tujuhpuluhan&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;when&lt;/span&gt; &lt;span class="number"&gt;1980&lt;/span&gt;&lt;span class="punct"&gt;..&lt;/span&gt;&lt;span class="number"&gt;1989&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Delapanpuluhan&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;when&lt;/span&gt; &lt;span class="number"&gt;1990&lt;/span&gt;&lt;span class="punct"&gt;..&lt;/span&gt;&lt;span class="number"&gt;1999&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Sembilanpuluhan&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;13 &amp;#8211; Gunakan Enumeration untuk menghindari kode-kode berulang&lt;/strong&gt;&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="punct"&gt;%w{&lt;/span&gt;&lt;span class="string"&gt;rubygems daemons eventmachine&lt;/span&gt;&lt;span class="punct"&gt;}.&lt;/span&gt;&lt;span class="ident"&gt;each&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;x&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt; &lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="ident"&gt;x&lt;/span&gt; &lt;span class="punct"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;14 &amp;#8211; Operator Ternary&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Trik lain yang biasa dipelajari di awal-awal oleh Ruby Developer tetapi sesuatu yang sebenarnya jarang kelihatan digunakan oleh Ruby Developer berpengalaman adalah operator ternary. Operator ternary bukan hammer, tetapi terkadang bisa membuat banyak hal menjadi singkat dan padat.&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="ident"&gt;x&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt; &lt;span class="punct"&gt;?&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;x adalah sepuluh&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;x bukan sepuluh&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;# Atau.. bisa juga digunakan untuk assignment yang bersandar pada hasil operator ternary&lt;/span&gt;&lt;br /&gt;&lt;span class="constant"&gt;LOG&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;sev_threshold&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;ENVIRONMENT&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="symbol"&gt;:development&lt;/span&gt; &lt;span class="punct"&gt;?&lt;/span&gt; &lt;span class="constant"&gt;Logger&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;DEBUG&lt;/span&gt; &lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="constant"&gt;Logger&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;INFO&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;15 &amp;#8211; Operator Ternary Bersarang (Nested Ternary Operators)&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Trik ini bisa jadi membuat kode menjadi rumit dibaca. Tetapi sebenarnya hanya urusan return obyek saja sama seperti banyak obyek lain di Ruby.&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;qty&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;qty&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt; &lt;span class="punct"&gt;?&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;none&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="ident"&gt;qty&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="punct"&gt;?&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;one&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;many&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# Hanya sebagai ilustrasi saja supaya tidak bingung:&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;qty&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt; &lt;span class="punct"&gt;?&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;none&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;qty&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="punct"&gt;?&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;one&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;many&lt;/span&gt;&lt;span class="punct"&gt;'))&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;16 &amp;#8211; Maksimalkan penggunaan fitur bawaan logis di Ruby&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Ada sering banyak metode yang menggunakan pattern kurang lebih sebagai berikut:&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;is_odd&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;x&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;# Terlalu panjang..&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="ident"&gt;x&lt;/span&gt; &lt;span class="punct"&gt;%&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="constant"&gt;false&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="constant"&gt;true&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Mungkin kita bisa saja menggunakan operator ternary untuk improve?&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;is_odd&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;x&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;# Jangan sekali-sekali menaruh false dan true pada operator ternary!!&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="ident"&gt;x&lt;/span&gt; &lt;span class="punct"&gt;%&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt; &lt;span class="punct"&gt;?&lt;/span&gt; &lt;span class="constant"&gt;false&lt;/span&gt; &lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="constant"&gt;true&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Ya, kode barusan tadi memang lebih pendek, dan saya sering melihat pattern seperti itu, padahal sebenarnya Anda seharusnya bisa selangkah lebih maju dan menyandarkan diri pada hasil respon dari operator comparison Ruby yang berupa true maupun false langsung!&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;is_odd&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;x&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;# Gunakan hasil logis yang sudah disediakan Ruby secara otomstis untuk Anda..&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="ident"&gt;x&lt;/span&gt; &lt;span class="punct"&gt;%&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt; &lt;span class="punct"&gt;!=&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;17 &amp;#8211; Perhatikan seluruh exception backtrace&lt;/strong&gt;&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;do_division_by_zero&lt;/span&gt;&lt;span class="punct"&gt;;&lt;/span&gt; &lt;span class="number"&gt;5&lt;/span&gt; &lt;span class="punct"&gt;/&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="punct"&gt;;&lt;/span&gt; &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;begin&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="ident"&gt;do_division_by_zero&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;rescue&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;exception&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="ident"&gt;exception&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;backtrace&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;18 &amp;#8211; Manfaatkan obyek tunggal &lt;span class="caps"&gt;DAN&lt;/span&gt; array agar dapat dienumerasikan&lt;/strong&gt;&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="punct"&gt;[*&lt;/span&gt;&lt;span class="ident"&gt;items&lt;/span&gt;&lt;span class="punct"&gt;].&lt;/span&gt;&lt;span class="ident"&gt;each&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;item&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;# …&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;19 &amp;#8211; Rescue yang berada dalam blok tidak perlu diapit &amp;#8216;begin&amp;#8217;&lt;/strong&gt;&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;x&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;begin&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;# …&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;rescue&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;# …&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;x&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;# …&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;rescue&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;# …&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;20 &amp;#8211; Komentar format blok&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Di Ruby kita bisa dengan bebas sesuai selera untuk berkomentas di kode dengan pagar ataupun menggunakan blok begin dan  end:&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;x&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;=begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;ini adalah blok komentar&lt;br /&gt;&amp;nbsp;&amp;nbsp;Anda dapat menaruh apa saja yang Anda suka disini!&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;puts “y”&lt;br /&gt;=end&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;z&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;21 &amp;#8211; Rescue satu baris&lt;/strong&gt;&lt;/p&gt;


&lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;h&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="symbol"&gt;:age&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt; &lt;span class="punct"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;h&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt;&lt;span class="punct"&gt;].&lt;/span&gt;&lt;span class="ident"&gt;downcase&lt;/span&gt;                         &lt;span class="comment"&gt;# ERROR&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;h&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt;&lt;span class="punct"&gt;].&lt;/span&gt;&lt;span class="ident"&gt;downcase&lt;/span&gt; &lt;span class="keyword"&gt;rescue&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;No name&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;        &lt;span class="comment"&gt;# =&amp;gt; “No name”&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Jika Anda ingin mem-posting daftar trik-trik Ruby di blog Anda, kirimkan trackback kesini atau berkomentarlah lewat media milis ID Ruby maupun blog Anda, nanti kami akan melink semua posting. Alternatif lain, seperti yang sudah sering didengung-dengungkan di komunitas Ruby Indonesia, Anda dapat menghubungi kami bila Anda mempunyai artikel, tulisan tentang Ruby, maupun trik-trik Ruby untuk kami pasang disini, semua hal seperti komentar, maupun kritik dan hal-hal lain demi kebaikan dan kemajuan kita bersama. Terima kasih.&lt;/p&gt;


	&lt;p&gt;Sumber tulisan dari &lt;a href="http://www.rubyinside.com/21-ruby-tricks-902.html"&gt;RubyInside &amp;#8211; 21 Ruby Tricks You Should Be Using In Your Own Code&lt;/a&gt; dengan penyesuaian seperlunya oleh &lt;a href="http://ariekusumaatmaja.wordpress.com"&gt;ArieKeren&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.googleadservices.com/~a/u5zIvYg3_U_fxedU2utoe8eIog0/a"&gt;&lt;img src="http://feedads.googleadservices.com/~a/u5zIvYg3_U_fxedU2utoe8eIog0/i" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feedproxy.google.com/~r/RubyIndonesia/~4/-x4IWLeRNa8" height="1" width="1"/&gt;</description>
          <pubDate>Wed, 28 May 2008 16:05:39 GMT</pubDate>
          <guid isPermaLink="false">http://www.ruby-lang.org/id/news/2008/05/28/21-trik-trik-ruby/</guid>
          <link>http://feedproxy.google.com/~r/RubyIndonesia/~3/-x4IWLeRNa8/</link>
        <feedburner:origLink>http://www.ruby-lang.org/id/news/2008/05/28/21-trik-trik-ruby/</feedburner:origLink></item>
    
        <item>
          <title>Rubinius On Rails: Rubinius Telah Menjadi Implementasi Ruby Ketiga yang Menjalankan Rails</title>
          <description>&lt;p&gt;&lt;a href="http://twitter.com/evanphx"&gt;Evan Phoenix&lt;/a&gt; telah mengumumkan bahwa proyek &lt;a href="http://rubini.us/"&gt;Rubinius&lt;/a&gt; telah mencapai major milestone: &lt;a href="http://blog.fallingsnow.net/2008/05/17/rails-on-rubinius/"&gt;Rubinius bisa menjalankan Rails!&lt;/a&gt; Ini berarti telah membuat Rubinius menjadi yang ketiga yang telah mengimplementasikan penggabungan rails (setelah &lt;span class="caps"&gt;MRI&lt;/span&gt; dan JRuby) dan tentu akan mengangkat reputasi Rubinius menjadi lebih baik, ini telah menjadi implementasi kunci untuk diperhatikan di masa yang akan datang. Chad Fowler bahkan &lt;a href="http://www.chadfowler.com/2008/5/17/ruby-on-rails-on-rubinius"&gt;memberitakan&lt;/a&gt; bahwa dalam waktu satu tahun kedepan, Rubinius akan digunakan dalam production deployment dan akan segera menjadi implementasi standar Ruby secara de facto.&lt;/p&gt;


	&lt;p&gt;Sekarang kita melihat pada implementasi yang ada pada Microsoft, &lt;a href="http://www.ironruby.net/"&gt;IronRuby&lt;/a&gt;, IronRuby juga boleh jadi akan segera bergabung dengan klub Rails segera.&lt;/p&gt;


	&lt;p&gt;Sumber: &lt;a href="http://www.rubyinside.com/rubinius-rails-897.html"&gt;Rubinius On Rails: Rubinius Becomes 3rd Ruby Implementation to Run Rails&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.googleadservices.com/~a/gTfcxATys_1GpAxjkIBjaotKtG8/a"&gt;&lt;img src="http://feedads.googleadservices.com/~a/gTfcxATys_1GpAxjkIBjaotKtG8/i" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feedproxy.google.com/~r/RubyIndonesia/~4/QuBx8eMcQ0A" height="1" width="1"/&gt;</description>
          <pubDate>Mon, 19 May 2008 16:02:43 GMT</pubDate>
          <guid isPermaLink="false">http://www.ruby-lang.org/id/news/2008/05/19/rubinius-on-rails-rubinius-telah-menjadi-implementasi-ruby-ketiga-yang-menjalankan-rails/</guid>
          <link>http://feedproxy.google.com/~r/RubyIndonesia/~3/QuBx8eMcQ0A/</link>
        <feedburner:origLink>http://www.ruby-lang.org/id/news/2008/05/19/rubinius-on-rails-rubinius-telah-menjadi-implementasi-ruby-ketiga-yang-menjalankan-rails/</feedburner:origLink></item>
    
        <item>
          <title>Merbunity: Komunitas Merb Terus Berkembang Meningkat</title>
          <description>&lt;p&gt;&lt;a href="http://merbunity.com/"&gt;Merbunity&lt;/a&gt; adalah sebuah situs baru yang berisi tentang &amp;#8220;berita, projek dan tutorial&amp;#8221; berhubungan dengan framework Web &lt;a href="http://www.merbivore.com/"&gt;Merb&lt;/a&gt; (alternatif umum untuk meningkatkan &lt;a href="http://www.rubyonrails.com"&gt;Rails&lt;/a&gt;). Ini merupakan langkah awal, tetapi memiliki desain yang bagus, dan memiliki content yang bagus. Merbunity ini dirasakan sedikit tampak seperti Ruby Inside untuk Merb. Kerja bagus! Antara peluncuran isi dan seketika menarik perhatian developer Merb Mac-based, yaitu Dr. Nic Williams’ &lt;a href="http://merbunity.com/news/3"&gt;TextMate bundle for Merb&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Sebenarnya tidak terlalu susah untuk menarik minat penggemar &lt;a href="http://www.merbivore.com/"&gt;Merb&lt;/a&gt;. Pada beberapa bulan lalu banyaknya content luar biasa untuk developer Merb mengalami pertumbuhan yang signifikan. Contoh kunci meliputi &lt;a href="http://wiki.merbivore.com/"&gt;Merb wiki&lt;/a&gt;, &lt;a href="http://merb.4ninjas.org/"&gt;Merb book&lt;/a&gt;, tutorial &lt;a href="http://www.socialface.com/slapp/"&gt;“How to create a chat wall”&lt;/a&gt;, dan juga yang dimiliki Ruby Inside &lt;a href="http://www.rubyinside.com/merb-tutorials-and-resources-716.html"&gt;list of 21 Merb links, tutorials, dan sumber lain&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.googleadservices.com/~a/tO6P85upG-u5ARPutqhb_pglkoY/a"&gt;&lt;img src="http://feedads.googleadservices.com/~a/tO6P85upG-u5ARPutqhb_pglkoY/i" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feedproxy.google.com/~r/RubyIndonesia/~4/ZZOQCVjLkuw" height="1" width="1"/&gt;</description>
          <pubDate>Wed, 14 May 2008 02:37:44 GMT</pubDate>
          <guid isPermaLink="false">http://www.ruby-lang.org/id/news/2008/05/14/merbunity-komunitas-merb-terus-berkembang-meningkat/</guid>
          <link>http://feedproxy.google.com/~r/RubyIndonesia/~3/ZZOQCVjLkuw/</link>
        <feedburner:origLink>http://www.ruby-lang.org/id/news/2008/05/14/merbunity-komunitas-merb-terus-berkembang-meningkat/</feedburner:origLink></item>
    
        <item>
          <title>Membuat Rack di atas JRuby</title>
          <description>&lt;p&gt;&lt;img src="http://farm4.static.flickr.com/3066/2484765289_a45957ce5b_o.jpg" /&gt;&lt;/p&gt;


	&lt;p&gt;Sebagian besar Developer Ruby tentunya telah familiar dengan &lt;a href="http://rack.rubyforge.org/"&gt;Rack&lt;/a&gt;, sebuah interface / library abstrak yang memiliki banyak cara-cara yang mudah dari memasang kode hingga ke &lt;span class="caps"&gt;HTTP&lt;/span&gt; servers. Ini telah siap digunakan oleh beberapa framework aplikasi web Ruby, beberapa sebagai default &amp;#8211; seperti Merb, dan sebuah tambahan lainnya seperti Rails. Rack dianggap signifikan karena melengkapi sebuah standart untuk aplikasi Web-facing Ruby dan frameworks yang menempel dan menjadi standard de-facto dalam space ini.&lt;/p&gt;


	&lt;p&gt;Nick Sieger mengembangkan &lt;a href="http://blog.nicksieger.com/articles/2008/05/08/introducing-jruby-rack"&gt;JRuby-Rack&lt;/a&gt;, sejenis Rack yang bekerja pada Java-based implementasi Ruby, &lt;a href="http://jruby.codehaus.org/"&gt;JRuby&lt;/a&gt;. Anda dapat menggunakan nya untuk banyak aplikasi Rack-compatible (aplikasi Rails dan Merb) disamping server aplikasi Java. Ini signifikan karena memberi kebebasan aplikasi kepada para developer. Cara abstrak untuk meratakan Ruby-based aplikasi web pada Java server dan kemudahan signifikan (setidaknya, lebih mudah dari sebelumnya!). Jika JRuby begitu bagus dan menarik bagi Anda, Anda sebaiknya juga menyimak &lt;a href="http://www.jrubyinside.com/"&gt;JRuby Inside&lt;/a&gt;. Satu dari bagian Ruby Inside’s, dan untuk menampilkan secara keseluruhan link dan berita JRuby.&lt;/p&gt;


	&lt;p&gt;Sumber: &lt;a href="http://www.rubyinside.com/rack-makes-it-onto-jruby-890.html"&gt;Ruby Inside:Rack Makes It Onto JRuby&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.googleadservices.com/~a/mfmOv6Z_pB8-Iz8kx58wv-pyydQ/a"&gt;&lt;img src="http://feedads.googleadservices.com/~a/mfmOv6Z_pB8-Iz8kx58wv-pyydQ/i" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feedproxy.google.com/~r/RubyIndonesia/~4/visyKv7Ip1o" height="1" width="1"/&gt;</description>
          <pubDate>Mon, 12 May 2008 03:52:50 GMT</pubDate>
          <guid isPermaLink="false">http://www.ruby-lang.org/id/news/2008/05/12/membuat-rack-di-atas-jruby/</guid>
          <link>http://feedproxy.google.com/~r/RubyIndonesia/~3/visyKv7Ip1o/</link>
        <feedburner:origLink>http://www.ruby-lang.org/id/news/2008/05/12/membuat-rack-di-atas-jruby/</feedburner:origLink></item>
    
        <item>
          <title>Inshoshi: Open-Source Rails, Social Networking Platform</title>
          <description>&lt;p&gt;&lt;a href="http://insoshi.com/"&gt;Insoshi&lt;/a&gt; adalah sesuatu yang baru, open-source social networking platform yang dikembangkan dalam Ruby on Rails. Insoshi ini terdapat &lt;a href="http://github.com/insoshi/insoshi/tree/master"&gt;pada Github&lt;/a&gt;, sehingga Anda dapat mengembangkan aplikasi social Web yang Anda miliki. Feature yang ada didalamnya activity feeds, profiles, photo sharing, comment walls, blogs, forums, user messaging, dan admin panel.&lt;/p&gt;


	&lt;p&gt;Insoshi dikembangkan oleh Michael Hartl, penulis dari &lt;a href="http://www.amazon.com/dp/0321480791,sebuah"&gt;RailsSpace&lt;/a&gt; buku yang diterbitkan oleh Addison-Wesley tentang perkembangan sebuah social networking site dalam Rails. Hal ini penting untuk dicatat, bagaimanapun juga, Insoshi ini mendapat ijin dari Affero General Public License, sehingga source code yang tersedia berguna untuk membentuk site yang Anda miliki.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://lovdbyless.com/"&gt;Lovd By Less&lt;/a&gt; merupakan sistem sebelumnya yang sama disebutkan disini pada Ruby Inside yang juga open source dan bebas untuk digunakan. Sistem ini sangat menyerupai pada bagian  dalam feature nya (profiles, messaging, blogs, admin system, dll). Tetapi Lovd By Less membuat Anda mudah menggunakan nya dalam aplikasi komersial yang Anda miliki.&lt;/p&gt;


	&lt;p&gt;Sumber:&lt;a href="http://www.rubyinside.com/insoshi-open-source-rails-based-social-networking-platform-878.html"&gt;Ruby Inside:Insoshi: Open-Source Rails-based Social Networking Platform&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.googleadservices.com/~a/djQBKk3oBGgxPsS_OISHFdL6S5A/a"&gt;&lt;img src="http://feedads.googleadservices.com/~a/djQBKk3oBGgxPsS_OISHFdL6S5A/i" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feedproxy.google.com/~r/RubyIndonesia/~4/dRBeTcp4yfA" height="1" width="1"/&gt;</description>
          <pubDate>Thu, 08 May 2008 04:32:50 GMT</pubDate>
          <guid isPermaLink="false">http://www.ruby-lang.org/id/news/2008/05/08/inshoshi-open-source-rails-social-networking-platform/</guid>
          <link>http://feedproxy.google.com/~r/RubyIndonesia/~3/dRBeTcp4yfA/</link>
        <feedburner:origLink>http://www.ruby-lang.org/id/news/2008/05/08/inshoshi-open-source-rails-social-networking-platform/</feedburner:origLink></item>
    
        <item>
          <title>Mengubah Ruby 1.9 Bytecode ke Python</title>
          <description>&lt;p&gt;&lt;img src="http://farm4.static.flickr.com/3054/2474488425_a9142f49d6_o.jpg" /&gt;&lt;/p&gt;


	&lt;p&gt;Tidak pernah ada satupun yang membiarkan kecerdikannya direndahkan di awal. Karena itulah The Lucky Stiff (penulis dari &lt;a href="http://poignantguide.net/ruby/"&gt;Poignant Guide&lt;/a&gt; dan pembuat &lt;a href="http://code.whytheluckystiff.net/shoes/"&gt;Shoes&lt;/a&gt;) sedang sibuk mengerjakan &lt;a href="http://hackety.org/2008/05/05/sneakingRubyThroughGoogleAppEngine.html(dan"&gt;sebuah sistem yang dapat mengubah Ruby 1.9 bytecode ke Python bytecode&lt;/a&gt; dari sana menjadi regular Python yaitu menggunakan cara melalui fasilitas dekompilasi yang dimiliki Phyton). Hal ini persisnya merupakan kumpulan dari sesuatu yang dipandang lebih, dan oleh karena itulah &lt;a href="http://github.com/why/unholy/tree/master"&gt;dibuat berlaku pada github&lt;/a&gt;. 
Tekhnik ini tampaknya bukan untuk menyatukan Python dan Ruby dalam hal apapun dan dalam arti penuh (langsung dari shared interpreter), tetapi penelitian dan percobaan serta usahanya yang rumit patut dihargai.&lt;/p&gt;


	&lt;p&gt;Sumber: &lt;a href="http://www.rubyinside.com/converting-ruby-19-bytecode-to-python-884.html"&gt;Ruby Inside:Converting Ruby 1.9 Bytecode to Python&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.googleadservices.com/~a/GHy3h14tRkdW0QWheOXHYxoXwhE/a"&gt;&lt;img src="http://feedads.googleadservices.com/~a/GHy3h14tRkdW0QWheOXHYxoXwhE/i" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feedproxy.google.com/~r/RubyIndonesia/~4/4r5P8w0txoo" height="1" width="1"/&gt;</description>
          <pubDate>Wed, 07 May 2008 04:16:00 GMT</pubDate>
          <guid isPermaLink="false">http://www.ruby-lang.org/id/news/2008/05/07/mengubah-ruby-1-9-bytecode-ke-python/</guid>
          <link>http://feedproxy.google.com/~r/RubyIndonesia/~3/4r5P8w0txoo/</link>
        <feedburner:origLink>http://www.ruby-lang.org/id/news/2008/05/07/mengubah-ruby-1-9-bytecode-ke-python/</feedburner:origLink></item>
    
        <item>
          <title>Promise dan Peril Untuk Implementasi Alternatif Ruby</title>
          <description>&lt;p&gt;&lt;img src="http://farm3.static.flickr.com/2132/2474505521_c0647ea13b_o.jpg" /&gt;&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://headius.blogspot.com/2008/04/promise-and-peril-for-alternative-ruby.html"&gt;Promise dan Peril untuk implementasi alternatif Ruby&lt;/a&gt; terlalu panjang, tetapi sangat menarik yang dibuat oleh Charles Nutter dari tim JRuby. Dia melihat pada Ruby 1.8, Ruby 1.9, JRuby, Rubinius, IronRuby, MacRuby dan beberapa implementasi minor, dan penjelasan mengenai latar belakang mereka serta situasi perkembangan yang mereka miliki saat ini, dan bagaimana proses yang mungkin akan dikerjakan untuk kedepan nya. Bagi yang tertarik dengan banyak implementasi dari Ruby hal ini harus dibaca.&lt;/p&gt;


	&lt;p&gt;Bagi siapa saja yang menginginkan versi pendek tanpa banyak konteks dan dapat cepat memahami Charles mempersembahkan: Pendahuluan Ruby 1.8.7 memiliki sebuah spanner dalam bekerja, Ruby 1.9 belum dapat menjalankan Rails (namun akan secepatnya), Ruby 1.9 tidak dapat menunjukkan kelebihan yang dimiliki kepada para Developer, JRuby rocks, Rubinius menarik namun peningkatan performance akan sangat sulit. Rubinius tampaknya akan mundur untuk penggunaan fungsi primitive C yang lebih dan pindah dari &amp;#8220;Ruby dalam Ruby&amp;#8221;, IronRuby sangat cerdas dan mungkin terjadi trouble running Rails. MacRuby merupakan ide yang bagus dari sekian banyak implementasi minor.&lt;/p&gt;


	&lt;p&gt;Sumber:&lt;a href="http://www.rubyinside.com/the-promise-and-peril-for-alternative-ruby-implementations-874.html"&gt;Ruby Inside:The Promise and Peril for Alternative Ruby Implementations&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.googleadservices.com/~a/K_rYTZAprTzcGSsxqinMXnJmkgY/a"&gt;&lt;img src="http://feedads.googleadservices.com/~a/K_rYTZAprTzcGSsxqinMXnJmkgY/i" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feedproxy.google.com/~r/RubyIndonesia/~4/ofuY4CFSq9M" height="1" width="1"/&gt;</description>
          <pubDate>Fri, 02 May 2008 05:10:33 GMT</pubDate>
          <guid isPermaLink="false">http://www.ruby-lang.org/id/news/2008/05/02/promise-dan-peril-untuk-implementasi-alternatif-ruby/</guid>
          <link>http://feedproxy.google.com/~r/RubyIndonesia/~3/ofuY4CFSq9M/</link>
        <feedburner:origLink>http://www.ruby-lang.org/id/news/2008/05/02/promise-dan-peril-untuk-implementasi-alternatif-ruby/</feedburner:origLink></item>
    
    
  </channel>
</rss>
