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.
Akibat
Penyerang dapat melakuka denial of service yang menyebabkan REXML memparse dokumen yang berisikan entitas bersarang rekursif seperti:
<span class="punct"><</span><span class="char">?x</span><span class="ident">ml</span> <span class="ident">version</span><span class="punct">="</span><span class="string">1.0</span><span class="punct">"</span> <span class="ident">encoding</span><span class="punct">="</span><span class="string">UTF-8</span><span class="punct">"</span><span class="char">?></span><br /><span class="punct"><!</span><span class="constant">DOCTYPE</span> <span class="ident">member</span> <span class="punct">[</span><br /> <span class="punct"><!</span><span class="constant">ENTITY</span> <span class="ident">a</span> <span class="punct">"</span><span class="string">&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;</span><span class="punct">"></span><br /> <span class="punct"><!</span><span class="constant">ENTITY</span> <span class="ident">b</span> <span class="punct">"</span><span class="string">&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;</span><span class="punct">"></span><br /> <span class="punct"><!</span><span class="constant">ENTITY</span> <span class="ident">c</span> <span class="punct">"</span><span class="string">&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;</span><span class="punct">"></span><br /> <span class="punct"><!</span><span class="constant">ENTITY</span> <span class="ident">d</span> <span class="punct">"</span><span class="string">&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;</span><span class="punct">"></span><br /> <span class="punct"><!</span><span class="constant">ENTITY</span> <span class="ident">e</span> <span class="punct">"</span><span class="string">&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;</span><span class="punct">"></span><br /> <span class="punct"><!</span><span class="constant">ENTITY</span> <span class="ident">f</span> <span class="punct">"</span><span class="string">&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;</span><span class="punct">"></span><br /> <span class="punct"><!</span><span class="constant">ENTITY</span> <span class="ident">g</span> <span class="punct">"</span><span class="string">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</span><span class="punct">"></span><br /><span class="punct">]></span><br /><span class="punct"><</span><span class="ident">member</span><span class="punct">></span><br /><span class="punct">&</span><span class="ident">a</span><span class="punct">;</span><br /><span class="punct"></</span><span class="regex">member></span>
Versi Vulnerable
seri 1.8
- 1.8.6-p287 dan semua versi sebelumnya
- 1.8.7-p72 dan semua versi sebelumnya
seri 1.9
Solusi
Silakan mendownload monkey patch berikut untuk membenahi masalah ini.
http://www.ruby-lang.org/security/20080823rexml/rexml-expansion-fix.rb
Kemudian benahi aplikasi untuk meload rexml-expansion-fix.rb sebelum menggunakan REXML.
<span class="ident">require</span> <span class="punct">"</span><span class="string">rexml-expansion-fix</span><span class="punct">"</span><br /><span class="punct">...</span><br /><span class="ident">doc</span> <span class="punct">=</span> <span class="constant">REXML</span><span class="punct">::</span><span class="constant">Document</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">str</span><span class="punct">)</span><br /><span class="punct">...</span>
Kalau Anda memiliki aplikasi Rails, copy file rexml-expansion-fix.rb ke direktori yang berada di load path (misalkan di RAILS_ROOT/lib/), dan tambahkan baris-baris kode berikut ini ke config/environment.rb.
<span class="ident">require</span> <span class="punct">"</span><span class="string">rexml-expansion-fix</span><span class="punct">"</span>
Kalau aplikasi Anda menggunakan Rails 2.1 atau lebih baru, Anda bisa dengan mudah mengcopy file rexml-expansion-fix.rb ke dalam direktori RAILS_ROOT/config/initializers dan file monkey patch tersebut akan dipanggil dan disertakan secara otomatis.
Secara default, batas XML entity expansion adalah 10000. Anda bisa menggantinya dengan cara mengubah REXML::Document.entity_expansion_limit. Misalkan:
REXML::Document.entity_expansion_limit = 1000
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.
Kredit
Kredit untuk Luka Treiber dan Mitja Kolsek dari ACROS Security yang telah membeberkan rahasia sekuriti ini ke Tim Sekuriti Ruby dan Rails.
Kredit untuk Michael Koziarski dari Tim Utama Rails yang telah membuatkan monkey patch untuk membenahi vulnerability masalah keamanan ini.
Baca Selengkapnya…
Ditulis oleh Arie Kusuma Atmaja tanggal 23 Aug 2008
Sejak gempar Mac OS X (Leopard) dirilis tahun lalu beserta dukungan penuh untuk Ruby dan Ruby on Rails berupa included dengan Sistem Operasi, sepertinya relasi Apple dan berkelebatnya Ruby semakin melaju dengan mesra.
Ada artikel di InfoQ yang menggarisbawahi beberapa cara menggunakan Ruby di Apple yang mungkin Anda lewatkan adalah sebagai berikut:
- iPhone Configuration Web Utility – Sebuah tool yang ditulis dengan Ruby on Rails supaya customer enterprise bisa memanage iPhone.
- SproutCore JavaScript framework – yang didesain untuk aplikasi-aplikasi yang mirip Desktop untuk Web dan digunakan aplikasi baru Apple MobileMe. SproutCore terinstalasi sebagai gem, menggunakan generator yang ditulis dengan Ruby untuk menciptakan resource-resource dan menggunakan Merb untuk generate karya HTML.
- Proyek MacRuby – Apple port Ruby pada runtime Objective-C – yang membuat integrasi Cocoa untuk pengembangan aplikasi Desktop menjadi semakin mudah.
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.
Sumber Tulisan: ariekeren
Baca Selengkapnya…
Ditulis oleh Arie Kusuma Atmaja tanggal 21 Aug 2008

Dengan didukung oleh PT INTI (PT. Industri Telekomunikasi Indonesia (Persero)), KlariTI (Klaster Industri Telematika Indonesia), RICE (Regional IT Centre of Excellence) Bandung, OpenSUSE Indonesia, Klub Linux Bandung, Ubuntu Indonesia, dan IGOSCenter, Komunitas Ruby Indonesia mengadakan workshop Ruby on Rails Fundamental.
Tempat : Gedung Pusat Teknologi PT INTI (Persero), Jl. Moh. Toha 77, Bandung
Waktu : 28 – 29 Juli 2008, pukul 09.00 – 17.00 Waktu Indonesia Barat
Pendaftaran : railstraining@narayana.co.id
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).
Pelatihan Workshop Ruby on Rails Fundamental ini langsung dibimbing oleh Arie Kusuma Atmaja bertindak sebagai mentor.
Kegiatan workshop ini adalah untuk menjawab “kurangnya” kegiatan Ruby Indonesia terutama dalam bentuk kopdar atau pertemuan offline yang melakukan penekanan terutama pada sessions untuk newbies/pemula agar semua SDM Indonesia bisa maju dan tumbuh kembang bersama.

Publikasi:
Baca Selengkapnya…
Ditulis oleh Arie Kusuma Atmaja tanggal 24 Jul 2008
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.
1 – Cara Cepat Mengekstraksi hasil match regexp
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.
<span class="ident">email</span> <span class="punct">=</span> <span class="punct">"</span><span class="string">Fred Bloggs <fred@bloggs.com></span><span class="punct">"</span><br /><span class="ident">email</span><span class="punct">.</span><span class="ident">match</span><span class="punct">(/</span><span class="regex"><(.*?)></span><span class="punct">/)[</span><span class="number">1</span><span class="punct">]</span> <span class="comment"># => “fred@bloggs.com”</span><br /><span class="ident">email</span><span class="punct">[/</span><span class="regex"><(.*?)></span><span class="punct">/,</span> <span class="number">1</span><span class="punct">]</span> <span class="comment"># => “fred@bloggs.com”</span><br /><span class="ident">email</span><span class="punct">.</span><span class="ident">match</span><span class="punct">(/</span><span class="regex">(x)</span><span class="punct">/)[</span><span class="number">1</span><span class="punct">]</span> <span class="comment"># => NoMethodError [:(]</span><br /><span class="ident">email</span><span class="punct">[/</span><span class="regex">(x)</span><span class="punct">/,</span> <span class="number">1</span><span class="punct">]</span> <span class="comment"># => nil</span><br /><span class="ident">email</span><span class="punct">[/</span><span class="regex">([bcd]).*?([fgh])</span><span class="punct">/,</span> <span class="number">2</span><span class="punct">]</span> <span class="comment"># => “g”</span>
2 – Shortcut buat Array#join
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!
<span class="punct">%w{</span><span class="string">ariekeren lagi ngetes</span><span class="punct">}</span> <span class="punct">*</span> <span class="punct">"</span><span class="string">, </span><span class="punct">"</span> <span class="comment"># => "ariekeren, lagi, ngetes"</span><br /><span class="ident">h</span> <span class="punct">=</span> <span class="punct">{</span> <span class="symbol">:name</span> <span class="punct">=></span> <span class="punct">"</span><span class="string">ArieKeren“, :age => 27 }<br />h.map { |i| i * </span><span class="punct">"="</span><span class="string"> } * </span><span class="punct">"\</span><span class="ident">n</span><span class="punct">"</span><span class="string"> # => “age=27<span class="escape">\n</span>name=ArieKeren”</span>
3 – Cara Cepat Memformat Angka Desimal
Memformat angka float ke bentuk yang biasa digunakan untuk harga bisa dicapai dengan sprintf atau bisa juga dengan cara alternatif, yaitu dengan formatting interpolation:
<span class="ident">duit</span> <span class="punct">=</span> <span class="number">9.5</span><br /><span class="punct">"</span><span class="string">%.2f</span><span class="punct">"</span> <span class="punct">%</span> <span class="ident">duit</span> <span class="comment"># => “9.50″</span>
4 – Cara Cepat Mengapit Teks
Teknik formatting interpolation dari nomor ketiga keluar lagi, kali ini adalah bagaimana menyisipkan suatu string ke string yang lain:
<span class="punct">"</span><span class="string">[%s]</span><span class="punct">"</span> <span class="punct">%</span> <span class="punct">"</span><span class="string">stringnya pindah doang</span><span class="punct">"</span> <span class="comment"># => “[stringnya pindah doang]”</span>
Anda juga bisa menggunakan elemen-elemen dari array untuk mengganti penempatan string tersebut:
<span class="ident">x</span> <span class="punct">=</span> <span class="punct">%w{</span><span class="string">p ketemulagi p</span><span class="punct">}</span><br /><span class="punct">"</span><span class="string"><%s>%s</%s></span><span class="punct">"</span> <span class="punct">%</span> <span class="ident">x</span> <span class="comment"># => “<p>ketemulagi</p>"</span>
5 – Menghapus direktori beserta seluruh isinya
Jangan sortir ulang dengan menggunakan shell. Ruby punya library file utilities yang nyaman dipakai untuk operasi file seperti menghapus direktori berikut seluruh isinya:
<span class="ident">require</span> <span class="punct">'</span><span class="string">fileutils</span><span class="punct">'</span><br /><span class="constant">FileUtils</span><span class="punct">.</span><span class="ident">rm_r</span> <span class="punct">'</span><span class="string">somedir</span><span class="punct">'</span>
Hati-hati kalau Anda menggunakan cara ini!
6 – Menyatukan dan Memisahkan enumerable
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:
Contah dengan Array:
<span class="ident">a</span> <span class="punct">=</span> <span class="punct">%w{</span><span class="string">a b</span><span class="punct">}</span><br /><span class="ident">b</span> <span class="punct">=</span> <span class="punct">%w{</span><span class="string">c d</span><span class="punct">}</span><br /><span class="punct">[</span> <span class="ident">a</span> <span class="punct">+</span> <span class="ident">b</span> <span class="punct">]</span> <span class="comment"># => [[”a”, “b”, “c”, “d”]]</span><br /><span class="punct">[</span> <span class="punct">*</span><span class="ident">a</span> <span class="punct">+</span> <span class="ident">b</span> <span class="punct">]</span> <span class="comment"># => [”a”, “b”, “c”, “d”]</span>
Contoh dengan Hash:
<span class="ident">a</span> <span class="punct">=</span> <span class="punct">{</span> <span class="symbol">:name</span> <span class="punct">=></span> <span class="punct">"</span><span class="string">ArieKeren</span><span class="punct">",</span> <span class="symbol">:age</span> <span class="punct">=></span> <span class="number">27</span> <span class="punct">}</span> <br /><span class="comment"># => {:name=>"ArieKeren", :age=>27}</span><br /><br /><span class="punct">[</span><span class="ident">a</span><span class="punct">]</span><br /><span class="comment"># => [{:name=>"ArieKeren", :age=>27}]</span><br /><br /><span class="punct">[*</span><span class="ident">a</span><span class="punct">]</span><br /><span class="comment"># => [[:name, "ArieKeren"], [:age, 27]]</span>
Contoh dengan tangkapan parameter paralel:
<span class="ident">a</span> <span class="punct">=</span> <span class="punct">%w{</span><span class="string">a b c d e f g h</span><span class="punct">}</span><br /><span class="comment"># => ["a", "b", "c", "d", "e", "f", "g", "h"]</span><br /><br /><span class="ident">b</span> <span class="punct">=</span> <span class="punct">[</span><span class="number">0</span><span class="punct">,</span> <span class="number">5</span><span class="punct">,</span> <span class="number">6</span><span class="punct">]</span><br /><span class="comment"># => [0, 5, 6]</span><br /><br /><span class="ident">a</span><span class="punct">.</span><span class="ident">values_at</span><span class="punct">(*</span><span class="ident">b</span><span class="punct">)</span><br /><span class="comment"># => ["a", "f", "g"]</span>
7 – Persingkat definisi variabel lokal
Daripada mendefinisikan variabel lokal dengan beragam konten awal (sering hanya berupa hash kosong ataupun array kosong), Anda sebenarnya bisa langsung mendefinisikan variabel lokal “sekaligus” ketika operasi sedang berlangsung:
<span class="punct">(</span><span class="ident">z</span> <span class="punct">||=</span> <span class="punct">[])</span> <span class="punct"><<</span> <span class="punct">'</span><span class="string">coba</span><span class="punct">'</span>
8 – Penggunaan yang-bukan-string maupun yang-bukan-simbol sebagai hash key
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):
<span class="ident">does</span> <span class="punct">=</span> <span class="ident">is</span> <span class="punct">=</span> <span class="punct">{</span> <span class="constant">true</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">Yes</span><span class="punct">',</span> <span class="constant">false</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">No</span><span class="punct">'</span> <span class="punct">}</span><br /><span class="ident">does</span><span class="punct">[</span><span class="number">10</span> <span class="punct">==</span> <span class="number">50</span><span class="punct">]</span> <br /><span class="comment"># => “No”</span><br /><br /><span class="ident">is</span><span class="punct">[</span><span class="number">10</span> <span class="punct">></span> <span class="number">5</span><span class="punct">]</span><br /><span class="comment"># => “Yes”</span>
9 – Gunakan ‘and’ dan ‘or’ untuk mengelompokkan operasi satu baris
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:
<span class="ident">queue</span> <span class="punct">=</span> <span class="punct">[]</span><br /><span class="punct">%w{</span><span class="string">hello x world</span><span class="punct">}.</span><span class="ident">each</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">word</span><span class="punct">|</span><br /> <span class="ident">queue</span> <span class="punct"><<</span> <span class="ident">word</span> <span class="keyword">and</span> <span class="ident">puts</span> <span class="punct">"</span><span class="string">Added to queue</span><span class="punct">"</span> <span class="keyword">unless</span> <span class="ident">word</span><span class="punct">.</span><span class="ident">length</span> <span class="punct"><</span> <span class="number">2</span><br /><span class="keyword">end</span><br /><span class="ident">puts</span> <span class="ident">queue</span><span class="punct">.</span><span class="ident">inspect</span><br /><span class="comment"># Output:</span><br /><span class="comment"># Added to queue</span><br /><span class="comment"># Added to queue</span><br /><span class="comment"># [”hello”, “world”]</span>
10 – Menentukan eksekusi kode
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:
<span class="keyword">if</span> <span class="constant">__FILE__</span> <span class="punct">==</span> <span class="global">$0</span><br /> <span class="comment"># Do something.. run tests, call a method, etc. We're direct.</span><br /><span class="keyword">end</span>
11 – Mempercepat assignment sekaligus (mass assignment)
Mass assignment merupakan trik yang Ruby Developer pelajari dari awal-awal ya, tetapi adalah sesuatu yang amazing dan menyenangkan betapa jarang trik ini digunakan:
<span class="ident">a</span><span class="punct">,</span> <span class="ident">b</span><span class="punct">,</span> <span class="ident">c</span><span class="punct">,</span> <span class="ident">d</span> <span class="punct">=</span> <span class="number">1</span><span class="punct">,</span> <span class="number">2</span><span class="punct">,</span> <span class="number">3</span><span class="punct">,</span> <span class="number">4</span>
Trik ini bisa dipakai di banyak kasus seperti menangkap parameter argumen suatu metode yang berupa array dengan tanda * (bintang) :
<span class="keyword">def </span><span class="method">my_method</span><span class="punct">(*</span><span class="ident">args</span><span class="punct">)</span><br /> <span class="ident">a</span><span class="punct">,</span> <span class="ident">b</span><span class="punct">,</span> <span class="ident">c</span><span class="punct">,</span> <span class="ident">d</span> <span class="punct">=</span> <span class="ident">args</span><br /><span class="keyword">end</span>
12 – Gunakan range daripada perbandingan rumit untuk angka
Tidak ada lagi kode omong kosong seperti if x > 1000 && x < 2000.
<span class="ident">year</span> <span class="punct">=</span> <span class="number">1972</span><br /><span class="ident">puts</span> <span class="keyword">case</span> <span class="ident">year</span><br /> <span class="keyword">when</span> <span class="number">1970</span><span class="punct">..</span><span class="number">1979</span><span class="punct">:</span> <span class="punct">"</span><span class="string">Tujuhpuluhan</span><span class="punct">"</span><br /> <span class="keyword">when</span> <span class="number">1980</span><span class="punct">..</span><span class="number">1989</span><span class="punct">:</span> <span class="punct">"</span><span class="string">Delapanpuluhan</span><span class="punct">"</span><br /> <span class="keyword">when</span> <span class="number">1990</span><span class="punct">..</span><span class="number">1999</span><span class="punct">:</span> <span class="punct">"</span><span class="string">Sembilanpuluhan</span><span class="punct">"</span><br /> <span class="keyword">end</span>
13 – Gunakan Enumeration untuk menghindari kode-kode berulang
<span class="punct">%w{</span><span class="string">rubygems daemons eventmachine</span><span class="punct">}.</span><span class="ident">each</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">x</span><span class="punct">|</span> <span class="ident">require</span> <span class="ident">x</span> <span class="punct">}</span>
14 – Operator Ternary
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.
<span class="ident">puts</span> <span class="ident">x</span> <span class="punct">==</span> <span class="number">10</span> <span class="punct">?</span> <span class="punct">"</span><span class="string">x adalah sepuluh</span><span class="punct">"</span> <span class="punct">:</span> <span class="punct">"</span><span class="string">x bukan sepuluh</span><span class="punct">"</span><br /><br /><span class="comment"># Atau.. bisa juga digunakan untuk assignment yang bersandar pada hasil operator ternary</span><br /><span class="constant">LOG</span><span class="punct">.</span><span class="ident">sev_threshold</span> <span class="punct">=</span> <span class="constant">ENVIRONMENT</span> <span class="punct">==</span> <span class="symbol">:development</span> <span class="punct">?</span> <span class="constant">Logger</span><span class="punct">::</span><span class="constant">DEBUG</span> <span class="punct">:</span> <span class="constant">Logger</span><span class="punct">::</span><span class="constant">INFO</span>
15 – Operator Ternary Bersarang (Nested Ternary Operators)
Trik ini bisa jadi membuat kode menjadi rumit dibaca. Tetapi sebenarnya hanya urusan return obyek saja sama seperti banyak obyek lain di Ruby.
<span class="ident">qty</span> <span class="punct">=</span> <span class="number">1</span><br /><span class="ident">qty</span> <span class="punct">==</span> <span class="number">0</span> <span class="punct">?</span> <span class="punct">'</span><span class="string">none</span><span class="punct">'</span> <span class="punct">:</span> <span class="ident">qty</span> <span class="punct">==</span> <span class="number">1</span> <span class="punct">?</span> <span class="punct">'</span><span class="string">one</span><span class="punct">'</span> <span class="punct">:</span> <span class="punct">'</span><span class="string">many</span><span class="punct">'</span><br /><span class="comment"># Hanya sebagai ilustrasi saja supaya tidak bingung:</span><br /><span class="punct">(</span><span class="ident">qty</span> <span class="punct">==</span> <span class="number">0</span> <span class="punct">?</span> <span class="punct">'</span><span class="string">none</span><span class="punct">'</span> <span class="punct">:</span> <span class="punct">(</span><span class="ident">qty</span> <span class="punct">==</span> <span class="number">1</span> <span class="punct">?</span> <span class="punct">'</span><span class="string">one</span><span class="punct">'</span> <span class="punct">:</span> <span class="punct">'</span><span class="string">many</span><span class="punct">'))</span>
16 – Maksimalkan penggunaan fitur bawaan logis di Ruby
Ada sering banyak metode yang menggunakan pattern kurang lebih sebagai berikut:
<span class="keyword">def </span><span class="method">is_odd</span><span class="punct">(</span><span class="ident">x</span><span class="punct">)</span><br /> <span class="comment"># Terlalu panjang..</span><br /> <span class="keyword">if</span> <span class="ident">x</span> <span class="punct">%</span> <span class="number">2</span> <span class="punct">==</span> <span class="number">0</span><br /> <span class="keyword">return</span> <span class="constant">false</span><br /> <span class="keyword">else</span><br /> <span class="keyword">return</span> <span class="constant">true</span><br /> <span class="keyword">end</span><br /><span class="keyword">end</span>
Mungkin kita bisa saja menggunakan operator ternary untuk improve?
<span class="keyword">def </span><span class="method">is_odd</span><span class="punct">(</span><span class="ident">x</span><span class="punct">)</span><br /> <span class="comment"># Jangan sekali-sekali menaruh false dan true pada operator ternary!!</span><br /> <span class="ident">x</span> <span class="punct">%</span> <span class="number">2</span> <span class="punct">==</span> <span class="number">0</span> <span class="punct">?</span> <span class="constant">false</span> <span class="punct">:</span> <span class="constant">true</span><br /><span class="keyword">end</span>
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!
<span class="keyword">def </span><span class="method">is_odd</span><span class="punct">(</span><span class="ident">x</span><span class="punct">)</span><br /> <span class="comment"># Gunakan hasil logis yang sudah disediakan Ruby secara otomstis untuk Anda..</span><br /> <span class="ident">x</span> <span class="punct">%</span> <span class="number">2</span> <span class="punct">!=</span> <span class="number">0</span><br /><span class="keyword">end</span>
17 – Perhatikan seluruh exception backtrace
<span class="keyword">def </span><span class="method">do_division_by_zero</span><span class="punct">;</span> <span class="number">5</span> <span class="punct">/</span> <span class="number">0</span><span class="punct">;</span> <span class="keyword">end</span><br /><span class="keyword">begin</span><br /> <span class="ident">do_division_by_zero</span><br /><span class="keyword">rescue</span> <span class="punct">=></span> <span class="ident">exception</span><br /> <span class="ident">puts</span> <span class="ident">exception</span><span class="punct">.</span><span class="ident">backtrace</span><br /><span class="keyword">end</span>
18 – Manfaatkan obyek tunggal DAN array agar dapat dienumerasikan
<span class="punct">[*</span><span class="ident">items</span><span class="punct">].</span><span class="ident">each</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">item</span><span class="punct">|</span><br /> <span class="comment"># …</span><br /><span class="keyword">end</span>
19 – Rescue yang berada dalam blok tidak perlu diapit ‘begin’
<span class="keyword">def </span><span class="method">x</span><br /> <span class="keyword">begin</span><br /> <span class="comment"># …</span><br /> <span class="keyword">rescue</span><br /> <span class="comment"># …</span><br /> <span class="keyword">end</span><br /><span class="keyword">end</span><br /><span class="keyword">def </span><span class="method">x</span><br /> <span class="comment"># …</span><br /><span class="keyword">rescue</span><br /> <span class="comment"># …</span><br /><span class="keyword">end</span>
20 – Komentar format blok
Di Ruby kita bisa dengan bebas sesuai selera untuk berkomentas di kode dengan pagar ataupun menggunakan blok begin dan end:
<span class="ident">puts</span> <span class="punct">"</span><span class="string">x</span><span class="punct">"</span><br /><span class="comment">=begin<br /> ini adalah blok komentar<br /> Anda dapat menaruh apa saja yang Anda suka disini!<br /><br /> puts “y”<br />=end</span><br /><span class="ident">puts</span> <span class="punct">"</span><span class="string">z</span><span class="punct">"</span>
21 – Rescue satu baris
<span class="ident">h</span> <span class="punct">=</span> <span class="punct">{</span> <span class="symbol">:age</span> <span class="punct">=></span> <span class="number">10</span> <span class="punct">}</span><br /><span class="ident">h</span><span class="punct">[</span><span class="symbol">:name</span><span class="punct">].</span><span class="ident">downcase</span> <span class="comment"># ERROR</span><br /><span class="ident">h</span><span class="punct">[</span><span class="symbol">:name</span><span class="punct">].</span><span class="ident">downcase</span> <span class="keyword">rescue</span> <span class="punct">"</span><span class="string">No name</span><span class="punct">"</span> <span class="comment"># => “No name”</span>
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.
Sumber tulisan dari RubyInside – 21 Ruby Tricks You Should Be Using In Your Own Code dengan penyesuaian seperlunya oleh ArieKeren
Baca Selengkapnya…
Ditulis oleh Arie Kusuma Atmaja tanggal 28 May 2008
Evan Phoenix telah mengumumkan bahwa proyek Rubinius telah mencapai major milestone: Rubinius bisa menjalankan Rails! Ini berarti telah membuat Rubinius menjadi yang ketiga yang telah mengimplementasikan penggabungan rails (setelah MRI 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 memberitakan bahwa dalam waktu satu tahun kedepan, Rubinius akan digunakan dalam production deployment dan akan segera menjadi implementasi standar Ruby secara de facto.
Sekarang kita melihat pada implementasi yang ada pada Microsoft, IronRuby, IronRuby juga boleh jadi akan segera bergabung dengan klub Rails segera.
Sumber: Rubinius On Rails: Rubinius Becomes 3rd Ruby Implementation to Run Rails
Baca Selengkapnya…
Ditulis oleh Arie Kusuma Atmaja tanggal 19 May 2008
Merbunity adalah sebuah situs baru yang berisi tentang “berita, projek dan tutorial” berhubungan dengan framework Web Merb (alternatif umum untuk meningkatkan Rails). 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’ TextMate bundle for Merb.
Sebenarnya tidak terlalu susah untuk menarik minat penggemar Merb. Pada beberapa bulan lalu banyaknya content luar biasa untuk developer Merb mengalami pertumbuhan yang signifikan. Contoh kunci meliputi Merb wiki, Merb book, tutorial “How to create a chat wall”, dan juga yang dimiliki Ruby Inside list of 21 Merb links, tutorials, dan sumber lain.
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 14 May 2008

Sebagian besar Developer Ruby tentunya telah familiar dengan Rack, sebuah interface / library abstrak yang memiliki banyak cara-cara yang mudah dari memasang kode hingga ke HTTP servers. Ini telah siap digunakan oleh beberapa framework aplikasi web Ruby, beberapa sebagai default – 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.
Nick Sieger mengembangkan JRuby-Rack, sejenis Rack yang bekerja pada Java-based implementasi Ruby, JRuby. 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 JRuby Inside. Satu dari bagian Ruby Inside’s, dan untuk menampilkan secara keseluruhan link dan berita JRuby.
Sumber: Ruby Inside:Rack Makes It Onto JRuby
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 12 May 2008
Insoshi adalah sesuatu yang baru, open-source social networking platform yang dikembangkan dalam Ruby on Rails. Insoshi ini terdapat pada Github, 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.
Insoshi dikembangkan oleh Michael Hartl, penulis dari RailsSpace 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.
Lovd By Less 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.
Sumber:Ruby Inside:Insoshi: Open-Source Rails-based Social Networking Platform
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 08 May 2008

Tidak pernah ada satupun yang membiarkan kecerdikannya direndahkan di awal. Karena itulah The Lucky Stiff (penulis dari Poignant Guide dan pembuat Shoes) sedang sibuk mengerjakan sebuah sistem yang dapat mengubah Ruby 1.9 bytecode ke Python bytecode 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 dibuat berlaku pada github.
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.
Sumber: Ruby Inside:Converting Ruby 1.9 Bytecode to Python
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 07 May 2008

Promise dan Peril untuk implementasi alternatif Ruby 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.
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 “Ruby dalam Ruby”, IronRuby sangat cerdas dan mungkin terjadi trouble running Rails. MacRuby merupakan ide yang bagus dari sekian banyak implementasi minor.
Sumber:Ruby Inside:The Promise and Peril for Alternative Ruby Implementations
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 02 May 2008

Migrating to Ruby 1.9 adalah sebuah presentasi yang disampaikan oleh Bruce Williams di Scotland on Rails pada permulaan bulan ini. Tampilan nya tersedia dalam format PDF yang luar biasa bagus seperti yang dia miliki dan akan menunjukkan kepada siapapun tentang manfaat resource dalam Ruby yang masih belum terlalu memikat hingga saat ini. Presentasi Bruce menjelaskan banyak hal dari perubahan penunjuk.
Berikut interview dengan Bruce oleh Satish Talim dari RubyLearning.com baru-baru ini.
Sumber: Ruby Inside: Migrating to Ruby 1.9
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 30 Apr 2008
Slapp: A simple chat wall Merb tutorial merupakan contoh sempurna dari tutorial singkat yang dapat memotivasi banyak orang untuk mencoba sebuah framework baru (sejauh ini Merb yang terbaru, tentunya). Akan membawa Anda melalui proses pengembangan sebuah “chat wall” aplikasi model dengan Merb dari awal hingga akhir (baik dari menginstal Merb hingga bermain dengan aplikasi yang sedang berjalan.
Satu hal yang membuat tutorial ini tetap bertahan yaitu dengan adanya spec laju perkembangan pada jantung aplikasi. Setelah menginstal Merb dan mengatur database, Anda akan langsung dapat menulis sebuah story dengan RSpec! Hal ini sangat berbeda dengan banyak artikel pengantar Rails lain yang banyak membahas percobaan, dan hal ini sesuai dengan pengguna baru, untuk itulah siapapun familiar dengan RSpec tetapi siapa yang menginginkan belajar tentang bagaimana menggunakan nya ketika mengembangkan sebuah aplikasi web.
Akhirnya, hasil terakhir aplikasi tersebut yaitu tersedia dari sebuah Gitorious Git repository untuk siapapun yang ingin bekerja backwards atau melihat kode bagian depan nya.
Sumber:Ruby Inside:Building a Web App With Merb From Start to Finish
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 28 Apr 2008
Stone adalah sebuah library baru Ruby yang dikembangkan oleh Nick DeMonner yang tampaknya mendapat respon yang cukup bagus pada beberapa minggu lalu. Stone ini merupakan sebuah library data persistance yang menyajikan “plug dan play data persistence untuk banyak aplikasi atau framework” yang dikenal dengan kecepatan dan kesederhanaan nya. Dibandingkan dengan menggunakan sebuah database dan ORM seperti Active Record, Stone berhati-hati terhadap apapun dalam sebuah abstract manner. Data “tetap berlaku” untuk file-file termasuk di dalam direktori aplikasi yang Anda miliki.
Official stone homepage memberikan beberapa contoh yang menarik, termasuk bagaimana mengganti aplikasi Active Record dengan Stone dalam Rails. Ini sedikit aneh, tapi proses penerimaannya sendiri sangat tidak baik / matang. Ini tentunya merupakan perkembangan yang bagus, namun jika Anda telah siap dengan SQLite 3 dan ActiveRecord (sebuah gabungan yang sedikit aneh) disana sama sekali tidak memiliki pertimbangan untuk sekedar switch.
Sumber: Ruby Inside-Stone: Dead-Simple Ruby Data Persistence
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 22 Apr 2008
Mack adalah framework app Web baru Ruby (yang mana, seperti kita tahu, banyak sekali!) yang mengambil dari beberapa elemen terbaik dari frameworks app Web lain (termasuk pendukung Rack) dan menunjukkan bahwa dirinya sangat modular, dengan cara “agile” . Developer Mark Bates memberikan inspirasi untuk perkembangan Mack’s sebagai “portals” dan mengatakan bahwa pengembangan Mack’s akan difokuskan pada hal ini, mencakup banyak feature seperti distributed routing system dan interoperability diantara multiple trusted, local apps.
Peter Cooper memiliki cara sendiri menggunakan Mack (dengan jQuery) dalam beberapa hari yang lalu, untuk mengembangkan chat client, yang bekerja sangat baik. Mack sangat cepat dan sangat jelas, tetapi menawarkan direktori Rails-style dan struktur file yang familiar.
Peter Cooper memilih DataMapper (satu dari banyak pilihan) untuk ORM nya. Mack juga memiliki dokumentasi yang cermat.
Mack tentunya akan bermanfaat bagi Anda yang ingin mencoba framework aplikasi web atau mencari sesuatu yang modular dan cepat serta tidak terlalu mengalami banyak perubahan dan jika Anda telah familiar dengan Rails.
Sumber: Ruby Inside-
Mack: A Fast, “Best of the Rest” Web App Framework
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 14 Apr 2008
RubyFlow adalah situs berita Ruby yang baru yang dikembangkan oleh Peter Cooper beberapa hari yang lalu.
RubyFlow akan lebih cepat dan lebih acak daripada Ruby Inside. Ruby Inside akan terus secara kontinyu mengisi maksimal satu hingga dua tulisan “Anda harus baca!” setiap hari, sementara RubyFlow akan menjadi tempat untuk sesuatu yang instan/cepat (mirip seperti ketika kita menggunakan Delicious dengan library Ruby dengan seketika). Anda tidak perlu signup untuk posting walau disana ada CAPTCHA dan gunakan rel=”nofollow” pada link link Anda jika Anda tidak menggunakannya (untuk menghindari spam).
RubyFlow dikembangkan karena Peter banyak melihat dan mendapatkan pernak-pernik Ruby yang mnarik yang mungkin bisa saja berulang-ulang di posting di Ruby Inside, yang mana hal itu terlalu minor sifatnya, atau terlalu niche untuk hal-hal yang lebih umum pada audiens Ruby Inside. RubyFlow akan menjadi wadah untuk berita-berita tentang rilis rilis baru library, posting posting blog yang menarik, dan berita-berita yang dipublikasikan. Peter juga bisa menggunakan RubyFlow sebagai situs tempat “tips” dan basis posting Ruby Inside. Jadi bila Anda nanti ingin dihubungi mengenai hal-hal menarik di Ruby Inside, dapatkan posting dan beritanya!
Style post situs secara keseluruhan sangat dipengaruhi MetaFilter, teman lama komunitas blogger. Jadi intinya RubyFlow akan menjadi satu dari sekian pernak-pernik Ruby yang menarik, satu hingga banyak link link di setiap postingnya, dan keterangan-keterangan singkat yang mencerahkan. Situs-situs social bookmarking seperti del.icio.us dan Reddit kurang begitu mendukung dalam hal ini karena Anda hanya akan butuh membaca judul dari link (yang mana ini percuma di banyak kasus) sementara link-link RubyFlow dan MetaFilter dijelaskan degan keterangan singkat padat dan jelas yang ditaruh sesuai pada konteks. Jadi ingatlah hal-hal tersebut bila Anda ikut berpartisipasi memposting, karena kalau tidak, maka polisi style akan men-tweak posting Anda agar sesuai.
Sumber: RubyFlow: A New Ruby News Site
Baca Selengkapnya…
Ditulis oleh Arie Kusuma Atmaja tanggal 10 Apr 2008

Mathieu martin menulis tentang overview terbaru yang menarik dari Rubinius, merupakan perkembangan yang cepat dari implementasi Ruby yang dibuat oleh Evan Phoenix dan saat ini sedang dikembangkan oleh tim besar(dengan bantuan finansial yang signifikan dan manpower dari Engine Yard).
Overview yang ditulis oleh Mathieu ini menjelaskan tentang Rubinius (implementasi baru dari Ruby dengan memfokuskan pada penerapan implementasi dari subset Ruby itu sendiri), memeriksa ide dari implementasi, menyajikan beberapa benchmark terbaru yang menunjukkan perbandingan Rubinius dengan MRI (Matz’s Ruby Interpreter) sangat jauh. Hasil dari benchmark sangat mejanjikan dan menunjukkan bahwa Rubinius mengalami kemajuan di beberapa bulan terakhir.
Sumber: Ruby Inside-A Fresh Overview of Rubinius
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 07 Apr 2008

Dalam Fluid Rails Docs on OSX, Jacques Crocker memperoleh beberapa cara untuk mendapatkan dokumentasi Rails yang bagus di dalam Mac OS X. Pertama, dia menyajikan site browser khusus untuk NoobKit yaitu sebuah site dokumentasi online Rails / Gems. Yang kedua, bagaimanapun juga tersedia sebuah app yang dapat mengakses kumpulan dokumentasi itu yang disebut “RailsBrain” yang bekerja offline.
Sumber: Ruby Inside-Easily Accessible Rails Documentation on OS X
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 05 Apr 2008

Dominiek ter Heide membuat sebuah tutorial yang menarik tentang bagaimana cara membentuk sebuah “Twitter agent” dengan cepat dan mudah menggunakan Ruby, Rails dan XMPP. Untuk itu bagi siapa saja yang sudah berada di Twitter, hal ini merupakan free micro-blogging “pengembangan” pelayanan informasi bagi banyak user untuk menulis pesan yang didukung dengan 140 karakter untuk menampilkan kembali state / feelings / location / dll. Untuk itu, sebuah Twitter agent berpotensi menjadi Twitter otomatis bagi penggunanya yang dapat mengirim informasi kepada pengguna Twitter yang lain.
Tutorial ini dibuat begitu jelas dengan banyaknya contoh kode dan diagram bantu. Dominiek menjelaskan semua itu secara langsung dan jelas, sehingga Anda dapat mengetahui segala sesuatu yang saat itu sedang dikerjakan.
Sumber: Ruby Inside-Building a Twitter Agent with Ruby and Rails
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 02 Apr 2008
Rush yang dibuat oleh Adam Wiggins ini merupakan UNIX shell (bash) dan remote login (ssh), yang ditulis dengan Ruby dan menerima syntax Ruby untuk menjalankan sistem operasi. Seperti operasi berikut:
<span class="ident">processes</span><span class="punct">.</span><span class="ident">each</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">p</span><span class="punct">|</span> <span class="ident">p</span><span class="punct">.</span><span class="ident">kill</span> <span class="keyword">if</span> <span class="ident">p</span><span class="punct">.</span><span class="ident">command</span> <span class="punct">==</span> “<span class="ident">mongrel_rails“</span> <span class="punct">}</span>
Atau
<span class="ident">local</span> <span class="punct">=</span> <span class="constant">Rush</span><span class="punct">::</span><span class="constant">Box</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(’</span><span class="ident">localhost‘</span><span class="punct">)</span><br /><span class="ident">remote</span> <span class="punct">=</span> <span class="constant">Rush</span><span class="punct">::</span><span class="constant">Box</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(’</span><span class="ident">my</span><span class="punct">.</span><span class="ident">remote</span><span class="punct">.</span><span class="ident">server</span><span class="punct">.</span><span class="ident">com‘</span><span class="punct">)</span><br /><span class="ident">local_dir</span> <span class="punct">=</span> <span class="ident">local</span><span class="punct">[’/</span><span class="regex">Users</span><span class="punct">/</span><span class="ident">adam</span><span class="punct">/</span><span class="ident">myproj</span><span class="punct">/‘]</span><br /><span class="ident">remote_dir</span> <span class="punct">=</span> <span class="ident">remote</span><span class="punct">[’/</span><span class="regex">home</span><span class="punct">/</span><span class="ident">myproj</span><span class="punct">/</span><span class="ident">app</span><span class="punct">/‘]</span><br /><span class="ident">local_dir</span><span class="punct">.</span><span class="ident">copy_to</span> <span class="ident">remote_dir</span><br /><span class="ident">remote_dir</span><span class="punct">[’**/</span><span class="regex">.svn</span><span class="punct">/‘].</span><span class="ident">each</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">d</span><span class="punct">|</span> <span class="ident">d</span><span class="punct">.</span><span class="ident">destroy</span> <span class="punct">}</span>
Anda dapat membuat sesuatu dengan menggunakan usual UNIX commands, Rush abstracts sebuah kumpulan dari sitem tasks dan memudahkan anda untuk menjalankan operasi dengan menggunakan Ruby yang Anda sukai dan Anda ketahui. Rush ini bisa menjadi security aspect dan hal yang menarik untuk dikembangkan dan dipelajari.
Sumber: Ruby Inside – A Ruby Shell That Abstracts System Operations Into Ruby Ones
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 31 Mar 2008
Sebagaimana yang disebutkan oleh Wikipedia, XMPP merupakan sebuah software opensource, XML merupakan sebuah protocol yang diharapkan dalam waktu dekat dapat dikembangkan untuk instant messaging dan memperbaiki informasi.
Digunakan pada project Gizmo, Google Talk, Pidgin, Kopete, dan masih banyak lagi aplikasi opensource Instan messaging yang lain. Bisa juga digunakan pada aplikasi lain yang Anda inginkan, misalnya untuk kembali memperbaiki pesan yang lama dan akan datang.
XMPP dapat digunakan dalam Ruby, yang pada dasarnya berasal dari XMPP4R library (Jabber4R dan Net::XMPP keduanya semi-abandoned), dan Frank Lamontagne (dari Ruby Fleebie) telah menuliskan sebuah tutorial/guide yang terdiri dari 2 bagian untuk menggunakan XMPP4R dengan sistem Instant Messaging. Pada bagian pertama merupakan penjelasan dasar, dan bagian kedua merupakan praktek dasar pada pembuatan sebuah client XMPP. Frank melanjutkan pembuatan tutorialnya tersebut dalam blog nya.
Anda mungkin juga akan tertarik dengan Jabber::Simple, sebuah Wrapper tentang XMPP4R oleh Blaine Cook yang membuat hal ini menjadi lebih sederhana. Aplikasi ini telah di update selama satu tahun, tetapi dengan mengurangi banyak operasi. seperti pembuatan sebuah object client, pengiriman pesan, dan penerimaan pesan pada sebuah single method call.
more resources: Ruby Inside: Introduction to XMPP and XMPP4R for Ruby Developers
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 28 Mar 2008

HotRuby merupakan gabungan dari JavaScript dan Flash virtual machine yang dapat dijalankan dengan menggunakan kode Ruby untuk di compile ke opcode oleh YARV (Yet Another Ruby VM).
Anda dapat menulis script Ruby dalam sebuah halaman web diantara tag, kemudian HotRuby akan mengekstraknya, lakukan perintah kirim agar bisa dicompile oleh remote script, kemudian return ke gabungan JavaScript dan Flash virtual machine untuk melihat tampilan pada halaman. Terdapat banyak penjelasan, termasuk physics Flash application (seperti yang tampak pada screenshot diatas), sebuah permainan pinball yang seru dan benchmarking script (yang menunjukkan bahwa HotRuby menjadi lebih cepat daripada Ruby 1.9).
Tersedia juga Live “do it yourself” coding environment jika anda ingin melakukan tes dengan menulis beberapa kode yang anda miliki.
Sumber: Ruby Inside-HotRuby: A JavaScript & Flash Virtual Machine That Runs Ruby
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 27 Mar 2008

Halcyon merupakan sebuah framework app web baru yang menarik, dibuat oleh Matt Todd dan ditulis dalam bahasa Ruby. Yang membuat Halcyon ini menarik yaitu sangat kecil dan cepat, seperti framework app web lain yang baru saja diluncurkan (misalnya Sinatra) yang menggunakan JSON (JavaScript Object Notation) untuk komunikasi dari dan ke server. Hal ini membuat Halcyon menjadi lebih mudah dalam menjalankan aplikasi AJAX.
Bonus lain yaitu kode source yang dimiliki Halcyon berisi penjelasan dan perintah yang lengkap serta dokumentasi yang bagus.
Sumber:Ruby Inside-Halcyon – A Ruby and JSON Powered Web App Framework
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 26 Mar 2008

Ruby Waves adalah sebuah framework aplikasi web baru untuk Ruby yang dibuat oleh Dan Yoder. Jika dilihat, pada bagian permukaan akan tampak seperti “Rails-like” tetapi framework Waves ini sebenarnya adalah generasi berikutnya dari Waves itu sendiri, merupakan sebuah jalan pintas untuk mempelajari Rails jika anda menginginkan nya. Dan mengatakan bahwa Waves “tidak lebih baik dari Rails” tapi realisasi dari evolusi yang dilakukan berdasarkan ide yang dikembangkan seperti halnya dalam framework Rails. Sebagai contoh, Waves mendukung lambdas request (request mapping untuk sebuah block, lebih baik dilakukan daripada menggunakan sebuah pola URL untuk mengontrol dan menjalankan), just-in-time resources, nested layouts, dan hot-patching. Waves juga memiliki produk yang bagus.
Dan telah menyelesaikan sebuah pekerjaan bagus dalam mendokumentasikan Waves, dikemas dalam bentuk Screencast, tutorial dan sebuah packed temporari official site. Tutorial tersebut mendemonstrasikan bahwa pembuatan sebuah app basic lebih mudah jika dibandingkan dengan Rails, meskipun terdapat beberapa tekhnik inisialisasi yang akan tampak tidak familiar.
Ruby Waves akan menjadi lebih menarik untuk dilihat jika baru, superior, frameworks ultra-flexible seperti Waves catch on, dengan banyak sekali support dan motion saat ini seperti: Rails dan Merb.
Sumber: Ruby Inside-Waves: A New Rails-like Web Applications Framework
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 25 Mar 2008

Ebb adalah sebuah web/HTTP server yang kecil, memiliki kecepatan tinggi yang didesain khusus untuk aplikasi hosting yang dinamis seperti halnya dalam framework pada Rails dan Merb. Desain yang serupa digunakan oleh Ruby daemons menggunakan EventMachine. Ebb itu sendiri ditulis dalam bahasa C dan disesuaikan dengan Rack.
Thin merupakan sebuah server web yang merupakan HTTP daemon dari Ruby yang memiliki kecepatan lebih baik dari pada Mongrel, dibuat pada bulan Januari. Permasalahan tersebut dibahas pada Ruby Inside dan selanjutnya muncul sistem yang lain seperti SwitchPipe pada bulan Februari dan Swiftiply yang selanjutnya juga dilakukan inovasi.
Sumber:Ruby Inside-Ebb: C-Powered Web Server That Uses Rack – Faster than Mongrel and Thin
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 24 Mar 2008

JavaServer Faces (JSF) adalah sebuah framework aplikasi Java untuk membuat Web-based user interfaces yang dibuat oleh Sun. Berbeda dengan frameworks web lain yang berjalan sesuai dengan perintah yang diberikan, JSF menggunakan komponen UI yang berhubungan langsung dengan network lain.
Rogério Pereira Araújo meletakkan dua bagian yang solid dalam tutorialnya yang mendemonstrasikan tentang bagaimana cara membuat aplikasi JFS menggunakan JRuby dan Jenis JDBC dari ActiveRecord.
Bagian pertama mendeklarasikan tentang JRuby dengan menggunakan beans diantara aplikasi dan setting up sebuah simple class. Bagian kedua mengarah pada defining models, berinteraksi dengan data base dan data penjelasan menggunakan komponen UI.
Dengan fleksibility yang dimiliki JRuby pada platform Java, tampak bahwa Ruby mampu, dengan banyak ekstensi mengganti yang dibutuhkan bahasa Java dalam berbagai situasi.
Sumber: Ruby Inside-Building JSF Applications with JRuby and ActiveRecord-JDBC
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 22 Mar 2008
ActiveMerchant adalah sebuah buku baru yang ditulis oleh Cody Fauser, seorang developer yang banyak mengetahui serta menangani project-project Active Merchant. Buku ini diproduksi oleh Geoffrey Grosenbach. Dalam buku ini terdapat PeepCode yang berisi tentang Active Merchant Ruby library dan Rails plugin (referensi Ruby Inside yang lalu).
Active Merchant library merupakan bagian dari Shopify sistem e-commerce yang sempurna serta dapat berinteraksi langsung dengan gateways payment dari kode Ruby dan Rails, dibuat untuk menangani puluhan dari ribuan gateways payment sejak tahun 2006 termasuk di dalamnya PayPal, Authorize.Net, dan TrustCommerce.
Buku milik Cody ini tersedia dalam format PDF, dibuat dalam bentuk diagram bantu serta snippets kode sehingga lebih mudah dibaca dan dipelajari. Dalam buku ini terdapat 74 halaman dengan harga $9 memberikan kemudahan bagi anda, membantu siapapun dalam menangani segala sesuatu yang berhubungan dengan payment processing dan payment gateways dari aplikasi ruby dan Rails.
Sumber: Ruby Inside – ActiveMerchant E-Book by Cody Fauser
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 19 Mar 2008

Processing dikenal sebagai open source bahasa pemrograman yang digunakan oleh pelajar dan kalangan kreatif, seperti seniman dan desainer yang berhubungan dengan desain grafis dan Animasi. Seperti halnya dengan Node Box yang merupakan open source aplikasi program animasi 2D dan grafik.
Processing sering kita jumpai ditulis dalam bahasa pemrograman Java, tapi sekarang JRuby pun dapat berinteraksi langsung dengan framework processing melalui kode Ruby. Yang dibutuhkan untuk melakukan hal ini yaitu dengan menginstal JRuby dengan sistem operasi OS X, tapi dengan contoh kode program yang dapat dilihat dalam Shoebox. Jika anda ingin menggunakan aplikasi yang berhubungan dengan art, graphical experiments, atau hanya seputar Doodle dapat Anda coba dengan menggunakan Instalasi JRuby.
Sumber: Ruby Inside : Using the Processing Graphics System from Ruby
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 15 Mar 2008
Ruby dianggap sebagai bahasa pemrograman yang fleksibel dan bebas,
serta mudah dan praktis untuk dipelajari.
Selain itu Ruby juga kaya akan fitur-fitur dan bermaca-macam Library yang menarik dan berguna dalam mendukung sistem operasinya.

Doodle merupakan sebuah Library pendukung dari bahasa pemrograman Ruby yang menarik dan berfungsi dalam proses pembentukan dan pendefinisian Ruby Classes.
Meliputi pembentukan accessors, setters, dan relationships antara Ruby classes.
Selain itu Doodle mendefinisikan obyek dalam sebuah single line, beserta default values, initial values, dan even validations.

Doodle semakin mempermudah dan menambah kemudahan dalam sistem pengoperasian Ruby.
Sehingga Doodle seharusnya bisa menjadi bagian dari base language. Dan semakin membantu Ruby agar menjadi bahasa pemrograman yang lebih populer.
Sumber: Ruby Inside – Doodle: A New Way To Build and Define Ruby Classes
Baca Selengkapnya…
Ditulis oleh Hendy Irawan tanggal 13 Mar 2008
Logo Resmi Ruby telah tersedia dan sudah bisa didownload
dibawah lisensei Creative Commons Attribution-Share Alike. Format-format yang tersedia adalah Illustrator/SVG/PDF/PNG.
Baca Selengkapnya…
Ditulis oleh Arie Kusuma Atmaja tanggal 12 Jan 2008