Sunday, July 26, 2015

Bermain Two Dots dan Pelajaran Tentang Keberuntungan


Beberapa waktu ini Saya bermain Two Dots, Game di Android yang bisa di download dari play store. Permainannya simpel namun addictive, dan dengan dibumbui unsur social, menjadikan Saya betah bermain game ini.

Menariknya, dari bermain Game ini Saya mendapati pelajaran tentang keberuntungan. Mungkin tidak ter-apply untuk seluruh aspek kehidupan, namun dalam beberapa situasi dan kondisi, cocok sekali dengan yang dialami pada Two Dots ini. 

Pelajaran pertama adalah: keberuntungan akan datang jika usaha terus menerus dilakukan. lakukan usaha terus menerus, jika kegagalan ditemui, coba lagi dan coba lagi, pada akhirnya keberuntungan akan datang, dan keberhasilan bisa diraih. Pelajaran ini bisa diaplikasikan pada situasi dimana suatu kegagalan bukan hal yang besar dan tidak terlalu membuang waktu, seperti situasi ketika hendak mencari pekerjaan. 

Ketika keberuntungan datang, sayangnya hal tersebut tidak ada hubungannya dengan keahlian, sehingga datangnya keberuntungan bukan berarti kita ahli. Adalah suatu kesalahan jika menganggap bahwa kita sudah skillful jika keberuntungan datang. Keberuntungan ya keberuntungan, keahlian ya keahlian, kedua hal tersebut bisa saling bertemu meski sebenarnya tidak ada kaitannya. Hanya saja, seseorang yang ahli, bisa memanfaatkan keberuntungan dengan lebih maksimal dibanding yang belum ahli. 

Meski tidak terkait dengan keahlian, keberuntungan bisa bermanfaat untuk meningkatkan kepercayaan diri. Kepercayaan diri bisa membawa dampak positif kepada diri kita, dan datangnya keberuntungan bisa memicu timbulnya kepercayaan diri. 

But then again, kepercayaan diri tidak hanya dipicu oleh datangnya keberuntungan. Banyak hal-hal lain yang bisa memicu timbulnya kepercayaan diri, dan adakalanya kepercayaa diri timbul simply dengan kita memutuskan untuk menjadi individu yang memiliki kepercayaan diri. 

Berusaha terus-menerus, asah keahlian, jangan kehilangan kepercayaan diri, Insya Allah merupakan modal awal menuju kesuksesan. Amin.  




Saturday, July 25, 2015

HTML 5 Javascript API

Overview

HTML 5 bukan merupakan hal baru, pertama kali dipublish ke public pada tahun 2008, perkembangannya sudah sangat signifikan. Perlahan tapi pasti, browser-browser mulai memfasilitasi HTML 5, atau mungkin sudah memfasilitasi sepenuhnya.

Dari perspektif software development, HTML 5 memberikan API javascript baru yang bermanfaat untuk membuat Web App, beberapa diantaranya seperti Audio, Video memudahkan developer untuk membuat fitur-fitur tertentu yang sebelumnya sulit dilakukan.



Audio dan Video

Belum terlalu lama sebenarnya, untuk suatu halaman web bisa menayangkan video atau memutas musik, perlu download dan install plugin dari third-party vendor. Sekarang tidak lagi.

Saat ini HTML 5 men-support Tag Audio dan Video. Memasang video dan audio pada halaman web menjadi semudah memasang gambar, cukup dengan memberikan tag dan sumbernya


Web Workers

Adakalanya developer perlu membuat lebih dari satu thread untuk memfasilitasi kebutuhan tertentu, dan ini bukan hal gampang pada Web App sebelum HTML 5.

Dengan adanya Web Worker API pada HTML 5, developer bisa membuat background worker yang basically merupakan thread lain karena terpisah dari Main Thread web yang melakukan rendering UI.


Web Sockets

WebSocket merupakan teknologi menarik di HTML 5 karena memungkinkan Web App untuk berkomunikasi dengan server tidak hanya via Http tapi juga via Tcp.

Komunikasi dengan Tcp bersifat persisten dan bi-directional. Persisten memungkinkan Web menerima data tanpa request terlebih dahulu, sedangkan bi-directional memungkinkan server dan web saling mengirimkan data pada waktu yang sama.

LocalStorage

LocalStorage API memungkinkan browser untuk menyimpan data di browser tanpa membutuhkan jaringan. Data bisa dibuat, disimpan, di ambil meski sedang tidak ada koneksi internet.

Meski memiliki kemiripan dengan cookie, sebenarnya mereka memiliki kegunaan yang berbeda, masing-masing memiliki manfaat pada situasi dan kondisinya.


Lain-lain

Banyak API-API lain seperti geolocation, History API, File Writer dan lain-lain. Semua ini merupakan sebuah tools, yang memiliki skenario dan kegunaan yang apabila dimanfaatkan dengan pas, akan membantu developer dalam mengembangkan Web App.



Tuesday, July 21, 2015

Tips Mempercepat Development Web App

Overview

Web-App sudah menjadi mainstream, atau bahkan mulai bisa dikatakan old-school sekarang-sekarang ini, namun bukan berarti membangun Web-App lantas menjadi mudah dan cepat. Memang saat ini banyak sekali teknologi yang dapat digunakan untuk mempercepat proses development Web-App, bahkan mungkin terlalu banyak sehingga mungkin agak membingungkan untuk sebagian orang.

Berikut merupakan beberapa teknologi/konsep yang bisa dimanfaatkan untuk mempercepat development Web-App, antara lain:

  1. Develop dengan Arsitektur Front-End dan Back-End
  2. Manfaatkan Javascript Widget Libraries
  3. Gunakan PostgreSQL
  4. Manfaatkan Scaffolding / Source Code Generator
  5. Gunakan Bootstrap Admin Template

Arsitektur Front-End Back-End

Dewasa ini berkembang istilah Front-End dan Back-End, bahkan terdapat 1 halaman Wikipedia yang menjelaskan hal tersebut. Untuk mendevelop Web-App dengan tim tiga orang atau lebih, arsitektur ini sangat bermanfaat untuk mengelola kompleksitas, karena arsitektur ini memisahkan dengan jelas UI/UX dengan inner engine dibaliknya, sehingga comply dengan prinsip Separation of Concern, dimana prinsip tersebut merupakan best practice dalam Software Development.

Javascript Widget Libraries

Widget Javascript Libraries dapat mempercepat development karena menyediakan widget-widget yang langsung bisa dipergunakan dengan sedikit kode, bahkan umumnya tidak ada logic pada kode, hanya setting-setting dan konfigurasi saja. Selain itu, Widget umumnya bersifat komponen based sehingga dapat mengunakan berbagai macam libraries sekaligus atau dipadukan dengan Javascript Framework seperti AngularJS, EmberJS dll. Dengan kerugian hanya bentuknya yang standard dan mungkin loading time pertama kali lebih lama, trade-off-nya masih lebih condong ke positif daripada negatif.

PostgreSQL

Jika Oracle merupakan pilihan solid untuk database enterprise, maka PostgreSQL merupakan ekuivalent Oracle pada dunia open source. PostgreSQL memiliki fitur-fitur hebat yang umumnya tidak ada di database lain. Googling PostgreSQL vs Database lain akan memberikan perspektif kapan sebaiknya postgreSQL digunakan dibanding database lain, yang tampaknya lebih sering daripada tidak.

Source Code Generator

Dengan hanya sedikit menulis kode, generate, and BAM! jadilah simple version dengan fully functional features. Sayangnya, menggunakan source code generator ibarat pedang bermata dua, namun jika dipergunakan dengan pas, akan lebih banyak manfaatnya daripada kerugiannya. Salah satu prinsip untuk menggunakannya dengan baik adalah: Hindari men-Generate 2 kali untuk hal yang sama.

Bootstrap Admin Template

CSS Framework tidak hanya bootstrap, banyak pilihan lain yang sebenarnya tidak kalah bagus. Namun khusus untuk Admin Template yang based on Bootstrap, pilihannya sangatlah baaanyaaakk. Dari yang gratis sampai yang berbayar. Untuk menghemat waktu dalam melakukan design, akan jauh lebih efektif jika melakukan modifikasi dari Template yang sudah dipilih, tidak perlu memulai dari nol.




Bagaimana dengan anda, adakah teknologi/prinsip yang anda pergunakan untuk mempercepat proses development web-app?




Sunday, July 19, 2015

Cara Radikal Pemilihan Anggota DPR

Anggota DPR di Indonesia merupakan perwakilan rakyat, yang berperan sebagai badan legislatif di pemerintahan negara. Beberapa tugas penting DPR antara lain:

  • merancang undang-udang,
  • mengatur alokasi anggaran,
  • menyerap aspirasi rakyat, dll
Beberapa tahun terakhir ini, entah benar atau tidak, tersebar kabar di masyarakat bahwa DPR tidak menjalankan fungsinya dengan baik, berbagai gosip seperti korupsi, pemangkiran, tidak professional, beredar yang mungkin akan berdampak turunnya reputasi DPR. 

Selain itu, konon menjadi anggota DPR juga tidak mudah. Kabarnya uang yang sangat banyak dan koneksi yang sangat kuat, serta keberuntungan perlu dimiliki untuk akhirnya seseorang bisa menjadi anggota DPR. 

Terlepas dari benar atau tidaknya hal-hal tersebut, jika kita asumsikan benar, bagaimana kalau kita ubah cara pemilihan anggota DPR dengan cara yang sangat radikal. Mekanismenya seperti ini:
  1. tentukan kriteria orang-orang yang dianggap 'layak' jadi anggota DPR
  2. siapkan data, infrastruktur dan aplikasi yang 'open' untuk mengolah data memilih anggota DPR
  3. Algoritma pemilihannya adalah RANDOM
Akan dibahas lebih detail sebagai berikut.

Tentukan Kriteria

Langkah pertama yang sebenarnya paling sulit, yakni menentukan kriteria. Cara paling proper untuk menentukan kriteria mungkin dengan membentuk komite khusus, dan mungkin pertanyaan yang paling pas untuk menentukan suatu kritaria adalah
 "Jika setiap orang di Indonesia memiliki kriteria X, apakah Indonesia akan menjadi banga terbaik dunia?"
contoh beberapa kriteria yang mungkin:
  1. Bergelar S3 dari Top 100 Universities
  2. Tidak terlibat hutang,
  3. Taat pajak, dll
tentunya banyak kriteria lain yang bisa dipikirkan, dan perlu dipikirkan dengan matang-matang dan bijaksana. 

Orang yang lolos kriteria ini tidak boleh dibatasi jumlahnya, justru harus sebanyak-banyaknya, semakin banyak maka akan semakin baik.

Siapkan Data, Infrastruktur dan Aplikasi yang Open

Data mengenai siapa-siapa saja yang lolos kriteria, harus di-open agar bisa diverifikasi oleh semua orang. Dengan begini akan memimalisir hal-hal negatif seperti adanya 'titipan', data yang salah, atau orang-orang yang sebenarnya tidak lolos kriteria.

Aplikasi/Sistem untuk menjalankan mekanisme ini juga harus open source, sehingga bisa divalidasi apakah ada praktek kecurangan atau tidak. Begitu juga dengan infrastruktur-nya, sehingga pengawalan agar proses berjalan dengan baik dan benar tetap terjaga

Pemilihan dengan Random

Setelah dipastikan aman, maka lakukan pemilihan oleh aplikasi dengan mekanisme random. Siapapun yang akan keluar namanya, dia yang akan menjadi anggota DPR. That it.



Keuntungan dari mekanisme ini, siapa saja yang memiliki kriteria untuk membuat Indonesia menjadi bangsa terbaik di dunia memiliki kesempatan yang sama untuk menjadi DPR, institusi yang memiliki kekuatan untuk mengubah jalannya pemerintahan. 

Keuntungan lainnya, setiap orang akan berlomba-lomba untuk membuat dirinya memiliki kriteria tersebut. Contoh kriteria S3 Top 100 Universities, setiap orang akan berlomba-lomba untuk menyelesaikan masa studi-nya di Top 100 Universities saat itu. Atau misalnya taat pajak, setiap orang akan berusaha taat pajak agar memiliki kesempatan untuk menjadi anggota DPR. 

Kerugiannya? mungkin ada ya, tapi sebaiknya tidak perlu dibahas, kecuali apabila memang ide radikal ini benar-benar akan diimplementasikan. Semoga suatu saat akan kejadian, meski kemungkinannya sangat-sangat kecil.










Monday, June 2, 2014

Surat Untuk Yth Bapak Calon Presiden 2014

Yth Bapak Jokowi dan Bapak Prabowo,
Perkenalkan, saya Riza umur 29 tahun dengan pekerjaan Wirausaha perusahaan IT Software Service. Terima kasih saya ucapkan jika Bapak-Bapak sempat membaca surat ini. Langsung saja, melalui surat ini, ada yang ingin saya tanyakan, Jika Bapak-Bapak nanti terpilih menjadi Presiden:

  1. bagaimana cara untuk rakyat biasa seperti saya ini bisa menyampaikan aspirasi yang akan diterima langsung oleh Bapak?
  2. bukti apa yang bisa diberikan oleh Bapak kepada saya, bahwa benar aspirasi saya sudah diterima langsung oleh Bapak, bukan oleh Staff-Staff Bapak?
  3. adakah cara rakyat biasa seperti saya untuk bisa bertemu dan berdialog langsung dengan Bapak meskipun hanya untuk 5 menit saja?
Sudi kiranya Bapak-Bapak mau menjawab tiga pertanyaan saya, jawaban (atau tidak adanya jawaban) dari Bapak-Bapak akan sangat membantu saya dalam menggunakan hak pilih saya nanti.

Terima kasih sebelumnya atas perhatian Bapak-Bapak. Jawaban bisa saya terima sebagai comment post ini atau dikirim ke email saya yang bisa dilihat di profil saya.

PS: Penyebutan nama diurut berdasarkan Alfabet


Monday, March 11, 2013

Software Documentation Hierarchy


Disclaimer: kontent posting ini adalah opini dari penulis dan merupakan konten yang experimental, oleh karena itu sangat boleh untuk didebat dan penulis tidak diwajibkan untuk mempertahankannya.

Sewaktu melihat artikel wikipedia tentang software documentation, menurut Saya diperlukan konsep yang berbeda untuk kategorisasi dokumentasi software sebagai komplemen dari kategorisasi yang sudah dikemukakan di artikel tersebut. 

Konsep kategori pada artikel tersebut dibuat dari perspektif pengembangan, sehingga untuk situasi dan kondisi tertentu justu akan kontra-produktif. Misalnya, ada seorang programmer yang ingin mencari tau bagaimana cara install open source software X, kemudian dia mengambil dokumentasi mengenai arsitektur. Dia hanya akan dibombardir oleh informasi-informasi yang belum dia butuhkan, yang mungkin sekali akan membuatnya bingung.

Oleh karena itu, perlu dibuatkan lagi kategorisasi software documentation yang dirancang berdasarkan kebutuhan, situasi dan kondisi user, kategori tersebut yakni:
  1. Dokumentasi yang membuat pembaca bisa menggunakan software
  2. Dokumentasi yang membuat pembaca bisa meng-install software
  3. Dokumentasi yang membuat pembaca bisa mengkonfigurasi software
  4. Dokumentasi yang membuat pembaca bisa meng-compile/build software
  5. Dokumentasi yang membuat pembaca bisa mengembangkan software
Dengan kategorisasi diatas, dapat dilihat bahwa kategori tersebut merupakan konsep hirarki dokumentasi. Hirarki yang dibangun berdasarkan dependencies dari pengetahuan mengenai perangkat lunak tersebut dan kebutuhan user. Dengan begini, pembaca dokumentasi bisa mendapatkan gambaran mengenai informasi-informasi apa saja yang akan didapat sesuai dengan hirarkinya.

Terkait dengan kebutuhan project, perlu dianlisis terlebih dahulu sampai mana kebutuhan dokumentasi yang diperlukan, karena semakin dalam kebutuhan yang ada, akan semakin mahal membuatnya. Analisis ini dapat mempertimbangkan juga profil user project tersebut, apabila tidak ada programmer atau developer didalam jajaran user, maka hirarki Level 3 (Konfigurasi Software) adalah level terdalam yang masih efektif untuk dibuat.

Monday, March 4, 2013

Pentingnya Performance dalam Software


Abis nonton video disini: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/lecture-1-administrivia-introduction-analysis-of-algorithms-insertion-sort-mergesort/

Baru 25 menit nonton, sudah mendapatkan pencerahan yang outstanding. Ada alasannya memang, kenapa MIT terkenal sebagai salah satu universitas Top di Dunia, kuliah undergraduate-nya saja masih bisa memberikan pencerahan kepada salah satu lulusan S2 ITB. 

25 menit awal tersebut membicara performance. Professor tersebut menanyakan hal apa yang lebih penting dari performance? beberapa mahasiswa menjawab:
  • Correctness. Benar atau tidaknya program
  • Stability/ Robustness. Robust atau tidaknya program
  • Programmer Time. Waktu yang dihabiskan untuk membuat program
  • Scalability. apakah program bisa di scale-up-kan atau tidak
  • User-Friendliness. Apakah program mudah digunakan atau tidak
  • Security. Keamanan dari program
Kemudian professor tersebut menambahkan lagi:
  • Modularity. Modularitas program, agar bug/perubahan di satu tempat tidak mempengaruhi tempat lain
  • Functionality. Apakah program memiliki fitur-fitur yang lengkap atau tidak
Ternyata banyak parameter yang lebih penting dari performance. Lantas mengapa justru performance yang dipelajari?
Melihat parameter-parameter lain diatas yang lebih penting dari performa, apabila ditelusuri lebih dalam, sebenarnya membutuhkan performa. Sebagai contoh:
  • User-Friendliness. Program jadi not so user friendly kalo ada lag ato musti nunggu lama
  • Correctness. Bila ada kebutuhan 'real-time', performance kurang baik yang mengakibatkan ada delay 1 menit akan membuat program tersebut not so realtime
Oleh karena itu, performa adalah mata uang dalam program. Dengan performa, security bisa diaplikasikan. Dengan performa, user-friendliness bisa dicapai, dengan performa, correctness bisa dipenuhi. Parameter-parameter lain dipenuhi oleh performa. Parameter-parameter lain di-'beli' oleh performa. Perfoma by itself tidak penting, namun menjadi salah satu paling penting jika digunakan untuk mengadakan parameter-parameter lain. Mirip dengan uang, by itself uang tidak bisa dimakan, dikenakan, ditinggali, namun uang bisa digunakan untuk mengadakan makanan, baju, tempat tinggal dan lain-lain.

Semoga bermanfaat, dan please do visit link diatas jika ada waktu senggang.

Friday, November 2, 2012

Salah Satu Ahli Surga

Dapet cerita waktu ceramah Idul Adha, ceritanya inspiratif, setidaknya menurut gw. Credits untuk yang pertama kali menceritakan ini, dan Uztad yang ceramah di Idul Adha Jatiwaringin Asri Blok E deket puskesmas tempat gw sholat ied, hehe.

 ---------------------------

Alkisah pada suatu waktu, Rasulullah SAW sedang menunggu sholat dzuhur di mesjid bersama sahabat-sabahat-nya. Ditengah-tengah menunggu adzan, Beliau berkata sebentar lagi seorang ahli surga akan melewati pintu mesjid. Sahabat-Sahabat kemudian memperhatikan pintu tersebut, kemudian didapati seorang pemuda Anshor yang nampak biasa-biasa saja, bukan termasuk sahabat terdekat Rasulullah.

Kejadian ini berulang sampai beberapa kali, Rasulullah SAW mengatakan ahli surga akan masuk melewati pintu mesjid, dan didapati pemuda tersebut lagi yang muncul. Singkat kata, memang pemuda tersebut yang dimaksud Rasulullah SAW sebagai ahli surga.

Kemudian salah satu sahabat sangat penasaran dan berniat mengetahui alasan mengapa pemuda tersebut dikatakan ahli surga. Sahabat tersebut mendatangi pemuda untuk meminta izin menginap di rumah pemuda tersebut beberapa hari dengan alasan tidak bisa pulang ke rumahnya sendiri. Sang Pemuda mengizinkan dengan senang hati.

Sahabat mengamati betul Sang Pemuda, diikuti gerak-geriknya dirumah atau diluar rumah, untuk mencari amalan khusus apa yang dilakukan sang pemuda sampai Rasulullah SAW menyebutkan ahli surga. Setelah beberapa hari mengamati, Sang Sahabat tidak menemukan amalan khusus tersebut. Ia memutuskan untuk berhenti mengamati dan akan pamit kepada Sang Pemuda.

Ketika berpamitan, Sang Sahabat mengatakan sejujurnya bahwa sebenarnya ia sedang mengamati Sang Pemuda untuk mencari amalan khusus, dan tidak ditutupi kekecewaaannya karena tidak menemukan amalan tersebut. Sang Pemuda tersebut menjawab, memang beginilah apa adanya dirinya, dan amalan-amalan yang ia lakukan tidak ada yang belum dilihat oleh Sang Sahabat.

Namun ketika Sang Sahabat hendak pergi, Sang Pemuda mengatakan bahwa ia selalu bersyukur, puas dan merasa cukup atas nikmat Allah yang diberikan kepadanya, terus gigih berjuang mengejar nikmat-nikmat Allah lainnya dan tidak pernah sekalipun merasa iri atau tamak atas nikmat Allah untuk orang lain yang tidak dimilikinya atau tidak diberikan Allah kepadanya.

Mendengar perkataan Sang Pemuda, Sang Sahabat sadar bahwa inilah kualitas yang Sang Pemuda yang menjadikannya seorang Ahli Surga.
---------------------------

Setidaknya sekarang gw tau, ada  1 lagi kualitas seorang muslim yang perlu dimiliki. Semoga dapat mencapainya 100%, aamiin.

Thursday, August 2, 2012

Hikmah Dari Upaya Contribute Ke Open Source

Sudah menjadi knowledge umum di internet kalau cara termudah untuk bekerja sama dengan orang-orang brilian di seluruh dunia adalah dengan bergabung ke open-source project mereka. Project-project open-source tertentu memang ada yang sarat dengan ilmu, dan Bombermaaan salah satunya.

Awalnya ngeliat bombermaaan dari game di liberkey, karena dulu waktu kecil suka bermain game itu, maka di download-lah dan dimainkan. Begitu ditekahui bombermaaan itu open source, iseng-iseng checkout source-code-nya, ngeliat to-do list-nya, mau mencoba implement team-mode.

And that turns out to be a good decision, ngeliat code-based-nya project bombermaaan, akhirnya sadar betapa bergunanya komentar kode yang konsisten dan extensive. Author-author sebelumnya seperti memulai coding dengan pseudocode, setelah rampung baru dicoding ke bahasa spesifik (C++). Pseudocode tersebut akhirnya menjadi komentar-komentar yang sangat membantu dalam pembacaan kode, penelusuran kode, dan tentunya dalam memahami apa yang terjadi pada kode.

Selama ini Saya berpikir bahwa naming variabel, method dan class yang baik cukup untuk membuat suatu kode nyaman dibaca. Namun setelah melihat kode bombermaan, hal tersebut saya sadari salah karena meskipun kode tersebut memiliki naming yang baik, komentar-komentar yang berupa pseudocode-nya lah yang paling membantu saya dalam memahami kode.

Saat ini sedang menunggu balasan author-nya untuk request agar mereka melihat hasilnya dan meminta feedback. Semoga lancar dan akhirnya kode dicommit, sehingga bisa dihitung telah benar-benar contribute kode ke open source project.
-------
Update: Author sudah me-reply, dia menyarankan untuk melakukan fork-ing terhadap project ini karena memang tidak ada aktivitas lagi di project ini dari original author-author-nya. Sayang sekali saya belum berpikir untuk memaintain suatu open source project. Berarti saatnya hunting open source project lain untuk berkontribusi. Ada ide?




Monday, January 2, 2012

Manajemen Proyek Pragmatis dan Agile

Bulan lalu beres baca buku ini, dan mau berbagi pemahaman yang didapat dari buku tersebut. Karena pemahaman yang akan di-share, maka isinya sebenarnya jauh sekali dari kualitas dan detail level-nya antara buku tersebut dengan artikel berikut. Jika tertarik, saran Saya, bacalah bukunya.

Disini pembahasan dibagi menjadi dua section, yaitu Starting Project dan Doing Project

Starting Project
Pada suatu project akan terdapat ekspektasi dari customer & sponsor, serta batasan yang harus dipenuhi. Contoh daftar ekspektasi dan batasan adalah sebagai berikut:


  • Harus selesai dibulan Januari
  • Memiliki fitur A, B, C, D
  • Biaya tidak lebih dari 10 juta
  • Mudah digunakan
  • Bug-free
  • High performance
  • Dan lain-lain

Masing-masing item pada daftar yang dibuat untuk suatu project, diprioritaskan berdasarkan kepentingannya, dan dibagi menjadi 3 kategory. Driver, Constraint, dan Float.

Driver
Driver adalah item utama yang memberi nilai pada project. Kegagalan memenuhi Driver dapat menghilangkan seluruh nilai dari Project. Hanya ada 1 item pada daftar yang boleh dikategorikan sebagai Driver. Lebih dari 1 Driver, maka project akan kacau.

Sebagai contoh, terdapat suatu project yang diharuskan selesai pada bulan desember, fitur/harga/kualitas seperti apapun tidak ada artinya jika belum selesai desember. Maka project Driver-nya adalah waktu.

Constraint
Beberapa item dengan prioritas tinggi namun dibawah Driver dapat dikategorikan Constraint. Kategori constraint boleh diberikan ke lebih dari 1 item.

Constraint perlu dipenuhi agar customer/sponsor. Apabila Constraint dengan Driver saling konflik, Constraint bisa tidak dipenuhi, namun akan menbuat customer/sponsor tidak senang. Apabila seluruh Constraint tidak terpenuhi, nilai project akan hilang seluruhnya, seperti halnya jika Driver tidak terpenuhi.

Constraint idealnya dua, lebih dari itu project menjadi un-managable. Kurang dari itu, project akan kacau karena seakan terdapat dua Driver.

Float
Float kategori item yang penting untuk dipenuhi, namun memiliki fleksibilitas dalam pencapaiannya dan dapat dinegosiasi dengan customer/sponsor mengenai targetnya.

Sama seperti Constraint, kategori Float dapat diberikan kepada lebih dari 1 item, idealnya 3. Tidak memenuhi seluruh Float akan mengakibatkan costumer/sponsor tidak senang, memenuhi seluruh Float akan membangun reputasi yang baik.



Release Criteria
Berbekal daftar Driver, Constraint, dan Float, tuliskan kondisi done untuk project, yang disebut dengan Release Criteria. Release Criteria harus Specific, Measurable, Achievable, Relevant dan Trackable ke daftar Driver, Constraint dan Float. Baik customer, sponsor, management dan pelaksana perlu mengetahui dan menyetujui Release Criteria.

Contoh Release Criteria:

  • Software Release tanggal 1 januari
  • Normal Skenario untuk fitur A, B, C tanpa bug-free
  • Halaman D, E, F dapat diakses hanya dengan 2 kali click.


Product Backlog
Last but not least, tuliskan dokumen Product Backlog. Product Backlog adalah dokumen yang berisikan daftar fitur sistem yang diberi angka prioritas. Prioritas diberikan oleh pemiliki sistem, dengan pertimbangan ROI bisnis. Perhatikan bahwa 1 angka hanya untuk 1 fitur, tidak boleh terdapat dua fitur yang memiliki angka prioritas yang sama.


Doing Project
Project dilaksanakan dengan life cycle iterative incremental. Berbekal Product Backlog yang dimiliki sebelumnya, project dilakukan dengan:

  1. Melaksanakan Iteration Planning Meeting di awal iterasi, yang melakukan
    1. Memilih fitur-fitur dengan angka prioritas tertinggi yang belum selesai
    2. Merencanakan waktu  1 iterasi dengan maksimal waktu 2 minggu
    3. Lakukan requirement gathering untuk fitur-fitur yang dipilih bila perlu
    4. Mem-breakdown fitur tersebut dengan task-task kecil yang dapat diselesaikan maksimal 8 jam.
    5. Mengestimasi man-hour untuk setiap task
    6. Membuat perencanaan dan target selesai untuk seluruh task tersebut
  2. Melaksanakan pertemuan harian untuk memantau pencapain rencana sepanjang iterasi
  3. Melaksanakan Iteration Review Meeting di akhir iterasi, yang:
    1. Apabila target tercapai, demokan fitur-fitur tersebut
    2. Apabila target tidak tercapai, lakukan evaluasi, targetkan demo untuk iterasi berikutnya

Lakukan kegiatan diatas berulang sampai Release Criteria terpenuhi


Change Request
Perubahan prioritas Product Backlog ataupun perubahan fitur-fitur yang ada pada Product Backlog dapat dilakukan kapan saja selama fitur tersebut bukan merupakan fitur yang sedang dalam pengerjaan iterasi.

Perubahan pada fitur yang telah diselesaikan iterasi sebelumnya menjadi prioritas utama untuk dikerjakan pada iterasi berikutnya.



----------

Sebenarnya buku tersebut membahas jauh lebih detail dan memberikan banyak sekali contoh kasus. Buku yang menurut Saya must-read untuk developer yang ingin mengetahui konsep agile project management, yang dilakukan dengan Pragmatic Way. Semoga bermanfaat.

Wednesday, December 14, 2011

Isu Scalability Gammu dan Solusinya

Sebenernya tidak ada isu scalability di gammu, hanya karena terdapat situasi dan kondisi di proyek yang Saya ikuti, baru isu scalability muncul.

Pada suatu proyek, terdapat kebutuhan dari client untuk membuatkan sistem yang melakukan pengiriman data dari lapangan ke website pusat, dengan teknologi pengiriman data yang diminta adalah SMS. Digunakanlah GSM modem yang menerima SMS yang disandingkan dengan Gammu. No prob.

Kemudian ada permintaan untuk dibuatkan semacam aplikasi sederhana untuk melakukan pengiriman data ini, agar memudahkan orang yang akan mengirimkan data, karena selain datanya memiliki format yang sulit dihafal manusia biasa, data yang dikirim juga panjang, bisa sampai 4-5 x 160 karakter untuk sekali pengiriman data. Dibuatlah aplikasi sederhana dengan menggunakan J2ME yang menampilkan semacam form pengisian data dan mengirimkan SMS isi datanya ke pusat. No prob.

The problem is, ketika banyak orang yang melakukan pengiriman data sekaligus, dimana setiap pengiriman data terdiri dari 4-5 x 160 karakter, terjadilah deadlock.

Detailnya begini. Karena GSM modem yang dipakai tidak punya fitur inbox, maka seluruh SMS yang diterima tersimpan di simcard. Katakan 20 orang melakukan pengiriman data sekaligus, masing-masing data terdiri dari 4*160 karakter, yang berarti GSM modem akan menerima 4 SMS, dimana masing-masing merepresentasikan bagiannya. Setelah beberapa saat, bagian pertama dan bagian kedua sampai ke simcard, sehingga isi inbox simcard sudah sampai 40 SMS. Ini merupakan jumlah maksimal SMS yang bisa disimpan di simcard yang kami digunakan. Karena penuh, maka bagian ketiga dan keempat dari SMS tidak bisa masuk. Sayangnya, Gammu baru akan menghapus inbox simcard ketika seluruh bagian sudah ada di inbox. Disatu sisi bagian ketiga dan keempat tidak bisa masuk karena inbox penuh, disisi lain isi inbox tidak dihapus karena menunggu semua bagian tersedia. Deadlock.

Memang Gammu memiliki setting timeout, yaitu untuk menghapus SMS yang tidak lengkap setelah beberapa saat. Namun jalan ini tidak diambil karena tidak ada jaminan SMS yang sudah dihapus akan dikirim lagi baik oleh operator maupun orang yang mengirimkan data.

Untungnya, pengirim data tidak menuliskan datanya dengan cara menuliskan SMS biasa, namun dengan mengisi form pada aplikasi J2ME. Inilah yang menjadi titik solusi dari permasalahan.

Kami mengubah cara aplikasi tersebut mengirimkan SMS. Alih-alih mengirimkan 1 kali SMS panjang yang akhirnya dipecah menjadi 5 SMS oleh entah siapa, aplikasi memecah-mecah sendiri 1 SMS panjang menjadi 5 SMS dan mengirimkannya satu per satu. Pada setiap SMS disiapkan ID unik untuk menyatakan bahwa 5 SMS yang dikirim ini merupakan satu kesatuan.

Dengan begini, ketika satu SMS diterima GSM modem, SMS langsung dihapus dari inbox simcard oleh Gammu dan diletakkan ke tabel database. Dari tabel itulah, diambil SMS-SMS tersebut dan dirangkai lagi menjadi satu kesatuan data sesuai dengan ID-nya. Akibatnya inbox simcard akan selalu kosong dan tidak ada lagi SMS yang ditolak karena inbox penuh.

Tentu saja solusi ini tidak cocok untuk semua keadaan, solusi ini hanya cocok jika:

  • SMS yang dikirim sangat panjang, lebih dari 160 karakter
  • pengiriman SMS melalui aplikasi buatan, bukan bawaan HP
  • GSM modem yang digunakan tidak memiliki fitur inbox didalamnya
  • GSM modem yang digunakan hanya satu untuk seluruh tujuan pengiriman data
  • Mengambil asumsi bahwa pengirim data hanya akan mengirimkan suatu data sekali untuk selamanya
Dengan constraint bahwa data yang dikirim harus diproses dalam waktu 24 jam, solusi ini sampai sekarang masih cukup untuk 100 pengirim data sekaligus pada waktu yang bersamaan, dimana masing-masing data terdiri dari 4-5 SMS. Mungkin akan tahan sampai 1000 pengirim data sekaligus. Lebih dari itu, mungkin perlu ditambah GSM modem baru. 

Jika anda mengalami situasi dan kondisi yang mirip dengan ini namun menggunakan solusi yang berbeda, I would love to hear it. Atau jika ingin mengaplikasikan solusi ini, feel free to contact me at my email. Semoga bermanfaat.








Friday, December 9, 2011

Parameter Pada Fungsi Utama

Java dan C++ (mungkin bahasa lain juga) memulai programnya dari fungsi utama, yang biasanya memiliki signature int main(int argc, char** argv) di C/C++ atau public static void main(String[] args) di Java. Fungsi utama ini memberikan saya inspirasi pertanyaan untuk recruitment, pertanyaannya adalah kapan parameter tersebut memiliki nilai dan apa nilainya jika ada.

Mungkin pertanyaannya cukup mendasar, namun Saya cukup kaget bahwa lebih banyak yang tidak tahu daripada yang tahu. Saya pikir pertanyaannya yang kurang jelas atau ambigu, tapi ada juga 1-2 orang yang langsung bisa menjawab begitu pertanyaannya selesai Saya ucapkan. Artinya memang ada lulusan informatika yang tidak tahu kapan parameter tersebut diisi.

katakan terdapat kode pada file main.cpp sebagai berikut:

int main(int argc, char** argv){
 for(int i=0;i < argc; i++) cout << argv[i] << endl;
 return 0;
}
note: kode diatas kurang iostream dan std


kemudian di compile dengan perintah c++ -o testargv.exe main.cpp
lalu testargv.exe dieksekusi dengan perintah: testargv.exe coba parameter
maka outputnya akan sebagai berikut:
testargv.exe
coba
parameter


Disini, C++ dan Java memiliki sedikit perbedaan, namun pada prinsipnya tetap sama. C++ berisi perintah eksekusi programmnya, sedangkan Java tidak. Dengan begini, jelas kapan parameter tersebut bernilai dan apa nilainya.

Berbekal pengetahuan ini, sebenarnya program-program umum adakalanya memanfaatkan ini untuk melakukan sesuatu, sebagai contoh Firefox. Jika kita berikan alamat website pada shortcut di desktop seperti pada gambar berikut:

Ketika Icon diclick, maka firefox akan langsung membuka halaman yang kita tuliskan. Tentunya apa parameter tambahan bagi setiap program berbeda tergantung programnya, cuma rata-rata memang mereka take account of added parameter ketika di run. Semoga bermanfaat.




Thursday, December 8, 2011

RSS atau Atom Reader Dengan Google Reader

RSS/Atom adalah teknologi yang sudah lama ada dan sudah banyak digunakan. Untuk orang-orang yang sering browsing internet mengupdate info-info terbaru tentang apapun, RSS/Atom ini memudahkan mereka melakukannya.

Apa itu RSS/Atom?
RSS/Atom adalah teknologi yang memungkinkan kita mendapatkan summary dari informasi terbaru pada website yang kita pantau. Summary ini kadang berupa Judul saja, kadang Judul dan beberapa kalimat awal, kadang seluruh isi informasi terbaru, tergantung dari website yang kita pantau.

Kenapa harus RSS/Atom, kenapa ga langsung aja ke websitenya?
Adakalanya suatu website mengeluarkan informasi baru dengan kecepatan yang tinggi, bisa ratusan per harinya. Dan belum tentu kita tertarik dengan seluruh informasi tersebut. Akan lebih enak jika kita punya summary untuk seluruh informasi yang ada, dan hanya membuka halaman dari informasi yang menarik untuk dibaca.

Ok, lalu bagaimana caranya untuk menggunakan teknologi ini?
prinsipnya ada 3 langkah utama, yang nantinya akan didetailkan, yaitu:

  1. Aktifkan RSS/Atom Reader software
  2. subscribe website favorit
  3. ulangi langkah 2
Banyak sekali software Reader baik yang diinstall ataupun Web App. Thunderbird atau outlook juga bisa digunakan sebagai RSS/Atom Reader. Namun Saya disini menggunakan Google Reader, karena Saya menggunakan gmail sebagai email pribadi utama, dan tidak ingin menambahkan aplikasi yang diinstall. 

Aktifkan Google Reader
login ke email google anda, Register jika belum punya, maka pada bagian teratas akan terdapat banyak link. Click more dan pilih Reader, seperti pada gambar berikut:
Maka halaman akan berpindah ke google Reader. Dengan begini, Google Reader telah aktif.

Subscribe Website Favorit
dengan mengclick tombol subscribe
akan muncul window kecil untuk memasukkan alamat website favorit, seperti gambar berikut:
Google Reader memudahkan proses website subscription. Biasanya kita perlu mencari link ke RSS/Atom Feed pada suatu website, pada Google Reader hal itu dilakukan secara otomatis. Namun mungkin saja pada software lain terdapat fitur serupa.

Tambahkan beberapa website-website favorit lainnya. Saya memiliki teman yang men-subscribe banyak website sehingga 1 harinya memiliki lebih dari 1000 item untuk dibaca. If you have no idea, Google Reader memiliki fitur rekomendasi untuk memudahkan kita men-subscribe website-website populer. Selamat mencoba.



Saturday, July 2, 2011

Review Galaxy Tab 10.1

berikut adalah review gw setelah nyobain Galaxy Tab 10.1(Spek bisa dilihat disini):

  1. Clean design 
Design devicenya bagi gw clean, sederhana namun elegan. Mungkin terkesan ringkih karena dia plastiky dibanding ipad 2 yang metalic, tapi overall enak dilihat di mata
  1. Atractive UI
Meski Android based on linux yang terkenal UI-nya biasa cenderung kurang baik, Galaxy tab ini beda. UI-nya sangat keren. Gw kurang tau apakah ini ngikutin iOS atau engga, tapi yang gw lom pernah liat UI linux bawaan sekeren ini. Kerennya setara dengan UI linux yang sudah dimodifikasi make compiz-fusion. Screennya sendiri terkesan clear dan tajam.
  1. Cukup 'berat'
Sayangnya UI yang keren diikuti dengan 'berat'-nya ketika mengoperasikannya, terutama pindah-pindah home screen. Ketika pindah dari screen 1 ke screen 2 dengan background wallpaper yang bergerak kayak dreamscrene, gambar terlihat patah-patah. Untungnya patah-patah ini tidak terlihat sewaktu menjalankan aplikasi-aplikasi basic seperti email, calendar, browser, pdf reader, movie, music dan lain-lain.
  1. tipis, lebar dan ringan
Galaxy tab 10.1 ini cukup lebar, nonton film dari tab memiliki feel yang ga jauh beda dengan nonton di laptop, mungkin ini efek dari resolusinya yang 1280 x 800. Seperti yang diiklan kan, dia memang tipis, sebagai perbandingan, dia lebih tipis dari 7 cd ditumpuk. Meski ga enteng-enteng amat, untuk benda elektronik dengan dimensi seperti itu, dia cukup ringan.
  1. good for entertainment
Dengan clean, tajemnya screen display dan resolusi seperti itu, nonton film pake galaxy tab itu enak. Dia bisa nonton film yang 720p, claim-nya sih bisa sampe 1080p, tapi gw lom nyoba.

Tuesday, June 14, 2011

3 Desktop Aplikasi yang Kurang Umum

Berikut merupakan 3 day-to-day desktop app gw pake yang kayaknya kurang umum, antara lain:
Instead of WinZip atau WinRar yang lebih umum dan lazim, gw menggunakan 7zip. Why? karena 7zip bisa bikin file kompresi 7z yang rasa-rasanya dan sepengetahuan gw yang dangkal ini, paling kecil outputnya.

Untuk instant messaging seperti yahoo, gtalk dan social media seperti twitter dan facebook, gw menggunakan disgby. Dan di digsby juga ada POP3 dan IMAP client. Itulah alasan utama kenapa ga pake yahoo messenger, twitter client dan outlook, karena cukup 1 untuk 3 hal tersebut
Ini yang kayaknya paling ga umum untuk PDF Viewer. Biasanya orang lain menggunakan Adobe Reader/Acrobat, atau mungkin Foxit Reader yang lebih ringan, atau ada beberapa yang menggunakan sumatra PDF. Alasan gw make ini adalah kompromi. Fitur dia lebih banyak dari Adobe Reader, tapi tetep free ga seperti Acrobat. Lebih berat dari Foxit Reader, tapi lebih ringan dari Adobe Acrobat. Dan memang dia tidak lightweight seperti sumatra PDF.

Pertanyaan yang Perlu Sering Dijawab

berikut ini pertanyaan-pertanyaan yang gw dapet dari macem-macem sumber, yang bagus untuk sering-sering ditanyakan, antara lain:
  • Kalo gw meninggal besok, apakah gw akan melakukan hal-hal yang gw rencanakan untuk lakukan hari ini?
  • Apakah gw kerjain kerjaan gw skrg, kalo seandainya gw dikasih cuma-cuma 100 juta tiap harinya tapi tetep harus kerja?
  • Kalo seandainya gw bisa mengulang waktu, apakah keputusan-keputusan besar yang dulu pernah gw ambil, akan tetap gw ambil lagi?
  • gw itu hidup untuk makan, atau makan untuk hidup? hidup untuk kerja, atau kerja untuk hidup? hidup untuk mati, atau mati untuk hidup?
Kadang gw sering lupa menanyakan pertanyaan diatas dalam waktu yang ga sebentar, padahal untuk keep life on track, jawaban diatas sangat penting, saatnya kembali sering-sering menanyakan

Sunday, June 5, 2011

Optimasi Peng-eksekusi-an Branch (IF/SWITCH)

Baru mengaplikasikan teknik yang menurut gw pribadi cukup unik, yaitu optimasi eksekusi kode branch/conditional pada aplikasi yang punya main loop.

Misalkan gw punya aplikasi dengan potongan kode demikian:

Katakan method someMethod() dipanggil di dalam main loop. Method diatas tampak simpel, namun dari hal yang simpel tersebut mengandung potensial problem, khususnya ketika programmer melakukan salah ketik (katakanlah ia menulisnya "Login", bukan "login"). Sebenarnya dengan ketelitian yang tinggi, salah ketik bisa dihindari, namun manusia tetap manusia, sehingga kasus seperti ini, sebaiknya diserahkan ke komputer, seperti pada gambar berikut:
Pada gambar diatas, string di parse dengan parseEnum(String pInput) menjadi Enum Action. Dengan penggunaan enum, jadi dapat menggunakan switch, dan kesalahan typo akan mengakibatkan compile error. Compile error ini yang dimaksud menyerahkan ketelitian ke komputer.
Btw, anggap aja isinya parseEnum(String pInput) sudah benar ya, meski diatas hanya mengembalikan Unknown terus, hehe.

Pada realnya, someMethod1() isinya bisa sangat panjang, dan semakin panjang method, akan semakin sulit untuk dibaca oleh orang lain. Oleh karena itu, dapat dioptimasi lagi menjadi berikut:
Pada gambar diatas, diciptakan kelas abstract ActionWorker, yang nantinya akan memiliki kelas turunan yang bersesuaian dengan action yang ada. Pada optimasi ini, bahkan branching sudah tidak ada lagi di badan someMethod2(), sudah terenkapsulasi pada ActionWorker.ActionWorkerFactory(Action pInputEnum). someMethod2() menjadi sangat pendek jika dibandingkan dengan someMethod1().

Namun meski terenkapsulasi, branching SWITCH yang ada tetap terpanggil setiap kali loop. Apabila 1 detik terdapat 100 loop, akan terpanggil 100 kali. Optimasi selanjutnya adalah untuk mengurangi pemanggilan loop menjadi hanya 1 kali. Ya, terdapat cara untuk mengurangi menjadi hanya 1 kali, meski sebenarnya perlu dipanggil setiap loop.

Contohnya dapat dilihat pada gambar berikut:

Pada gambar diatas disertakan lagi enum Action, karena telah diubah sedikit, yaitu dengan menambahkan member mIntValue, konstruktor yang menerima parameter integer, dan method getIntValue()
selain itu, ditambahkan member ActionWorker[] mWorkers yang diinisiasi pada method init(). Method init() itu perlu di-invoke sekali sebelum main loop. Hasilnya, jadilah someMethod3()

sekilas someMethod3() mirip dengan someMethod2(). Bedanya terletak pada pen-assign-an tAppropriateWorker. Method someMethod3() hanya melakukan pengaksesan element pada suatu array, sedangkan method someMethod2() melakukan branching. Dengan begini, tidak ada lagi pemanggilan SWITCH pada main loop, yang digantikan dengan mengakses element array.

Sempet lakuin percobaan kecil-kecilan. Di java, branch dengan 1 kondisi lebih cepat daripada pengaksesan element array. Tapi mulai dari 2 kondisi dan seterusnya, pengaksesan element array lebih cepat. Selain itu, pengaksesan element array memiliki waktu konstan berapapun jumlah array yang ada, antara berisi 1 element dengan 1000 element, apabila diberikan index-nya, waktu aksesnya akan tetap.

Kalo ada yang kurang dimengerti, atau ada kesalahan, please kindly inform me by email, and thanks before. Semoga bermanfaat

Friday, June 3, 2011

Tunneling dengan SSH

Pengen nambah postingan tentang Linux, HowTo dan Tools, hehe. Umum aja sih, mungkin sebagian besar orang sudah tau, mungkin juga belum. Yaitu tentang tunneling dengan SSH.

Prerequisite: tau apa, kenapa, gimana SSH. Kalo ga tau, googling banyak pasti. Kalo males googling, email aja ke gw.

Tunneling sendiri sebenarnya sangat dalam pengertiannya dan maksudnya, tapi kalo dari pengalaman pribadi, tunneling paling sering digunakan untuk forwarding.

Misalkan ada suatu jaringan LAN yang menghubungkan banyak Linux komputer sekaligus, dan satu komputer di LAN tersebut memiliki IP public internet. Katakan IP lokalnya 192.168.10.10. Pada jaringan tersebut, terdapat 1 komputer lain (tidak punya IP public) yang didalamnya terinstall MySQL. Katakan IP-nya 192.168.10.15

Kita ga bisa nih, akses si 10.15, karena ga punya IP public, sedangkan 10.10 bisa kita akses. Hal ini dapat disiasati dengan tunneling ke 10.15 melalui 10.10.

Caranya gimana? cukup dengan SSH ke 10.10, tapi dengan command tambahan, sehingga jadinya seperti berikut:
ssh root@256.13.14.267 -L10000:192.168.19.15:3306

mari kita liat command tambahan "-L10000:192.168.19.15:3306". Sebenarnya command disamping memiliki format demikian:
-L::

Jadi dengan perintah diatas, seseorang dapat mengakses MySQL di 19.15 dengan cara konek ke localhost post 10000!! Dengan perintah diatas, setiap kita mengakses port 10000 di local, seolah olah kita menjadi 10.10 yang mengakses komputer IP 19.15 port 3306. In my opinion, tunneling is quite cool actually, hehe

Enaknya lagi, tunneling juga bisa dilakukan programmatically, but that is for another story.

Semoga bermanfaat

3 Hal yang Dipelajari Dari Pohon

Suatu hari dapet broadcast dari Aghe (Hairudin), lulusan hukum UI, sempet jadi ketua Mapala UI juga. Bagus isinya, enjoy:

Tiga hal yang bisa kita pelajari dari pohon:

1. Pohon tidak makan dari buahnya sendiri
Buah adalah hasil dari pohon, dari mana pohon memperoleh makanan? pohon memperoleh makanan dari tanah. Semakin dalam akarnya makin banyak nutrisi yang diserap. Ini berbicara tentang kedekatan hubungan kita dengan Sang Pencipta sebagai sumber kehidupan.
Mengapa buah kurma manis? Pohon kurma ditanam di padang pasir. Bijinya ditaruh di kedalaman 2 meter, kemudian ditutup dengan 4 lapisan. Sebelum pohon kurma tumbuh, dia berakar begitu dalam dan tumbuh sampai menembus 4 lapisan tersebut dan menghasilkan buat yang manis ditengah padang pasir.
Ada proses tekanan yang begitu hebat ktika kita menginginkan hasil yang luar biasa. Seperti juga pegas yang memiliki dorongan kuat ketika ditekan.

2. Pohon tidak tersinggung ketika buahnya dipetik orang
Kadang kita protes, kenapa kerja keras kita yang menikmati justru orang lain? tapi justru inilah prinsip memberi.
Kita ini bukan bekerja untuk hidup, tapi bekerja untuk memberi buah. kita bekerja keras supaya kita dapat memberi lebih banyak kepada orang yang membutuhkan. Jadi bukan untuk kenikmatan sendiri.
Cukupkanlah dirimu dengan apa yang ada padamu, tapi... tidak pernah ada kata cukup untuk memberkati orang lain dengan pemberian kita.

3. Buah yang dihasilkan pohon itu menghasilkan biji, dan biji menghasilkan multiplikasi
Ini berbicara tentang bagaimana hidup kita memberi dampak positif terhadap orang lain.

Pemimpin itu bukan masalah posisi/jabatan, tetapi mengenai pengaruh dan inspirasi yang diberikan kepada orang lain. Selamat belajar menjadi pohon yang bermanfaat.


Tampak idealis sekali tulisannya ya, namun jika sebagian besar orang memang seperti itu, tentu dunia akan menjadi tempat yang lebih baik untuk semua

Wednesday, June 1, 2011

2 Cara Membuat Aplikasi Jadi Scalable

Gw bukan orang yang jago bikin aplikasi, meski bukan seorang pemula juga, adalah pengalaman sedikit. Jika ada kesalahan, mohon dibantu untuk memperbaikinya.

Sebelum bahas lebih lanjut, perlu dijelaskan maksud dari scalable disini. Aplikasi yang Scalable adalah aplikasi yang apabila pengguna-nya banyak, yang perlu dilakukan untuk memfasilitasinya adalah dengan menambah jumlah mesin, bukan upgrade spek mesin (ex: nambah memori mesin, nambah CPU mesin).

Sengetahuan gw yang masih belajar ini, scalable umumnya bisa dicapai apabila:

  • Sebisa mungkin aplikasi bersifat transaksional
Sifat transaksional disini maksudnya aplikasi tersebut apabila dijalankan oleh mesin yang berbeda, outputnya akan tetap sama. Misalkan ada web service yang menerima integer dan mengembalikan kuadrat-nya. Web service tersebut, jika dijalankan di beberapa server sekalipun, hasilnya akan konsisten untuk semuanya.
  • Usahakan kompleksitas semua algoritma dan memori O (log(n)), maksimal O(n), dan idealnya O(1)
Ya, kompeksitas algoritma dan memori berpengaruh terhadap scalability aplikasi. Kompleksitas O(n) adalah kompleksitas yang paling berat yang bisa di toleransi untuk scalability. Diatas O(n), semakin banyak user akan semakin cepat memperlambat sistem


Gw yakin sih masih banyak lagi, tapi sementara yang pernah bener-bener dirasain itu 2 diatas. Semoga bermanfaat.