Cuma 4.8 fps

Iseng2 nyoba bikin puluhan ribu kubus pake OpenGL. Eh taunya cuma dapet 4 fps pas bikin 30ribu kubus 🙁

Dijalanin di atas Ubuntu 8.10 di mesin MacBook generasi paling awal: Core Duo 1.83 GHz, 2GB RAM, Intel 945GM. Compiz dimatikan.

Cobain dong..

$ sudo apt-get install mesa-common-dev libglu1-mesa-dev libsdl1.2-dev
$ wget -O kubus.c http://gist.github.com/raw/31070/7d9fa6f768d1e17a5b5c3a4fac0513c968aed191
$ wget -O Makefile http://gist.github.com/raw/31070/b33b6de85207141642433b26b294c2ce9885d5b2
$ make
$ ./kubus 30000

Pindahin pointer mouse ke tengah2 window dan tunggu sekitar 10 detik sampe keterangan fps-nya muncul.

Nyoba2 layouting di Prefuse

Bikin sesuatu yg bernama LevelLayout. Terpaksa dibikin berhubung NodeLinkTreeLayout yang diharapkan tuk bekerja ternyata tidak bekerja. Yaa.. sekalian lah.

Pake data versi lengkap tetep aja lemotubbies. Jadi bikin data versi rada kecil namun komplit. Uh, ini apa emang musti dioptimasi atau emang prefusenya aja yang dodolz?

Oya, sekarang kodingan udah ditaro juga di github. Coba diintip di http://github.com/fajran/ubuntu-pkg-vis-prefuse/tree/master

Tunnel koneksi

Sebagai pengembang BlankOn, maka salah satu server yang sering saya dikunjungi adalah yeyen alias irgsh alias dev.boi. Namun, mengakses server itu dari sini perlu ditemani oleh sebungkus indomie yang belum dimasak sehingga bisa masak sambil nungguin koneksi beres xD Ini apa koneksi Internet di Belanda kurang cepet tuk ngakses mesin tsb? Di Finlandia kabarnya juga seperti itu =P

Untungnya saya punya akses yang lumayan cepat ke sebuah mesin yang punya koneksi lumayan cepat ke mesin yeyen.. Dengan kata lain, ada mesin perantara yang punya koneksi lumayan ke saya dan yeyen. Hal ini berarti saya bisa menggunakan mesin tersebut untuk dijadikan tukang ojek seluruh data yang mau saya kirim/terima ke/dari mesin yeyen =D

Kalau mau mengakses layanan http dengan browser, saya biasanya membuka tunnel via ssh dengan menggunakan socks proxy. Sintaksnya kira2 seperti ini.

$ ssh -D12345 mesin.perantara

Port 12345 adalah port dari socks proxy yang akan digunakan. Browser tinggal diatur agar menggunakan socks proxy pada port tersebut supaya koneksi dilewatkan melalui mesin perantara.

Namun.. berhubung koneksi dari tempat saya itu sudah cukup cepat tuk mengakses situs2 lainnya, mengapa seluruh koneksi harus dilewatkan ke mesin perantara terlebih dahulu? Maka dari itu, akan lebih baik apabila kita bisa memilah-milih koneksi mana yang mau dilewatkan atau langsung.

Konfigurasi proxy di browser Firefox yang saya gunakan hanya bisa membuat pengecualian situs mana yang tidak dilewatkan melalui perantara. Yang saya inginkan adalah kondisi sebaliknya dimana saya ingin menentukan situs yang ingin dilewatkan melalui perantara. Untungnya, Firefox mendukung fasilitas konfigurasi proxy otomatis sehingga saya bisa mengatur lewat konfigurasi yang ini.

Caranya adalah dengan membuat berkas skrip konfigurasi proxy otomatis seperti yang berikut ini.

function FindProxyForURL(url, host) {
   if (shExpMatch(url, "*dev.blankonlinux.or.id/*") ||
       shExpMatch(url, "*irgsh.blankonlinux.or.id/*") ||
       shExpMatch(url, "*yeyen.blankonlinux.or.id/*") ||
       shExpMatch(url, "*cecunguk.blankonlinux.or.id/*") ||
       shExpMatch(url, "*.ubuntu-id.org/*")) {

      return "SOCKS 127.0.0.1:12345; DIRECT";
   }

   return "DIRECT";
}

Seperti yang tertulis di atas, koneksi ke beberapa situs akan dialihkan melalui SOCKS proxy di 127.0.0.1 port 12345. Jika proxy tersebut tidak tersedia (misalnya saya belum membuka koneksi tunnel tsb), maka koneksi langsung tanpa proxy (DIRECT) akan dibuat. Untuk koneksi menuju situs selain yang disebutkan di sana, koneksi langsung akan digunakan.

Simpan skrip di atas ke dalam sebuah berkas, misalnya proxy.pac. Lalu tunjuk berkas tersebut dari kolom pengaturan konfigurasi otomatis, misalnya file:///Users/iang/Sites/proxy.pac. URL tersebut akan menunjuk ke berkas yang ada di /Users/iang/Sites/proxy.pac. Silakan disesuaikan sendiri.

Urusan dengan koneksi http/https bisa dianggap sudah selesai. Namun, saya juga masih harus dapat mengakses mesin yeyen melalui koneksi ssh, misalnya untuk mengirim perubahan pada cabang Bazaar yang ada di mesin yeyen. Bagaimana supaya koneksi bisa dilewatkan melalui mesin perantara juga? tentu saja melalui tunneling =D

Caranya kira2 seperti ini.

$ ssh -L2222:yeyen.blankonlinux.or.id:22 mesin.perantara

Dengan menjalankan perintah tersebut, maka di mesin kita sendiri (lokal = L) akan dibuka port 2222 dimana koneksi menuju port tersebut akan diteruskan ke mesin yeyen.blankonlinux.or.id port 22 melalui si mesin.perantara.

Dengan ini, saya bisa menggunakan port tersebut saat mengirim perubahan pada cabang Bazaar. Misalnya seperti berikut.

$ bzr push bzr+ssh://[email protected]:2222/bzr/meuligoe/firefox/

Yayyaa.. begitulah kira2.. silakan dicoba2 sendiri =P

Memvisualisasikan dependensi paket Ubuntu

Sebelum ngerjain tesis, mari kita pemanasan dulu =P

Gambar di atas adalah cuplikan dari aplikasi kecil yang memvisualisasikan dependensi paket-paket di Ubuntu Intrepid Ibex (mudah2an sih ngga salah menyusun data dependensinya =P) Dibuat pake Java dengan bantuan Prefuse.

Kalau mau nyoba2, silakan donlod aplikasinya lalu coba2 masukkan sebuah nama paket. Kalau udah muncul di layar, klik nama paketnya supaya paket-paket lain yg terhubung ikutan muncul.

  1. Download

    $ wget http://labs.fajran.web.id/p/ubuntu-pkg-vis/ubuntu-pkg-vis-0.1.tar.bz2
    
  2. Extract

    $ tar xjf ubuntu-pkg-vis-0.1.tar.bz2
    
  3. Jalankan

    $ cd p
    $ java -Xmx512M -cp .:prefuse.jar id/web/fajran/vis/ubuntupkg/Main orig/
    

Yayaya.. memang sangat berat! Seluruh data paket dibaca dan masuk ke memory. Selain itu, proses layouting dg Force Directed Layout emang berat, apalagi kalau datanya banyak. Walau sebenarnya diharapkan untuk tidak terlalu berat2 amat berhubung tidak seluruh data ditampilkan. Namun sepertinya Prefuse masih bermasalah dalam hanya-mengutak-atik-data-yang-tampil-saja.

Kalau mau pake subset-tidak-lengkap data yang lebih kecil, coba ganti orig/ menjadi small/

$ java -Xmx512M -cp .:prefuse.jar id/web/fajran/vis/ubuntupkg/Main small/

Contoh paket yang lumayan dapat dilihat dalam data kecil ini adalah pinot, jadi coba cari paket tsb.

Source code? err.. berhubung aplikasi ini beneran tuk icip2 Prefuse, saya gak nyimpen source code nya xD ada sih, tapi udah babak belur di sana sini. Nanti aja kalo saya udah gapé pake Prefuse, saya bikin lagi aja yg baru =P

Menutup (banyak) aplikasi dengan cepat di Mac OS X

killall? ah ribet =P Cmd+Q? musti mengaktifkan aplikasinya dulu dong..

Lalu? Pertama2, buka application switcher dengan Cmd+Tab dan tahan tombol Cmd-nya supaya switcher-nya tidak tertutup. Untuk memilih aplikasi, tombol Tab dapat ditekan beberapa kali atau langsung saja pilih dengan menggunakan mouse.

Kalau tombol Cmd dilepas, maka aplikasi terpilih akan aktif dan muncul di depan. Namun jika tombol q ditekan, maka aplikasi terpilih akan ditutup! Kalau tombol Cmd tetap ditahan, maka aplikasi lain dapat dipilih dan ditutup. Cepat kan?

Kesimpulan: tekan Cmd+Tab dan tahan tombol Cmd-nya. Pilih aplikasi (dengan Tab atau menggunakan pointer mouse) lalu tekan tombol q untuk menutup aplikasi terpilih.

Keterangan tambahan: tombol Cmd itu tombol yg ada logo Apple 

Susunan repository, hardlink, dan mirroring

Pada repositori Ubuntu, ada direktori pool/ yang berisi seluruh berkas yang ada, mulai dari berkas paket deb, kode sumber orig.tar.gz, modifikasi tuk membuat paket diff.gz, dan lain-lain. Berkas-berkas ini ditujuk dari daftar isi yang ada pada berkas Packages dan Sources yang ada di bawah direktori dists/. Sebuah berkas, tentu saja bisa ditunjuk oleh lebih dari satu daftar isi, yang melambangkan versi dan arsitektur berbeda. Kalau ada berkas yang dipakai bersama, bisa lebih hemat tempat bukan?

Lain distro, lain pula teknik yang dipakai tuk menyusun repositori. Coba lihat repositori Fedora. Berkas-berkas paket, selain dapat ditemukan di bawah direktori Everything/, dapat juga ditemukan di bawah direktori Fedora/. Kalau dilihat sekilas, banyak duplikasi berkas di sana yang tentu saja kalau tidak diatur dengan baik, hanya membuang kapasitas harddisk. Dengan kata lain, tidak efisien!

Susunan repositori Fedora yang dibuat seperti itu belum tentu tidak memiliki maksud tertentu. Berhubung saya tidak familiar dengan Fedora termasuk repositorinya, saya hanya dapat menduga-duga saja. Total ukuran berkas paket di bawah direktori Fedora/ untuk i386 adalah sekitar 2.9 GB. Sedangkan total ukuran berkas di bawah direktori Everything/ adalah sekitar 12.6 GB. Sungguh perbedaan ukuran yang sangat besar bukan? Saya duga, paket yang ada di bawah direktori Fedora/ adalah paket-paket “pilihan” sedangkan yang ada di bawah direktori Everything/, sesuai namanya, adalah seluruh paket yang ada.

Penyusunan direktori seperti ini sebenarnya mempermudah urusan mirroring. Aplikasi rsync yang dapat digunakan untuk menyalin berkas “mentah-mentah” sudah bisa digunakan untuk membuat mirror sebuah repositori Fedora secara selektif, yaitu hanya repositori untuk versi dan arsitektur tertentu saja. Berbeda dengan menyalin repositori Ubuntu yang harus menggunakan aplikasi tambahan seperti debmirror jika ingin menyalin secara selektif.

Lalu bagaimana caranya agar tetap bisa mengatur susunan repositori seperti Fedora dan tetap bisa menjaga efisiensi penggunaan harddisk seperti Ubuntu? Pembuatan hardlink bisa menjadi jawaban! Dengan menggunakan hardlink, sebuah berkas dapat dibuat “salinannya” di tempat lain tanpa harus mengorbankan kapasitas harddisk karena berkas-berkas tersebut sebenarnya adalah berkas yang sama. Yaaa.. mirip pointer pada bahasa C yang menunjuk ke alamat memori yang sama. Dan, … repositori Fedora menggunakan cara ini! Berkas yang ada di bawah direktori Fedora/ merupakan hardlink ke berkas yang ada di bawah direktori Everything/ (atau sebaliknya? ah sama saja 🙂

Nah.. bagi para pemelihara mirror yang menggunakan rsync, untungnya rsync cukup cerdas untuk membaca informasi link ini. Berkas berbeda yang sebenarnya sama karena penggunaan hardlink ini dapat dideteksi sehingga sang mirror tidak perlu menyalin berkas yang sama lebih dari satu kali dan rsync akan membuatkan hardlink-nya secara otomatis. Hemat bandwidth, hemat waktu, dan tentu saja hemat tempat!

Caranya cukup dengan menambahkan opsi -H pada saat menjalankan rsync.

$ rsync -avH server::modul/ /tujuan/

Sekian dulu, nanti terlalu panjang =P