After successfully going to ITTELKOM Bandung West Java Indonesia (Institut Teknologi Telkom / Telkom Technology Institute) in regards to introducing Ruby on Rails last year, this year the ambush would be at Unas Jakarta Indonesia (Universitas Nasional / National University) together with MySQL Indonesia Communities on Friday, September 11, 2009. 4:30pm – 5:30pm.

Speakers:

(1) Arie Kusuma Atmaja (Rubyist)Ruby itu apa sih?! (meaning: Ruby Introduction)

(2) Michael Smith (Ruby on Rails Developer)Ruby on Rails Introduction

(3) Idris Khanafi (Senior Database Administrator at Detik.Com)MySQL

RSVP @ Facebook Event. It’s totally FREE!.

Majulah Segenap Open Source Indonesia! Industry world and Education world must be united!

Have you ever wondered if you can search a piece of ruby codes inside all your gigantic macbook pro storage?

For example, you might want to search one of your codes that contains this code module AdpointDir

How would you do that? From a command line? Yes, that’s one option. Another option is: Ruby Importer

What I do to search that code on my 13″ Macbook Pro is just press Apple Command + Space to invoke Spotlight on the top right of my Mac OS X 10.5.8 Leopard Desktop. Then just type there module AdpointDir.

That’s one way to reach the file. Another way is using mdfind “module AdpointDir”.

This spotlight is really a must for a Serious Rubyist on Leopard! As we know since Leopard, we really rely on Spotlight, I even don’t need to have “QuickSilver” anymore to call my apps quickly because it’s been already indexed well on spotlight, anyway.

What I did to have this was after downloading the plugin from here I placed RubyImporter.mdimporter file to my ~/Library/Spotlight, there wasn’t Spotlight directory over there, I just created it by myself.

Then I opened my Terminal, go to that directory ~/Library/Sportlight/ and typed mdimport -L | grep Ruby and I saw RubyImporter on the list!

So what I did after that was tell my mac to re-index all Ruby files with this command:

mdimport -r ~/Library/Spotlight/RubyImporter.mdimporter

Then, welcome to the heaven! So whenever I need to search my ruby codes, Apple Command + Space + “class Twitter” for example, et voila! ;-)

Notes: I wrote this blog post intentionally because I wasn’t clear enough of README from RubyImporter. I hope this write-up makes me (and my ruby fellows around me) more clear. When I need to search my piece of codes in a smaller, more reasonable environments, for example inside one of Rails or Ruby projects, {1} I can just enter ViM, then type :vimgrep /regexp/ . to get what I want. Or, {2} do Apple Command + Shift + F to search my piece of code in my whole ruby projects that I opened using my Textmate.

We talked many various things, ruby stuffs, Behaviour Driven Development, Breaking the Ice of Ruby Conf Planning in Indonesia, deployment servers and tools, system architectures, application architectures, Travelling Experience, Life Experience. It’s great to have nice conversation and healthy discussion while having dinner there.

From left over there to right to left over here: Ronald, Michael Smith, Gozali, Widi Harsojo, Arie Keren, Rizki, Eddy Yuniar.

Read the rest of this entry »

Ada link bagus untuk siapa saja Rubyist yang sedang berusaha belajar Proxy Pattern. Tulisan tersebut ditulis oleh yang membuat authlogic, satu rubygem yang buat saya pribadi telah mengganti kedudukan restful authentication plugin yang dipandang bloated dan memang beda alirannya yang serba generate-generate melulu, dalam segala minimalisnya, yang kurang dari authlogic bagi saya mungkin adalah memodelkan ACL nya saja.

Mengenai Proxy, kalau di buku Ruby Design Patterns ada di bab 10, contoh yang diberikan juga mudah, sedari awal ditekankan menulis proxy itu semudah membuat metode itu sendiri, jadi di contohnya diberikan disana tentang skenario di bank dimana klien bisa memanage semua kegiatan bankings yang klien butuh. Jadi di buku tsb diceritakan bahwa Programmer bisa saja menulis satu object BankAccount siang malam berbulan-bulan kemudian menulis lagi klien-klien yang sudah terotentikasi siang malam berbulan-bulan lagi. Kemudian di user requirement bilang kalau klien itu ga mau object BankAccount di komputer mereka, mereka maunya punya kontrol akses ke object di lokasi manapun mereka berada. Maka disanalah Proxy pattern yang menjadi jawabnya.

Mengenai apa yang ditulis di buku Ruby Design Patterns tentang menulis proxy semudah menulis metode itu sendiri, link dari binarylogic memang membuktikan itu. Untuk lebih jelas lagi kalau Anda ingin explore, Anda bisa lanjut membaca sendiri referensinya di buku Ruby Design Patterns saja, disana dibahas proteksi proxy nya bagaimana, bagaimana virtual proxy, dan memberikan contoh produk nyatanya di dRb. Satu bab tepat sebelum dibahas lagi tentang pattern Decorator.

Buat yang ingin memahami dulu Proxy itu apa sih, ini ada link nya di Wikipedia semoga bisa ada gambaran (di Wikipedia contohnya pakai Java, jadi kalau mau Design Patterns yang contohnya pakai Ruby, bisa refer ke link binarylogic saja).

Ini ada cuplikan UML nya Proxy (source: Wikipedia Proxy Pattern):

400px Proxy Pattern Diagram.svg

Ngomong-ngomong, diperhatikan dari link-link di blog posting kali ini, terbukti toh kalau dari Googling bisa dapat anugerah harta karun tak terhingga?! Makanya yang teman-teman mahasiswa yang sekarang sedang berjuang ingin kuat di Ruby harus bisa “titen” (itu istilahnya orang Jogja, Indonesianya kurang lebih “terbiasa” / “used to” kalau di Inggris) dengan Google.

Tetap SEMANGAT!

UPDATE

UPDATE Dec 2009: I have extracted this tips and trick to my wiki

(1) Masuk ke direktori

~/Application Support/TextMate/Bundles

(2) Taruh Bundle Textmate disini

(3) Reload bundle Textmate

osascript -e 'tell app "TextMate" to reload bundles'

Selesai!

Berikut cuplikan lengkap dari Terminal Macbook Pro 13″ saya, di cuplikan ini saya tambahkan bundle textmate untuk rspec, cucumber, dan git. Selamat Bersenang-senang!

hardhitter:Application Support arie$ cd ~/Library/
hardhitter:Library arie$ cd Application\ Support/
hardhitter:Application Support arie$ cd TextMate/
hardhitter:TextMate arie$ ls
Themes
hardhitter:TextMate arie$ mkdir Bundles
hardhitter:TextMate arie$ cd Bundles
hardhitter:Bundles arie$ git clone git://github.com/dchelimsky/rspec-tmbundle.git RSpec.tmbundle
Initialized empty Git repository in /Users/arie/Library/Application Support/TextMate/Bundles/RSpec.tmbundle/.git/
remote: Counting objects: 46453, done.
remote: Compressing objects: 100% (10734/10734), done.
remote: Total 46453 (delta 33183), reused 46206 (delta 33056)
Receiving objects: 100% (46453/46453), 5.94 MiB | 29 KiB/s, done.
Resolving deltas: 100% (33183/33183), done.
hardhitter:Bundles arie$ git clone git://github.com/bmabey/cucumber-tmbundle.git Cucumber.tmbundle
Initialized empty Git repository in /Users/arie/Library/Application Support/TextMate/Bundles/Cucumber.tmbundle/.git/
remote: Counting objects: 1613, done.
remote: Compressing objects: 100% (737/737), done.
remote: Total 1613 (delta 963), reused 1281 (delta 744)
Receiving objects: 100% (1613/1613), 246.76 KiB | 10 KiB/s, done.
Resolving deltas: 100% (963/963), done.
hardhitter:Bundles arie$ git clone git://gitorious.org/git-tmbundle/mainline.git Git.tmbundle
Initialized empty Git repository in /Users/arie/Library/Application Support/TextMate/Bundles/Git.tmbundle/.git/
remote: Counting objects: 4871, done.
remote: Compressing objects:  11% (16Receiving objects:   2% (98/4871), 20.00 Kiremote: Compressing objects:  14% (215/1534) Receiving objects:   3% (147/4871),remote: Compressing objects: Receiving objects:   5% (255/4871), 44.00 KiB | 9 Kremote: Compressing objects:  27% (41Receiving objects:   6% (297/4871), 60.00 Kremote: Compressing objects:  30% (461/1534) Receiving objects:   7% (341/4871),remote: Compressing objects: Receiving objects:   9% (466/4871), 92.00 KiB | 7 Kremote: Compressing objects:  43% (66Receiving objects:  11% (536/4871), 100.00 remote: Compressing objects:  46% (706/1534) Receiving objects:  11% (553/4871),remote: Compressing objects:  62% (952/1534) Receiving objects:  15% (731/4871),remote: Compressing objReceiving objects:  16% (780/4871), 172.00 KiB | 10 KiB/sremote: Compressing objects:Receiving objects:  16% (814/4871), 172.00 KiB | 10 remote: Compressing objects:  78%Receiving objects:  17% (829/4871), 188.00 KiB remote: Compressing objects:  84% (1289/153Receiving objects:  17% (840/4871), 1remote: Compressing objectsReceiving objects:  17% (850/4871), 244.00 KiB | 18 Kremote: Compressing objects: 100% (1534/1534), done.
remote: Total 4871 (delta 3239), reused 4861 (delta 3235)
Receiving objects: 100% (4871/4871), 617.75 KiB | 24 KiB/s, done.
Resolving deltas: 100% (3239/3239), done.
hardhitter:Bundles arie$ osascript -e 'tell app "TextMate" to reload bundles'
hardhitter:Bundles arie$ 

(1) Textmate

Kelebihan-kelebihan kalau dengan Textmate yang paling saya rasakan:

(1.1) Satu dari Peralatan-peralatan Perang yang paling menyokong kesuksesan perang (in English I would say: Handy)

Saya adalah pengguna aktif ViM dan Emacs. Untuk melakukan quick-edit saya hanya menggunakan kedua tool tadi. Tetapi kalau sudah masuk di zona yang rumit bin njelimet, saya harus mengeluarkan peralatan perang tenaga dalam dengan Textmate karena buat saya pribadi hanya Textmate yang bisa melengkapi kebutuhan saya akan begitu banyak (in English I would say: bazillions) shortcut-shortcut, auto-completion, bundle-bundle yang super. RUARRR BIASA!!!

(1.1.1) Nested scope

Di Textmate saya bisa membuat sendiri syntax highlighting yang kompleks.

(1.1.2) Snippet

Jadi dengan segala kemudahannya, snippet Textmate adalah sedikit teks yang bisa saya masukkan. Jadi misalkan kalau di Ruby begini, saya cukup menekan 3 tombol yaitu cla untuk mendapatkan banyak pilihan membuat class di Ruby. Itu lengkap dengan kalau mau bikin bentuk class biasa, class inheritance, dan seterusnya! Contoh lain misalkan kalau di Rails begini, saya cukup menekan 3 tombol Apple Command – Shift – T untuk mendapatkan listing method-method apa saja yang saya punya di dalam class di file yang saya koding sekarang! Ini sungguh sangat memudahkan saya, kalau di ViM, trik saya adalah mem-fold saja dulu semua codes, sehingga terlihat listing method-method apa saja yang saya punya di class file yang sedang saya koding.

(1.1.3) Bundle

Jadi kekuatan Textmate akan grammar, snippet, makro, command, and template dikoleksi dalam fungsionalitas suatu bundle. Jadi hal-hal default seperti bundle Svn, bundle TODO, bundle Blogging, bundle Markdown, bundle YAML, semuanya ada by default oleh Textmate. Kalau yang belum ada, jadi tinggal pasang sendiri dengan gampang BANGET, seperti bundle Git, bundle Rspec, bundle Cucumber, dan masih banyak lagi banget banget banget dah jadi tinggal disesuaikan dengan kebutuhan saja. Dulu pernah ada rekan kerja saya (ya, dari Eropa), dia bahkan bikin sendiri bundle nya, jadi Ruby Coding Convention sudah bisa otomatis jalan dengan Textmate! Tuch kan, jalan lagi satu good practice principle mengenai “Automate it” dalam programming?! ;-) Harga memang nggak bohong! Ada harga = Ada rupa!

(1.2) Kelengkapan Referensi

TextMate Book

Referensi Textmate dalam segala wujud sulit untuk ditandingi. Di menu pojok kanan atas Textmate di bagian Help disana ada jawaban solusinya.

Kalau mau referensi yang berbentuk video pun juga tak kalah kurangnya. Saya adalah seorang yang setiap hari selalu mempraktikkan Accelerated Learning dan terus-menerus berjuang keras meningkatkan itu semua. Satu dari teknik yang juga disebut dari Metoda Quantum ini adalah otak manusia itu seperti hutan belantara, sangat bebas meraja-lela bila didukung suasana di saat gelombang alpha. Jadi adanya hal-hal yang sangat luas, saya menorehkannya di Textmate juga, untuk kemudian dipasang (langsung di synchronize antar Textmate dan Blog) di Hot Copy Paste tanpa ada edit sama sekali. Ini adalah strategi saya untuk menyiasati pergantian kertas ke komputer. Kalau menggunakan kertas caranya sama persis seperti yang biasa didapat di buku-buku semodel “Mr Brain” bekerja, cukup beri garis saja di samping kanannya (mungkin kalau kurang jelas mengenai Cara Bagaimana Otak Bekerja ini bisa ke rujukan referensi saja berhubung topik ini sangat panjang bila dibahas dan tidak akan ada habis-habisnya, intinya barang siapa yang mengetahui cara kerja otak dan mau memaksimalkannya dari emosi yang berapi-api, maka dia sukses!). Kembali lagi ke video, Jadi kalau screencast Blogging using Textmate lengkap disini. Tips dan trik koding Ruby dan juga Rails dengan Textmate juga lengkap disini. Link-link referensi selengkapnya ada di koleksi Delicious saya.

(1.3) Dukungan TRUST komunitas

Dukungan TRUST komunitas merupakan satu dari faktor kunci yang sangat penting. Ketika CI telah menjadi satu hal serius yang etis dijalankan di organisasi Anda, misalkan dengan Cucumber dan RSpec, maka Textmate pulalah jawabannya. Ketika Javascript sudah menjadi bagian kunci terpenting dalam denyut jantung organisasi Anda, maka Textmate dan jQuery pulalah jawabannya (disini saya menekankan juga pentingnya penyelaman Javascript yang mendalam yang mustinya sangat bisa dicapai dari latihan memahami jQuery). Ketika Timeboxing yang merupakan satu dari inti teknik-teknik kunci akan kesuksesan Agile Project Management di organisasi Anda, maka Textmate pulalah jawabannya.

Kekurangan-kekurangan Textmate dan yang paling saya rasakan kalau tidak dengan Textmate:

(1.1) Textmate sedari dulu tidak bisa split

Split adalah fitur standar editor serius. Entah dari dulu hingga sekarang Textmate masih saja tidak bisa split. Saya benci kenyataan itu. Tapi saya tidak bisa lepas dari belenggu kecintaan saya akan harus pakai Textmate (berhubung saya menimbang-nimbah kelebihan-kelebihan yang dimiliki Textmate yang kalau saya memakai selain Textmate saya akan sungguh-sungguh merasa sangat kehilangan)

(1.2) Sering kalau saya sedang ssh ke mesin remote, saya tidak bisa menggunakan Textmate

Satu dari rekan sejawat mengakali hal ini dengan solusi selalu rsync antar kedua mesin, yaitu mesin server dan laptop mac nya. Tetapi saya melihat kenyataan ini sungguh mengganggu. Karena saya juga pengguna aktif ViM dan Emacs maka bila saya lihat ada satu dari dua tools tadi terinstalasi di mesin server, maka saya tinggal dengan mudah menggunakan tool berbasis command line tersebut.

(1.3) Textmate hanya ada di Mac

Ini dia momok besarnya, kalau saya ada di Linux terpaksa tidak ada Textmate, dan itu mempengaruhi mood, sehingga ujung-ujungnya berpengaruh pada tingkat fokus saya. Begitu juga kalau saya terpaksa menggunakan Windows di kampus-kampus kalau dalam pada waktu itu saya yang menjadi pemateri ketika diadakan kegiatan seminar apa workshop apa pelatihan, itu juga yang menyebalkan, tidak ada Textmate = Arie ngomel-ngomel ga keruan.

(2) Hardware

Satu contoh kecil saja misalkan keyboard macbook pro 13″ saya, emmmpuuuuk banget! Bikin betah deh lama-lama sama Mac!

Ada lagi layarnya, terang banget, kinclong sama mulussss abisss …

Apa-apa saja yang tampil di layar macbook pro 13″ saya menjadi indah selalu!

Ada lagi baterenya yang di macbook pro 13″ saya ini integrated, jadi tahannya 7 jam! Mau nongkrong kopdar di StarBuck sambil online mah hayo aja … hajarrr!!

Belum lagi Trackpadnya bisa 4 jari, bisa 3 jari, bisa dengan kombinasi-kombinasi asik lain yang selain Mac kenyataan hidup seperti ini lewat! Tadi ada kekuatan Textmate tapi kalau tidak pakai trackpad Mac ya jadi kurang sreg saya. Ibarat ingin punya anak dengan pasangan yang sudah tubektomi.

Ini saya cuma membahas semampu kapasitas saya yang bukan dari background di layer bawah. Apalagi kalau dibahas hardware ini kalau yang lihat dari layer bawah!

(3) Sudah nyaman dengan fasilitas-fasilitas di Mac

Buat saya Apple Dashboard Widget itu tidak tergantikan. Buat saya kenyamanan Skype di Mac juga tidak bisa digantikan.

Apa lagi ya, mungkin begitu saja dulu, ada hal-hal yang kurang saya sukai di Mac, yaitu walau memang one stop solution menjadi hal yang mutlak dalam hidup saya, tapi itu harus saya bayar dengan Mac nyampah!

Jadi misalkan begini, di Mac sudah ada by default Ruby, nah tapi kan itu Apple hanya menemukan cara untuk mendapatkan masalah baru! Dengan adanya Ruby diinstal by default dari sistem Leopard, maka kalau ada update saya jadi kesulitan! Kesulitan disini adalah saya keberatan untuk menunggu versi Ruby yang sudah di Apple kan oleh tim Ruby Apple. Ogah saya nunggu! Jadinya original ruby di Mac saya replace namanya menjadi ruby.orig lalu saya pakai macports biar bisa up-to-date (saya punya ruby yang dari macports maupun ruby yang instalasi kompail sendiri) supaya bisa bersenang-senang. Itu satu.

Lalu yang kedua, Mac kalau sudah apa-apa disediakan, misalkan saja svn, iya kalau saya memang sedang pakai svn, tetapi kalau saya sudah tidak pakai svn? Masak saya harus remove satu satu file file yang berkaitan dengan svn??? Halo? Saya pernah tanya ini ke milis-milis di komunitas mac, googling sana-sini, tetap aja dapat jawaban bodoh! hapus sendiri :( D’OH! Enakan apt-get remove kalau di Ubuntulinux! Ini pasti teman-teman kalau yang mahir di layer rendah, mis. biasa di distro gentoolinux pasti bakal kesal banget sama ini, ya iya, biasa fleksibel dan merdeka, eeeh dijajah …

Apalagi yang saya kurang sukai di Mac? Ada beberapa Banci IT di beberapa komunitas Mac! Ya, saya cuma respek terhadap komunitas apple yang memang benar-benar mengerti Apple, tetapi kepada banci-banci Apple yang memakai Apple cuma untuk buat gaya-gayaan, style, ngedapetin cewek, pamer laptop doang padahal isinya Microsoft Word bajakan trus abis gitu ga bisa pakai lagi!

Kalau sudah ngobrol soal kultur di dunia Mac, yang saya kurang suka lagi adalah kultur jual-beli itu. Ya pasti jadi ada imbas aja kalau ada udang di balik batu, selalu ada tarik-menarik kepentingan, tidak sama dengan komunitas yang memang benar-benar murni open-source! Jadi kalau di linux, biasanya saya sama teman-teman tinggal kalau perlu tinggal ngomong eh kalau mau ini apa, oh itu gini, pakai ini, gratis, open-source, nah kalau Mac beda, ga semuanya gratis, seperti saya tadi cinta banget sama Textmate, tetapi saya benci pada kenyataan saya harus bayar software itu setengah juta dulu itu. Apa-apaan ini hah harus bayar?! Tapi gimana dong, sudah cinta banget nih. (dan begitu seterusnya rekursif tiada henti)

Ada lagi sih kekurangannya, tapi ini tidak begitu masalah buat saya, yaitu buat yang biasa menggunakan OS Windows, dan gamer, nah di Mac ga kayak di Windows :-) Ada rekan yang menginstal dual boot dengan windows buat bela-belain main game biar ga miring bin sinting kata dia sama load gawe. Tapi buat saya, sudah ada PSP3 ya ga masyalah ;-)

Jadi singkat cerita: Mac, I HATE you, but I LOVE you! And I only want to be with you!

Sebelum berakhir, aku akhiri blog posting kali ini dengan ungkapan cinta:

Menangis aku bergetar sekujur tubuh di pojok kamar belakang pintu bak kena guruh dan petir di siang bolong.
Dingin merasuk menjalar hingga ke tulang sumsum, ingin ku bicara, tapi apa daya aku bukan seorang yang biasa bergaul dengan manusia.
Tiadalah yang aku dapatkan dari kejelasan cinta.
Bahkan aku tak jelas apa aku tau apatah makna cinta dalam hidup ini.

Ingin aku teriakkan saja pecahkan segala yang menghalangi diri ini tuk bicara.
Semakin aku lawan semakin berat beban rasa hati ini.
Dada ini bergemuruh rasanya mau pecah!

Oh malam …

Aku mencoba untuk berkali-kali belajar bicara.
Aku bukanlah makhluk buta tuli dan bisu. Aku hanya perlu latihan untuk keseimbangan.

Semua membeku, semua dingin.
Mereka orang-orang normal dengan mudahnya berkata apa susahnya bicara?

Terima kasih Mama.

Terima kasih kawan… semua tlah membantuku bicara setelah sekian waktu yang kutempuhi ini.

Dan dalam pada itu, hanya kau yang setia menemaniku.

Cuma kamu, Mac …

Tiadanya dirimu membuktikan betapa berartinya dirimu dalam hidupku.

Terakhir, Catatan, saya tidak menanam saham, tidak mendapat keuntungan dari Macromates maupun Apple Inc. karena menulis blog posting ini, saya menulis ini karena saya cinta hidup saya!

Dan yang juga masih ada dalam agenda saya, iya, saya masih mencari belahan hati…

Malam ini merupakan malam yang kurang diruwetkan oleh tetek bengek detil-detil instalasi tool-tool buat Leopard Mac OS X di MacbookPro saya.

Jadi biasanya dulu itu kalau mau masang rmagick itu ya nginstal imagemagick dulu pakai macports, setelah itu baru nginstal rmagick pakai rubygem.

Nah tadi barusan itu sih kebetulan cuma kok ya ndilalahe beruntung ngono lho.

Saya langsung aja hajar dengan sudo port install rb-rmagick dan sukses! *senyumbelis

Ya itu mungkin adalah puncak gunung es dari masang ini itu di macbook pro baru nih sejak kemarin, kemarin malam, terus sampai tadi pagi, siang, malam, sampai barusan :-)

Jadi Selamat Bersenang-senang dengan Coding lagi !

Note. Jadi catatan ini juga bisa dibuatkan otomasinya kalau ada yang punya alokasi waktu untuk membuatkan bash script kalau punya Macbook Pro baru beli lalu biar tinggal diinstal dengan sekali enter.