Vim tidak bisa jalan karena versi libruby tidak sesuai

Ceritanya dapat koneksi bagus pas main ke Gongshin. Langsung upgrade semuanya, dari Mac AppStore, brew, composer, npm, dll, sampai ruby gem.

Keesokan harinya saat buka vim, dapat error seperti ini

dyld: Library not loaded: /usr/local/opt/ruby/lib/libruby.2.3.0.dylib
 Referenced from: /usr/local/bin/vim
 Reason: Incompatible library version: vim requires version 2.3.1 or later, but libruby.2.3.0.dylib provides version 2.3.0
[1] 33234 trace trap vim

Error-nya sih sudah jelas. Tapi tetep cari solusinya di internet. Ternyata tidak ada yang memuaskan.

Tanya di facebook group Vim Indonesia, malah di-like. Saya heran juga, kenapa di-like? 😕 Apa dia senang kalau saya kesulitan? Apa dia suka melihat vim tidak bisa jalan? Atau dia suka dengan error? Ntahlah…

Saat coba brew reinstall ruby, katanya sudah terinstall 2.3.1. Akhirnya saya coba telusuri sana-sini, dan menemukan /usr/local/Cellar/ruby/ mengandung dua versi, yaitu 2.3.0 dan 2.3.1.

Saya coba remove ruby

brew remove ruby

Lalu dapat message

Uninstalling /usr/local/Cellar/ruby/2.3.0... (1,260 files, 19.0M)
ruby 2.3.1 is still installed.
Remove them all with `brew uninstall --force ruby`.

Aha! Berarti aman sudah ini. Tinggal di-link saja dengan brew link ruby.

Tada!! Vim sudah bisa dijalankan kembali.😀

How to use Illuminate/Validation outside of Laravel

How to use Illuminate/Validation outside of Laravel

Ok, judulnya english, tapi isinya Indonesia.😐

Kebetulan hari ini ada pertanyaan di Facebook Group Laravel Indonesia tentang bagaimana cara menggunakan Validator-nya Laravel tapi bukan di dalam project Laravel?

Ini dia enaknya Laravel, kita bisa menggunakan component-nya di luar Laravel itu sendiri. Ngg… sebenernya bukan cuma Laravel sih. Symfony, ZF, CakePHP, Aura, dll juga bisa digunakan component-nya di luar framework-nya sendiri. Mungkin pengecualian untuk Yii. Component di Yii terlalu terikat dengan framework-nya. Sehingga sangat sulit menggunakan component di Yii tanpa Yii.😐 Itu salah satu alasan saya kurang suka Yii. Karena nggak mau berbagi dengan komunitas PHP secara keseluruhan.

Ok, kembali ke topik utama. Saya anggap kita bikin project from scratch. Pertama bikin folder project, setelah itu gunakan composer init untuk generate file composer.json

Ambil illuminate/validation dengan composer require illuminate/validation.

Buat file baru index.php dan load composer autoloader.

<?php
require __DIR__.'/vendor/autoload.php';

Kalau kita lihat di vendor/Illuminate/Validation/, ada file Factory.php. Factory adalah istilah yang umum digunakan untuk membuat suatu object.

Tambahkan code berikut.

<?php
require __DIR__.'/vendor/autoload.php';

$validator = new Illuminate\Validation\Factory();

Hmm, untuk membuat Validation\Factory kita membutuhkan Translator dari Symfony. Ini digunakan untuk menentukan error message dalam bahasa apa. Jadi kita tambahkan Symfony Translator

<?php
require __DIR__.'/vendor/autoload.php';

$trans = new Symfony\Component\Translation\Translator($locale = 'en');
$validator = new Illuminate\Validation\Factory($trans);

Nah, sekarang $validator sudah bisa digunakan😀 Mari kita coba

<?php
require __DIR__.'/vendor/autoload.php';

$trans = new Symfony\Component\Translation\Translator($locale = 'en');
$validator = new Illuminate\Validation\Factory($trans);

$validation = $validator->make([
  'name' => ''
  'email' => 'hello'
],[
  'name' => 'required'
  'email' => 'required|email'
]);

var_dump($validation->fails()); // Seharusnya true

Ok, that’s it😀 Selamat bereksperimen! Kalau ada pertanyaan, jangan ditanyakan.😐

Postman sebagai XML-RPC Client

Postman sebagai XML-RPC Client

Hari ini kebetulan saya harus bermain-main dengan XML RPC di WordPress karena mau bikin fitur auto-post dari aplikasi yang dibikin dengan NodeJS. Untuk mengakses xmlrpc.php di WordPress, awalnya saya menggunakan curl. Ternyata… Lihat ini deh kak. :'(

xml-rpc

Seperti yang terlihat pada screenshot, menggunakan XML di command line itu gak enak dan bisa bikin pusing. Padahal itu masih XML yang sederhana. Gimana kalau udah banyak? :O

Walaupun di command line kita bisa menggunakan “new line”, tapi tetap aja pusing. -_-

Postman to the rescue

Setelah melihat sekilas pola dengan menggunakan curl, saya langsung buka Postman. Tinggal set header dengan Content-type: text/xml, lalu pada body ganti menjadi “raw”. Dan, tadaaa… enak enak :3

postman-as-xmlrpc-client
Click to zoom in

Haruskah Validasi di Model?

Haruskah validasi dilakukan di Model (MVC)?

Saya pribadi tidak termasuk yang suka melakukan validasi di model. Kenapa? Saya coba membuat suatu kasus. Kasusnya adalah newsletter.

Ada beberapa pertanyaan jika saya membuat form untuk newsletter.

  1. Haruskah saya menyimpan email tsb?
  2. Bagaimana jika email tsb langsung dikirim ke 3rd party services seperti MailChimp?
  3. Haruskah saya menunggu error yang dikembalikan oleh MailChimp hanya untuk mengetahui email tidak valid?

Kisah di atas bahkan tidak membutuhkan Model. Sehingga lebih masuk akal jika validasi tidak dilakukan di model, tetapi pada saat request diterima, saat itulah request di-validasi.

Bagaimana pendapat anda?:/

 

ReSTful di MongoDB

Well, pagi ini saya membaca tentang Implementasi REST sederhana dengan MongoDB dan Silex. Saya jadi teringat pada saat awal-awal saya belajar MongoDB — yang mana pada saat itu saya bisa menggunakan ReST tanpa harus menggunakan aplikasi tambahan. Saya cukup menggunakan parameter –rest untuk mengaktifkan rest interface. Atau bila menggunakan daemon, kita bisa enable dengan konfigurasi net.http.enabled.

Tapi sayangnya fitur ini ditandai sebagai deprecated sejak MongoDB 3.2. Salah satunya dikarenakan banyak yang menggunakan MongoDB, tidak tau dan tanpa sengaja membiarkan ReST interface ini terbuka. Parahnya lagi, authentication juga di-non-aktifkan, sehingga bisa diakses oleh siapapun.

Sepertinya untuk saat ini membuat jembatan antara client dan MongoDB adalah opsi satu-satunya yang ada. Setidaknya, itu yang saya tau. Kalau anda punya informasi lebih, silahkan sampaikan pada kolom komentar.

My ArchLinux is back! \(^o^)/

My ArchLinux is back! \(^o^)/

Wohoo!! Akhirnya setelah sekian lama, saya bisa kembali menggunakan ArchLinux. Jadi ceritanya pada Q2-2015, laptop saya yang satunya mati karena colokan listriknya kecabut. Memang batre-nya juga udah soak sih. Masih bisa dihidupkan, tapi sayangnya hanya bisa masuk ke virtual console😥

Untuk memperbaikinya sebenernya gampang kalau ada akses internet. Tapi sayangnya setiap ke cafe untuk mengakses internet, selalu diganggu dengan Captive Portal. Tanpa browser modern, gimanalah masukkin username dan password di Captive Portal?:/ Coba pake elinks atau lynx, ternyata ada Captive Portal pake JavaScript pula. Pake PhantomJS ternyata gak bisa juga:/ Atau salah caranya kali ya?

Cari tempat internet yang ada ethernet cable-nya susah banget:/ Main-main ke office temen juga nggak ada yang pake ethernet cable. Jadi yaa sudahlah. Toh saya masih bisa pake komputer-komputer yang lain.

Bulan Desember 2015 saya backup semua konfigurasi di /etc dengan git (gak pake etckeeper) dengan harapan suatu saat bisa install ArchLinux lagi. Untuk saat ini bolehlah pake yang distro yang installer-nya ada GUI. Lalu saya install Ubuntu 15.10. Instalasi berjalan normal. Tapi ntah kenapa setelah restart, Unity tidak muncul. Hanya background picture😥 Jadi tetep gak bisa dipake. Dan saya males ngutak-atik Ubuntu, ntah kenapa:/ Gak se-fun kalo ngutak-atik Arch atau Gentoo.

Nah, pada 30 Desember 2016 jam 11-an malam di salah satu coworking space yang sepi, saya liat ada kabel ethernet (kebetulan saya tidak Malam Mingguan seperti manusia lain pada umumnya😐 #sh!t ). Langsung aja colok, boot dengan ArchLinux live, ping ke google, dan tadaa!! Ternyata bisa😀

Langsung sikat partisi yang dihuni oleh Ubuntu dengan mkfs.ext4 /dev/sda5. Lalu ikuti instruksi instalasi.

Jangan lupa juga ganti font di virtual console dengan setfont Lat2-Terminus16. Daftar font bisa diliat di /usr/share/kbd/consolefonts. Supaya jadi permanent, jangan lupa tambahkan FONT=Lat2-Terminus16 pada /etc/vconsole.conf

As VIM user, supaya lebih enak, ganti tombol Escape dengan Capslock. Caranya paling gampang copy dari /usr/share/kbd/keymaps/i386/dvorak/dvorak-programmer.map.gz ke /usr/local/share/kbd/keymaps/personal.map (jangan lupa gunzip). Lalu ubah Escape dan Capslock. Supaya permanent, tambahkan KEYMAP=/usr/local/share/kbd/keymaps/personal.map ke /etc/vconsole.conf

Setelah install beberapa package untuk network, baru bisa login ke Wifi dengan menggunakan wifi-menu atau nmtui (btw gambar di atas itu pake nmtui).

Mount partisi /home dan /opt, lalu generate ulang /etc/fstab dengan genfstab, reboot deh.😀

Lalu install package yang diperlukan seperti desktop environment, git, vim, emacs, steam, dll.

Fuahh… rasanya nikmat sekali bisa kembali menggunakan ArchLinux😀

Global Git Ignore

Global Git Ignore

Dalam satu team, bisa jadi editor yang digunakan berbeda-beda. Ada yang menggunakan IDE seperti WebStorm, NetBeans, whatever. Dan saya sering jengkel dengan commit yang mengikutsertakan file-file yang tidak seharusnya di-commit.

Pada kasus WebStorm (atau JetBrains IDE lainnya), bisa jadi programmer mengikutsertakan folder .idea, atau nbproject pada NetBeans. Folder ini tidak seharusnya dimasukkan ke VCS (Versioning Control System).

Pengguna Windows juga sering mengikutsertakan file seperti Thumbs.db. Lain lagi dengan pengguna Mac OS X yang seringkali memasukkan .DS_Store ke VCS.

File-file tersebut tidak perlu dimasukkan ke VCS, dan tidak perlu juga dimasukkan ke .gitignore pada root project.

Yang paling membuat saya heran,

  • Apa mereka ini tidak melakukan review terlebih dahulu sebelum commit?:/
  • Bukannya kalau menggunakan fitur VCS di IDE (atau Git GUI) ada check list sebelum commit?
  • Apa semuanya langsung menggunakan git add . ?!?

Seharusnya sebelum melakukan commit, programmer melalukan review terlebih dahulu dengan git status. Pastikan yang masuk ke staging hanya file-file yang relevan dengan task yang dikerjakan.

Jika tidak sengaja memasukkan file yang tidak seharusnya, kan bisa remove dan commit ulang dengan menggunakan git commit --amend.:/

Solusi

Untuk kasus-kasus seperti ini, gunakanlah global git ignore. Ini sama dengan file .gitignore pada project anda, tapi berlaku secara global dan tidak perlu dimasukkan pada tiap project. Global yang dimaksud di sini dalam lingkup user, bukan system-wide.

Kita bisa cek global git ignore sudah di-set atau belum dengan perintah

git ignore --global

By default lokasi global git ignore ada di ~/.config/git/ignore. Cukup tambahkan pattern pada file tersebut, and done!

Untuk list yang biasa dimasukkan ke global git ignore, bisa anda cek di https://github.com/github/gitignore/tree/master/Global atau https://www.gitignore.io/

Untuk informasi lebih detail, silahkan periksa manual dengan man git-ignore dan man git-config, cek pada core.excludesFile.

Hufftt… malah jadi curhat -_-