Cara mudah install/update gradle di Mac

Mungkin masih ada yang bingung bagaimana cara mengupdate gradle secara manual, atau terlalu pusing dengan banyaknya step di internet. Nah, di mac ada cara mudah dan cepat untuk meng-install atau meng-update gradle. Lakukanlah langkah-langkah berikut.

Di mac, buka terminal, kemudian ketik perintah berikut untuk menginstall SDKMan:

curl -s https://get.sdkman.io | bash

Setelah selesai, lanjut ketikkan perintah berikut:

$ sdk install gradle 3.5

Setelah selesai install gradle, cek di Android Studio apakah gradlenya sudah versi 3.5 atau belum, dengan cara masuk ke Terminal-nya Android Studio, kemudian ketik perintah berikut:

Gradle --version

Jika berhasil, maka hasilnya seperti pada gambar di bawah ini:

Screen Shot 2017-04-30 at 8.53.56 PM

Selesai 😀

Mempercepat proses gradle build

Masalah yang sering dihadapi seorang developer Android adalah berhadapan dengan IDE Android Studio. IDE ini memang dikenal memakan banyak resource RAM dan harddisk, bahkan RAM yang disarankan cukup besar 8 GB. Jika di bawah itu ya, siap-siap saja menunggu lama compile aplikasi sambil ditinggal tidur, ngopi dan makan.

Jika sudah memenuhi spesifikasi install Android Studio, namun dirasa masih cukup lambat, terutama ketika melakukan “build” aplikasi menggunakan gradle, ada baiknya mencoba tips berikut:

  1. Update versi gradle ke versi terbaru. Saat ini (April 2017) versi terbarunya adalah versi 3.5 (https://docs.gradle.org/current/release-notes.html)
    Cara updatenya bisa ikuti di tutorial berikut: https://gradle.org/install
  2. Buat file baru dengan nama gradle.properties, taruh di lokasi berikut:
    /home/<username>/.gradle/ (Linux)
    /Users/<username>/.gradle/ (Mac)
    C:\Users\<username>\.gradle (Windows)

    Setelah itu copas teks berikut ke gradle.properties:

    org.gradle.daemon=true
    org.gradle.parallel=true
    org.gradle.jvmargs=-Xmx2048M   

    Untuk org.gradle.jvmargs, apabila RAM yang dimiliki sekitar 4 GB, cukup set di angka 2048M, namun jika lebih ya lebih bagus, bisa diset di angka 8192 bagi yang memiliki RAM sekitar 16 GB.
    Jika sudah, save, dan lanjut ke bagian android Studio. Buka Preferences/Settings Android Studio, masuk ke bagian “Build, Execution, Deployment”, pilih “Gradle” dan beri centang pada “Offline Work” seperti pada gambar di bawah ini, dan set directory-nya ke lokasi gradle.properties yang sudah dibuat tadi.
    lseqd

  3. Beri parameter –offline pada Compiler seperti pada gambar di bawah ini:
    gjrrv
  4. Masuk ke Aplikasi yang sedang dibuat di Android Studio, klik build.gradle.
    Setelah itu tambahkan line berikut di dalam tag android:
    Screen Shot 2017-04-30 at 6.00.47 PM

    dexOptions {
        incremental true
        javaMaxHeapSize "4g"
    }

    beri angka “4g” apabila RAM yang dimiliki 4GB, dan beri angka 8g bila RAM yang dimiliki 8GB. Dokumentasinya ada di sini: google.github.io/android-gradle-dsl/current/

  5. Perbesar heapsize untuk mempercepat build di gradle.properties dengan menambahkan parameter berikut:
    # Specifies the JVM arguments used for the daemon process.
    # The setting is particularly useful for tweaking memory settings.
    # Default value: -Xmx10248m -XX:MaxPermSize=256m
    org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

    *peringatan: memperbesar heapsize beresiko membuat software lain yang dibuka menjadi lambat. Karena RAM akan terfokus ke gradle Android Studio.

  6. Done, selamat mencoba 😀

“Adaptive Design” di Aplikasi Android

Salah satu bentuk tantangan tersendiri di dalam pengembangan aplikasi Android adalah, membuat aplikasi yang well designed secara antarmuka, apalagi ada banyak keberagaman jenis device Android, baik dari ukuran layar (3 inci, 4 inci, 5 inci sampai 10 inci) maupun density (Android menggunakan satuan dp (pixel density) bukan pixel, ini mengacu pada konsentrasi pixel pada layar tertentu, diukur dalam pixel per inch (ppi). Kerapatan pixel (dp) ini dihitung dengan membagi resolusi pixel diagonal layar dengan ukuran diagonal).

Ngomong-ngomong soal pixel density. Bisa dicek di tabel berikut bagaimana acuannya untuk beberapa resolusi dalam satuan pixel ke density pixel:

---------------------------     -----   ------------    --------------- ------- -----------     ----------------    ---         ----------
Device                          Inches  ResolutionPX    Density         DPI     ResolutionDP    AspectRatios        SysNavYorN  ContentResolutionDP
---------------------------     -----   ------------    --------------- ------- -----------     ----------------    ---         ----------                                                          
Galaxy Y                                 320 x  240     ldpi    0.75    120      427 x 320      4:3     1.3333                   427 x 320
?                                        400 x  240     ldpi    0.75    120      533 x 320      5:3     1.6667                   533 x 320
?                                        432 x  240     ldpi    0.75    120      576 x 320      9:5     1.8000                   576 x 320
Galaxy Ace                               480 x  320     mdpi    1       160      480 x 320      3:2     1.5000                   480 x 320
Nexus S                                  800 x  480     hdpi    1.5     240      533 x 320      5:3     1.6667                   533 x 320
"Galaxy SIII    Mini"                    800 x  480     hdpi    1.5     240      533 x 320      5:3     1.6667                   533 x 320
?                                        854 x  480     hdpi    1.5     240      569 x 320      427:240 1.7792                   569 x 320

Galaxy SIII                             1280 x  720     xhdpi   2       320      640 x 360      16:9    1.7778                   640 x 360
Galaxy Nexus                            1280 x  720     xhdpi   2       320      640 x 360      16:9    1.7778                   640 x 360
HTC One X                       4.7"    1280 x  720     xhdpi   2       320      640 x 360      16:9    1.7778                   640 x 360
Nexus 5                         5"      1920 x 1080     xxhdpi  3       480      640 x 360      16:9    1.7778      YES          592 x 360
Galaxy S4                       5"      1920 x 1080     xxhdpi  3       480      640 x 360      16:9    1.7778                   640 x 360
HTC One                         5"      1920 x 1080     xxhdpi  3       480      640 x 360      16:9    1.7778                   640 x 360
Galaxy Note III                 5.7"    1920 x 1080     xxhdpi  3       480      640 x 360      16:9    1.7778                   640 x 360
HTC One Max                     5.9"    1920 x 1080     xxhdpi  3       480      640 x 360      16:9    1.7778                   640 x 360
Galaxy Note II                  5.6"    1280 x  720     xhdpi   2       320      640 x 360      16:9    1.7778                   640 x 360
Nexus 4                         4.4"    1200 x  768     xhdpi   2       320      600 x 384      25:16   1.5625      YES          552 x 384
---------------------------     -----   ------------    --------------- ------- -----------     ----------------    ---         ----------
Device                          Inches  ResolutionPX    Density         DPI     ResolutionDP    AspectRatios        SysNavYorN  ContentResolutionDP
---------------------------     -----   ------------    --------------- ------- -----------     ----------------    ---         ----------
?                                        800 x  480     mdpi    1       160      800 x 480      5:3     1.6667                   800 x 480
?                                        854 x  480     mdpi    1       160      854 x 480      427:240 1.7792                   854 x 480
Galaxy Mega                     6.3"    1280 x  720     hdpi    1.5     240      853 x 480      16:9    1.7778                   853 x 480
Kindle Fire HD                  7"      1280 x  800     hdpi    1.5     240      853 x 533      8:5     1.6000                   853 x 533
Galaxy Mega                     5.8"     960 x  540     tvdpi   1.33333 213.333  720 x 405      16:9    1.7778                   720 x 405
Sony Xperia Z Ultra             6.4"    1920 x 1080     xhdpi   2       320      960 x 540      16:9    1.7778                   960 x 540

Kindle Fire (1st & 2nd gen)     7"      1024 x  600     mdpi    1       160     1024 x 600      128:75  1.7067                  1024 x 600
Tesco Hudl                      7"      1400 x  900     hdpi    1.5     240      933 x 600      14:9    1.5556                   933 x 600
Nexus 7 (1st gen/2012)          7"      1280 x  800     tvdpi   1.33333 213.333  960 x 600      8:5     1.6000      YES          912 x 600
Nexus 7 (2nd gen/2013)          7"      1824 x 1200     xhdpi   2       320      912 x 600      38:25   1.5200      YES          864 x 600
Kindle Fire HDX                 7"      1920 x 1200     xhdpi   2       320      960 x 600      8:5     1.6000                   960 x 600
?                                        800 x  480     ldpi    0.75    120     1067 x 640      5:3     1.6667                  1067 x 640
?                                        854 x  480     ldpi    0.75    120     1139 x 640      427:240 1.7792                  1139 x 640

Kindle Fire HD                  8.9"    1920 x 1200     hdpi    1.5     240     1280 x 800      8:5     1.6000                  1280 x 800
Kindle Fire HDX                 8.9"    2560 x 1600     xhdpi   2       320     1280 x 800      8:5     1.6000                  1280 x 800
Galaxy Tab 2                    10"     1280 x  800     mdpi    1       160     1280 x 800      8:5     1.6000                  1280 x 800
Galaxy Tab 3                    10"     1280 x  800     mdpi    1       160     1280 x 800      8:5     1.6000                  1280 x 800
ASUS Transformer                10"     1280 x  800     mdpi    1       160     1280 x 800      8:5     1.6000                  1280 x 800
ASUS Transformer 2              10"     1920 x 1200     hdpi    1.5     240     1280 x 800      8:5     1.6000                  1280 x 800
Nexus 10                        10"     2560 x  1600    xhdpi   2       320     1280 x 800      8:5     1.6000                  1280 x 800
Galaxy Note 10.1                10"     2560 x  1600    xhdpi   2       320     1280 x 800      8:5     1.6000                  1280 x 800
---------------------------     -----   ------------    --------------- ------- -----------     ----------------    ---         ----------
Device                          Inches  ResolutionPX    Density         DPI     ResolutionDP    AspectRatios        SysNavYorN  ContentResolutionDP
---------------------------     -----   ------------    --------------- ------- -----------     ----------------    ---         ----------

Dan dokumentasi lengkapnya bisa dilihat di sini: https://developer.android.com/guide/practices/screens_support.html#testing

Itulah mengapa di dalam Resources Project di Android Application terdapat drawable dan layout dengan kategori ldpi (low-dpi), mdpi (medium-dpi), hdpi (high-dpi), xhdpi (extra high-dpi), xxhdpi, dan xxxhdpi.
Masing-masing kategori folder tersebut merujuk ke DPI layar device.
Jadi ketika ingin menerapkan aplikasi yang disupport di ukuran layar 3 inch (dengan dpi 160) dan 4 inch (dengan dpi 240), maka harus dicek di tabel di atas, bahwa dpi 160 itu adalah mdpi, so desain yang kamu siapkan mesti ditaruh di folder drawable/drawable-mdpi dan layoutnya di folder layout/layout-mdpi, begitu juga dengan DPI lainnya.

screen-shot-2017-01-13-at-4-07-46-pm

Lalu bagaimana caranya biar satu slicing desain saya bisa pas ditaruh di masing-masing folder tersebut (ldpi, mdpi, hdpi, dll) tanpa perlu repot?

Ada banyak cara loh! Caranya gak pake ribet, ada yang cara online dan ada yang cara offline.

Untuk membuat 1 komponen desain agar bisa diterapkan di masing-masing folder dpi tersebut dapat menggunakan generator, salah satunya 9-patch generator yang bisa dicoba secara online di sini. Dan untuk cara offline-nya, bisa dicoba langsung dari Android Studio dengan cara:

Install plugin “Drawable Importer” dengan cara masuk ke Preferences di Android Studio.

Setelah itu masuk ke bagian Editor\Plugins dan pilih Browse Repositories. Masukkan keyword “Android Drawable Importer” lalu klik “Install Plugin”, seperti pada gambar di bawah ini:

drawable_importer-1

Setelah itu tinggal digunakan dengan cara klik kanan file drawablenya dan pilih New\Scaled drawable. Dan ikutilah petunjuknya di layar.

Dengan mempersiapkan slicing komponen desain dengan berbagai ukuran layar, kita bisa membuat aplikasi tersebut menjadi adaptive design, tanpa khawatir aplikasi tersebut tidak cocok di berbagai ukuran layar.

5 tahun berlalu

Ada pepatah bijak mengatakan “Jika ingin berubah maka lakukanlah saat ini juga
Ya, saat ini juga, tanpa keraguan dan tanpa takut akan gagal.

Dahulu lulus kuliah hanya mengenal 1 bahasa pemrograman yaitu PHP (PHP: Hypertext Preprocessor), dan tidak banyak yang saya persiapkan, hanya mengikuti arus, bekerja setelah lulus, terima gaji yang waktu itu sangatlah kecil, sekitar 3jt, dan itu tinggal di Jakarta dengan menghabiskan biaya hampir 3 jt per bulan. Tidak mengerti bagaimana mengelola uang, tidak mengerti bagaimana nego gaji, tidak mengerti memilih tempat nge-kost, karena waktu itu kebetulan lulus sendiri, sementara teman seangkatan cuma 3 orang yang lulus, termasuk saya pribadi. Dan di Jakartapun bertemu teman-teman angkatan sebelumnya yang lumayan memandu saya untuk bertahan hidup di Jakarta.

Saya bukan tipe orang yang mudah sekali berteman, mungkin introvert. Dan bahkan selama kuliah saya hanya punya sedikit teman yang akrab, malah di kampus beberapa dijahilin teman seangkatan yang menganggap saya sombong (lambat laun saya menyesalinya). Kesulitan itu makin menjadi ketika banyak masalah pribadi pada waktu itu yang mengharuskan saya dipecat dari kantor karena bolos 3 minggu. Ya, jangan ditanya masalah apa, masalah anak muda hahaha…

Saya tidak akan bahas masalah itu, tapi yang saya coba cerita adalah saya bersyukur sampai hari ini, dengan lika-liku jalan yang sudah dilalui yang jujur saja banyak jalan sulitnya, tapi alhamdulillah bisa saya lakukan.

Alhamdulillah dengan banyak dukungan orang tua, teman, dan sekitar, buat move-on itu tidak sulit. Dahulu teman-teman yang saya cuekin, ternyata ketika saya jatuh, mereka malah memberi banyak dukungan. Pada waktu itu saya benar-benar menangis. Betapa berartinya teman. Dan sampai pada satu ketika saya memutuskan kembali ke Jogja, untuk mencoba memperbaiki semua, mengakrabkan kembali dengan teman-teman angkatan, walaupun agak sulit. Tapi alhamdulillah bisa saya nikmati, mulai dari tahun baru berkesan sampai pagi dengan teman seangkatan kuliah sampai acara-acara nonbar yang bener-bener penuh canda. Dalam hati, mengapa tidak saya lakukan dari dahulu. Tapi malah sibuk dengan kuliah, fokus belajar, menghilangkan segala sesuatu yang saya anggap penghalang dan ternyata semua itu tidak benar.

Saya kira karir saya bakal tamat,  setelah pemecatan itu, sampai menganggur 3 bulan, bingung, dan akhirnya saya coba lamar sana kemari, dan dari puluhan surat lamaran, ada 4 yang memanggil saya interview ke Jakarta.

Dengan biaya masih minta orang tua pada waktu itu untuk tiket pesawat dan uang makan selama perjalanan di Jakarta, rasanya sungguh malu sekali.

Dari 4 itu, ke-empat-empatnya pun menjawab “menerima”, sampai pada akhirnya saya diharuskan memilih, alhamdulillah, saya sempat mengira bakal pupus harapan, akhirnya bisa dijalani. Dari ke-4 itu, ada 3 lowongan sebagai php developer, dan 1 adalah asp.net developer. Apa yang saya pilih? sudah bisa ditebak, saya keluar dari zona nyaman saya. Memilih asp.net developer.

Saya tidak akan bercerita banyak bagaimana saya berani menerima tawaran asp.net padahal tanpa skill dasar asp sama sekali.Akan tetapi yang jelas, saya yakin saya bisa belajar. Ya, motivasi yang kuat. Di sana saya mendapatkan banyak pengalaman mencoba hal-hal baru. Sampai pada satu masa, saya tiba-tiba diangkat manager jadi system analyst yang merangkap jadi senior maintenance developer.
Dan hal gila pun terjadi, ketika bertemu dengan klien pertama kalinya, diterjunkan langsung ke kantor-kantor perbankan (BNI, BCA, BII, BRI, Danamon, Indonesia EximBank..hampir semua perbankan pernah saya datangi dan hinggap langsung bertemu dengan para manager dari berbagai divisi yang berkepentingan), saya selalu didampingi teman yang senior, tidak mengerti apa-apa selain teori yang saya pelajari selama kuliah. Bahkan sering kali melakukan kesalahan yang akhirnya diperbaiki oleh teman senior. Berani mencoba, berani menerima kesalahan dan berusaha memperbaiki. Sampai pada satu masa saya pernah merepotkan, seorang teman senior, yang saya ingat betul namanya, mas Aang (bukan pengendali udara). Mas Aang rela menemani saya di kantor klien sampai malam ketika semua orang sudah pulang dari kantor (yang pada waktu itu bank export import a.k.a. Indonesia Exim Bank). Dari kesulitan dan rasa tidak enak tersebut, ditambah rasa malu, motivasi belajar pun meningkat. Sampai pada satu ketika saya akhirnya memahami bagaimana proses bertemu klien, bagaimana menulis proposal, bagaimana cara nego dengan klien bagaimana cara berkomunikasi dengan klien dan segala hal yang berbau manajemen proyek.

Ya, benar, dari situlah saya akhirnya sekarang berani mengelola proyek, bukan sebagai developer ataupun freelance developer, tetapi menjadi manajer dari berbagai proyek langsung. Siapa yang jadi developer? saya merekrut teman-teman yang sama-sama senang dengan proyekan.

Pada tahun 2011, saya memutuskan untuk resign dari kantor di Jakarta, yang telah memberikan saya banyak teman dan pengalaman sangat-sangat berarti. Bahkan sampai manajer saya kaget, mengapa saya resign, apakah gaji saya kurang layak? ternyata sampai seperti itu yang tidak saya sangka-sangka. Ya saya akhirnya memutuskan untuk lanjut S2 karena pada waktu itu ibu saya ingin saya S2 saja, dan pas kebetulan pada waktu itu cukup biaya. Resign dari situ bukan berarti saya langsung menganggur, tetapi pada waktu itu saya sudah mempersiapkan dengan hati-hati kira-kira di Jogja kerja apa? dan akhirnya saya menerima tawaran teman yang saya kenal dari jejaring sosial Plurk, mas Yo, beliau punya start-up bernama PT. Dipeta, di sana saya memulai kembali menjadi php developer sekaligus android developer! Ya, dari situlah saya memulai menjadi android developer new wanna be.

Studi S2 saya tidak sepenuhnya mulus, saya seperti kurang siap dengan apa yang dihadapi, saya kira studi S2 saya bisa menunjang karir saya seperti yang teman saya ceritakan, ternyata sebaliknya, apa yang dipelajari malah kembali membawa saya dengan materi sistem cerdas dan sejenisnya yang tidak begitu saya sukai. Saya kira, saya bisa memilih kosentrasi di manajemen proyek ataupun Sistem Informasi, ternyata kebijakan kampus mengharuskan voting semua mahasiswa S2 seangkatan memilih kluster dengan suara terbanyak, dan didapatlah “SISTEM CERDAS”.

Sambil kuliah saya bekerja, ngoding ngoding dan ngoding, bikin sistem SMS-gateway, bikin sistem berbasis lokasi dan sejenisnya, dan selama 3 bulan berjalan, hubungan saya dengan atasan saya tidak berjalan mulus sejak kedatangan orang baru. Bahkan saya merasakan sekali perbedaannya ketika atasan saya meminta semua serba cepat, padahal saya memiliki 2 tanggungan di web dan di android yang tidak bisa dikerjakan instant. Dan akhirnya saya putuskan untuk resign.

Apakah saya jadi pengangguran? tidak, selama saya join dengan start-up tersebut, saya sudah terikat kontrak dengan BNI. BNI tertarik merekrut saya karena saya sering datang troubleshooting dan patching modul baru di front-end perbankan mereka ke kantor pusat BNI. Dan dari situ beberapa divisi mulai kenal saya secara pribadi sampai memiliki kontak saya. Pas di Jogja, alhamdulillah direkrut dan saya bekerja sebagai administrator fan-page facebook BNIdan juga developer di beberapa micro-site milik BNI. Bekerja di sana sangat menyenangkan, dengan bayaran 2jt per minggu bukanlah sesuatu yang murah. Dan alhamdulillah sangat mencukupi kebutuhan selama di Jogja.

Dan sambil bekerja di BNI, akhirnya saya memutuskan jadi project hunter. Saya menggunakan teknik self-promotion di facebook dengan cara  “show-off” karya-karya sendiri dan akhirnya dikenal. Dan dari situ tawaran-tawaranpun datang. Dari tawaran-tawaran tersebut, saya mulai praktekan teknik yang saya pelajari selama bekerja di Jakarta. Mulai dari menyiapkan proposal, menyusun kalimat-kalimatnya menjadi sistematik, menyusun rancangan aplikasi, menyusun deliveriables, menyusun gantt-chart timeline pekerjaan, menyusun anggaran proyeksi investasi sampai dengan layanan yang saya persembahkan untuk klien.

Apakah berjalan lancar ? ya sebagian besar, alhamdulillah lancar, sebagian kecil tidak. Berhadapan langsung dengan proyek bukan sesuatu yang mudah, penuh dengan rintangan. Rintangan pertama adalah menghadapi klien. Saya menyadari betul pada akhirnya, setiap klien itu berbeda karakteristiknya, komunikasinya dan cara pandangnya. Ditambah lagi dengan tingginya persaingan.
Awal mulanya, ketika mengajukan proyek, tidak semuanya lancar, bahkan gagal, melakukan kesalahan menyusun jadwal, melakukan kesalahan mengatur anggaran sampai akhirnya merasakan kerugian di diri sendiri.

Ya, merugi, apa yang saya kerjakan ternyata terlalu murah sampai-sampai harus begadang garap proyek padahal hasilnya tidak seberapa, dan pada akhirnya saya belajar dari situ untuk mengkalkulasi dengan pas dari masalah waktu sampai biaya.

Proyek pertama yang saya berhasil adalah dengan klien PDAM, digarap berdua, saya mengelola proyeknya, dan teman sebagai developernya. Harga proyek waktu itupun wah, yaitu 40jt, dan itu kami bagi 2 masing-masing 20jt. Dan dari situlah saya punya tv, gadget dan console sendiri di kost-kostan waktu S2 itu (jangan ditiru foya-foyanya)

Sejalannya waktu, proyekpun datang lagi dari tawaran teman di Departemen Keuangan, tawaran di BNI lagi, tawaran di hotel Pullman Jakarta, PLN Bandung, Humanitarian OpenStreetMap, JTETI-UGM, PLN Medan, Kementerian Agama RI, PLN Medan lagi, dan seterusnya…dan karena itu akhirnya bisa keliling beberapa kota di Indonesia secara gratis sambil menikmati hotel-hotelnya 😀 tawaran yang saya ambil bukan yang kecil, kadang satu proyek bernilai 35jt, kadang 40jt, dan bahkan pernah lebih, apakah tanpa tantangan? besar banget, ya kudu kuat hadapi yang besar, great power, great resposibility, great income too.

Dan bukan juga tanpa hambatan dan tanpa kegagalan, taruhlah dengan pengalaman saya akhir-akhir ini di mana, developer yang saya rekrut melakukan keteledoran dengan jadwal yang ia buat dan akhirnya ia ingkari hingga telat 1 bulan. Dan juga dahulu pernah mengalami demikian sampai-sampai harus menggunakan uang pribadi untuk membayar designer dan developer padahal telatnya ya karena klien minta macem-macem dan ngeyelan padahal sudah dipandu cara buat reporting ke developer jika menemukan bugs. Ya dulu pengalaman dengan salah satu perusahaan di Sukabumi yang benar-benar jadi pelajaran buat saya pribadi sekaligus harus lebih cermat memilih tim dan mengelola proyek, terutama bagaimana menghadapi klien yang jumlah anggotanya banyak dan semuanya ikut campur. Ya kesalahan ada di saya selaku manajer kenapa kurang tegas dan kurang cermat mengelola proyek ini sampai jadi gagal.

Gagal dari 1 proyek itu bukan berarti saya lengah dan menyerah, dari situ saya mulai menerima tawaran dari PusatKajianHadis dapet proyek membuat aplikasi Alquranalhadi di Android. Dan sampai pada akhirnya, alhamdulillah, menjelang saya melamar wanita pujaan hati, saya malah direkrut jadi karyawan tetap di PKH. Pas banget! dengan begitu menghadapi calon mertua jadi agak PeDe (walau masih degdegan) karena waktu itu saya minder dengan status pekerjaan saya yang kurang jelas (apalagi kerjanya dari kost-kostan, gimana mau yakin, ntar dikira pelihara tuyul), alhamdulillah, lamaran diterima dan menikah oktober 2013 kemarin. Dan dikaruniai seorang putri cantik yang sekarang usianya 1 tahun 🙂

PKH memberikan keleluasaan kepada saya, membolehkan saya menyambi proyek asalkan semua pekerjaan di PKH dapat tuntas sesuai jadwal dan terus monitoring setiap aplikasi yang saya kembangkan di PKH agar tetap berjalan sebagaimana mestinya setiap waktu untuk semua pengguna.

Sampai detik ini, alhamdulillah, saya sudah 3 tahun bekerja di PKH dan masih aktif dengan proyek-proyek, bahkan sempat mengajar jadi mentor developer android di beberapa kampus di Jogja (UGM, UMY, UNY, AtmaJaya), dan sempat jadi dosen 1 semester di STMIK A.Yani, dan saat ini terikat kontrak kerja proyek dengan SaleStock dan Samsung (padahal dulu sempat manggil interview jadi developer android, tapi saya tolak), dan alhamdulillah, 2 tahun lebih kami menikah, dan sekarang punya rumah sendiri dan menikmati perjalanan hidup ini bersama istri dan anak tercinta.

Saat saya sudah bekeluarga, saya harus pahami hak dan kewajiban saya sebagai seorang suami dan kepala keluarga, dan diputuskan sampai saat ini saya hanya fokus di pekerjaan PKH dan max. 2 proyek saja. Maka dari itulah saya berhenti dari profesi dosen yang lumayan menyita waktu dan lokasinya cukup jauh dari tempat tinggal. Dan bekerja dari rumah sekaligus menemani istri dan anak, tiap hari conference call via skype dan telpon dengan klien dan tiap hari bertemu laporan-laporan, trello, basecamp dan tiap hari masih ngoding, dan yang terpenting adalah..rasa syukur. Rasa syukur menambah nikmat di sanubari. Makan seadanya, ya bersyukur, makan banyak juga bersyukur, punya rezeki, sedekah sbg rasa syukur, lagi sempit rezeki, tetep bersyukur sambil introspeksi diri.

Perjalanan ini masih berliku, mungkin yang diceritakan seakan hidup ini mudah, padahal banyak rintangannya. Namun, saya slalu yakin, rezeki tidak pernah tertukar, tiap orang punya jalannya masing-masing, yakin Allah akan mencukupi kebutuhan, dan terus berusaha agar orang-orang di sekitar senang dengan keberadaan saya.

Semoga Allah selalu memudahkan jalan ini dan melimpahkan rezeki, kesehatan dan kekuatan untuk kita semua agar dapat mengarungi hidup dan slalu pada jalan yang lurus. aamiin.

 

Pentingnya bagi seorang designer mobile app. memahami “design pattern” dan guidelines desain aplikasi

Waaah…. desainer baru…. begitu dilihat pengalamannya ternyata basic-nya adalah desainer web yang sudah bekerja selama 5 tahun lebih.

Tiba-tiba kebutuhan akan aplikasi mobile begitu tinggi, alhasil beberapa desainer web beralih profesi mengerjakan desain-desain antarmuka aplikasi mobile.

Nah, ada kesalahan fatal yang terjadi, menyebabkan potensi kesalahan di dalam pengembangan, ntah itu timeline menjadi tambah panjang, developer yang menjadi sulit mengimplementasikan desain yang diberikan, dan sebagainya.

Siapapun yang menjadi desainer aplikasi mobile, dimohon jangan samain seperti mendesain website yah..hehe
Desain aplikasi platform apapun itu, baik itu iOS, Android, Windows Phone, Blackberry, ada prinsip-prinsip desain yang harus dipahami, ada guidelines yang harus dipatuhi. Setiap OS mobile punya pattern desain sendiri yang mesti diikuti. Tidak bisa “semau gue, menurut gue itu keren”.

Seorang designer antarmuka aplikasi mobile mesti mendalami pengetahuan seputar perangkat OS platform tersebut, mindset-nya juga harus diubah. Sama seperti pada waktu seorang designer web mendapatkan job dari perusahaan ternama (pernah saya alami di BNI, Jakarta), mereka (BNI…yg saya tau) punya guidelines terhadap website mereka. Misal : Warna tema website mereka.. di guidelines-nya dijelasin hexa codenya apa, logo web-nya pakai yang mana, resolusi “width height“-nya berapa, ukuran hurufnya berapa, pake typeface apa, dan sebagainya..maka terjadilah konsistensi desain di web yang dimiliki perusahaan ternama tersebut.

Begitu juga dengann platform mobile. Antarmuka di aplikasi mobile punya konsistensi, ketika mendesain layout, peletakan menu slalu di sebelah mana, icon aplikasi bentuknya seperti apa, di hape layar kecil resolusinya berapa, di hape layar besar resolusinya berapa, kalo bikin tab taruh di mana, default typeface pake apa, dan sebagainya.

Saya rasa tantangan yg mereka (designer web) hadapi ketika menjadi designer apps adalah bagaimana caranya agar menguasai design interaksi dan UX-nya.

Untuk mengubah sebuah tampilan website menjadi tampilan aplikasi yg mungil, layar terbatas, jangkauan pengguna ketika menyentuh layar bagaimana, dan hal-hal lain yang perlu diperhatikan… bukanlah sebuah pekerjaan yang mudah. Sebagai contoh : ketika mengatur ukuran huruf yang nyaman dibaca pengguna aplikasi, mengatur komponen apa aja yang dapat dijangkau pengguna aplikasi ketika menyentuh layar, dan dari langkah tersebut, desainer masih dibuat pusing lagi ketika menguji hasil karya antar mukanya.

Si desainer sudah merasa yakin mendesain aplikasi di hape layar besar (di atas 5 inch), ternyata di hape layar kecil membuat pengguna kurang nyaman, terkadang mengalami masalah komponen layout-nya oversize di hape layar kecil, terkadang ukuran hurufnya kegedean diterapkan di hape layar kecil, dan masih banyak lagi masalah-masalah yang mungkin terjadi. Dan akhirnya si desainer aplikasi  mencoba mengatur ulang layout-nya.

Dengan kata lain, mau tidak mau si desainer harus menyiapkan beberapa layout design untuk beberapa jenis ukuran layar smartphone maupun tablet (dari ldpi, mdpi, hdpi, xhdpi, sampai dengan xxhdpi).

Seperti yang sudah saya jelaskan, masing-masing perangkat mobile, baik itu smartphone maupun tablet punya UX berbeda. Apalagi beda platform, tentu User Experience di tiap platform berbeda. Pengguna device Android sudah terbiasa melihat menu dengan slide ke kanan atau tap pada pojok kiri dan kanan, sedangkan pengguna device iOS terbiasa dengan menu slide di bawah ke atas, dan berbeda lagi dengan pengguna WindowsPhone, menu disajikan per tab dengan label yang besar di atasnya, tidak ada menu pojok seperti di Android ataupun menu bawah seperti di iOS. Setiap platform punya guidelines-nya bagaimana meletakkan komponen design, seperti yang saya sampaikan yaitu menu, slide menu, tombol, tab, tabel, dan komponen lainnya.

Biasanya, seorang desainer itu melakukan coret2 dulu di wireframe (wireframing), diskusikan dengan tim (ntah dengan desainer web ataupun aplikasi mobile yang lain ataupun dengan developer dan system analyst) apa yang telah di-wireframing sudah pas atau belum, kemudian periksa guidelines di docs platform tersebut apakah sudah sesuai pattern OS tersebut atau belum, kemudian UX-nya bagaimana.. apakah sudah sesuai dengan kebiasaan pengguna di platform tersebut atau belum, setelah itu baru memulai perbaiki designnya agar menjadi tampilan antarmuka aplikasi yang ideal yang siap diimplementasikan ke dalam aplikasi.

Bagi teman-teman yang belum mengetahui guidelines atau panduan mendesain di masing-masing platform mobile, bisa merujuk ke link berikut ini :
Semua udah ditulis lengkap, resmi dan terstruktur, tinggal kitanya mau belajar dengan tekun atau tidak.
iOS : https://developer.apple.com/…/UserExp…/Conceptual/MobileHIG/
Android : http://developer.android.com/de…/get-started/principles.html
WP : https://dev.windows.com/en-us/design

Sekian 🙂

Menentukan harga jasa untuk programmer dan desainer

Setelah pernah dibahas mengenai menentukan harga project TI khususnya mobile apps. yang ingin kita bahas adalah bagaimana menentukan harga jasa untuk programmer atau desainer mobile apps (mungkin bisa dipakai untuk developer software secara global)

Begini, akhir-akhir ini saya sering ditanya mahasiswa : “mas, bagaimana cara menentukan harga desain saya? saya ragu mau pasang harga”

Kalau menghendaki harga yang pantas dan ideal, itu subjektif, silahkan tentukan berdasarkan usaha yang akan dikeluarkan dan alokasi waktunya. Dan pasang harganya. Yang penting berani dan sudah mengukur sendiri harga yang pantas. Jangan sampai, kamu pasang harga 3 juta rupiah, namun, ternyata uang yang dikeluarkan untuk usaha begadang, internet dan ngemil serta ngopi sambil bekerja itu ngepas 3jt, atau mepet 3juta, alhasil tekor dan gak ada untungnya.

Namun, beberapa programmer/desainer software junior, masih bingung, harga jasa saya berapa?

Mari kita perhatikan 5 hal yang mempengaruhi harga jasa kamu di dunia software engineering sebagai berikut :

  1. Scope pekerjaan.
    Scope adalah segala hal yang ada di dalam produk software/produk dari project TI dan segala proses di dalamnya.
    Mendefinisikan apa yang diminta, apa yang mesti dikerjakan, dibagi step-stepnya (rencana->rancangan) sampe menjadi rangkaian berurut apa saja yang dikerjakan. Dengan demikian, dapat diestimasi jadwal dan waktu pengerjaannya.
    Contoh, ketika saya dari tidur pengen berangkat ke sekolah :

    1. Saya bangun tidur (15 menit), kemudian
    2. saya mandi (15 menit), kemudian
    3. saya sarapan (30 menit), kemudian
    4. saya berangkat ke sekolah (20 menit).
  2. Proses pengerjaan,
    Sulit kah? mudah kah? simple kah? kompleks kah?
    Terus bagaimana proses yang mesti saya ikuti? banyak kah? tentu mesti memperhatikan, jika ternyata proses untuk mengerjakan codingannya ataupun desainnya, bisa memakan waktu berjam-jam.
    Mulai dari :

    1. memahami klien kemudian menganalisis kehendak si klien;
    2. brainstorming, berguna untuk mendefinisikan semua kebutuhan biar bisa dikerjakan menjadi karya kita;
    3. inisialisasi, mulai dari kamu corat-coret desain/coba-coba code init/awal sampe jadi prototyping;
    4. prototyping, membuat karyamu sampe dengan prototype;
    5. development/design, mulai deh ngembangin sampe memroses semua kebutuhan menjadi produk
    6. revisi, mesti ketemu bagian ini, kadang ada saja bagian yang tidak sesuai kehendak klien, nah ini mesti diperhitungkan;
    7. final version, ketika sudah direvisi, dipoles, dibungkus, terus diserahin deh ke klien.

    panjang kan prosesnya? 😀 Makanya perlu diperhatiin betul, jangan sampe harga yang kamu pasang gak sesuai.
    Nah, ada beberapa hal itu bisa dikerjakan bebarengan, serentak (jika kamu ngerjainnya berdua atau lebih sama teman), tentu ada beberapa proses bisa dihemat waktunya. Coba lihat ilustrasi berikut :

    Critical Chain Project Schedule
    Critical Chain Project Schedule

    Kalo dilihat dari gambar di atas, tentu kita bisa memperkirakan, task apa saja yang bisa dikerjakan dalam 1 waktu bersamaan, dan mana yang tidak bisa. Jika tidak bisa, terus taruh di mana prosesnya..apa dikerjakan duluan, apa dikerjakan belakangan? tentu kalau ingin mengerjakan sesuatu, kerjakan dari yang paling mendasar.

  3. Standar harga per jam kerja (hourly rate)
    Kalo bagian ini, gak bisa sembarangan ditentuin. Kamu mesti sadari gaji/rate bayaran kamu berapa yang pernah kamu terima? terus itu dikerjakan berapa lama?
    Misal :
    Kamu pernah kerja 2 minggu (10 hari kerja, minus sabtu-minggu) dibayar Rp 3.000.000
    Sehari kerja dari jam 09:00 – 12:00, dilanjut ishoma, terus jam 13:00 – 16:00, berarti kalo ditotal : 6 jam kerja.
    Dan jika kita konversi menjadi perjam, rumusnya: Harga / total jam kerja / total hari
    Rp. 3.000.000 / 6 / 10 = Rp 50.000
    Berarti kamu dibayar Rp50.000,- per jam. Rate ini selalu naik seiring pengalaman, tentunya bila dinamika perubahannya naik, dalam artian, kamu sudah mengalami pengalaman yang banyak, yang dulunya sulit, jadi gampang, skill bertambah, dan beberapa project kamu jadi terbiasa garap (pengalaman). Semakin tinggi pengalaman, rate tentu semakin tinggi juga.
    Apalagi dibarengi skill yang makin tinggi pula (semakin banyak pengalaman, mestinya semakin beragam pula soft skill yang dikuasai). Bila kamu sudah 10 kali project dalam 2 tahun dengan hourly rate Rp 50.000,-… pas tahun ke-3, ya naikin lagi hourly rate jadi Rp 75.000,- atau Rp 100.000,-.Apalagi dalam 2 tahun itu kamu sudah belajar banyak, ditambah sekolah lagi, bisa berkali-kali lipat.Dan lagi-lagi, perhatiin juga standar gaji di dunia saat ini. (coba googling : salary guide [tahun], contoh : salary guide 2014, saya gak akan jelasin ini, cari di google dan baca sendiri sesuai posisi kamu di pekerjaan, bila orang kerja dibayar per bulan (20 hari kerja) sekian rupiah, tentu bisa dihitung per jamnya). Tentunya jika kamu di tahun kedua pernah mendapatkan proyek membuat sistem informasi perkantoran dengan harga Rp 60.000.000,-, kemudian di tahun ke empat jangan pasang 60jt lagi, tapi dinaikin. Berapa besar kenaikannya? kalau masih kesulitan menentukan, kembali ke pembahasan kita di atas yang baru kita bahas dan perhatikan di salary guide untuk profesi kita di tahun ke-4 besar gaji/rate-nya berapa.

    Berikut ini contoh hourly rate di beberapa negara

    Screen Shot 2017-03-31 at 2.21.26 PM

    Mahal ya? iya, di sana dihargai lebih. Kalo rate di atas diterapkan di indonesia, tentu gak pas 😀 makanya tadi saya sampaikan cek salary guide untuk Indonesia. Contohnya di sini: Salary Guide 2016. Cek profesimu sebagai developer apa. terus cek berapa tahun pengalaman kerjanya. Jika sudah dapat, ya tinggal konversi ke per jam.

  4. Investasi
    Seluruh hal yang berhubungan dengan proses yang dikerjakan di atas, dan biaya yang keluar karena hal tersebut. Seperti yang saya jelaskan di atas.

    1. Saya bangun tidur (15 menit) -> gratis
    2. saya mandi (15 menit) -> sabun : Rp 2000, sampoo Rp 1000, pasta gigi+sikat giginya : Rp 8000
    3. saya sarapan (30 menit) -> sarapan ketoprak : Rp 6000, jalan kaki ke TKP
    4. saya berangkat ke sekolah (20 menit) -> berangkat naik motor, bensin Rp 6500

    Terus, kalo ditotalin : makan waktu 1 jam 20 menit (1,33 jam), dan biaya : Rp 82.000 (2000+1000+….+6500)

    Rumusnya : hourly rate x total proses kerja
    Jadi, ketika hourly rate kamu Rp 50000, berarti :

    Rp 50000 x 1,33 jam + Rp 82.000 = Rp 148666,66 (mari kita bulatkan ke atas :p Rp 149000)

    Ya nilai dari project ini : Rp 149.000,-

    Contoh di atas mungkin sedikit membingungkan, pada intinya saja ya. Jadi kalau kamu dapat proyek dalam waktu 1 bulan, ya dikonversi saja dalam satuan hari. 1 bulan = 20 hari kerja, 1 hari = 8 jam kerja. 20*8=160 jam.

    Misal hourly rate kamu adalah Rp 250.000,- dengan pengalaman sudah 3 tahun. Ya untuk proyek dengan waktu 1 bulan…tinggal dikalikan saja: Rp 250.000*160 jam= Rp 40.000.000

    Nilai 40 juta ini bukanlah nilai mutlak, jadi ada nilai resiko juga di dalam proyek, nah ini kita bahas di poin nomor 5 di bawah.

  5. Resiko
    Segala hal tentu ada resiko, nah jangan sampe resiko ini terjadi dan menimpa kamu. Resiko mungkin bisa dihindari, tapi jika terjadi, pikirkan dampaknya dan apa antisipasinya.
    Resiko besar yang biasanya terjadi itu : project diberhentikan di tengah jalan (bahaya dong, ntar ketabrak), requirements berubah (nah ini dia yang biasanya bikin jengkel, udah bikin capek-capek, gak dipake, mesti diganti)
    Resiko kecil : perubahan minor aplikasi/software, jadi menyita waktu juga walaupun perubahannya dikit-dikit.
    Resiko juga mesti diklasifikasikan berdasarkan :

    1. kesempatan terjadi
    2. potensi yang diakibatkan (parah apa nggak?)
    3. kesulitan mendeteksi resiko supaya bisa dihindari

    Contoh : bugs di aplikasi
    Kesempatan terjadi : menengah lah, gak sedikit juga, gak banyak juga kesempatannya.
    Potensi yang diakibatkan : tinggi, kadang 1 bugs, bisa bikin aplikasi gagal jalan sebagaimana mestinya
    Kesulitan mendeteksi : tinggi, kadang bugs itu sulit banget dicari >.<

    contoh lain : server kebanjiran
    Kesempatan terjadi : kecil, ini sih kesempatan langka banget sampe-sampe server kebanjiran, kecuali kamu taruh servernya di pinggir kali ciliwung.
    Potensi yang diakibatkan : tinggi, server tenggelam, nangislah kliennya. Kamu juga mesti ikutan nangis!
    Kesulitan mendeteksi : kecil, lah wong hujan deres, knapa gak disingkirin tuh server ke tempat yang tinggi.

    Nah, resiko-resiko seperti ini yang mesti diperhitungkan. Terutama ya bayaran kamu. Misal kalo kejadian macem-macem, bayaran kamu telat, bagaimana?. Atau kamunya yang telat ngumpul kerjaan bagaimana?

    Dari sisi developer, pas di kontrak kerja, jangan lupa cantumkan aturan-aturan untuk klien (biasanya klien bikin aturan-aturan juga di poin proposal proyek (misal: apabila kamu telat mengumpulkan progress, atau progress tidak sesuai apa yang diharapkan klien, biasanya klien punya hak mengurangi harga proyek), nah, di sini kamu juga perlu membuat aturan-aturan atau klausa yang memperjelas batasan kamu selaku developer, misal: masalah konfigurasi server ataupun backend bukan tanggungjawab kamu yang seorang developer mobile app, masalah akun PlayStore tanggungjawab klien dan harus menggunakan data dari klien, atau apabila ada permintaan tambahan di luar scope pekerjaan yang telah disepakati, maka klien harus di-charge bayaran baru. Itu harus ada klause kerjasama tambahan yang menyatakan poin-poin apa saja tambahannya dan berapa besar biayanya. Nah yang model ini, developer sering luput, lalai, klien menghendaki revisi ini itu, tambahan ini-itu, tapi nilai proyeksi investasinya tetap. Jatuhnya kita yang rugi. 🙂
    Berikut ini ada gambar ilustrasi bagaimana harga sebuah proyek apabila dideliver ke klien lebih awal, tepat waktu atau terlambat. Dan berapa harga yang diharapkan. Dari sini bisa kamu kenali kalau untuk deliver sebuah progress pekerjaan ada resiko pinalty dari klien. Dan itu seharusnya kamu sudah antisipasi.

    Decision Trees
    Decision Trees

Sekian dulu yang dapat saya sampaikan, kurang lebih mohon maaf dan mohon dikoreksi 🙂

Terima kasih.

UI Automation di Android (bagian dari unit testing)

pernah melakukan Unit Testing di sebuah aplikasi?

Nah, berikut ini adalah contoh Automation test di Android. UI Automation Test merupakan bagian dari Unit testing yang bertujuan membiasakan tester terhadap komponen UI (termasuk view dan control) dari aplikasi yang ditargetkan.
Selain itu, kita bisa menganalisa aplikasi orang lain untuk mengetahui komponen apa saja yang digunakan di aplikasi tersebut.
Output yang dihasilkan berupa screenshot UI dan komponen-komponen penyusun UI secara hirarki dari parent to child (seperti halnya di XML layout)

untuk menganalisa komponen-komponen UI dari sebuah aplikasi, dapat dilakukan via Android SDK, yaitu via terminal (arahkan ke <android-sdk>/tools/), ketik :

$ uiautomatorviewer [enter]

Tampilannya seperti berikut :

Image

Lengkapnya dapat dilihat di : http://developer.android.com/tools/testing/testing_ui.html