Just Keep On Learning, Keep On Moving Forward

Mari kita perjelas kondisi medan global freelancing dalam bisnis IT: Ini adalah bisnis yang didikte oleh permintaan pasar. Konsumen adalah raja yang punya uang. Betapapun canggihnya skill Anda di suatu bidang, kalau tidak ada klien yang memerlukannya, Anda akan terlantar di sini.

Tentu saja, pernyataan ini ada konteks dan skopnya. Boleh jadi Anda hendak membuka pasar sendiri atau mengedukasi pasar agar mau membeli skill yang anda ‘jual’, tetapi lazimnya dalam konteks global freelancing, hal tersebut membutuhkan effort yang luar biasa.

Tetapi jujur saja, andaikata saya hanya berkutat  dengan skill Delphi (sempat populer tahun di kampus dahulu) saja, kemungkinan lebih besar saya tidak akan survive seperti sekarang di freelancing. Baru saja, hanya 11 entry project Delphi di elance.com, dan 16 entry di oDesk.com. Proyek pertama, kedua dan ketiga saya di freelancing berbasis Delphi. Selebihnya Flash & PHP, karena semakin  sulit menemukan offer proyek Delphi.

Dengan kartu Flash & PHP, alhamdulillah, survive dan bahkan banyak harus offload atau menolak kerjaan. Potensi income stabil di range $500-$600/minggu. (Memang tidak bisa dibandingkan dengan Anda – anda di sektor minyak dan finance, atau sektor artis dan pejabat, tapi saya cukup happy dengan itu :-) ).

Tetapi sekarang ini gelombang agaknya sedang menjauh dari platform andalan saya tersebut (Flash & PHP). Walaupun nampak masih dominan (Odesk: 911 jobs , Elance: 518 jobs) , namun kecenderungannya (demandnya) menurun, salah satu faktor utama disebabkan karena penetrasi Flash di ranah mobile yang kurang apik. Sebagaimana kita tahu, Iphone tidak mendukung Flash Player, dan banyak ragam handset Android belum mampu menjalankannya dengan baik (Spek Flash Player adalah untuk Android kelas atas dengan prosesor clock di atas 1 Ghz). Untuk PHP, barangkali ada alternatif – alternatif lain yang nampak lebih ‘clean’ mendukung ide MVC.

Demand yang menurun ini biasanya berefek ke hourly rate maupun harga proyek, seperti layaknya hukum ekonomi. Kalau barangnya sudah kurang kinclong maka harganya turun. Klien lebih cenderung menurunkan ekspektasi harga mereka atau berkurangnya peluang untuk long term project dengan hourly rate tinggi.

Barangkali benar, dalam pekerja IT, pengetahuan dan skill dalam teknologi tertentu adalah ‘barang dagangan’ mereka. Makin banyak barang dagangannya, semakin besar calon pembeli yang bisa tertarik. Tentu kita tidak menutup mata akan selalu ada kolektor ‘barang antik atau klasik’ yang boleh jadi bernilai tinggi. Bisa jadi akan ada klien yang datang dengan permintaan skill COBOL untuk mengupgrade atau memaintain sistem tua mereka.

Tetapi yang seperti ini tidaklah banyak jumlahnya, dan kita harus ingat, lanskap IT adalah lanskap yang rawan gempa. Perubahan terjadi dalam hitungan hari. Kalau Anda tidak terbiasa belajar dan mengadopsi paradigma baru, bersiaplah untuk tertinggal di ranah ini. Lantas, kalau saya ditanya, barang dagangan apa yang selanjutnya mau ditawarkan, saya akan jawab: “Saya akan siapin Ruby On Rails dan Android” :-)

Share

Animasi slow-motion yang halus dengan Flash

Beberapa waktu yang lalu seorang klien meminta dibuatkan flash menu yang berputar seperti layaknya bianglala.  Jika Anda hendak melihat hasil akhirnya, silahkan cek link berikut:  http://www.shiningpillars.com/CarouselApp/CarouselApp.html

Dalam aplikasi tersebut, klien ingin perputaran menu yang teramat sangat lambat dan halus. Teknik animasi tweening biasa sebenarnya baik-baik saja dan will do fine dalam banyak kasus, tetapi tidak akan memuaskan dalam animasi yang teramat lambat (pixel demi pixel).

Silahkan perhatikan demo berikut ini (tekan F5 jika Anda tidak melihat animasinya):

Bandingkan animasi tulisan “Test” yang pertama (atas) dengan yang kedua di bawah.
Saya menggunakan tweening library yang sangat handal TweenMax dari greensock. Untuk animasi pertama, saya cukup memakai statement ini dalam Actionscript 3 (seperti yang Anda saksikan, hasilnya kurang begitu halus):
TweenMax.to(box3, 200, {x:box3.x + 200});

Kode tersebut dapat dibaca sebagai, “Gerakkan objek box3 secara mendatar, 200 pixel ke kanan dari posisi awal dalam waktu 200 detik”. Kalau 200 detik dapat menempuh 200 pixel berarti kecepatannya 1 pixel / detik. Penambahan satu pixel dalam satu detik ini membuat animasi patah-patah. Jika kita memang hendak membuat animasi yang lambat, tentu tidak mungkin mempercepat kecepatan hanya supaya smooth. Lalu apa yang bisa kita lakukan?

Dalam teknik yang saya temukan, untuk menganimasikan objek tersebut secara halus, diperlukan klon / objek kedua. Dua objek ini akan dimainkan transparansinya (fade in/out) dan juga posisinya. Objek klon akan dipindahkan terlebih dahulu ke koordinat target (biasanya hanya dalam jarak beberapa pixel) dan dilakukan fade-in perlahan. Selanjutnya setelah fade-in selesai, objek orisinil akan dipindahkan ke koordinat target dan di fade-out perlahan.

Solusi saya dalam masalah ini sebagaimana terlihat dalam animasi kedua akan saya ilustrasikan di bawah ini. Dalam ilustrasi ini saya menggunakan warna merah untuk menandakan objek asli dan warna biru untuk menandakan objek klon (mohon klik Start untuk memulai animasi):

Jika anda penasaran dengan kodenya, silakan lihat di bawah ini. Asumsikan ada bahwa ada dua objek yang identik di stage. Objek asli kita namakan box1 dan klon dari objek tersebut kita namakan box2 :

import gs.*;
function realMove(obj, x, y) {
 obj.x = x;
 obj.y = y;
 obj.alpha = 1;
}

function moveTo(obj, clone, x, y) {
// move the clone ahead and make it transparent
 clone.alpha = 0;
 clone.x = x;
 clone.y = y;

// slowly make the clone visible
 TweenMax.to(clone, 0.4, {alpha:1});
// slowly make the original object invisible
 TweenMax.to(obj, 0.5, {alpha:0, onComplete:realMove, onCompleteParams:[obj,x,y]});
}

setInterval(tickHandler, 600);
function tickHandler() {
 moveTo(box, box2, box.x+1, box.y);
}
Share

Emulasi Nintendo Entertainment System di website anda

Michael, client saya dari UK, sangat menyukai game-game jadul kenangan yang jalan di platform-platform lama semacam Nintendo (NES), Super Nintendo (SNES) dan lain sebagainya. Untuk itu dia perlu sebuah emulator yang jalan di PC nya. Sebuah emulator pada prinsipnya mirip dengan virtual machine seperti VMWare atau bahkan Java Virtual Machine. Di dalamnya ada instruction set yang unik. Ketika sebuah program dieksekusi di atas virtual machine, berarti virtual machine (VM) tersebut sedang menjalankan instruction – instruction yang ada di dalam program tersebut. Semua berjalan baik (dia memakai NesCafe dan Nestopia untuk emulator Nintendo standard) sampai dia merasa bahwa mobilitasnya yang tinggi membuat dia tidak dapat memainkan game-game tersebut. Sure, ada laptop, tapi laptop kan berat, lagipula laptop tersita untuk hal-hal yang serius saja katanya. Jadi dia kepingin membuat game-game tersebut tampil dan dapat dimainkan di blog, online, and that’s why he called me to jump in and solve this matter :) Jadilah saya dan Muhsin, another nyeker executive on board, kerja bareng untuk solving masalah ini. Read the rest of this entry »

Share

Google Maps Geocoding (Flash AS2 application)

Hari ini ada meeting virtual dengan David, media director sebuah perusahaan komunikasi di Brazil dan UK. Seperti biasa, tambah kerjaan lagi. Kerjaan yang lalu perlu diperbaiki. Perfeksionis banget lah pokoknya. Detil-detilnya diperhatikan betul. Tapi yang bikin senang dengan perusahaan dia adalah kesempatan eksplorasi yang luar biasa dalam proyek-proyeknya. Proyek besarnya sih bikin simulator iphone yang dibuat dengan Flash AS2. Read the rest of this entry »

Share