AlphaSmart Dana

AlphaSmart Dana adalah device Palm OS lama dengan form factor keyboard yang sudah tidak diproduksi lagi. Device ini dulu cukup populer di banyak sekolah di amerika, terutama digunakan untuk anak-anak yang kesulitan menulis dengan pulpen/pensil. Device ini saat ini masih populer di kalangan penulis karena beberapa hal: keyboardnya enak dipakai untuk mengetik, minim gangguan (karena tidak bisa mengakses internet), relatif ringan (sekitar 1 kg), memakai 3 Batere AA biasa (atau yang rechargable) dan tahan beberapa puluh jam sebelum perlu mengganti batere lagi. Ada dua versi Dana, Wireless dan non wireless, yang akan dibahas di sini adalah versi wireless yang kami punya.

Stiker biru kecil di tengah Dana itu ditempelkan supaya gampang membedakan dari Dana yang lain.

Untuk mentransfer data ke komputer, ada beberapa opsi. Opsi pertama adalah menggunakan mode keyboard, dengan ini seolah-olah alphasmart akan “mengetik ulang” isi file ke editor apapun yang terbuka di layar komputer. Dengan cara ini AlphaSmart Dana bisa terkoneksi ke device apa saja yang menerima input dari USB keyboard (termasuk juga tablet atau ponsel, asalkan bisa memberikan cukup daya). Kabel yang digunakan adalah kabel USB printer standar. Opsi kedua adalah dengan menggunakan jaringan WIFI (sayangnya yang disupport hanya WEP). Opsi terakhir adalah dengan menggunakan SD Card

Karena menggunakan sistem operasi Palm OS, maka berbagai aplikasi Palm OS lama bisa diinstall di device ini dan tentunya kita bisa membuat sendiri aplikasi baru yang dibutuhkan. Contoh aplikasi yang bisa diinstall misalnya: Bible Reader (terpakai oleh Jonathan), Kamus, dan Timer. Sayangnya ukuran device ini tidak standar, jadi banyak aplikasi hanya akan muncul kecil di tengah layar. Beberapa aplikasi bisa diakali menggunakan RsrcEdit agar bisa menggunakan layar yang besar, tapi beberapa perlu dicompile ulang (jika sourcenya tersedia).

Beberapa tahun lalu saya sebenarnya sudah tertarik membeli device ini, harganya relatif murah (sekitar 20-50 USD, tergantung sellernya di eBay), tapi yang tidak murah adalah ongkos kirimnya, sehingga harga totalnya lebih dari 120 USD.

Tahun ini saya berusaha seminimal mungkin membeli gadget ataupun komponen elektronik untuk dioprek. Ketika mendekati ulang tahun saya, saya berpikir untuk membeli satu device untuk hadiah diri sendiri. Tadinya terpikir membeli console Nintendo Switch (apalagi baru ada kabar ini mulai bisa dihack) atau Nintendo 3DS (yang harganya sudah tidak terlalu mahal). Tapi kalau dipikir-pikir saya jarang sekali bermain game, jadi saya urungkan niat membeli console game.

Begini layar Dana di emulator Palm OS. Aslinya tidak sejernih ini.

Saat ini AlphaSmart seri Dana sudah mulai sulit dicari di eBay. Kebanyakan yang ada adalah AlphaSmart Neo, yang merupakan versi sebelumnya. Alphasmart Neo tidak memiliki sistem operasi dan bisa bertahan puluhan hingga ratusan hari dengan beberapa batere AA. Kelemahan Neo bagi saya adalah sulit dioprek (karena tanpa OS)

Ketika saya melihat ada yang menjual Dana di-eBay, tapi harga plus ongkos kirimnya 110 USD, saya kembali mengurungkan niat. Tapi kmemudian muncul listing lain: 7 Alphasmart Dana versi Wireless berikut ongkos kirim total semuanya menjadi 228 USD. Sebenarnya saya nggak butuh 7 benda ini, tapi jika dirata-ratakan harganya hanya 32.5 USD. Saya cukup yakin bisa menjual ulang benda ini dengan harga 33 USD per item (dan sudah terjual 2). Selain itu saya juga ingin mencobakan benda ini ke Jonathan.

7 Dana. Semuanya sudah ada dialokasikan, belum dikirimkan.

Ketika sampai, saya langsung coba semuanya dan semua berjalan normal. Tapi sayangnya hanya 3 yang memiliki stylus. Untuk memilih menu, kita bisa memakai jari, dan stylus apa saja bisa dipakai di benda ini, selain itu sebenarnya jarang sekali stylus ini dipakai karena semua  fungsi bisa diakses dari keyboard.

Layar Dana adalah seperti pada PDA Palm lama, jadi bagi sebagian orang mungkin akan sulit membaca layar ini. Bagi saya sih baik-baik saja. Layar Dana ada backlightnya sehingga bisa dipakai dalam gelap. Layarnya juga cukup jelas terbaca di bawah matahari langsung. Bagi sebagian orang kontrasnya kurang bagus dan sudut pandangnya kurang bagus. Benda ini juga tidak memiliki keyboard backlight, jadi harus memakai touch typing ketika mengetik dalam gelap. Sebuah lampu USB bisa dipasang di atas benda ini tapi akan boros batere.

Dengan menggunakan alphasmart saya dipaksa untuk tidak mengecek internet, dan juga tidak terganggu dengan berbagai notifikasi. Sejauh ini saya jadi lebih banyak menulis artikel blog (seperti artikel ini yang ditulis di AlphaSmart lalu ditransfer ke komputer).

SD Card

Dana mendukung dua SD Card. Agak aneh memang karena device modern biasanya hanya mendukung 1 kartu saja. Aplikasi bisa diletakkan di SD Card, jadi kita bisa menyimpan aplikasi di SD card pertama sementara SD Card kedua untuk data. SD Card yang didukung hanya yang ukurannya maksimum 1GB. Card ukuran ini sudah sulit dicari tapi masih bisa didapatkan secara online.

Secara umum penyimpanan internal Dana tergolong besar untuk Palm OS, biasanya PalmOS hitam putih hanya sampai 8 MB memorinya, tapi Dana sampai 16 Mb. Seperti Palm OS, memori Dana sifatnya volatile, artinya akan segera hilang isinya jika batere dicabut (tapi ada kapasitor yang bisa menyimpan data beberapa menit sementara kita mengganti baterenya). Jadi jangan sampai batere Dana benar-benar habis, karena semua isinya akan hilang.

Sebagai catatan: jika 1 kata rata-rata 10 huruf (kata dalam bahasa Indonesia cukup panjang), dan kita menulis 1000 kata per hari, maka hanya butuh 10kB, dan setahun hanya butuh 3650 kB atau 3.65 MB (jangan protes dengan konversi x1000 bukan x1024 saya memakai decimal prefix bukan binary prefix). Jadi tanpa SD Card pun kapasitas Dana sudah cukup besar. Sebuah SD Card 16 MB akan cukup besar untuk kebutuhan sebagian besar orang.

Battery Hack

Aslinya Dana bisa memakai 3 batere AA biasa (non rechargable), atau battery pack yan rechageable. Keduanya memakai slot yang sama, jadi tidak bisa kita memakai keduanya sekaligus. Bedanya antara batere biasa dan rechargeable pack hanyalah pada konektornya. Konektor batere biasa tidak akan menerima arus charging ketika Dana dicolok ke adaptor atau ke komputer, sedangkan konektor satu lagi akan menerima charging.

Hack paling sederha adalah: mengganti agar kabel charging bisa dipakai di slot batere biasa. Alternatif lainnya adalah membongkar battery pack lama dan menggunakan kabel itu tanpa menyolder kabel. Cara ini yang saya lakukan. Sekarang tiap beberapa hari saya bisa menhubungkan Dana ke komputer sambil charging.

Begini baterry pack aslinya. Saya kupas untuk diambil kabelnya saja.
Batere rechargeable saya pasang dengan konektor yang dilepas dari battery pack lama.

Sinkronisasi dengan PC

Saat ini software sinkronisasi Palm OS masih bisa digunakan di Windows 10, termasuk juga yang 64 bit. Sayangnya Dana tidak bisa disinkronisasi dengan Linux. Dulu saya pernah memakai Palm dengan USB dan sudah tahu berbagai triknya di Linux, tapi sayangnya module kernel visor tidak mengenali benda ini. Saya sudah berusaha compile ulang modul kernelnya dengan memodifikasi Vendor/Product ID agar dikenali, tapi ternyata protokolnya berbeda dan Dana akan crash ketika saya paksa.

Akses WIFI

Saya sudah mensetup access point dari Raspberry Pi untuk bisa menyimpan dan membuka dokumen dari jaringan. AlphaSmart hanya mendukung WEP dengan enkripsi 40 atau 128 bit. Share yang bisa diakses adalah SMB versi 1. Di Raspberry Pi saya setup Dropbox Uploader sehingga file yang saya simpan di folder akan diupload ke Dropbox. Tutorialnya sudah saya tulis di blog saya yang lain.

Meskipun teorinya bisa dipakai untuk browsing web sederhana, tapi berbagai software yang ada sudah terlalu tua dan berbagai web yang ada sudah  terlalu kompleks. Jadi akses WIFI ini hanya saya gunakan untuk mengirimkan dokumen supaya terarsip di Dropbox.

Dana terkoneksi ke jaringan

Sebagai catatan: jangan mengubah akses poin di rumah menjadi WEP, karena mudah sekali dicrack. Dengan RPI dan USB Dongle, range WIFI hanya dekat saja (paling menembus 1 kamar). Share untuk dana juga sebaiknya tidak dicampur dengan file lain karena dua alasan: supaya Dana tidak hang atau bingung jika ada terlalu banyak file, dan juga agar file lain aman andaikan ada yang berhasil masuk melalui access point yang ditujukan untuk Dana.

Penutup

Sejauh ini saya cocok memakai AlphaSmart Dana, dan sudah menulis banyak posting blog sejak menggunakan benda ini serta cukup banyak mengoprek benda ini. Bagi Risna menulis di AlphaSmart kurang nyaman karena kurang bisa melihat dengan jelas teks di layar dan kurang nyaman untuk editing. Jonathan baru suka bereksperimen memakai Dana, tapi belum suka banyak mengetik.

 

Lulusan Kuliah IT seharusnya bisa apa?

Tahun lalu saya membaca mengenai skill yang seharusnya dimiliki lulusan SMK. Entah kenapa tulisan ini beredar lagi di timeline saya tahun ini. Ketika saya baca lagi mengenai skill yang diharapkan, kebanyakan skill ini bahkan tidak dimiliki oleh lulusan Sarjana Informatika/Ilmu Komputer/Teknologi Informasi (berikutnya akan saya singkat jadi: lulusan/sarjana IT).

Sudah menjadi fakta bahwa banyak lulusan IT yang tidak bisa memprogram (silakan baca artikel: Why can’t programmers.. program?). Separah ini:

Like me, the author is having trouble with the fact that 199 out of 200 applicants for every programming job can’t write code at all. I repeat: they can’t write any code whatsoever.

Sebelum diskusi masuk ke masalah pekerjaan, kesuksesan, jiwa entrepreneur, dsb saya ingin menekankan dulu: lulusan apapun dengan skill bagaimanapun bisa bekerja di berbagai bidang yang tidak sesuai jurusan yang diambilnya. Tapi jika sebuah negara ingin bisa maju di bidang tertentu, ya tentunya yang diharapkan adalah lulusan dari bidang tersebut memiliki skill yang baik dan berkontribusi di bidangnya.

Contohnya sebagian orang menyatakan: nggak apa-apa nggak bisa mrogram setelah lulus IT, yang penting kemampuan logikanya terpakai nanti ketika jadi manager. Nah terus siapa yang akan memajukan industri IT? Contoh lainnya: jika semua sarjana pertanian beralih profesi ke berbagai bidang lain, bagaimana bisa maju pertanian Indonesia?

Kebanyakan jurusan teknik yang saya tahu minimal lulusannya memiliki dasar teori yang baik mengenai bidang ilmunya, dan memiliki keahlian praktis meskipun sangat minimal. Misalnya target pelajaran Teknik Kimia dan Teknik Fisika adalah untuk industri, dan saya tahu bahwa lulusan Teknik Kimia dan Fisika minimal punya keahlian praktis untuk mengenal dan mengoperasikan berbagai peralatan lab sederhana. Mereka juga memahami berbagai konsep dasar mengenai ilmu Kimia/Fisika.

Beda kasusnya dengan banyak lulusan IT yang saya tahu: banyak yang tidak bisa melakukan hal dasar. Install sistem operasi? tidak bisa, itu kan bisa dilakukan oleh dukungan teknis, Memasang kabel jaringan atau mengkonfigurasi router/firewall? tidak bisa, itu kan bagian jaringan.

Sedihnya lagi, seringkali skill pemakaian software juga rendah. Contoh kecil: Microsoft Word memiliki fitur otomatis untuk membuat daftar isi. Tapi banyak yang tidak tahu fitur ini dan daftar isinya seringkali dibuat secara manual. Memakai spreadsheet juga terbatas pada formula sederhana (tidak sampai LOOKUP atau Pivot). Saya tidak berharap seseorang jadi jago Ms Excel ketika lulus, tapi setidaknya konsep dasarnya tahu dan tidak bingung jika pindah ke OpenOffice atau Google Sheets. Sama seperti lulusan Teknik Fisika tidak akan bingung memakai timbangan, baik itu analog maupun digital.

Memang di jurusan IT ini gampang sekali mencontek: semua praktikum programming bisa mencontek/menyalin dengan mudah dari orang lain (via internet/jaringan lokal/USB disk). Semua tugas dan pekerjaan rumah bisa dicari jawabannya online (atau bisa pesan dari situs freelancer). Jadi kurang ada “paksaan” untuk serius mencoba.

Berbeda dengan lulusan Teknik Kimia yang pasti harus pernah melihat dan bekerja berbagai bahan kimia, hanya sedikit lulusan IT yang pernah bekerja dengan berbagai software praktis. Apakah yang diajarkan ketika kuliah terlalu banyak teori? Bagaimana dengan level skill yang lebih tinggi, misalnya membuat blueprint aplikasi (baik skala kecil ataupun besar) atau merancang database? ini juga biasanya tidak bisa.

Supaya praktikum IT bisa dilakukan dengan cepat, di kebanyakan tempat semua sudah disiapkan di awal. Semua software sudah terinstall dengan versi eksak yang sudah diberikan (kadang versi softwarenya sudah kuno), dan mahasiswa hanya perlu datang, mengetik (atau mencontek/download dari Internet/copy dengan USB Disk) lalu pulang. Keahlian mendebug program biasanya tidak diajarkan. Jika programnya lambat, umumnya tidak paham kenapa terjadi, baik secara teori dari analisis notasi Big-O ataupun secara praktis menggunakan tools profiler.

Kebanyakan mahasiswa yang ketika lulus bisa memprogram secara praktis (misalnya: membuat website, membuat game, membuat aplikasi) biasanya belajar sendiri berbagai keahlian itu. Jadi apakah ini salah kurikulumnya? salah dosennya?

Sebagian mungkin salah dosennya. Seringkali dosen tidak bisa menjelaskan dengan baik suatu topik. Bahkan banyak dosen yang tidak bisa memprogram sedangkan dosen tersebut mengajar pemrograman.

Kalau saya bertemu lulusan Teknik Kimia, saya cukup yakin dia akan bisa menjelaskan secara umum tentang dasar kimia (atau lulusan fisika untuk menjelaskan tentang dasar fisika). Sedangkan kalau saya tanyakan ke lulusan IT, cukup banyak yang tidak tahu menjelaskan dari mulai 0 dan 1, mesin turing, sampai bagaimana program bisa berjalan. Padahal dasar ilmu komputer tidak terlalu rumit.

Harapan saya seorang lulusan IT bisa tahu dasar teori dan bisa mempraktikkannya. Hapalan teori untuk dunia IT lebih sedikit dari kebanyakan bidang lain (kebanyakan hal bisa memakai logika saja). Dalam urusan praktis saat ini semua masalah bisa dicari solusinya dengan Google asalkan tahu apa yang perlu dicari. Jadi skill praktis minimal adalah: menginstall sesuatu, menjalankan sesuatu, dan mencari solusi suatu masalah di Google/StackOverflow. Tentunya dasar teori yang baik akan mendukung dalam hal praktis, misalnya jika sudah mengerti konsep OOP dengan baik, berpindah dari Java ke C# bisa dilakukan dengan cepat. Jika sudah mengerti konsep sistem operasi Unix, berpindah dari Linux ke FreeBSD/NetBSD/Solaris bisa dilakukan relatif singkat.

Saya tidak berharap lulusan IT bisa menjadi Superman yang bisa segala macam hal. Tapi yang diharapkan adalah: bisa cepat beradaptasi dengan berbagai hal praktis, dan juga bisa mengimplementasikan berbagai algoritma jika diperlukan. Jika ada suatu algoritma baru yang sangat baik dan ada deskripsi lengkapnya, maka bisa menyatakan: ok akan saya implementasikan dalam Python, dan bukan berkata: belum ada yang membuat versi Python-nya jadi kita tunggu saja sampai suatu saat ada yang mengimplementasikan (kadang kalau beruntung bisa cepat, tapi bisa juga beberapa tahun kemudian baru ada versi Python-nya)

Dasar Komputer itu Mudah

Sebagian masalah dalam dunia IT mungkin karena sekarang ini komputer sudah terlalu abstrak. Hal ini menyebabkan orang sulit memahami hal-hal dasar yang membentuk sebuah sistem komputer. Padahal Kurikulum informatika/ilmu komputer sebenarnya sudah dirancang dengan baik, tapi banyak yang tidak bisa melihat benang merah topik-topik yang diajarkan.

Akibat tidak terlihatnya benang merah ini, orang merasa belajar berbagai topik terpisah yang tidak dipahami konsepnya (misalnya pelajaran otomata, arsitektur komputer) dan juga tidak punya nilai praktis di kehidupan nyata (tetap tidak bisa assembly setelah arsitektur komputer, tidak bisa membuat parser setelah pelajaran otomata).

Di pelajaran matematika SMU (atau bahkan SMP) kita sudah diajari mengenai basis bilangan. Di luar konteks komputer basis bilangan ini biasanya kurang penting tapi karena komputer yang kita temui sehari-hari memakai sistem biner, maka ini penting. Menuliskan nilai biner bisa sangat panjang, jadi kita biasanya juga memakai basis 8 (mengelompokkan 3 bit biner jadi satu digit basis 8) dan basis 16 (mengelompokkan 4 bit biner jadi satu digit basis 16).

Kuliah arsitektur komputer biasanya akan memperkenalkan gate dasar, seperti AND, OR, NOT, dsb. Gate-gate ini kemudian disusun untuk membuat sebuah binary adder (penjumlah 1 bit dengan 1 bit). Sepertinya ini tidak penting, tapi ingat waktu kita masih SD, kita diajari untuk menghapal penjumlahan satu digit (seperti 9 + 7), supaya berikutnya kita bisa menjumlahkan angka yang lebih besar (misalnya 19+27) dengan menjumlahkan dulu digit paling kanan (9+7 = 16), lalu jika ada lebihnya (carry, dalam kasus ini ada carry 1) ditambahkan ke penjumlahan berikutnya (1 + 2 + carry).

Sama seperti ilmu penjumlahan satu digit desimal bisa dipakai untuk n-digit. Sirkuit adder ini bisa disusun dengan adder yang lain agar bisa menjumlahkan bukan cuma 1 digit biner tapi n digit biner. Sekarang kita bisa menjumlahkan bilangan sebesar apapun. Karena bisa menjumlahkan, kita juga bisa mengalikan, perkalian hanyalah penjumlahan yang diulang.

Bagaimana dengan pengurangan? kita bisa merepresentasikan bilangan negatif dengan menggunakan two’s complement. Sekarang jika kita punya angka 2, angka -1 dan sirkuit adder, kita bisa menjumlahkan 2 dan -1 dan hasilnya adalah 1. Jadi dengan memahami representasi tersebut, kita bisa mengurangi, dan jika kita bisa mengurangi, maka kita bisa membagi.

Bisa mengurangi juga berarti bisa membandingkan. Sebuah bilangan a sama dengan b jika a dikurangi b nilainya nol. Sebuah bilangan a lebih dari b jika a dikurangi b nilainya positif, dan sebaliknya a kurang dari b jika a dikurangi b nilainya negatif.

Topik lain yang akan diajarkan adalah flip-flop atau latch. Intinya adalah sirkuit ini bisa “mengingat” atau menyimpan satu bit. Jika kita bisa menyimpan satu bit, maka dengan banyak flip-flop kita bisa menyimpan banyak bit. Ini adalah topik dasar memori. Topik clock juga biasanya akan dijelaskan untuk memahami urutan operasi.

Dalam sebuah sirkuit digital, kita bisa memilih (dengan multiplexer dan demultiplexer) sirkuit mana yang aktif. Jadi  kita bisa memasukkan dua bilangan biner, dan memilih apakah ingin membagi atau menjumlah, atau melakukan operasi lain.

Sebagai manusia kita bisa memasukkan sekuens biner ini (yang merupakan “instruksi”)secara manual  satu persatu: tekan ini untuk menjumlah, lalu tekan ini untuk mengurangi, dst seperti memakai kalkulator. Tapi karena kita sudah mengenal memori (dari topik flip-flop), maka bilangan dan urutan instruksi tersebut bisa dimasukkan ke dalam memori, dan kemudian dieksekusi.

Setelah itu topik akan berlanjut ke berbagai detail bagaimana membuat instruksi yang lebih kompleks yang tidak hanya menjalankan instruksi secara linear dari pertama sampai terakhir tapi bisa juga lompat instruksi tertentu (jump) jika kondisi  terpenuhi (biasanya kondisi ini dari hasil komparasi, yang pada dasarnya adalah pengurangan). Inilah dasar sebuah komputer.

Tanpa sebuah “bahasa pemrograman” dan bahkan tanpa sebuah “assembler”, dasar teori tadi sudah cukup untuk menjelaskan komputer sangat sederhana, dan bahkan komputer paling awal dulu ya seperti ini: input output biner, tanpa assembler/shell/editor/user interface.

Gambar berikut ini adalah PDP-8, komputer pertama yang sukses di pasaran. Komputer ini mulai dipasarkan tahun 1965 dan terjual 50 ribu buah komputer. Dulu harganya 18500 USD, dengan menghitung inflasi kira-kira saat ini setara sekitar 2 milyar rupiah).

Jadi kita mengisi memori (baik instruksi maupun data) langsung dengan mengeset bit 0 dan 1 menggunakan saklar, lalu menekan tombol untuk mengirimkan bahwa kita sudah selesai mengisi. Ada tombol juga untuk pergi ke memori berikutnya. Outputnya pun berupa biner dalam bentuk lampu yang menyala.

Komputer populer berikutnya di tahun 1976 adalah KIM-1. Komputer ini tidak sesulit PDP-8, input dalam bahasa mesin menggunakan keypad heksadesimal, dan output 6 digit angka. Komputernya memang seperti di bawah ini, tidak ada case-nya (245 USD pada tahun 1976, setara dengan 15 juta rupiah nilai saat ini). Prinsip kerjanya masih sama dengan komputer sebelumnya: input disederhanakan dengan keypad dan output dengan bilangan heksadesimal 6 digit. Semua harus diprogram dalam bahasa mesin.

KIM-1

Apakah kita masih bisa bereksperimen dengan benda low level seperti ini? Sangat bisa. Kita bisa membeli transistor sendiri dan menyusun komputer sendiri (harganya sangat murah). Adakah orang yang “gila” untuk melakukan hal ini? Jawabnya: ada, contohnya proyek monster6502

Menyusun transistor memang terlalu hardcore (satu gerbang logika butuh beberapa transistor), alternatif lain adalah membeli chip yang mengimplementasikan gate tertentu (NAND, OR, NOT, dsb). Kemudian kita bisa menyusun sendiri chip-chip ini untuk membentuk komputer. Ada banyak orang yang iseng melakukan hal ini. Ekseperiman semacam ini sekarang tidak penting, tapi bagi orang yang cara belajarnya bisa paham melalui praktik, saya hanya ingin menyatakan bahwa ini masih bisa dilakukan.

Jika kita hanya ingin bekerja secara konseptual tanpa praktik langsung, ada banyak emulator yang bisa kita pakai, termasuk juga emulator untuk berbagai komputer awal. Sebagai catatan, dulu di masa awal komputer, bahkan ada buku belajar bahasa mesin untuk anak-anak (klik pada gambar untuk link ke PDF-nya, sudah digratiskan oleh penerbitnya).

Buku lama ini saat ini juga tidak terlalu berguna, kecuali Anda penyuka sistem klasik, tapi ilmunya masih bisa dipakai untuk membuat emulator. Berbagai dasar low level ini juga diperlukan jika kita ingin membuat compiler atau interpreter yang memakai JIT.

Berbagai mata kuliah lain saling melengkapi. Mata kuliah Teori bahasa dan Otomata akan memberikan dasar penting: bahwa komputer yang sudah dijelaskan di arsitektur komputer ini bisa dipakai untuk menghitung/menjalankan algoritma semua fungsi yang computable. Selain itu ada teori bagaimana sebuah bahasa bisa di-parse ini akan menjelaskan kenapa bahasa pemrograman tidak seperti bahasa manusia.

Setelah memahami bagian dasar ini, topik pemrograman akan terasa lebih sederhana. Semua yang diproses komputer hanyalah bilangan. Sebuah teks hanyalah pemetaan dari bilangan ke sebuah karakter (misalnya bilangan 65 berarti karakter A di tabel ASCII). Sebuah foto di layar hanyalah titik-titik dengan nilai warna tertentu (nilai warna ini juga hanya bilangan) dan video hanyalah gambar yang berganti dengan cepat seolah bergerak. Signal suara yang mentah di komputer hanyalah nilai sampling amplitudo setiap interval waktu tertentu.

Jika sudah memahami layout memori, kebanyakan algoritma dan struktur data dasar bisa dipahami dengan logika saja dan terasa sangat wajar, tidak perlu menghapal. Contoh struktur data yang mudah adalah: linked list, tree, hash table. Contoh algoritma sederhana: berbagai sorting dasar.

Beberapa struktur data dan algoritma memang rumit, tapi biasanya kita tidak perlu mengimplementasikan berbagai algoritma ini dalam pemrograman sehari-hari. Hal yang penting adalah: kita paham algoritma tersebut ada dan bisa dipakai di kasus seperti apa, dan dari deskripsi detail algoritmanya kita bisa mengimplementasikan algoritma itu di bahasa tertentu yang mungkin baru kita kenal.

Berbagai pelajaran lainnya sebenarnya hanyalah penerapan dari dasar yang sudah dipelajari. Misalnya: sistem operasi memberikan abstraksi supaya kita tidak mengakses hardware secara low level, dan bagaimana mengatur sumberdaya sistem supaya bisa dipakai oleh banyak program/user. Pemrograman grafis adalah penerapan dari berbagai algoritma dasar, algoritma yang berhubungan dengan matriks, dan algoritma spesifik untuk grafik tertentu.

Berbagai hal praktis bisa dijelaskan ketika praktikum. Dan untuk mendalami suatu topik tertentu sebaiknya dilakukan sendiri di luar kelas. Contoh: jika ingin menjadi network engineer untuk merk tertentu (CISCO, JUNIPER, dsb) ya pelajari materi dari vendor tersebut.

Mungkin ada juga yang berpikir: ah nggak perlu tahu sampai sedetail itu cukup kok buat cari kerja. Sekali lagi saya tekankan: kalau sekedar supaya bisa memprogram sederhana, lulusan SMK juga bisa diarahkan. Kalau ingin Indonesia punya tenaga ahli yang bisa memajukan dunia IT, ya pengetahuan sangat low level dibutuhkan.

Ingin jadi ahli security yang baik, yang bisa menemukan bug sejenis Spectre? perlu tahu sampai level hardware. Jika ingin mendapatkan overview yang cukup baik bisa membaca buku yang membahas sampai level ini Silence On the Wire oleh Michal Zalewski, pada tiap bab diberikan pengenalan berbagai topik informatika dasar untuk bisa menjelaskan bug security. Deskripsi buku ini cukup akurat:

In Silence on the Wire: A Field Guide to Passive Reconnaissance and Indirect Attacks, Zalewski shares his expertise and experience to explain how computers and networks work, how information is processed and delivered, and what security threats lurk in the shadows.

Memang saat ini sudah banyak sekali berbagai produk open source untuk membuat apapun, tapi untuk menjadi terdepan tetap dibutuhkan berbagai komponen khusus buatan sendiri. Contohnya: untuk membuat sistem chat dengan skala WhatsApp atau Telegram tetap dibutuhkan sistem custom . Telegram hanya membuka source code aplikasi client untuk Desktop/Web/Mobile, tapi komponen server tetap milik mereka dan tetap tertutup.

Berbagai perusahaan besar bisa menjadi terdepan karena mereka menciptakan sendiri teknologi yang saat itu belum ada. Misalnya Google bisa maju karena algoritma PageRank dan juga memiliki BigTagble untuk implementasinya.

Penutup

Semua di atas hanyalah gabungan dari berbagai fakta dicampur dengan opini saya. Jika tujuannya memang hanya mencari kerja, ya silakan saja belajar berbagai hal yang praktis. Tapi saya berharap lulusan jurusan IT levelnya lebih dari sekedar praktis (apalagi sekedar bisa memakai produk buatan orang lain), tapi bisa tahu berbagai konsep dasar dan mengaplikasikannya.

Sebagai tambahan untuk yang masih kuliah dan merasa blank saya sarankan untuk mulai mengubah cara belajar dan mencari suplemen materi lain, misalnya dari Coursera atau YouTube.

Dua buku saya sarankan: Code: The Hidden Language of Computer Hardware and Software, buku ini ringan dengan banyak penjelasan sederhana. Buku lainnya adalah The Elements of computing systems. Buku ini sangat praktis dan mencakup topik dasar sampai lanjut.

Kemungkinan akan ada banyak yang kurang setuju dengan tulisan ini. Buat yang kurang setuju dengan isi tulisan ini, mungkin bisa menjawab dua pertanyaan saya:

  1. Jika bukan lulusan jurusan IT, jadi lulusan mana yang seharusnya bisa memajukan dunia IT Indonesia? (Apakah harus mengimpor programmer dari India?)
  2. Menurut Anda lulusan jurusan IT itu minimal harus bisa apa? Di mana keseimbangan sangat praktis (seperti diajarkan di SMK) atau sangat teoretis (level S2/S3)?

Seri Buku Micro Adventure

Ini cuma kisah singkat mengenai seri buku cerita yang saat ini mulai disukai Jonathan: Micro Adventure. Seri ini diterbitkan di tahun 1980-an  oleh Scholastic dan cukup terkenal pada masanya.  Satu hal yang menarik dari buku-buku ini adalah: di dalamnya ada program dalam bahasa BASIC yang bisa diketikkan dan merupakan bagian dari cerita.

Jonathan sedang menyalink kode dari buku ke QBasic di Dosbox
Jonathan sedang menyalink kode dari buku ke QBasic di Dosbox

Buku pertama yang selesai dibaca Jonathan adalah Space Attack, buku ini terbit tahun 1984.

Di awal cerita buku pertama ada pesan rahasia yang harus didekrip. Sebenarnya bisa didekrip manual (caesar cipher), tapi lebih menarik jika didekrip dengan program.

Program yang diberikan dapat berjalan di berbagai komputer yang ada di jaman itu jika ada tanda centang untuk platform tersebut, dan kadang diperlukan modifikasi untuk komputer tertentu dengan cara modifikasi diberikan di akhir buku.

Waktu saya kecil, saya tidak pernah tahu mengenai seri buku ini karena sampai 1986 saya tinggal di desa tanpa listrik dan baru punya komputer pertama tahun 1993.  Ketika mendengar mengenai seri buku ini beberapa tahun yang lalu, saya juga tetap tidak tertarik membacanya, dan saya pikir tidak akan menarik untuk anak modern seperti Jonathan yang saya sudah saya ajari  berbagai cara modern coding dengan Scratch, Scratch Jr, dan berbagai aplikasi coding di iPad. Di sini saya melihat kelemahan Scratch yang terlalu visual, sehingga kurang cocok menyelesaikan masalah sederhana seperti enkripsi di buku tersebut.

Tapi ternyata ketika saya sedang melihat (ulang) video Youtube The basics of BASIC, the programming language of the 1980s, Jonathan ikut melihat dan tertarik dengan buku yang ditunjukkan. Dia sangat bersemangat membaca bukuya dan mengetikkan kode program dalam buku (versi PDF) ke QBasic yang saya jalankan di Dosbox di Linux, menjalankan programnya, merasa senang melihat outputnya benar, dan juga tertawa riang ketika ada lelucon yang dienkripsi.

Sebagai catatan, saya memilih QBasic karena tahu kompatibilitasnya dengan BASIC di IBM PC (sehingga kode dalam buku tersebut pasti jalan). Meskipun ada proyek open source QB64 yang katanya kompatibel dengan QBasic (yang berarti kompatibel dengan BASIC di IBM PC) tapi karena menggunakan mode kompilasi (bukan interpretasi), maka terasa sangat lambat, dari mulai menekan F5 sampai program berjalan bisa butuh 5 detik, sedangkan menekan F5 di QBasic program langsung berjalan instan.

Ada juga bagian program yang agak rumit untuk Jonathan (usia  7 tahun) yang tidak bisa saya jelaskan secara singkat, misalnya frequency analysis (yang dalam implementasi programnya butuh pemahaman konsep array). Akhirnya setelah beberapa program, dia menyelesaikan membaca isi bukunya dalam beberapa jam, dan setelah itu baru meneruskan lagi mengetik programnya.

Ada hal yang menarik di salah satu program yang diberikan, pembaca diminta untuk “membaca” atau “Reverse engineer” sebuah program. Dari program singkat berikut diminta untuk mencari tahu input apa yang perlu diberikan untuk bisa “membuka Airlock” dan untuk mengirim “S.O.S”.

Ternyata bahasa BASIC ini memang cocok untuk pemula, karena Jonathan yang belum pernah saya ajari BASIC bisa langsung memahami input apa yang harus diberikan. Bahasa BASIC ini memang kurang terstruktur, dan kalau direnungkan, masalah struktur dalam BASIC tidak terlalu jauh dari assembly (dengan jump/goto).

Saya tidak tahu berapa buku yang akan diselesaikan oleh Jonathan (ada 10 buku dalam seri Micro Adventure), tapi saya cukup terkesan bahwa buku terbitan 34 tahun yang lalu ini masih dianggap menarik oleh anak modern seperti Jonathan.

Liburan Songkran 2018

Songkran merupakan tahun baru Thailand, dan merupakan hari yang sangat dirayakan di Thailand, seperti Lebaran di Indonesia atau Natal di negara mayoritas Kristen.  Libur utama Songkran sendiri hanya 3 hari, tapi seperti Natal/Lebaran, biasanya kantor akan libur sekitar seminggu.

Selama 11 tahun di sini, kami lebih sering pulang ketika Songkran, karena selain libur panjang, polusi udara di Chiang Mai biasanya sedang buruk. Polusi ini dikarenakan pembakaran ladang dari Thailand (sedikit, kurang dari 200 titik api) dan dari negara sekitar (banyak, ribuan titik api). Tapi sesekali kami tinggal di Chiang Mai. Dan tahun ini kami tinggal di Chiang Mai.

Menurut cerita dari penduduk Chiang Mai, dulu perayaan utama Songkran hanyalah memercik air sebagai simbol pensucian dan menghapus nasib sial, tapi sekarang dirayakan dengan festival saling siram air (dengan ember dan pistol air). Sebagai anak kecil, Jonathan sangat menyukai perang air ini, dan tahun lalu dia kecewa karena harus pulang ke Indonesia di masa Songkran.

Sebagian orang merayakan dengan naik kendaraan yang terbuka (bak terbuka, angkot/red car, bahkan motor) dan menyiram orang di jalanan, sebagian lagi (seperti kami) datang ke tempat tertentu (old city) yang menjadi pusat perang air. Tahun ini kami berangkat agak awal (sebelum jam makan siang, biasanya sesudah), sehingga belum terlalu ramai, tapi sudah cukup membuat kami basah kuyup. Hanya Jonathan dan Saya yang bermain air, Risna dan Joshua bermain di taman.

Sayangnya setelah hari perang air, Joshua demam walaupun tidak ikut basah, jadi hari berikutnya kami tinggal di rumah. Jadi hari itu bisa dipakai untuk ngoprek di rumah. Saya sudah lama penasaran dengan “talking pen” yang dimiliki Jonathan dan Joshua, jadi saya bongkar. Pen ini bisa disentuhkan ke buku tertentu dan akan membacakan teksnya. Ini bagus untuk belajar bahasa Thai.

Kapasitas pen ini 8GB dan bisa dipakai juga sebagai MP3 player. Sayangnya free space-nya cuma 1 GB dari total  8 GB. Saya pikir ketika dibongkar saya akan menemukan eMMC chip kapasitas 8 GB, ternyata isinya adalah micro SD 8 GB.

Tentu saya penasaran, jadi dicoba tukar dengan yang 16 GB (dan menyalin isi 8GB ke SD card yang baru). Ternyata bisa berjalan normal.

Selain bermain air, liburan kali ini diisi dengan jalan-jalan ke Royal Flora, Makro, dan Mall (di kondisi udara yang buruk, mall lebih baik).

Waktu liburan ini saya sempat mengerjakan satu soal challenge dari SecuriTeam_SSD

Saya pikir saya tidak akan menang karena hadiahnya cuma untuk peringkat 1 sampai 3 sementara saya mengirimkan tanggal 14 April (hari Sabtu 2 hari setelah diumumkan).  Saya tetap iseng mengerjakan karena ini cuma satu soal dan sudah lama tidak ikut CTF, minimal jika tidak menang bisa membuat writeup (sudah banyak yang nanya: Pak/Mas/Om kok udah lama nggak nulis writeup). Saya hanya mendapat jawaban singkat bahwa kiriman sudah diterima dan akan segera dicek.

Sepertinya SecuriTeam_SSD libur di akhir pekan, karena pemenang baru diumumkan 16 April. Puji Tuhan ternyata saya menang peringkat pertama, yang berarti akan mendapatkan tiket pesawat, hotel, dan tiket konferensi Bevx di Hong Kong bulan September depan. Beberapa jam kemudian pemenang kedua diumumkan, dan 2 hari kemudian pemenang terakhir diumumkan.

Meskipun semua pemenang sudah diumumkan, bagi yang masih ingin mencoba, bisa mendownload challengenya dari URL ini:

https://www.beyondsecurity.com/bevxcon/bevx-challenge-10

Writeup sudah saya tulis dan akan saya publish setelah diijinkan oleh panitia.

Kisah sebuah bug kecil

Saya mau cerita tentang sebuah bug yang saya perbaiki dan dapat bounty 200 USD plus kerjaan ekstra yang menyusul dari ini. Meski secara nilai ini kecil dibandingkan banyak proyek lain, tapi ada banyak hal yang membuat gembira dari satu bug kecil ini sehingga ingin saya ceritakan.

Maaf, ini bukan cerita tentang serangga, tapi bug software

Cerita singkatnya: teman saya memakai software open source QZ, sebuah library untuk printing via web browser. Jadi jika client menginstall software ini di PC-nya maka web app yang memakai library QZ bisa mengakses langsung printer lokal. Langsung di sini artinya bisa mengirimkan kode mentah, sehingga printing bisa cepat dan mendukung berbagai fitur spesifik printer. Fitur semacam ini dibutuhkan untuk software Point Of Sales, aplikasi bank atau sejenisnya yang butuh langsung mencetak ke printer yang tidak standar (misalnya printer thermal, printer buku tabungan, dsb). Lanjutkan membaca “Kisah sebuah bug kecil”

Skrip dan Extension untuk Browsing

Sekarang ini banyak waktu saya habiskan di browser, bahkan ketika melakukan programming sekalipun perlu sering mencari solusi dengan Google. Untuk mempernyaman browsing, saya menggunakan berbagai browser extension baik yang diterbitkan resmi atau buatan sendiri plus beberapa bookmarklet.

Untuk yang belum tahu: browser extension adalah program yang bisa ditambahkan ke browser untuk menambah atau mengubah fungsionalits tertentu.  Supaya lebih singkat, berikutnya extension yang saya maksud di artikel ini adalah browser extension.

Salah satu contoh extension paling populer adalah untuk memblokir iklan. Ini membuat browsing jadi lebih nyaman, lebih cepat dan lebih hemat data. Extension lain yang banyak digunakan orang adalah password manager untuk mengingat password berbagai situs.

Semua browser modern saat ini mendukung extension. Browser yang saya gunakan sehari-hari adalah Chrome dan Firefox, tapi informasi yang saya tuliskan di sini berlaku untuk browser lain juga (semua browser sudah mendukung extension).

Dulu saya cukup percaya berbagai extension yang ada, tapi lama-lama kepercayaan itu mulai hilang. Ada banyak kasus yang menyebabkan saya kurang percaya, baik itu karena bug parah, karena kecerobohan developer, atau keserakahan developer. Lanjutkan membaca “Skrip dan Extension untuk Browsing”

Hacking aplikasi web dengan Zaproxy

Saat ini kebanyakan tulisan di blog ini sifatnya cerita yang tidak sampai ke teknis detail. Tulisan kali ini sangat praktis, mengenai memakai Zaproxy untuk hacking (mencari bug atau mengeksplotasi bug) aplikasi web. Atau lebih tepatnya lagi aplikasi yang memakai komunikasi HTTP, baik itu aplikasi berbasis mobile, desktop, maupun browser. Sekaligus ini untuk menjawab berbagai pertanyaan mengenai hacking web yang sering diajukan ke saya.

Zaproxy pada dasarnya adalah sebuah intercepting proxy dengan berbagai fitur tambahan (scanner, spider, dsb). Sebuah intercepting proxy bisa mencegat komunikasi dari client ke server (request) dan balasan dari server (response). Defaultnya, komunikasi yang dicegat akan diteruskan saja dan dicatat (di-log), tapi kita juga bisa mengubah baik request maupun response.

Sebagai catatan, Zaproxy bukan satu-satunya tools yang ada, tapi tools ini gratis,  open source, cross platform (Windows, OS X, Linux) dan fiturnya lengkap. Alternatif populer adalah Burp suite, ini ada versi gratisnya, tapi fitur pentingnya berbayar (salah satu fitur paling penting yang berbayar adalah menyimpan sesi). Tools lainnya yang gratis dan bagus untuk Windows adalah Fiddler (saat ini Fiddler versi OS X dan Linux masih beta), sayangnya Fiddler tidak open source. Jika sudah menguasai salah satu tools ini, berpindah yang lain tidak terlalu sulit. Lanjutkan membaca “Hacking aplikasi web dengan Zaproxy”