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 … 🙂