Internet Cepat Untuk Programmer

Satu hal yang sangat membuang waktu sebagai programmer adalah: mengupdate software untuk development. Untuk programmer, biasanya ini berkaitan dengan SDK dan IDE yang baru. Biasa kita punya dua pilihan: mengupdate sekarang atau nanti.

Mengupdate sekarang berarti membuang waktu sekarang, dan artinya bisa menunda pekerjaan. Sementara menunda update juga kadang menimbulkan masalah: beberapa hal tidak berjalan lancar, dan kadang jika kita melompati update terlalu banyak, tiba-tiba jumlah masalah jadi meningkat atau bahkan project tidak lagi bisa berjalan.

Kebanyakan IDE hanya akan update jika kita buka. Ini sering mengesalkan buat saya: saya tidak sering memprogram satu topik untuk waktu yang cukup lama. Ketika ingin mulai membuat program: harus update dulu. Kadang hal seperti ini menghilangkan mood untuk membuat program kecil.

“Hanya” 422 Mb

Jika ingat, saya akan menjalankan IDE yang saya pakai hanya sekedar untuk mengupdate saja. Nanti kalau saya benar-benar butuh, setidaknya jumlah updatenya tidak terlalu banyak.

Ditambah lagi dengan 770 Mb

Salah satu alasan saya masih memakai Emacs dan mengcompile di command line (dengan CMake, Gradle, dsb) adalah: saya punya kontrol terhadap proses tersebut. Jika karena update IDE atau project jadi error, saya tetap bisa meneruskan kerja dengan editor dan compile dengan command line.

Ini bakal butuh waktu lama: 5.95 GB

Saya cukup suka dengan IntelliJ, ada ToolBox di toolbar yang memungkinkan kita mengupdate aplikasi cukup dengan satu klik saja. Andaikan ada yang membuatkan ini untuk semua IDE, maka hidup ini akan jauh lebih enak.

Saya beruntung Internet di sini cepat dan murah (saya ambil paket 1200 THB, 500Mbps/500Mbps). Sebelum pulang liburan ke Indonesia, saya mengupdate dulu semua software yang saya pakai, dan ketika di sana tidak mengupdate sama sekali. Saya tidak bisa membayangkan mereka yang harus mendownload bergiga-giga dengan Internet yang lambat.

Saya pake paket yang kanan

Windows Subsystem for Linux

Salah satu alasan saya dulu menyukai OS X adalah: ada terminal di mana kita bisa menjalankan berbagai utility command line yang sudah saya kenal bertahun-tahun. Sementara dulu di Windows kita perlu menginstall Cygwin atau MSys agar bisa memakai shell, dan perintah yang adapun sangat terbatas.

Tapi sejak beberapa tahun lalu Microsoft mendukung Windows Subsystem for Linux (WSL) atau kadang dikenal sebagai: bash on Windows. Begitu diumumkan, saya langsung mendaftar agar bisa langsung mencoba fiturnya. Awalnya saya tidak berharap banyak, tapi ternyata implementasinya memang bagus, dan ini sudah jadi sesuatu yang saya pakai setiap hari.

Teknologi yang dipakai WSL adalah menjalankan langsung syscall Linux di Windows. Jadi kita tidak perlu mengkompilasi ulang program kita di Linux, bisa langsung dicopy dan akan jalan di Windows. Tentunya ini hanya bisa jika semua library/dependency dicopy juga ke Windows. Microsoft hanya mendukung WSL ini di sistem 64 bit. Tidak 100% program Linux bisa jalan (apalagi jika mengakses hardware), tapi lebih dari 90% aplikasi yang saya butuhkan bisa jalan di WSL.

Setiap kali butuh perintah yang biasanya hanya ada di Linux (misalnya find), saya langsung mengetik “bash” untuk masuk ke shell bash di direktori saat ini, lalu menjalankan perintahnya. Microsoft tidak menyediakan XServer, tapi kita bisa memakai VcXsrv untuk menjalankan aplikasi X.

Gabungan berbagai program GUI Windows dan keampuhan command line Linux membuat saya jadi betah memakai Windows. Dulunya saya sempat ingin mendalami PowerShell, tapi baru tahu permukaannya saja sudah merasa bahwa bahasanya agak aneh. Sekarang sejak adanya WSL ini, saya jadi lebih jarang lagi memakai powershell.

Termux Widget

Di posting ini saya hanya ingin sharing salah satu tips memakai aplikasi Termux di Android. Aplikasi Termux memungkinkan kita menjalankan sebagian aplikasi Linux di Android tanpa root. Saya sendiri punya server yang bisa diakses kapan saja, jadi jarang sekali butuh memakai ini untuk sehari-hari (cukup melakukan koneksi ke server untuk menjalankan sesuatu).

Meskipun tidak banyak saya pakai, saya punya beberapa trik yang ingin saya bagikan terutama terkait dengan Termux Widget. Dengan Widget ini kita bisa melakukan beberapa aksi dengan sekali sentuh dari launcher.

Saat ini beberapa aksi yang saya set shortcutnya:

  • restart magisk. Bagian “magisk hide” sejak Android 9 sering error dan Magisk jadi terdeteksi oleh program lain. Solusinya adalah dengan merestart HP, atau cukup merestart magisk hide
  • SSH from home dan SSH to home. Shortcut pertama untuk masuk ke server internal rumah (dari rumah) dan yang kedua untuk SSH dari luar rumah ke router
  • Start SSHD. Kadang saya ingin mengedit sesuatu di ponsel (contohnya mengedit daftar shortcut), saya bisa menjalankan ssh daemon dengan sekali sentuh
  • update notes: ini untuk mengupdate catatan yang saya simpan di repositori git
  • update wallpaper: ini menambahkan IP address di wallpaper dengan bantuan ImageMagick

Untuk membuat shortcut, kita cuma perlu membuat file skrip di dalam direktori “.shortcuts” (dot shortcuts). Skripnya terserah kita isinya apa, berikut ini contoh salah satu isi skrip saya.

Terlihat bahwa saya memakai beberapa perintah dengan awalan termux, perintah-perintah tersebut bisa diaktifkan dengan menginstall Termux API. Ada banyak hal-hal menarik yang bisa dilakukan dengan Termux API, misalnya:

  • membaca call log
  • membaca SMS log (kita bisa membuat skrip untuk memforward ke Telegram)
  • mengeset keyboard

Untuk masalah scheduling, memakai cron di termux tidak reliable, jadi saya memakai Tasker yang memanggil skrip shell. Sekarang ini saya memakai tasker yang akan mengarsipkan SMS dan mempush arsipnya ke git setiap beberapa jam.

Jika Anda adalah orang yang sering memakai Termux, maka coba pelajari Termux API dan Termux Widgets. Untuk Anda yang jarang memakai Termux tapi punya beberapa hal yang ingin diotomasi, cobalah memakai Termux dan lihat apakah bisa menyelesaikan masalah Anda.

Apache Guacamole

Apache Guacamole adalah clientless remote desktop gateway. Atau mudahnya: jika kita menginstall ini di sebuah gateway (atau di server remote), kita bisa mengakses Windows (via RDP), Linux (via VNC), atau SSH ke manapun dengan menggunakan browser saja.

Saat ini saya masih memakai Mini PC Router yang dibeli sekitar 2 tahun lalu. Mini PC ini cukup powerful untuk menjalankan berbagai aplikasi (memorinya 4 GB, dengan SSD 120 GB) termasuk juga Apache Guacamole yang memakai Java. Meskipun dalam 99% kasus saya lebih suka memakai aplikasi SSH langsung, tapi Guacamole ini sangat berguna ketika butuh akses GUI.

Dengan chrome melakukan koneksi ke rumah, lalu menjalankan Firefox

Sebelum memakai Guacamole saya memakai Team Viewer, tapi dulu sempat ada kecurigaan bug di team viewer yang memungkinkan orang masuk ke komputer kita. Selain masalah bug itu, TeamViewer juga kadang error ketika melakukan remote connection ke Linux. Solusi berikutnya yang saya coba adalah SSH + Port forwarding plus remote desktop dan VNC viewer. Hal ini cukup merepotkan, jadi jarang saya lakukan.

Sekarang dengan browser saja saya bisa melakukan koneksi ke rumah via Guacamole ke server Windows dan juga Linux. Untuk Linux saya menggunakan beberapa VNCServer (di satu server) untuk tujuan tertentu. Misalnya ada satu VNCServer untuk pentesting (yang memakai OWASP ZAProxy dengan GUI).

Saya juga memasang guacamole di server dedicated di Eropa. Kadang download sesuatu lebih cepat dilakukan dari server di Eropa. Dalam 90% kasus biasanya download bisa dilakukan di command line, tapi ada website yang melakukan banyak proteksi sehingga sulit dilakukan.

Contoh proteksi downloadnya:

  • Hanya boleh ada 1 koneksi setiap waktu
  • Harus memakai Cookie dan Cookienya terikat pada IP tertentu (jadi ketika dicopy paste ke server, jadi tidak valid)
  • Harus memakai user agent tertentu (jadi jika memakai command line, user agent harus dicopy persis)
  • Download menggunakan Javascript dan file didekrip di level Javascript

Daripada menghabiskan waktu mengakali, yang saya lakukan adalah:

  • membuka guacamole
  • memilih koneksi VNC ke server di Eropa
  • menjalankan browser di dalam koneksi VNC
  • mendownload file via browser yang berjalan di cloud
  • mentransfer file dari server ke rumah

Sepertinya langkah tersebut merepotkan, tapi dalam kasus tertentu bisa menghemat waktu sangat banyak. Kadang download yang butuh 3 jam bisa dilakukan dalam 10 atau 15 menit.

Pocophone F1

Sejak punya smartphone pertama (Nokia 3650) sekitar 2003, sudah tidak ingat lagi berapa jenis smartphone yang saya pakai. Sebagian reviewnya ditulis di blog ini tapi biasanya secara singkat saja. Supaya ingat, saya akan mencoba membahas benda-benda yang dipakai sekarang ini. Saya sudah membahas iPhone XR dan iPad di posting yang lalu, sekarang saya akan membahas Pocophone F1 (di India namanya Poco F1, untuk global namanya Pocophone F1).

Saat ini iseng memasang SD Card 32 GB

Saya masih memakai Android karena memang lebih nyaman untuk saya, plus kebanyakan pekerjaan pentesting adalah untuk Android. Saya sudah memakai Pocophone F1 ini selama beberapa bulan dan sejauh ini cukup senang. Spesifikasi Pocophone F1 ini cukup bagus, intinya mereka membuat device relatif murah dengan spesifikasi mendekati device high-end. Tabel di bawah ini (meski tidak menyertakan semua ponsel) cukup untuk membandingkan kecepatan/harga Pocophone F1 dibandingkan ponsel lain.

Perbandingkan skor Antutu sumber: http://www.china-prices.com/antutu (Maret 2019)

Saya memilih yang RAM-nya 6 GB dan storage 128 GB. Di device sebelumnya saya memilih 64 GB dan saya merasa 64 GB tidak lagi cukup. Storagenya memakai UFS 2.1 yang sangat cepat. Harga ponsel ini relatif mahal dibandingkan banyak ponsel Xiaomi lain (12000 an baht, sementara yang lain sekitar 8000 baht) tapi menurut saya ini worth the price.

Saya memakai dual sim card. SIM card pertama adalah yang saya pakai sejak kali pertama sampai Thailand (sudah terdaftar di mana-mana) dan yang kedua untuk LINE Mobile yang paket datanya cepat tapi murah. Saya tidak pernah menemui masalah signal dengan pemakaian dua SIM card ini, kecuali di daerah terpencil di mana memang tidak ada signal.

Sebagai orang yang suka ngoprek, saya senang karena ponsel Xiaomi semuanya bisa diunlock bootloadernya. Berkali-kali beredar isu bahwa mereka akan menutup fitur ini tapi sampai saat ini semuanya hanya hoax. Seperti tertulis di posting sebelumnya saya menginstall Magisk. Tiap kali upgrade software, saya uninstall Magisk, update lalu reinstall lagi Magisk. Ini memang agar merepotkan, tapi instalasinya hanya beberapa menit saja. Anggap saja seperti sesekali membersihkan meja yang berantakan yang juga butuh beberapa menit).

Sudah membuka banyak app, masih tersisa sekitar 2GB

Sejauh ini yang saya komplain dari Pocophone F1 hanya: tidak ada IR Blaster (tidak bisa jadi remote TV dan AC). Sementara fitur lainnya cukup: ada jack earphone, memakai USB-C dan bisa Quick Charging. Saat ini ponsel ini memakai Android 9.0 dengan MIUI (dan saya tidak keberatan dengan kebanyakan fitur MIUI). Memori 6GB juga cukup untuk semua yang perlu dilakukan sekaligus.

Setelah memakai berbagai ponsel Android dari yang sangat murah (yang paling murah: 400 baht) sampai cukup mahal (dulu Galaxy Note 4 baru, sekitar 30 ribu baht), saya merasa ini cukup di tengah. Ponsel yang lebih murah akan memperlama kerja dan ponsel yang terlalu mahal juga tidak terlalu berbeda dari ponsel menengah.

Printer

Salah satu benda elektronik yang paling menyebalkan adalah: printer. Sejak sampai sini kami sudah membeli beberapa jenis printer, baik inkjet maupun laserjet. Semuanya akhirnya sudah rusak: Ada yang feedernya error (tidak bisa menarik kertas), ada yang mengeluarkan asap (ini laser printer), ada yang headnya rusak, dsb.

Membetulkan printer cukup merepotkan (berat membawa-bawa printer), apalagi kalau sudah di luar masa garansi. Plus harga printer baru lebih murah dari ongkos reparasi atau membeli head baru. Bahkan pada kebanyakan printer: harga tinta/tonernya beberapa kali lipat harga printernya.

Kami tidak terlalu sering memakai printer, tapi kalau sedang butuh, perlu mencetak agak banyak. Printer laser sebenarnya cukup enak, tapi entah kenapa selalu rusak setelah masa garansi habis. Printer inkjet lebih ekonomis, tapi masalah dengan printer inkjet adalah: biasanya tintanya menggumpal jika tidak sering dipakai.

Sekarang printer saat ini adalah Canon PIXMA G2000 dengan sistem isi ulang (sistemnya ini resmi dari sana, bukan tambahan). Sudah pernah rusak dua kali tapi masih dalam masa garansi. Kali pertama rusak karena saya menaruh buku yang berat di atas printer sehingga bagian scanner-nya error, dan karena scanner error, printernya nggak mau startup sama sekali. Menurut saya designnya aneh, tapi mungkin supaya orang tidak kecewa karena tidak bisa memakai fitur fotokopinya. Kerusakan kedua: tintanya tidak bisa keluar sama sekali (sudah dicoba deep cleaning).

Karena memakai tinta isi ulang, biaya tintanya cukup ekonomis. Tapi tidak seluruh tinta ini bisa terpakai optimal, karena tetap bisa menggumpal jika lama tidak dipakai dan harus pake nozzle cleaning (yang menghabiskan tinta) supaya bisa muncul lagi warna yang hilang.

Terpikir menulis ini karena pagi ini masalah yang sama saya alami lagi: tinta hitam bisa normal (karena minggu lalu saya sempat memprint banyak paper dalam hitam putih), tapi warnanya tidak muncul dengan benar. Akhirnya harus menghabiskan waktu melakukan prosedur deep cleaning supaya bisa lagi.

Sebelum nozzle cleaning, warna magenta tidak muncul. Setelah cleaning warnanya bisa muncul lagi

Sekarang ini saya berusaha untuk seminimal mungkin memakai kertas, tapi tetap saja ada banyak urusan administrasi yang butuh kertas. Craft anak-anak (seperti mewarnai untuk Joshua) juga butuh kertas (sangat berbeda mewarnai di iPad dengan di kertas).

Komputer KIM-1

Salah satu hobi saya adalah mengenal komputer lama. Sebenarnya selain mengenal pengen juga memiliki berbagai komputer lama, tapi sayangnya: harganya biasanya sangat mahal dan saya tidak punya space yang cukup di tempat tinggal saat ini. Saya baru saja membaca buku lama berjudul: The First Book of KIM yang berisi koleksi program KIM-1.

KIM-1 (Keyboard Input Monitor) merupakan “single board computer” yang diluncurkan April 1976 (sebelum saya lahir) dengan CPU 6502, RAM 1 kilobyte, input keypad heksadesimal, dan output berupa 7 segment display 6 digit. Kit paling murahnya 245 USD dan tanpa penyimpanan permanen (harus ditambahkan tape eksternal jika ingin menyimpan program yang kita tulis).

Iklan KIM-1 di Byte Magazine

KIM-1 ini bentuknya hanya berupa board saja, tanpa casing. Keypad heksadesimal digunakan untuk memasukkan program. Tentunya program harus dimasukkan langsung dengan bahasa mesin langsung ke RAMnya. Untuk membaca memori di suatu alamat tertentu, kita bisa menekan tombol AD (address), lalu alamatnya, misalna: AD 0100. Ketika di memori tertentu, kita bisa mengedit isinya dengan menekan DA (data), lalu mengetik memori yang ingin diedit. Jika sudah di memori tertentu, kita bisa menekan + untuk ke memori berikutnya, jadi tidak perlu mengetik 0101 jika sudah di memori 0100. Dengan cara ini program bisa dimasukkan cukup cepat.

Sumber gambar: Wikipedia

Jika kita salah membuat program dan programnya stuck dalam loop, tombol ST (Stop) bisa ditekan. Debugging bisa dilakukan dengan saklar SST (single step). Secara umum keseluruhan fungsi bisa dipelajari dengan singkat, hanya saja pemrograman dalam bahasa mesin butuh waktu belajar yang cukup lama.

Jika kita membeli aksesori tambahan seperti: RAM ekstra, keyboard, terminal video (atau kit untuk menghubungkan benda ini ke TV) maka pemrograman dalam berbagai bahasa bisa dilakukan (termasuk juga BASIC). Tapi defaultnya kita perlu memprogram dalam bahasa mesin. Benar-benar bahasa mesin, bahkan defaultnya tidak ada assembler, kita harus menerjemahkan assembly ke bahasa mesin secara manual.

Untungnya ROM KIM-1 (2KB) sudah memiliki beberapa subrutin yang bisa dipakai, misalnya untuk menampilkan angka di 7 segment display atau untuk membaca key mana yang ditekan. Tanpa subrutin dasar ini, membaca input dan membuat output akan sulit.

Dengan kemampuan yang sangat terbatas ini, apa yang bisa dilakukan? ternyata ada banyak sekali, dalam buku The First Book of KIM dicontohkan banyak program yang tidak butuh aksesori tambahan, misalnya:

  • Penjumlahan (memfungsikan KIM sebagai kalkulator sederhana)
  • Jam
  • Game tebak angka
  • Game blackjack
  • Latihan mengetik di keypad (muncul angka di display, kita harus tekan tombol yang sesuai)

Display 7 segmentnya bisa dikendalikan sehingga bisa membuat simbol selain angka. Salah satu gamenya dengan kreatif menggunakan garis-garis sebagai bentuk binatang (lihat gambar di bawah)

Bukan cuma game sederhana saja yang bisa dibuat. Salah satu game pertama yang sukses adalah untuk KIM-1 (Microchess) yang terjual sampai 50 ribu kopi (satuannya 10 USD).

KIM-1 juga bisa dihubungkan ke speaker sehingga bisa memainkan nada sederhana. Selain itu KIM-1 bisa dihubungkan bisa dihubungkan ke berbagai hardware lain, misalnya untuk mengendalikan lampu rumah dengan menggunakan relay.

Saat ini sudah banyak yang membuat emulator KIM-1 baik dalam bentuk software (misalnya ini versi web) maupun hardware (misalnya KIM UNO). Jadi jika tertarik, sekarang gampang sekali mencobanya tanpa mengeluarkan uang sama sekali. Hardware aslinya masih bisa dicari di ebay, tapi harganya super mahal: kit dengan beberapa aksesorinya sekitar 10 ribu USD.

Dulu orang-orang harus benar-benar mengerti dasar komputer (sampai level bahasa mesin) karena keterbatasan hardware. Sementara sekarang ini lulusan informatika banyak yang tidak paham bagaimana hardware bekerja. Salah satu alasannya adalah komputer saat ini sudah terlalu kompleks. Mungkin mereka perlu sedikit diperkenalkan dengan teknologi lama, di mana programmer harus mengedit RAM secara langsung dan memasukkan kode mesin secara manual.

Membaca dan bereksperimen dengan berbagai komputer lama membuat saya takjub dengan perkembangan teknologi. Saya juga jadi sangat menghargai kreativitas pionir komputer dalam memanfaatkan komputer yang masih sangat terbatas.