Merakit Kode Besar

Sudah lama saya tidak merakit (compile) kode yang cukup besar sehingga menghabiskan waktu yang cukup lama. Kemarin saya merakit kode Tensorflow dari source code karena paket yang sudah jadi tidak sempurna jalannya di notebook saya. Terpaksa harus merakit ulang.

Eh, ternyata proses kompilasi membutuhkan waktu yang lama. Setelah 3 jam tidak kunjung berhenti, akhirnya saya tinggal main futsal dahulu. Pulang main futsal baru selesai. Saya tidak tahu tepatnya kapan selesainya, tetapi berarti antara 3 sampai dengan 6 jam. Ajegilebusyet.

Terakhir saya melakukan proses kompilasi yang lama (seingat saya) adalah di awal tahun 90-an. Waktu itu saya merakit kernel Linux dari source code di komputer dengan prosesor 386SX berkecepatan 16 MHz. Memorinya waktu itu di bawa 2 MBytes. Jadul banget ya? Dibandingkan handphone saat ini, komputer saya waktu itu tidak ada apa-apanya.

Proses kompilasi kemarin dilakukan di notebook yang menggunakan prosesor i3 dengan memori hanya 2 GBytes. Notebooknya sampai tidak responsif saking kerja kerasnya dia. ha ha ha. Kasihan juga sih, tapi apa boleh buat. Itu yang saya miliki. Tidak boleh mengeluh. (Anak muda zaman now maunya harus menggunakan komputer yang high-end. Gak mau kerja kalau tidak menggunakan komputer yang bagus. hi3. Ini saya contohkan bahwa sayapun masih menggunakan komputer apa adanya.)

Alhamdulillah hasil perakitan berjalan. Coba kalau tidak jalan. Wah. Harus merakit jam-jaman lagi. Ugh. (Dahulu kalau salah konfigurasi, hasil perakitan kernel tidak jalan. Harus merakit ulang. Dapat dibayangkan kesabaran yang harus saya lalui.)

Selamat ngoprek.

Iklan

Koding Atau Buat Dokumentasi

Sekian lama saya tidak ngeblog itu ada alasannya. Saya lagi (kebanyakan) koding. Membuat kode program untuk berbagai hal, terutama untuk aplikasi Internet of Things (IoT). Tentu saja ada kegiatan-kegiatan lain yang harus saya lakukan (dan bahkan mungkin juga yang lebih dominan), tetapi kali ini saya ingin menyoroti masalah koding.

Salah satu masalah yang sering dikeluhkan terhadap para koder (programmer) adalah kuranganya dokumentasi dari kode yang mereka buat. Ini betul. Sebagai seorang koder, saya juga sering mengalami dilema. Di satu sisi saya ingin membuat dokumentasi, tetapi di sisi lain saya masih harus meneruskan kodingan. Kalau tadi beres satu bagian, maka masih ada bagian lain yang harus dikodekan. Belum lagi kode bagian sebelumnya juga masih harus dimodifikasi. Akibatnya, waktu malah digunakan untuk membuat kode baru dibandingkan dengan membuat dokumentasi.

Yang menjadi masalah adalah banyak hal yang harus didokumentasikan. Design decisions, misalnya. Mengapa saya melakukannya seperti itu di sebuah kode? Ada alasannya. Kalau tidak didokumentasikan, maka koder selanjutnya akan kesulitan untuk memahami kode yang sudah saya buat. Jangankan koder lain, saya sendiripun kalau sudah lewat sekian bulan maka sudah lupa dengan kode-kode yang saya buat sebelumnya.

Singkatnya mengabaikan dokumentasi itu buruk! Iya semua orang tahu, tetapi tetap saja dilakukan. Sayapun tetap melakukannya. Nah, sebetulnya waktu yang saya gunakan untuk ngeblog ini dapat digunakan untuk membuat dokumentasi. Ini malah ngeblog. ha ha ha. Tapi kalau saya tidak memaksakan ngeblog, pasti ada saja yang lebih “penting”(?). Akibatnya ya blognya jadi kosong.

Dokumentasi harus menunggu. Ngeblog dahulu. Wah.

IoT Programming

Steve Jobs pernah berkata, “Untuk setiap penggemar hardware, ada 10 orang yang suka ngulik software. Software hobbyists”. Tidak persis benar, tetapi kira-kira begitulah kata-katanya. Itulah sebabnya dia (dan Steve Wozniak) membuat komputer Apple ][. Sebelumnya kalau mau ngoprek software, harus ngoprek kit komputer. Harus tahu hardware. Padahal ada orang yang tidak memiliki latar belakang hardware, tapi ingin ngoprek komputer.

Salah satu kesulitan ngoprek hardware adalah menyambung-nyambungkan komponen. Bahkan untuk sekedar menyambungkan LED juga tidak mudah. Padahal “hello world” di dunia hardware itu adalah blinking LED.

Jika menyambungkan 1 LED saja sudah susah, apalagi menyambungkan 6 LED (atau lebih). Itulah sebabnya jarang yang membuat tutorial untuk menyalakan LED lebih dari 1 buah.

Salah satu solusi yang kami tawarkan adalah  membuat LED board yang cocok dengan board yang umum ada di lapangan. Sebagai contoh, ini adalah tampilan ProcodeCG LED (6 buah LED) yang disambungkan dengan NodeMCU. Bersih kan? Tidak perlu ada kabel-kabel.

p_20170306_092518-nodemcu-procodecg-0001

Sekarang kita dapat membuat kode Knight Rider LED tanpa perlu pusing dengan kabel-kabelnya. Jadi orang yang gemar software tetapi tidak memiliki latar belakang hardware dapat juga ikut ngoprek IoT (Internet of Things).

[Nanti video dan kode untuk menyalakan LED tersebut akan saya unggah ke YouTube. Sekarang akses internet lagi lemot.]

Selamat ngoprek.

Gembira Ria Koding: Menggunakan Library

Melanjutkan cerita megenai koding, kali ini saya ingin bercerita tentang pengalaman menggunakan library buatan orang lain.

Salah satu manfaat menggunakan library buatan orang lain adalah kita tidak perlu membuat semuanya dari awal. (We do not have to reinvent the wheel.) Ada library yang nyaman digunakan dan ada library yang membingungkan. Sebagai contoh, library GMP sangat mudah dan intuitif untuk digunakan. Manual (referensi) yang ada juga bagus sekali. Dalam waktu beberapa menit saya sudah bisa menggunakannya. Lain ceritanya dengan libgcrypt. Sudah berhari-hari membacanya, saya masih belum bisa pakainya. hi hi hi. Nah, yang menengah adalah msieve.

Beberapa hari yang lalu Ariya memberitahukan saya tentang keberadaan library msieve untuk melakukan integer factorization. Setelah saya ambil dan pasang, saya coba membuat sebuah program sederhana. Ternyata, tidak mudah. Ada beberapa hal yang harus diinisialisasi sebelum saya bisa menggunakannya. Sebel. Baru saja saya niatkan untuk membuat sebuah program percobaan. Ah, ternyata berhasil juga (setelah menghabiskan waktu kira-kira 1 atau 2 hari.)

Memang agak susah membandingkan mudah atau tidaknya karena apa yang dilakukan oleh libgcrypt atau msieve itu lebih kompleks dari apa yang dilakukan oleh GMP, tetapi tetap saja saya merasa gmp lebih mudah. Selain kompleksitas dari library-nya mungkin juga style pemrograman menentukan juga. Saya mungkin lebih cocok dengan apa yang dilakukan oleh GMP.

Nah, sekarang ada satu program yang harus saya bongkar. Sekilas programnya cukup pabaliut (alias membingungkan). Bukan, bukan karena yang buat tidak lihai, tetapi justru karena dia sangat pandai sehingga menggunakan trik-trik di sana sini. Programnya memang menjadi singkat dan elegan tetapi agak sulit bagi kita untuk menelusurinya. Ini membutuhkan waktu yang cukup untuk memahaminya. Ah, lain kali saja. Sekarang saya mau ngoprek yang lain dulu.

integer factorization

Menyambung soal pemrograman kemarin dulu, sekarang saya sedang mencari algoritma yang bagus untuk memfaktorkan sebuah bilangan (integer factorization). Diketahui sebuah bilangan x, berikan bilangan prima yang menjadi faktor dari bilangan tersebut. (Sebetulnya saya mencari bilangan prima terbesar.)

Ada beberapa algoritma yang sudah saya lihat, tetapi mereka hanya bisa digunakan untuk bilangan yang kecil. Algoritma tersebut tidak jalan untuk bilangan yang besar, misalnya:

x = 230023525003339439329862001182693967063150646

Berapa faktornya? Jawabannya (dengan menggunakan PARI atau Wolfram alpha) adalah:

{2, 331, 9351779, 7311032480779, 5082077886580529086513}

Masih mencari algoritma yang bisa menemukan itu secara efisien. Ada yang tahu? Saya buat kode dengan algoritma yang tidak efisien, jalan untuk angka yang kecil. Untuk angka yang besar seperti di atas, mungkin 10 tahun baru selesai 🙂

(Baca paper Arjen Lenstra dulu ah.)

Koding Lagi

Penasaran. Lagi baca buku “introduction to cryptography” yang banyak matematikanya, ada bagain tentang fast exponentiation. Di sana ada potongan kode (pseudo code? C++?). Agak susah juga menelusuri kode itu, meskipun singkat. Akhirnya saya putuskan untuk menuliskan kode itu dan menjalankannya.

Sebetulnya saya ingin menuliskannya dengan menggunakan bahasa perl, tetapi saya putuskan pakai bahasa C saja. Toh kodenya juga sama. Jadinya, koding kecil-kecilan lagi.

Program jalan dan saya jadi mengerti alur algoritmanya. (Meskipun sebetulnya ada bugs di programmnya. Biarkan saja! Toh tujuannya hanya untuk memahami algoritma.)

Iseng aja … 🙂